题目 http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html

1、考察对常量和自读字段 初始化过程的了解

 

  1.  static readonly int A = C * D;
  2.  
  3.   static readonly int B = 10;
  4.  
  5.   const int C = 5;
  6.  
  7.   static readonly int D = B * C;
  8.  
  9.    static void Main(string[] args)
  10.  
  11.   {
  12.  
  13.   Console.WriteLine("{0},{1},{2},{3}", A, B, C, D);
  14.  
  15.   Console.ReadKey();
  16.  
  17.    }

  问:A、B、C、D数值是多少?

扩展 1.1、 考察对类初始化过程的了解

  1. class A
  2. {
  3. public static int X;
  4. static A()
  5. {
  6. X = B.Y + 1;
  7. }
  8. }
  9. class B
  10. {
  11. public static int Y = A.X + 1;
  12. static B() { }
  13. static void Main(string[] args)
  14. {
  15.  
  16. Console.WriteLine("X={0},Y={1}", A.X, B.Y);
  17. }
  18.  
  19. }

X =? Y=?

 

扩展1.2 仔细看题目 考察对类初始化过程的了解

  1. class A
  2. {
  3. public static int X;
  4. static A()
  5. {
  6. X = B.Y + 1;
  7. }
  8. }
  9. class B
  10. {
  11. public static int Y = A.X + 1;
  12. static B() { Y = A.X + 4; }
  13.  
  14. }
  15. class Program
  16. {
  17. static void Main(string[] args)
  18. {
  19.  
  20. Console.WriteLine("X={0},Y={1}", A.X, B.Y);
  21. }
  22.  
  23. }

X =? Y=?

扩展1.3 仔细看题目 考察对类初始化过程的了解

String s="a"+"b"+"c",到底创建了几个对象?

题目2 考察对匿名方法的了解:

  1. class Program
  2. {
  3. private delegate void TestDelegate();
  4.  
  5. static void Main(string[] args)
  6. {
  7. TestDelegate[] delegates = new TestDelegate[2];
  8.  
  9. int outside = 0;
  10.  
  11. for(int i = 0; i < 2; i++)
  12. {
  13. int inside = 0;
  14.  
  15. delegates[i] = delegate
  16. {
  17. Console.WriteLine("({0},{1})", outside, inside);
  18. outside++;
  19. inside++;
  20. };
  21. }
  22.  
  23. delegates[0]();
  24. delegates[0]();
  25. delegates[0]();
  26.  
  27. delegates[1]();
  28. delegates[1]();
  29.  
  30. Console.ReadKey();
  31. }
  32. }

输出值是多少:答案https://blog.csdn.net/Rvng2014/article/details/101413582

题目3考察对匿名方法的了解:如何修改让他出现预期效果 期望输出是 0,2,4,6,8

  1. List<Func<int>> actions = new List<Func<int>>();
  2.  
  3. int variable = 0;
  4. while (variable < 5)
  5. {
  6. delegates[variable] = delegate
  7. {
  8. Console.WriteLine("({0} )", outside);
  9. outside++;
  10.  
  11. };
  12. actions.Add(() => variable * 2);
  13. ++variable;
  14. }
  15.  
  16. foreach (var act in actions)
  17. {
  18. Console.WriteLine(act.Invoke());
  19.  
  20. }

这个程序 运行结果是什么:如何修改

答案:https://www.yht7.com/news/160155

题目4、输出结果是什么

  1. public class Test
  2. {
  3. public readonly struct Point
  4. {
  5. public Point(int x, int y) => (X, Y) = (x, y);
  6.  
  7. public int X { get; }
  8. public int Y { get; }
  9. }
  10. static Point Transform(Point point) => point switch
  11. {
  12. { X: 0, Y: 0 } => new Point(0, 0),
  13. { X: var x, Y: var y } when x < y => new Point(x + y, y),
  14. { X: var x, Y: var y } when x > y => new Point(x - y, y),
  15. { X: var x, Y: var y } => new Point(2 * x, 2 * y),
  16. };
  17.  
  18. static void Main()
  19. {
  20. Point i = new(1, 0);
  21. Console.WriteLine(Transform(i));
  22.  
  23. }
  24.  
  25. }

考察对逆变和协变的理解

  1.  

interface IFoo<in T>

{

  1.  

}

interface IBar<in T>

{

  1.  

void Test(IFoo<T> foo); //对吗?

}

  1.  

答案:在编译时和不报错,但是这个接口不错继承。

题目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、考察多字符的理解

  1. string a = new string(new char[] {'a', 'b', 'c'});
  2. object o = String.Copy(a);
  3. Console.WriteLine(object.ReferenceEquals(o, a));
  4. String.Intern(o.ToString());
  5. Console.WriteLine(object.ReferenceEquals(o, String.Intern(a)));
  6.  
  7. object o2 = String.Copy(a);
  8. String.Intern(o2.ToString());
  9. Console.WriteLine(object.ReferenceEquals(o2, String.Intern(a)));

