1. 委托和事件
2.boxing和unboxing是可逆的吗
装箱 拆箱并不是区分值类型跟引用类型的方式。它只是两种类型的表示方式;
值类型对象两种表示方式:一种是:未装箱(unboxed)形式。一种是:装箱(boxed)形式
引用类型对象总是装箱形式。
所有装箱拆箱是针对值类型的。
当值类型对象是unboxed的形式时,变量存储在线程的堆栈中,当程序不在使用对象时,它分配的存储空间就会立即释放。
而当值类型对象是boxed形式时,对象将会在托管堆中分配内存,对象何时被销毁由GC(垃圾回收机制)控制
拆箱 装箱并不是严格意义上的互反操作。
装箱分为3步
1、在托管堆中分配内存,内存大小为:值类型实例本身的大小加上其他额外的将该值类型实例视为真正的引用对象所需要的空间,这些额外空间包括:一个方法表指针和一个SyncBlockIndex
2、将值类型对象字段拷贝到新分配的内存中
3、返回托管堆中新分配对象的地址
拆箱就1步:
1、返回装箱对象中值类型部分的指针
拆箱加上字段拷贝 与装箱是互反操作
3. 垃圾回收
4. 接口和抽象类,有什么共同点和区别
5.SQL: 从一个表中选出第五条和第十条记录
6.算法:
比如给定一个字符串,返回字符串中相邻的字符个数大于等于2的记录数,比如aaa,算1个记录,aaabb,算2个记录, abbccaaa,算3个记录, aaabbbcccefffghhh,算5个记录. 当时第一时间考虑的使用hash表来实现,发现不是最优解法。然后考虑用stack,面试官反问了我一句,需要用stack那么复杂吗?最后只是简单的说了下思路, 然后面试官就开始谈项目相关的话题了。 最后再加将实现的过程写下来: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static int FindDuplicateChar(String stringToBeSearch) { int count = 0; char key = stringToBeSearch[0]; int index = 0; int length = stringToBeSearch.Length; int i = 0; while (i <= length - 1) { while ((i <= length - 1) && stringToBeSearch[i] == key) { i++; index++; } if (index >= 2) { count++; } if (i <= length - 1) { key = stringToBeSearch[i]; } index = 0; } return count; } static void Main(string[] args) { string ss = "aaabbbceeddfffggaaa55566615000225"; int i = FindDuplicateChar(ss); Console.WriteLine(i); Console.Read(); } } }