2.面试题 (1) 装箱与拆箱
装箱 : 对值类型在堆中分配一个对象实例,并将该值复制到新的对象中
1)第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针。
(2)第二步:将值类型的实例字段拷贝到新分配的内存中。
(3)第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:
3.栈 顺序存储 而 堆 无序 ,栈子自动释放内存 堆 需要 GC 回收
4.对文件的读写操作
5.C# 线程同步的实现
6.数据和链表 的优劣
数组 :劣:删除时更麻烦 删一个 就得把以前的以此往后移动 优:空间更自由 分配在栈上 系统自动分配
链表 :分配在堆上 更自由
7.抽象类 abstract 和 接口 interface 的异同
相同点:
(1)都可以被继承
(2)都不能被实例化
不同点:
(1)抽象类被子类继承;接口被类实现
(2)抽象类只能被单个类继承;接口可继承接口,并可多继承接口
8.SQL 性能优化 ;
(1):避免SELECT *
(2)为搜索字段简历 索引
如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。
GPT 的回答:
9.重载和重写的区别
重载是 同一个方法 传入的参数的类型和数量不同 是面向过程的 重写 是 对虚方法的重写
是面向对象的
10.值传递和引用他传递
值传递时,系统首先为被调用方法的形参分配内存空间,并将实参的值按位置一一对应地复制给形参,此后,被调用方法中形参值得任何改变都不会影响到相应的实参;
引用传递时,系统不是将实参本身的值复制后传递给形参,而是将其引用值(即地址值)传递给形参,因此,形参所引用的该地址上的变量与传递的实参相同,方法体内相应形参值得任何改变都将影响到作为引用传递的实参。
简而言之,按值传递不是值参数是值类型,而是指形参变量会复制实参变量,也就是会在栈上多创建一个相同的变量。而按引用传递则不会。可以通过 ref 和 out 来决定参数是否按照引用传递。
11.单例模式
12.C# 数据库 操作 常见的类 : SqlConnection Sql Commend