程序猿 C#常规面试题

1、.NET框架是什么
.NET框架是Microsoft的软件开发框架。它提供了一个受控的编程环境,可以在基于Windows的操作系统上开发,安装和执行软件。

2、.NET和C#的区别
.NET是一种框架,CLR公共语言运行库是.NET FrameWork的基础,其他语言是在.NET框架上运行的。
C# 一种编程语言,一般可以通过.NET框架编译成IL中间语言,在电脑上执行程序。

3、面向对象是什么
面向对象是指将数据和基于数据的操作方法封装到一起作为一个相互依赖的整体,面向对象是把问题分解成多个对象,强调的是解决问题的行为表现。

4、面向对象的主要思想包括什么?
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作
多态:一个程序中同名的不同方法共存的情况。有两种形式的多态-重载与重写。

5、C#中的接口和类有什么异同?
接口是负责功能的定义,而类是负责功能的具体实现。
一个类只可以继承一个父类,但可以继承多个接口。

6、抽象类和接口有什么区别?
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
接口是一个行为规范,里面的所有东西都是抽象的。

7、值类型和引用类型的区别?
基于值类型的变量直接包含值,将一个值类型变量赋值给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对象的引用,而不复制对象本身。
值类型有:int、float、double、bool、枚举、结构体等
引用类型有:string、object、class、接口、数组、委托等

8、什么是装箱和拆箱?
装箱是把值类型到引用类型的转换
拆箱是把引用类型到值类型的转换

9、简述private、protected、internal、public修饰符的访问权限
private:私有成员,在类的内部才可以访问。
protected:保护成员,该类内部和继承类中可以访问。
internal:在同一程序集内可以访问。
public:公共成员,完全公开,没有访问限制。

10、C#中的委托是什么?
委托是一种方法容器,里面都可以装载若干个方法引用地址,调用委托,就相当于同时调用了该容器内的所有方法。

11、委托和事件的区别?
委托可以将方法作为参数传递给方法,委托主要调用方法的。
事件基于委托,事件的本质是委托字段的包装器,对委托字段的访问其限制作用,事件隐藏了委托实例的大部分功能,仅暴漏添加和移除事件处理器的功能。事件是对象,委托是类型。

12、Override与重载的区别?
Override是子类对父类的方法进行重写。
重载是方法的名称相同,参数或参数类型不同。

13、线程和进程的区别?
进程是资源的分配和调度的独立单元,而线程是CPU调度的基本单元。
同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。

14、WCF是什么?
WCF(Windows Communication Foundation)是由微软开发的一系列支持数据通信的应用程序框架。

15、webService是什么?
WebService就是web服务,是微软主推的一种跨平台的分布式应用程序。他使用SOAP协议通讯,用XML封装数据。优点:1.可复用的Web应用程序组件。2.与平台无关,发布后可以被不同平台调用。3.使用XML格式的纯文本来描述自己如何使用。缺点:1.服务端接口方为WebService则客户端也必须使用WebService。2.因为WebService使用xml传输数据,因此性能上不能满足高并发。

16、.NET的错误处理机制是什么?
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的catch为止。

17、多线程的创建、启动?
多线程一般使用new thread()方法进行创建一个线程,使用start方法进行启动一个线程。

18、sleep和wait的区别?
sleep是thread提供的一个静态的方法,使当前线程暂时睡眠,指定休眠时间到了之后就会恢复运行。
wait是会释放对象锁,让其他线程可以访问,需要唤醒才能被执行。

19、请叙述const与readonly的区别。
readonly关键字和const关键字不同:const字段只能在该字段的声明中初始化。readonly字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly可能具有不同的值。

20、请描述一下ref和out在方法参数传递上的异同点?
ref传入的参数必须先被初始化,out则不需要,out必须在方法中对其完成初始化。
out更适合用在要返回多个返回值的地方,ref则要用在要被调出使用的方法修改调出使用者的引用的时候。

21、请指出.NET中所有类型的基类
所有类型的基类:object

22、请列出C#中几种循环的方法,并指出他们的不同
for:带有索引的集合,主要用于循环次数固定的循环。
foreach:用于列举出集合中所有的元素。
while:条件成立循环,通常用于不确定的循环次数。
do...while:与while类似,不同之处在于保证了循环至少执行一次。

23、C#中using和new这两个关键字有什么意义?
using引入一个命名空间,或在使用了一个对象后自动调用其IDespose,New实例化一个对象,或修饰一个方法,表示此方法显示隐藏父类的同名方法。

24、C#中,string str=null与string=""有什么区别?
string str=null是不分配内存空间,而string str=""给它分配了长度为空字符串的内存空间。

25、反射是什么?
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

26、序列化和反序列化是什么?
序列化是将对象转换为容易传输的格式的过程
反序列化是把接收的文件的格式转化成原来的对象

27、什么是XML,能用来做什么
xml一般指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

28、TCP和UDP的区别?
TCP使用前需要先建立连接,UDP不需要建立连接
TCP对系统资源的要求较多,UDP对系统资源的要求较少
TCP保证数据正确性,UDP可能会丢包
TCP保证数据顺序,UDP不保证

29、堆和栈的区别
堆是有程序员手动分配释放,栈是程序自动分配并释放。

30、虚函数和抽象函数
虚函数是由没有实现的函数,由其子类继承并重写的函数
抽象函数是必须由其非虚子类继承并重写的函数

31、==和equals的区别?
==是运算符,equals是Object类的方法
比较的类型不同:equals比较两个对象的内容是否相同。==用于比较引用和比较基本数据类型时具有不同的功能,比较引用类型时比较的是地址值,比较基础数据类型只能用"=="比较两个值是否相同。
运行的速度不同:equals没有==运行速度快,因为==只比较引用。

32、String和StringBuilder的区别?
string创建后分配在栈区,大小不可修改,每次使用string类中的方法时,都要在内存中再创建一个新的字符串对象,然后指向新的对象。这样就需要再分配新的空间。所以有可能产生很大的开销。
StringBuilder创建后分配在堆区,大小可自由修改。

33、C#中常见的数据结构及使用情景
一、数组(Array):需要处理的元素数量确定并且需要使用下标进行访问时可以考虑,不过建议使用List
二、动态数组(ArrayList):不推荐使用,建议使用泛型List
三、泛型List:需要处理的元素数量不确定时,通常建议使用。
四、双向链表(LinkedList):链表适合元素数量不固定,而且需要经常增减节点的情况,链表增减元素效率高。
五、堆栈(Stack):堆栈适合于先进后出的情况。
六、链表Queue:队列适合于先进先出的情况。
七、字典(Dictionary):字典适合于需要键值对操作的情况。

34、常用的设计模式有哪些?
单例模式:一个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例.
单例模式又包括饿汉模式和懒汉模式
饿汉模式:每次调用的时候都会直接加载
懒汉模式:使用的时候才加载
工厂模式:定义规范接口,由其子类进行功能的实现
建造者模式:将复杂的功能分割,重建后实现不同的功能.

你可能感兴趣的:(C#,面试题,c#)