程序猿 C#常规面试题
时间:2022-11-25 10:00:00
1、.NET框架是什么
.NET框架是Microsoft以软件开发框架为基础的软件开发框架。它提供了基于Windows在操作系统上开发、安装和执行软件。
2、.NET和C#的区别
.NET是框架,CLR公共语言操作库是.NET FrameWork其他语言是基础.NET运行在框架上。
C# 编程语言通常可以通过.NET框架编译成IL在计算机上执行算机上执行程序。
什么是面向对象?
面向对象是指将数据和基于数据的操作方法封装在一起作为一个相互依赖的整体。面向对象是将问题分解为多个对象,强调解决问题的行为。
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是子类重写父类的方法。
重载方法名称相同,参数或参数类型不同。
线程与过程的区别?
流程是资源分配和调度的独立单元,线程是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为止。
创建和启动多线程?
一般采用多线程new thread()创建线程并使用方法start启动一个线程的方法。
18、sleep和wait的区别?
sleep是thread提供的静态方法,使当前线程暂时睡眠,指定休眠时间后恢复运行。
wait释放对象锁,使其他线程可以访问,需要唤醒才能执行。
19、请叙述const与readonly的区别。
readonly关键字和const关键词不同:const字段只能在字段声明中初始化。readonly在声明或构造函数中,字段可以初始化。因此,根据所使用的构造函数,readonly可能有不同的值。
请描述一下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=""将长度为空字符串的内存空间分配给它。
什么是反射?
程序集包含模块,模块包含类型和成员。反射提供包装程序集模块和类型的对象。可以使用反射动态创建类型实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
什么是序列化和反序列化?
序列化是将对象转换为易于传输的格式的过程
反序列化是将接收文件的格式转换为原始对象
27、什么是XML,能用来做什么
xml一般是指可扩展标记语言、标准通用标记语言的子集,用于标记电子文件,使其具有结构性。
28、TCP和UDP的区别?
TCP连接需要在使用前建立,UDP无需建立连接
TCP对系统资源的要求较高,UDP对系统资源的要求较少
TCP确保数据的正确性,UDP可能会丢包
TCP保证数据顺序,UDP不保证
堆与堆的区别
堆是程序员手动分配和释放的,堆是程序自动分配和释放的。
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常用的设计模式有哪些?
单例模式:一个类只能生成一个例子,它为外部获取提供了一个全球访问点.
单例模式包括饿汉模式和懒汉模式
饿汉模式:每次调用的时候都会直接加载
懒汉模式:使用时加载
工厂模式:定义规范接口,实现子类功能
建造者模式:将复杂的功能分割,重建后实现不同的功能.