手游开发工程师面试(四) C#篇

C#篇总结了个人认为比较重要的概念,其中垃圾回收可以说是面试必考点,除了C#也有可能问其他语言的垃圾回收,最好都能理解透彻。部分知识点参考了网上其他文章,感谢原作者的无私分享。

1. 垃圾回收

(一)机制

.Net判断在堆里的对象及其包含的子对象如果都没有被引用则视为需要回收的垃圾,系统会安排独立的线程释放并回收垃圾对象的内存,这个过程称为GC(垃圾回收)。垃圾回收把所有对象分为0、1、2三代处理,新建对象和从未经过垃圾回收对象放入第0代的内存,第0代内存不足时触发GC,没有被清理掉的第0代对象放入第1代的内存中,在第1和第2代中未回收的对象放入第2代的内存中。

(二)注意事项

GC只会自动清理托管资源(由CLR全权负责的资源),清理分为两步,第一步调用对象的析构函数,第二步回收内存,这两步可能会在两次GC过程中执行。对于非托管对象例如文件、窗口、网络连接等,需要手动释放资源,最好的解决方法是既实现IDisposable接口也实现析构函数,实现IDisposable接口可以手动释放重要资源而不需要等待GC调用析构函数,需要主要手动释放资源后调用GC.SuppressFinalize(this) 通知此对象不需要再GC。
参考文章:托管资源和非托管资源

2. 反射

反射是在运行时获取程序集信息并对程序的元数据进行操作的能力,例如获取类型的成员属性,动态创建类型实例并绑定到现有对象等等。元数据可以说是指程序的编译信息,其中程序集包含模块,模块包含类型,类型包含成员例如属性、方法等等。
反射体现了“万物皆对象”的概念,在元数据层编译好的类、方法等等都属于对象,可以实时创建实例。
反射的作用比如可以把工厂模式简化为简单工厂模式,扩展新的类型时不需要修改工厂类,而是通过传入字符串动态创建对应实例。
参考文章:C#的反射(一)

3. System.Object的GetType函数

对于C#的CLR来说,类型本质就是对象。CLR为所有的类型对象在托管堆上为静态字段和类型对象指针分配空间,实例化类型的时候在托管堆上分配实例对象数据空间的同时附带类型对象指针,GetType方法就是返回类型对象指针。
参考文章:为什么C#的System.Object的GetType函数可以拿到当前实例的类型


长路漫漫,上下求索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值