.Net面试相关(二)

139 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

C#中string和String的区别

  • 是相同的,完全是同一个类型,string是String的一个别名,object是Object的一个别名

属性的概念

  • 私有成员,再添加getter和setter函数,属性就是这个过程的语法糖,编译时,会把属性转成get和set函数。
  • 属性的作用几乎和公共成员变量一致,却拥有更好的可读性和扩展性,同时保护了内部成员的封装性。

简述C#中的浅复制和深复制

  • 浅复制只复制指针,不复制指针指向的对象。
  • 深复制是即复制指针,也复制指针指向的对象。
  • 浅复制会造成两个指针指向同一个引用成员,所以动态成员需要采用身复制(IClonable接口实现深复制)

简述栈和堆的特点和差异

  • 假设是32位操作系统,每个程序都可以拥有一个4GB的内存空间

  • 栈,托管堆和非托管堆

  • 栈是存放局部变量,参数调用的参数

  • 托管堆放动态类型,class数组等,托管堆也是连续的但是存在着一些还没有释放的内存块

    而当内存不够用时,开始执行垃圾收集,移动和合并内存块,清理内存。

  • 非托管堆放非托管的资源

    非托管资源,C++的资源,操作系统资源句柄,画刷,线程,数据库连接等,GC垃圾回收机制不适用于非托管堆,非托管资源不是连续的

using语句

  • 导入名称空间
  • try finally的语法糖,避免手动释放dispose释放资源
  • 类型别名

AOP(面向切面编程)

  • POP(面向过程编程),以过程为中心,分析解决问题的步骤,然后按步骤实现
  • OOP(面向对象编程),解决复杂冗余的问题,提高代码的复用率