.Net面试宝典【刷题系列】

文章目录


1、JIT是如何工作的

答:JIT 引擎在编译中间代码之前,会寻找方法的本机机器代码缓存并且判断其是否可用,如果可用则直接加载,如果不可用,JIT 引擎会查找类型中的方法存根,找到该中间代码并且进行编译。

2、值类型和引用类型的区别

答:所有继承自 System.ValueType 的类型是值类型,而其他类型都是引用类型。值类型的赋值会产生一个新的数据副本,所以每个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用。值类型的对象分配在堆栈上,而引用类型的对象分配在堆上。当比较两个值类型时,进行的是内容比较,而比较两个引用类型时,进行的是引用比较。

3、解释泛型的基本原理

答:泛型类似 C++ 中的模板,允许程序员定义更通用的类型和算法,并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性,本质上,它和封闭类型没有区别。

4、如何自定义序列化和反序列化的过程

答:通过实现 ISerializable 接口中的 GetObjectData 方法可以实现自定义的序列化,而通过添加带有 SerializationInfoStreamingContext 的参数的构造方法可以自定义反序列化的过程。

5、如何使用 IFormattable 接口实现格式化输出

答:IFormattable 接口帮助类型实现了多样式的格式化输出。IFormattableToString 方法接受一个代表格式的字符串参数,通过对这个参数的分析来进行格式化输出。另外,IFormattable.ToString 方法接受一个 IFormatProvider 类型的参数,以允许类型的使用者提供格式化的方法。

6、请解释委托的基本原理

答:委托是一类继承自System.Delegate 的类型,每个委托对象至少包含了一个指向某个方法的指针,该方法可以是实例方法,也可以是静态方法。委托实现了回调方法的机制,能够帮助程序员设计更加简洁优美的面向对象程序。

7、什么是链式委托

答:链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。

8、请解释反射的基本原理和其实现的基石

答:反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据。元数据是存储在PE 文件中的数据块,它详细记录了程序集或模块内部的结构、引用的类型和程序集和清单

9、如何利用反射来实现工厂模式

答:使用反射可以实现灵活性较高的工厂模式,其关键在于动态地查找产品所包含的所有零件,而不需要通过代码来逐一分析使用者的需求。反射工厂模式具有灵活性高,运行效率相对较低的特点。

10、如何以较小的内存代价保存 Type、Field 和 Method 信息

答:System.RuntimeTypeHandle、System.RuntimeMethodHandle 和 System.RuntimeFieldHandle 三个类型,分别包含了一个指向类型、方法和字段描述的指针,用保存指针的方式来代替保存整个类型、方法和字段的信息描述对象,可以有效地减少内存的消耗。而在实际需要用到这些信息时,又可以通过这三个句柄类型对象,分别得到 System.Type、System.Reflection.MethodInfoSystem.Reflection.FieldInfo 类型对象。

11、如何防止 SQL注入式攻击

答:SQL 注入式攻击时常见的一种攻击方法,主要利用的是系统设计的弊端。程序员在设计时需要考虑到注入式攻击的问题,避免直接使用用户输入拼接 SQL 语句,适当使用加密数据进行存储,并且在合适的场合使用存储过程。

12、请简要叙述数据库连接池的机制

答:ADO.NET 对上层用户提供了数据库连接池的服务,使用完的数据库连接将被有选择的保持在数据库连接池中,以供下次使用。当用户以某个连接字符串申请数据库连接时,数据库连接池将尝试寻找在池中寻找具有相同的连接字符串的连接,并直接提供给用户。

13、如何提高连接池内连接的重用率

答:为了提高数据库连接池的重用率,唯一的方法就是尽量保证系统访问数据库所使用的连接字符串不变。例如建立跳板数据库,使所有连接都首先尝试访问跳板数据库。另外,统一使用超级用户帐号可以进一步统一连接字符串,但这为系统带来了安全上的隐患。

14、哈希表和数组列表有什么区别?

答:哈希表以值对和名称的形式存储数据, 而数组列表仅存储值。

你需要将名称传递给哈希表中的值, 而在数组中, 则需要传递索引号来访问值。

在数组中, 你只能存储类似类型的数据类型, 而在哈希表中, 你可以存储不同类型的数据类型。例如整数, 字符串等

15、什么是内存映射文件?

答:内存映射文件用于将文件内容映射到应用程序的逻辑地址。它使你能够在同一台计算机上运行多个进程以彼此共享数据。要获得一个内存映射文件对象, 可以使用 MemoryMappedFile.CreateFromFiles() 方法。它表示磁盘上文件中的持久性内存映射文件。

16、使用哪种方法在.NET中实施垃圾收集?

System.GC.Collect() 方法。

17、.Net中有哪些不同类型的索引?

答:.Net 中有两种类型的索引:

聚集索引和非聚集索引

18、.Net中有几种类型的内存?

答:.Net 中有两种类型的内存

堆栈内存

堆内存

19、元组可以容纳多少个元素?

答:一个元组可以容纳 18 个元素。如果元素多于 8 个, 则可以将第 8 个元素定义为另一个元组。元组可以指定为参数或方法的返回类型。

相关推荐
BingLin-Liu1 小时前
蓝桥杯备考:搜索算法之排列问题
算法·职场和发展·蓝桥杯
菠菠萝宝1 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
A_one20102 小时前
前端开发常见问题与面试-02
面试·职场和发展
和光同尘@5 小时前
74. 搜索二维矩阵(LeetCode 热题 100)
数据结构·c++·线性代数·算法·leetcode·职场和发展·矩阵
一个 00 后的码农6 小时前
25会计研究生复试面试问题汇总 会计专业知识问题很全! 会计复试全流程攻略 会计考研复试真题汇总
经验分享·考研·面试·面试问题·25考研·考研复试·会计复试
星之卡比*7 小时前
前端面试题---vite和webpack的区别
前端·面试
卷卷的小趴菜学编程7 小时前
c++之多态
c语言·开发语言·c++·面试·visual studio code
JustHappy8 小时前
「CSS暴论💥」CSS“常识”回顾——上(你不会和我一样不记得吧🤡🤡)
css·面试
时光追逐者8 小时前
推荐几款开源免费的 .NET MAUI 组件库
microsoft·开源·c#·.net·.net core·maui
曲奇是块小饼干_8 小时前
leetcode刷题记录(一百零八)——322. 零钱兑换
java·算法·leetcode·职场和发展