题目 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# 题目的更多相关文章

  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. Java继承的概念与实现

    // 方法 public class Demo { public static void main(String[] args) { Teacher t = new Teacher(); t.name ...

  2. 【Azure Developer】使用 Azure Python SDK时,遇见 The resource principal named https://management.azure.com was not found in the tenant China Azure问题的解决办法

    问题描述 在使用Python SDK时候,登录到China Azure (Mooncake)并访问AlertsManagement资源时候,时常遇见  EnvironmentCredential: A ...

  3. Linux配置Redis集群 和 缓存介绍。

    // 一.什么是缓存? mybatis一级缓存和二级缓存 mybatis的一级缓存存在哪? SqlSession,就不会再走数据库 什么情况下一级缓存会失效? 当被更新,删除的时候sqlsession ...

  4. C语言读取写入CSV文件 [一]基础篇

    本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...

  5. 普通web项目一直无法访问页面,直接报404

    错误:普通web项目一直无法访问页面,直接报404 原因:写了一个过滤乱码的类: 而在类上加了WebServlet注解,其实应该是WebFilter注解, 总结:基础不扎实,有些东西只会用,而不知道原 ...

  6. onerror事件捕获网页中的错误

    转载请注明来源:https://www.cnblogs.com/hookjc/ <html><head><script type="text/javascrip ...

  7. Spring 是怎么处理循环依赖的?

    Java语法中的循环依赖 首先看一个使用构造函数的循环依赖,如下: public class ObjectA { private ObjectB b; public ObjectA(ObjectB b ...

  8. 如何通过opensea-js获取OpenSea的数据

    OpenSea作为NFT最大的交易平台,随着NFT的火热之后,热度也是出现翻天覆地的变化.作为开发人员肯定好奇有没有可以与opensea交互的包来开发相关的工具或者快速获取opensea的数据.别急, ...

  9. 教你用Elastic Search:运行第一条Hello World搜索命令

    摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...

  10. Blob检测

    一 Laplace 算子 使用一阶微分算子可以检测图像边缘.对于剧烈变化的图像边缘,一阶微分效果比较理想.但对于缓慢变化的图像边缘,通过对二阶微分并寻找过零点可以很精确的定位边缘中心.二阶微分即为 L ...