C# 题目
题目 http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html
1、考察对常量和自读字段 初始化过程的了解
- static readonly int A = C * D;
- static readonly int B = 10;
- const int C = 5;
- static readonly int D = B * C;
- static void Main(string[] args)
- {
- Console.WriteLine("{0},{1},{2},{3}", A, B, C, D);
- Console.ReadKey();
- }
问:A、B、C、D数值是多少?
扩展 1.1、 考察对类初始化过程的了解
- class A
- {
- public static int X;
- static A()
- {
- X = B.Y + 1;
- }
- }
- class B
- {
- public static int Y = A.X + 1;
- static B() { }
- static void Main(string[] args)
- {
- Console.WriteLine("X={0},Y={1}", A.X, B.Y);
- }
- }
X =? Y=?
扩展1.2 仔细看题目 考察对类初始化过程的了解
- class A
- {
- public static int X;
- static A()
- {
- X = B.Y + 1;
- }
- }
- class B
- {
- public static int Y = A.X + 1;
- static B() { Y = A.X + 4; }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("X={0},Y={1}", A.X, B.Y);
- }
- }
X =? Y=?
扩展1.3 仔细看题目 考察对类初始化过程的了解
String s="a"+"b"+"c",到底创建了几个对象?
题目2 考察对匿名方法的了解:
- class Program
- {
- private delegate void TestDelegate();
- static void Main(string[] args)
- {
- TestDelegate[] delegates = new TestDelegate[2];
- int outside = 0;
- for(int i = 0; i < 2; i++)
- {
- int inside = 0;
- delegates[i] = delegate
- {
- Console.WriteLine("({0},{1})", outside, inside);
- outside++;
- inside++;
- };
- }
- delegates[0]();
- delegates[0]();
- delegates[0]();
- delegates[1]();
- delegates[1]();
- Console.ReadKey();
- }
- }
输出值是多少:答案https://blog.csdn.net/Rvng2014/article/details/101413582
题目3考察对匿名方法的了解:如何修改让他出现预期效果 期望输出是 0,2,4,6,8
- List<Func<int>> actions = new List<Func<int>>();
- int variable = 0;
- while (variable < 5)
- {
- delegates[variable] = delegate
- {
- Console.WriteLine("({0} )", outside);
- outside++;
- };
- actions.Add(() => variable * 2);
- ++variable;
- }
- foreach (var act in actions)
- {
- Console.WriteLine(act.Invoke());
- }
这个程序 运行结果是什么:如何修改
答案:https://www.yht7.com/news/160155
题目4、输出结果是什么
- public class Test
- {
- public readonly struct Point
- {
- public Point(int x, int y) => (X, Y) = (x, y);
- public int X { get; }
- public int Y { get; }
- }
- static Point Transform(Point point) => point switch
- {
- { X: 0, Y: 0 } => new Point(0, 0),
- { X: var x, Y: var y } when x < y => new Point(x + y, y),
- { X: var x, Y: var y } when x > y => new Point(x - y, y),
- { X: var x, Y: var y } => new Point(2 * x, 2 * y),
- };
- static void Main()
- {
- Point i = new(1, 0);
- Console.WriteLine(Transform(i));
- }
- }
考察对逆变和协变的理解
interface IFoo<in T>
{
}
interface IBar<in T>
{
void Test(IFoo<T> foo); //对吗?
}
答案:在编译时和不报错,但是这个接口不错继承。
题目5、有了 委托字段/属性,为什么还需要事件呢?
答案:https://www.cnblogs.com/cdaniu/p/15367766.html
题目6、事件参数EventArgs.Empty字段有什么意义?是什么意思?
答案:https://www.cnblogs.com/cdaniu/p/15382744.html
题目7、 内存泄漏的一个常见来源有哪些
答案:1、事件处理器,会延长对象的声明周期,导致内存泄漏。
2、在匿名方法中捕获类成员。
3、静态变量 例如:让静态字段指向一个集合对象(因为)。因为静态字段的引用会一直存在,直到加载类型的AppDomain卸载为止。
https://zhuanlan.zhihu.com/p/141032986
题目8、字符串为什么做引用类型?为什么字符串赋值 ,做参数都和值类型一样。
题目9、考察多字符的理解
- string a = new string(new char[] {'a', 'b', 'c'});
- object o = String.Copy(a);
- Console.WriteLine(object.ReferenceEquals(o, a));
- String.Intern(o.ToString());
- Console.WriteLine(object.ReferenceEquals(o, String.Intern(a)));
- object o2 = String.Copy(a);
- String.Intern(o2.ToString());
- Console.WriteLine(object.ReferenceEquals(o2, String.Intern(a)));
输出结果是什么:
9.1 扩展题目 考察对string 特性的了解
- string s = new string(new char[] { 'x', 'y', 'z' });
- Console.WriteLine(String.IsInterned(s) ?? "not interned");
- String.Intern(s);
- Console.WriteLine(String.IsInterned(s) ?? "not interned");
- Console.WriteLine(object.ReferenceEquals( String.IsInterned(new string(new char[] { 'x', 'y', 'z' })), s));
- //当最后一行代码为:
- Console.WriteLine(object.ReferenceEquals("xyz", s));
- //输出结果是什么
- //当最后一行代码为:
- Console.WriteLine(object.ReferenceEquals("x" + "y" + "z", s));
- //输出结果是什么
- //当最后一行代码为:
- Console.WriteLine(object.ReferenceEquals(String.Format("{0}{1}{2}", 'x', 'y', 'z'), s));
- //输出结果是什么
9.2 扩展题目:考察委托的相等性
- Action a = () => Console.WriteLine("a");
- Action b = () => Console.WriteLine("a");
- Console.WriteLine(a == b);
- Console.WriteLine(a + b == a + b);
- Console.WriteLine(b + a == a + b);
輸出結果是:
9.3 扩展题目:对== 和 equals的了解
- int i1 = 8;
- int i2 = 8;
- bool bo5 = ((object)i1).Equals(i2);
- Console.WriteLine(bo5);
- bool bo2 = (object)i1 == (object)i2;
- Console.WriteLine(bo2);
输出的结果是:
10、为什么struct 实例字段不能初始值设定
11、引用类型和值类型是针对编译时还是运行时?
12、软件是如何实现跨平台的?
13、Win32平台是什么与.net平台有关系
14、写出x=? y=? a=? b=?组合的所有可能出现的结果。主要考察队volatile关键字和内存屏障、重排序的的应用
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- namespace MemoryBarriers
- {
- class Program
- {
- static volatile int x, y, a, b;
- static void Main()
- {
- while (true)
- {
- var t1 = Task.Run(Test1);
- var t2 = Task.Run(Test2);
- Task.WaitAll(t1, t2);
- if (a == 0 && b == 0)
- {
- Console.WriteLine("{0}, {1}", a, b);
- }
- x = y = a = b = 0;
- }
- }
- static void Test1()
- {
- x = 1;
- a = y;
- }
- static void Test2()
- {
- y = 1;
- b = x;
- }
- }
- }
15、指针和句柄有啥区别?
16、异步操作一定要开辟新线程?
17、finally内的代码一定会执行吗?
18、如何修改 ,以下代码,完成任务
目的是:每个2s继续一次垃圾回收
发生错误:只执行一次
原因:t被垃圾回收了。 当第一次执行垃圾回收时候GC发现 t 声明后再无引用。所以就被回收了。
源代码
- public static void Main() {
- Timer t = new Timer(TimerCallback, null, 0, 2000);
- Console.ReadLine();
- t = null;
- }
19、为什么我们需要析构函数?
C# 题目的更多相关文章
- 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 一道返回num值的小题目
题目描述: 实现fizzBuzz函数,参数num与返回值的关系如下: .如果num能同时被3和5整除,返回字符串fizzbuzz .如果num能被3整除,返回字符串fizz .如果num能被5整除,返 ...
- 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
随机推荐
- Servlet-请求的分发处理
1,HelloServlet类中 2,a.html中
- css中设置背景图片适应屏幕
以body为例 body{ background: url(../img/jld.png) no-repeat center center fixed; -webkit-background-size ...
- MySQL基本数据类型之枚举与集合类型
目录 一:枚举 1.枚举 2.创建表(使用枚举) 3.表内添加数据 二:集合 1.集合 2.创建表(使用集合) 3.表内添加数据 一:枚举 1.枚举 枚举作用: 提前定义好数据之后 后续录入只能录定义 ...
- 一步一步搭建基于ffmpeg和sdl2的流媒体播放器
一. 背景: 一步一步从资料收集.技术选型.代码编写.性能优化,动手搭建一款支持rtsp.rtmp等常用流媒体格式的视频播放器,ffmpeg用于流媒体解码,sdl2用于视频画面渲染和声音播放. 二. ...
- Linux中3个文件查找相关命令详解
源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...
- js window.event
转载请注明来源:https://www.cnblogs.com/hookjc/ 描述event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的 ...
- 收集有用的 Javascript 片段
内容目录 数组 arrayMax arrayMin chunk compact countOccurrences deepFlatten difference distinctValuesOfArra ...
- homestead 入坑安装
1.在使用 Homestead 之前,需要先安装 Virtual Box.VMWare.Parallels 或 Hyper-V (四选一,我们通常选择 VirtualBox,因为只有它是免费的)以及 ...
- Linux下Mysql报错
报错内容为:[mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/ ...
- 通过版本号来判断用户是否是第一次登陆----By张秀清
@interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)appl ...