输出结果是什么:

 9.1 扩展题目  考察对string 特性的了解

  1. string s = new string(new char[] { 'x', 'y', 'z' });
  2. Console.WriteLine(String.IsInterned(s) ?? "not interned");
  3. String.Intern(s);
  4. Console.WriteLine(String.IsInterned(s) ?? "not interned");
  5. Console.WriteLine(object.ReferenceEquals( String.IsInterned(new string(new char[] { 'x', 'y', 'z' })), s));
  6.  
  7. //当最后一行代码为:
  8. Console.WriteLine(object.ReferenceEquals("xyz", s));
  9. //输出结果是什么
  10.  
  11. //当最后一行代码为:
  12. Console.WriteLine(object.ReferenceEquals("x" + "y" + "z", s));
  13. //输出结果是什么
  14.  
  15. //当最后一行代码为:
  16. Console.WriteLine(object.ReferenceEquals(String.Format("{0}{1}{2}", 'x', 'y', 'z'), s));
  17. //输出结果是什么

 9.2 扩展题目:考察委托的相等性

  1. Action a = () => Console.WriteLine("a");
  2. Action b = () => Console.WriteLine("a");
  3.  
  4. Console.WriteLine(a == b);
  5. Console.WriteLine(a + b == a + b);
  6. Console.WriteLine(b + a == a + b);

輸出結果是:

 9.3 扩展题目:对== 和 equals的了解

  1. int i1 = 8;
  2. int i2 = 8;
  3. bool bo5 = ((object)i1).Equals(i2);
  4. Console.WriteLine(bo5);
  5. bool bo2 = (object)i1 == (object)i2;
  6. Console.WriteLine(bo2);

输出的结果是:

10、为什么struct 实例字段不能初始值设定

11、引用类型和值类型是针对编译时还是运行时?

12、软件是如何实现跨平台的?

13、Win32平台是什么与.net平台有关系

14、写出x=? y=? a=? b=?组合的所有可能出现的结果。主要考察队volatile关键字和内存屏障、重排序的的应用

  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace MemoryBarriers
  6. {
  7. class Program
  8. {
  9. static volatile int x, y, a, b;
  10. static void Main()
  11. {
  12. while (true)
  13. {
  14. var t1 = Task.Run(Test1);
  15. var t2 = Task.Run(Test2);
  16. Task.WaitAll(t1, t2);
  17. if (a == 0 && b == 0)
  18. {
  19. Console.WriteLine("{0}, {1}", a, b);
  20. }
  21. x = y = a = b = 0;
  22. }
  23. }
  24.  
  25. static void Test1()
  26. {
  27. x = 1;
  28. a = y;
  29. }
  30.  
  31. static void Test2()
  32. {
  33. y = 1;
  34. b = x;
  35. }
  36. }
  37. }

15、指针和句柄有啥区别?

16、异步操作一定要开辟新线程?

17、finally内的代码一定会执行吗?

18、如何修改 ,以下代码,完成任务

目的是:每个2s继续一次垃圾回收
发生错误:只执行一次
原因:t被垃圾回收了。 当第一次执行垃圾回收时候GC发现 t 声明后再无引用。所以就被回收了。

源代码

  1. public static void Main() {
  2. Timer t = new Timer(TimerCallback, null, 0, 2000);
  3. Console.ReadLine();
  4. t = null;
  5. }

19、为什么我们需要析构函数?

C# 题目的更多相关文章

  1. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  2. 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  3. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  4. 一道返回num值的小题目

    题目描述: 实现fizzBuzz函数,参数num与返回值的关系如下: .如果num能同时被3和5整除,返回字符串fizzbuzz .如果num能被3整除,返回字符串fizz .如果num能被5整除,返 ...

  5. 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  6. 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  7. 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  8. 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  9. 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  10. 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

随机推荐

  1. Servlet-请求的分发处理

    1,HelloServlet类中 2,a.html中

  2. css中设置背景图片适应屏幕

    以body为例 body{ background: url(../img/jld.png) no-repeat center center fixed; -webkit-background-size ...

  3. MySQL基本数据类型之枚举与集合类型

    目录 一:枚举 1.枚举 2.创建表(使用枚举) 3.表内添加数据 二:集合 1.集合 2.创建表(使用集合) 3.表内添加数据 一:枚举 1.枚举 枚举作用: 提前定义好数据之后 后续录入只能录定义 ...

  4. 一步一步搭建基于ffmpeg和sdl2的流媒体播放器

    一.  背景: 一步一步从资料收集.技术选型.代码编写.性能优化,动手搭建一款支持rtsp.rtmp等常用流媒体格式的视频播放器,ffmpeg用于流媒体解码,sdl2用于视频画面渲染和声音播放. 二. ...

  5. Linux中3个文件查找相关命令详解

    源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...

  6. js window.event

    转载请注明来源:https://www.cnblogs.com/hookjc/ 描述event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的 ...

  7. 收集有用的 Javascript 片段

    内容目录 数组 arrayMax arrayMin chunk compact countOccurrences deepFlatten difference distinctValuesOfArra ...

  8. homestead 入坑安装

    1.在使用 Homestead 之前,需要先安装 Virtual Box.VMWare.Parallels 或 Hyper-V (四选一,我们通常选择 VirtualBox,因为只有它是免费的)以及  ...

  9. Linux下Mysql报错

    报错内容为:[mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/ ...

  10. 通过版本号来判断用户是否是第一次登陆----By张秀清

    @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)appl ...