望对各位刚出来面试的童鞋有所帮助,虽然都是写很基础性的东西,但是在面试过程中..往往都是这些基础的东西很容易忘记,今天有时间就总结下。总结的不够地方希望各位能够提出更多好的想法及意见来供大家学习!
.net模块总结:
1.面向对象的语言具有 (继承)性,(封装)性,(多态)性.
2.能用foreach遍历访问的对象需要实现 (IEnumerable) 接口或声明 (GetEnumerator()) 方法的类型; C#中运用的三元运算符是:__? __ :__
3.当int a赋值给object b对象时,整数a将会被 (装箱); 当object b赋值给int a 对象时,b将会完成(拆箱)。
4.public static const int A=1 ; 这段代码有错误么? 错在什么地方? --> 答:有,const成员都是static,既应该去掉static
5.float f=-123.456f ; int i=(int)f; => 结果 i=-123;
6.委托声明的关键字: (delegate) ->是指确定了目标方法签名的方法指针(是指可以调用目标方法并且确定了目标方法签名的一种特殊的对象,但有一个约定,要把目标方法的方法名作为参数传入) ; 序列化的关键字: (serializable) ; 密封类的关键字: (sealed) 其主要特点:不能被继承,但可以实例化。
7. .net托管代码中我们不必担心内存泄漏,这是因为有 (GC) 自动回收机制。
8.String类和StringBuilder类有什么区别?为什么要在.net类库中要同时存在2个类? -->答:如果要操作一个不断增长的字符串,尽量用StringBuilder类;两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.net框架下,这个操作实在划不来;因为系统先是把两个字符串写入内存,接着删除原来的的String对象,然后创建一个String对象,并读取内存中的数据赋值给该对象。这样一来二去的,耗了不少时间. 而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append()方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下察觉不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个级别的。
9.const与readonly的区别? -->答:const字段只能在该字段的声明中初始化;readonly字段可以在声明或构造函数中初始化,因此,根据所使用的构造函数,readonly字段可能具有不同的值. 另外,const字段是编译时常数,而readonly字段可用于运行时常数。
10.简述private,protected,public,internal修饰符的访问权限? -->答:private: 私有成员,在类的内部才可以访问;protected:保护成员,该类内部和继承类中可以访问;public:公共成员,完全公开,没有访问限制;Internal:在同一命名空间内可以访问。
11.列举Asp.net页面之间传递值的几种方式? -->答:a. QueryString,如 .....?id=1; b.Session ; c. Server.Transfer
12.C# 中接口和类的异同? -->接口和类都是类,不同的是,接口只包含方法和属性的声明,不包含具体实现方法,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法和属性;接口主要定义一种规范,在大型项目中接口发挥着重要的作用。
13.DataReader和DataSet的异同? -->答:DataReader和DataSet最大的区别在于DataReader使用时始终占用SqlConnection,在线操作数据库,任何对Sqlconnection的操作都会引发DataReader的异常。。。因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的.因为DataReader的特殊性和高性能,所以DataReader是只进.你读了第一条后就不能再去读取下一条了.... DataSet则是将数据一次性加载在内存中,抛弃数据库连接,读取完毕即放弃数据库连接,因为DataSet将数据全部加载在内存中.所以比较消耗内存.....但是确比DataReader要灵活....可以动态的添加行,,,列,数据,对数据库进行回传更新操作...
14.概述反射和序列化? -->答:反射:程序集包含模块,而模块包含类型,类型又包含成员;反射则提供了封装程序集,模块和类型的对象.您可以使用反射动态的创建类型的实例,将类型绑定到现有对象,或从现有的对象中获取类型 。 然后,可以调用类型的方法和访问其字段和属性.。 序列化:序列化是将对象转换为容易传输的格式的过程,例如:可以序列化一个对象,然后使用http通过internet在客户端和服务器之间传输该对象,在另一端,反序列化将从该流重新构造对象。
15.私有程序集与共享程序集有什么区别? -->答:一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子目录中, 共享程序集通常存储在全局程序集缓存之中,这是一个由.net运行时所维护的程序集仓库,共享程序集通常是对应用程序都有用的代码库,比如.net framework类。
16.请解释进程和线程的区别? -->答:一个应用程序对应于一个或多个进程,可以把进程看作是该应用程序操作系统中的标识,而一个进程通常由多个线程组成,而线程是操作系统为该应用程序分配处理时间的最小单元. 进程拥有独立的内存单元,线程是共享内存,从而极大提高了程序的运行效率同一个进程中有多个线程可以同时并发。
17.CLR与IL 分别是什么含义? -->答:CLR:公共语言运行时,类似于Java中的Jvm,java虚拟机,在.net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与操作系统进行通信,而编程语言如C#.net将尽量避免直接与操作系统直接通信,加强了程序代码的执行安全性,可以这样看:CLR就是具体的编程语言如:C#.net与操作系统之间的翻译,同时它为具体的编程语言提供了许多资源; IL,中间语言,也称MSIL,微软中间语言,或CIL ,通用中间语言;所有.net源代码(不管用那种语言编写)在进行编译时都被编译成IL,在应用程序运行时被即时(JIT)编译器处理成机器码,被解释及执行。
18.在C#中,string str=null 与string str=""请使用文字或图像说明其中的区别? -->答:string str=null 是不该他分配内存空间,而string str=""给它分配长度为空字符串的内存空间。
19.Net中结构与类的区别? -->答:a.结构为值类型,所以对结构变量所做的改变不会影响其原值,而类为引用类型,改变其变量的值会改变其原值, b.结构不能声明构造函数及析构函数, c.声明结构用Struck,而类则用Class,向方法传递结构时是通过传递值传递,而不是引用。 d.类可以继承结构,结构则不行。类是通过new 来实例化,而结构则不是。
20.死锁的必要条件? -->答:系统的资源不足,进程推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个进程请求资源时,而此时这个资源已经阻塞,对已获得的资源不放,进程获得资源时,未使用完前,不能强行剥夺。
21.接口是可以继承接口的,抽象类可以实现接口,抽象类可以继承实体类,但是有个条件,条件是实体类必须要有明确的构造函数。
22.C#是否可以直接对内存进行操作? --->答:C#是可以直接对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前面加 unsafe, 在.net中使用了垃圾回收机制功能,它替代了程序员,不过在C#中不可以直接使用Finalize方法,而是在析构函数中调用基类的finalize()方法.
23.Error和Exception有什么区别? -->答:error表示恢复不是不可能,但是很困难,Exception表示一种实际或实现问题,它表示程序运行不可以发生的。
24.谈谈final,finally,finallize的区别? -->答:final用于声明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。 finally是异常处理语句结构中,表示总是执行的部分, finallize表示是Object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。
25.值类型和引用类型的区别? -->答:值类型的值存放在栈中的,改变其值,不改变变量原有的值,而引用类型的值是存放在栈中的,其引用的地址是存放在堆中,改变其值也就改变了变量原有的值,值类型不允许包含null值,然后可空类型可以将null赋值给值类型。
26.ref和out的区别? -->答:ref是传递参数的地址,out是返回值,a. ref传进去的参数都必须在调用前初始化,out不必; b.ref传进去的参数在函数的内部可以直接使用,而out不行。