c#面试总结

  项目招人,负责面试了几个人,网上找了一些面试内容,总结一下

  1. 什么是.NET?什么是CLR?IL是什么?GC是什么,简述一下GC的工作方式?
  2. 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
  3. 在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
  4. 泛型的作用是什么?它有什么优势?它对性能有影响吗?它在执行时的行为是什么?.NET BCL中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。
  5. 异常的作用是什么?.NET BCL中有哪些常见的异常?在代码中您是如何捕获/处理异常的?在“catch (ex)”中,“throw”和“throw ex”有什么区别?您会如何设计异常的结构,什么情况下您会抛出异常?
  6. List<T>和T[]的区别是什么,平时你如何进行选择?Dictionary<TKey, TValue>是做什么的?.NET BCL中还有哪些常用的容器?它们分别是如何实现的(哪种数据结构)?分别是适用于哪些场景?
  7. 抽象类和接口有什么区别?使用时有什么需要注意的吗?如何选择是定义一个“完全抽象”的抽象类,还是接口?什么是接口的“显式实现”?为什么说它很重要?
  8. 字符串是引用类型类型还是结构类型?它和普通的引用类型相比有什么特别的地方吗?使用字符串时有什么需要注意的地方?为什么说StringBuilder比较高效?在连接多个字符串时,它无论何时都比直接相加更高效吗?
  9. 如何高效地进行数组复制?“二维数组”和“数组的数组”有什么区别?在使用双重循环遍历一个二维数组时,如何选择内外层的遍历顺序?
  10. 什么是元编程,.NET有哪些元编程的手段和场景?什么是反射?能否举一些反射的常用场景?有人说反射性能较差,您怎么看待这个问题?有什么办法可以提高反射的性能吗?
  11. 委托是什么?匿名方法是什么?在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些?
  12. 工作之外您看哪些技术相关的书、网站、社区、项目等等?您还接触哪些.NET以外的技术,能和.NET或.NET中有针对性的部分做个对比吗?

有一个回答的总结:https://www.cnblogs.com/jiajinyi/p/3565630.html 

回答:

  1. https://www.cnblogs.com/jimcsharp/p/4369141.html;https://blog.csdn.net/nodeman/article/details/82416206;https://www.cnblogs.com/juzzs/p/5308813.html
  2. 类和结构体的区别主要有以下几点:
    1、 类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。
    2、 在内存中,引用类型诸如类是在堆上,而值类型诸如结构体实在栈上进行存储和操作。相比于栈上的操作,堆上的操作更加复杂耗时,所以一些官方推荐使用结构体,这样可以提高程序运行的效率。
    3、 类可以被继承,而结构体不能被继续;
    4、 结构体只能封装属性,而类不仅可以封装属性还可以封装方法;
    5、 类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别;
    6、 结构体与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object;
    7、 虽然结构体的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用;
    8、 内部结构:
     结构体:没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化在结构中初始化实例字段是错误的;
     类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 必须使用new 初始化
    最后一点就是该如何选择使用类和结构体?记住这几点
    1、 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些;
    2、 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
    3、 在表现抽象和多级别的对象层次时,类是最好的选择;
    4、 大多数情况下该类型只是一些数据时,结构时最佳的选择;

原文地址:https://www.cnblogs.com/MarcLiu/p/13044638.html