.NET 和 .NET Core 框架简介
.NET 框架由 Microsoft 开发,通过使用工具和功能(如库、类和 API)提供运行、调试和部署代码到 Web 服务和应用程序的环境。该框架使用面向对象编程。
你可以使用 C#、Cobol、VB、F#、Perl 等不同的语言来编写 .NET 框架应用程序。此框架支持 Windows 上的服务、网站、桌面应用程序等。它提供了诸如泛型类型、自动内存管理、反射、并发等功能。这些功能将有助于使开发更容易、更高效地构建高质量的 Web 和客户端应用程序。
.NET Core是 .NET 框架的更新版本,是微软开发的通用、免费、开源的开发平台。.NET Core 是一个跨平台的框架,它可以在不同的操作系统(如 Windows、Linux 和 macOS 操作系统)上运行应用程序。该框架可用于开发各种应用程序,如移动、Web、物联网、云、微服务、机器学习、游戏等。
.NET Core 的特点:
- 免费和开源:.NET Core 源代码项目可以从 Github 获得。它是免费的,并在 MIT 和 Apache 许可下获得许可。
- 跨平台:.NET Core 受 Windows、macOS 和 Linux 等不同操作系统的支持。
- 可共享:以 .NET Standard 编写的单一一致 API 模型将由 .NET Core 使用,并且对于所有 .NET 应用程序都是通用的。相同的库或 API 可以在不同语言的多个平台上使用。
- 友好:.NET Core 通过 .NET Standard 与 .NET Framework、Mono 和 Xamarin 兼容。它还支持使用不同的 Web 框架和库,例如 Angular、React 和 JavaScript。
- 快速:与 .NET Framework、.NET Core 2.2 和以前的版本相比,.NET Core 3.0 更快。它也比 Node.js 和 Java Servlet 等其他服务器端框架快得多。
本文涵盖了面试中最常见的 .NET 和 .NET Core 问题。
我们将它们分为以下几个部分:
- .NET 面试问题:应届生和有经验的
- .NET Core 面试问题:应届生和有经验的
最佳.NET常见面试题和答案合集
1. .NET 框架是如何工作的?
- 使用支持语言(如 C#、F# 或 Visual basic)编写的基于 .NET 框架的应用程序被编译为通用中间语言 (CIL)。
- 编译后的代码以具有 .dll 或 .exe 文件扩展名的程序集文件的形式存储。
- 当 .NET 应用程序运行时,公共语言运行时 (CLR) 获取程序集文件并在即时 (JIT) 编译器的帮助下将 CIL 转换为机器代码。
- 现在,这个机器码可以在它运行的计算机的特定架构上执行。
2. .NET常见面试题有哪些:解释.NET 框架的主要组成部分。
.NET面试题解析:.NET 框架的主要组件如下:
- 公共语言运行时(CLR):
- 它是一个执行引擎,运行代码并提供使开发过程更容易的服务。
- CLR 提供的服务是内存管理、垃圾收集、类型安全、异常处理、安全和线程管理。它还使设计对象跨语言交互的应用程序和组件变得更加容易。
- 为 .NET Framework 编写的程序由 CLR 执行,而不管编程语言如何。每个 .NET Framework 版本都有 CLR。
- 框架类库(FCL):
- 它具有预定义的方法和属性来实现可由 .NET 应用程序使用的常见和复杂功能。它还将提供日期、字符串、数字等的类型。
- 该类库包含数据库连接、文件读写、绘图等API。
- 基类库(BCL):
- 基类库 (BCL) 拥有大量库特性和函数,有助于在 .NET Framework 中实现各种编程语言,例如 C#、F#、Visual C++ 等。
- BCL 分为两部分。他们是:
- 用户定义的类库:它包括程序集。
- 程序集:.NET 程序集被视为 .NET Framework 的主要构建块。CLI(通用语言基础结构)中的程序集是代码的逻辑单元,用于安全、部署和版本控制。程序集可以定义为两种形式,即动态链接库 (.dll) 和可执行 (.exe) 文件。
编译 .NET 程序时,将生成带有 Microsoft 中间语言 (MSIL) 的元数据并将其存储在名为 Assembly 的文件中。
- 程序集:.NET 程序集被视为 .NET Framework 的主要构建块。CLI(通用语言基础结构)中的程序集是代码的逻辑单元,用于安全、部署和版本控制。程序集可以定义为两种形式,即动态链接库 (.dll) 和可执行 (.exe) 文件。
- 预定义类库:它包含命名空间。
- 命名空间:它是 .Net Framework 中存在的预定义方法和类的集合。命名空间可以在“使用系统”的帮助下添加到.NET 程序中,其中使用代表关键字,系统代表命名空间。
- 用户定义的类库:它包括程序集。
- 通用类型系统(CTS):
- CTS 指定了一个标准,该标准将提及在运行时可以在内存中定义和管理哪种类型的数据和值。
- 它将确保以不同语言定义的编程数据应该相互交互以共享信息。例如,在 VB.NET 中,我们将数据类型定义为整数,而在 C# 中,我们将 int 定义为数据类型。
- 当你尝试将数据从一种语言的类型传输到另一种语言的等效类型时,它可用于防止数据丢失。
- 通用语言规范 (CLS):
- 公共语言规范 (CLS) 是 CTS 的一个子集,它定义了一组规则和规定,每种 .NET Framework 的语言都应遵循这些规则和规定。
- CLS 将支持互操作性或跨语言集成,这意味着它提供了一个用于交互和共享信息的通用平台。例如,.NET 框架下的每种编程语言(C#、F#、VB .Net 等)都有自己的语法。因此,当执行属于不同语言的语句时,CLS 将提供一个通用平台来交互和共享信息。
3. 什么是 EXE 和 DLL?
EXE 和 DLL 是程序集可执行模块。
EXE是一个可执行文件,可运行为其设计的应用程序。当我们构建应用程序时会生成一个 EXE。因此,当我们运行 EXE 时会直接加载程序集。但是,不能与其他应用程序共享 EXE。
动态链接库 (DLL)是一个由需要隐藏的代码组成的库。代码封装在这个库中。一个应用程序可以由许多可以与其他程序和应用程序共享的 DLL 组成。
4. 什么是 CTS?
CTS 代表通用类型系统。它遵循一组结构化规则,根据这些规则,应在程序代码中声明和使用数据类型。它用于描述将在应用程序中使用的所有数据类型。
我们可以按照 CTS 中的规则创建我们自己的类和函数。它有助于调用其他编程语言在一种编程语言中声明的数据类型。
5.解释CLS
公共语言规范 (CLS)帮助应用程序开发人员使用与 CLS 附带的某些规则语言间兼容的组件。它还有助于在所有 .NET 兼容语言之间重用代码。
6. 什么是 JIT?
JIT代表及时。它是一个编译器,在执行过程中将中间代码转换为本地语言。
7. int 和 Int32 有什么区别?
int 和 Int32 之间没有区别。Int32 是 .NET 框架类提供的类型,而 int 是 C# 编程语言中 Int32 的别名。
8. 解释值类型和引用类型的区别。
值类型和引用类型的主要区别如下:
- 值类型直接在内存位置中保存实际数据,而引用类型包含一个指针,该指针由另一个保存实际数据的内存位置的地址组成。
- 值类型将其内容存储在堆栈内存中,而引用类型将其内容存储在堆内存中。
- 将值类型变量分配给另一个变量将直接复制该值,将引用变量分配给另一个变量不会复制该值,而是创建该引用的第二个副本。
- 预定义的数据类型、结构、枚举是值类型的示例。类、对象、数组、索引器、接口等都是引用类型的例子。
9. 托管代码和非托管代码有什么区别?
下面列出了托管和非托管代码之间的主要区别:
托管代码 | 非托管代码 |
---|---|
它由 CLR 管理。 | 它不是由 CLR 管理的。 |
.NET 框架是执行的必要条件。 | 执行不需要 .NET 框架。 |
内存管理是通过垃圾收集完成的。 | 运行时环境负责内存管理。 |
10. 解释微软中级语言
MSIL 是 Microsoft 中间语言,它提供调用方法、内存处理、存储和初始化值、异常处理等的指令。
MSIL 提供的指令与平台无关,由特定于语言的编译器从源代码生成。JIT 编译器根据需求将 MSIL 编译成机器码。
11. 什么是装配?
程序集是由编译器自动生成的文件,它由类型和资源的集合组成,这些类型和资源被构建为协同工作并形成功能的逻辑单元。我们也可以说,汇编是编译后的代码和逻辑代码单元。
程序集以可执行文件 (.exe) 或动态链接库 (.dll) 文件的形式实现。
12. ASP.NET 与 ASP 有什么不同?如果是,请解释如何?
是的,ASP.NET 和 ASP(Active Server Pages)都是不同的。让我们来看看它们之间有何不同。
- ASP.NET 使用 .NET 语言,例如 C# 和 VB.NET,它们被编译为 Microsoft 中间语言 (MSIL)。ASP 使用 VBScript。ASP 代码在执行期间被解释。
- 由微软开发的 ASP.NET 用于创建动态 Web 应用程序,而 ASP 是微软用于创建网页的服务器端技术。
- ASP.NET 是完全面向对象的,但 ASP 是部分面向对象的。
- ASP.NET 具有完整的 XML 支持以方便数据交换,而 ASP 没有内置的 XML 支持。
- ASP.NET 使用 ADO.NET 技术来连接和使用数据库。ASP 使用 ADO 技术。
13.解释.NET中基于角色的安全性
.NET面试题解析:基于角色的安全性用于根据分配给组织中用户的角色在 .NET 中实施安全措施。在组织中,用户的授权是根据他们的角色来完成的。
例如,windows 具有基于角色的访问权限,如管理员、用户和访客。
14. 解释不同类型的装配。
装配分为 2 种类型。他们是:
私有:
- 只有应用程序可以访问它。
- 我们需要将这个私有程序集复制到我们想要使用该程序集的所有应用程序文件夹中。如果不进行复制,我们将无法访问私有程序集。
- 它需要安装在应用程序的安装目录中。
共享或公共:
- 它可以被多个应用程序共享。
- 公共程序集不需要单独复制到所有应用程序文件夹中。在系统级别只需要一个公共程序集的副本,我们可以由多个应用程序使用同一个副本。
- 它安装在全局程序集缓存 (GAC) 中。
15.页面生命周期中事件的顺序是什么?
为了成功呈现页面,有以下八个事件发生:
- Page_PreInit
- Page_Init
- Page_InitComplete
- Page_PreLoad
- Page_Load
- Page_LoadComplete
- Page_PreRender
- Render
16.什么是垃圾收集器?
垃圾收集器释放内存中未使用的代码对象。内存堆分为3代:
- 第 0 代:它保存短期对象。
- 第 1 代:它存储中等生命周期的对象。
- 第 2 代:这适用于长期存在的对象。
垃圾收集是指在托管堆的各代中检查应用程序不再使用的对象。它还执行必要的操作来回收它们的内存。垃圾收集器必须执行收集以释放一些内存空间。
在垃圾收集过程中:
- 活动对象列表被识别。
- 更新压缩对象的引用。
- 死对象占用的内存空间被回收。剩余的对象被移动到较旧的段。
System.GC.Collect()
方法用于在 .NET 中执行垃圾收集。
17..NET常见面试题和答案合集:什么是缓存?
缓存是指将数据临时存储在内存中,以便应用程序可以轻松地从内存中访问数据,而不是在原始位置进行搜索。它提高了应用程序的速度和性能效率。
缓存分为三种:
- 页面缓存
- 数据缓存
- 片段缓存
18. 我们可以将主题应用于 ASP.NET 应用程序吗?
是的。通过修改web.config
文件中的以下代码,我们可以将主题应用于 ASP.NET 应用程序:
<configuration>
<system.web>
<pages theme="windows"/>
</system.web>
</configuration>
19. 解释MVC。
MVC 代表模型视图控制器。它是一种构建 .NET 应用程序的架构。以下是 MVC 的三个主要逻辑组件:模型、视图和控制器。
模型:它们保存数据及其相关逻辑。它处理应用程序从数据库中的对象存储和检索。例如:
Controller 对象将从数据库中检索员工信息。
它处理员工数据并将其发送回数据库或使用它来呈现相同的数据。
视图:视图处理应用程序的 UI 部分。他们从模型中获取信息以供展示。例如,任何员工视图都将包含许多组件,如文本框、下拉菜单等。
控制器:他们处理用户交互,计算用户输入的响应并呈现最终输出。例如,员工控制器将处理来自员工视图的所有交互和输入,并使用员工模型更新数据库。
20. 什么是跨页发帖?
每当我们点击网页上的提交按钮时,数据就会存储在同一页面上。但是,如果数据存储在不同的页面上并链接到当前页面,则称为跨页面发布。跨页发布是通过POSTBACKURL
属性实现的。
要获取在页面已发布到的此页面上发布的值,可以使用 FindControl 方法。
21. .NET 中的委托是什么?
委托是定义方法签名的 .NET 对象,它可以将函数作为参数传递。
委托始终指向与其特定签名匹配的方法。用户可以将方法的引用封装在委托对象中。
当我们在程序中传递委托对象时,它会调用引用的方法。要在类中创建自定义事件,我们可以使用委托。
22. .NET常见面试题有哪些:ASP.NET 上有哪些可用的安全控件?
以下是 ASP.NET 上可用的五个安全控件:
<asp: Login>
提供登录功能,使用户能够使用 ID 和密码字段输入其凭据。<asp: LoginName>
用于显示已登录的用户名。<asp: LoginView>
根据已选择的模板提供各种视图。<asp: LoginStatus>
用于检查用户是否通过身份验证。<asp: PasswordRecovery>
在重置密码时向用户发送电子邮件。
23. .NET 中的装箱和拆箱是什么?
装箱是将值类型直接转换为引用类型的过程。拳击是含蓄的。
拆箱是将引用类型转换回值类型的过程。拆箱是明确的。
下面给出一个例子来演示装箱和拆箱操作:
int a = 10; // a value type
object o = a; // boxing
int b = (int)o; // unboxing
24. .NET 中的 MIME 是什么?
MIME 代表多用途 Internet 邮件扩展。它是电子邮件协议的扩展,让用户可以使用该协议轻松地通过电子邮件交换文件。
服务器在 Web 传输的开头插入 MIME 标头以表示这是一个 MIME 事务。
然后客户端使用这个头来为头指示的数据类型选择一个合适的“播放器”。其中一些播放器内置于网络浏览器中。
25.manifest在.NET框架中有什么用?
清单存储程序集的元数据。它包含许多事物所需的元数据,如下所示:
- 程序集版本信息。
- 程序集的范围检查。
- 对类的引用验证。
- 安全标识。
26. 解释 ASP.NET 中可用的不同类型的 cookie?
ASP.NET 中有两种类型的 cookie。他们是:
- 会话 Cookie:它驻留在客户端计算机上的单个会话,并且在用户注销之前一直有效。
- 持久性 Cookie:它在用户机器上驻留一段指定的到期时间。它可能是一个小时、一天、一个月,或者永远不会。
27..NET中CAS是什么意思?
代码访问安全性 (CAS) 是防止在运行时对程序和资源进行未经授权的访问所必需的。它旨在解决从外部来源获取代码时面临的问题,其中可能包含使用户系统易受攻击的错误和漏洞。
CAS 允许对代码进行有限的访问以仅执行某些操作,而不是在给定的时间点提供所有操作。CAS 构建了本地 .NET 安全架构的一部分。
28. web.config 文件中的 appSettings 部分是什么?
如果我们想为整个应用程序设置用户定义的值,我们可以使用 web.config 文件中的 appSettings 块。下面给出的示例代码将在整个项目中使用 ConnectionString 进行数据库连接:
<em>
<configuration>
<appSettings>
<add key= "ConnectionString" value="server=local; pwd=password; database=default" />
</appSettings>
</configuration>
</em>
29.抽象类和接口有什么区别?
下面列出了抽象类和接口之间的主要区别:
抽象类 | 接口 |
---|---|
也用于声明属性、事件、方法和字段。 | 不能使用接口声明字段。 |
提供必须通过继承类实现的功能的部分实现。 | 用于声明实现类的行为。 |
支持不同类型的访问修饰符,如私有、公共、受保护等。 | 仅支持公共访问修饰符。 |
它可以包含静态成员。 | 它不包含静态成员。 |
无法实现多重继承。 | 实现了多重继承。 |
30. .NET 框架支持哪些类型的内存?
.NET 中存在两种类型的内存。他们是:
堆栈:堆栈是一种存储值类型,用于跟踪每个正在执行的线程及其位置。它用于静态内存分配。
堆:堆是一种存储引用类型,用于跟踪更精确的对象或数据。它用于动态内存分配。
31. 解释本地化和全球化。
本地化是自定义我们的应用程序以按照当前文化和语言环境运行的过程。
全球化是设计应用程序的过程,以便它可以通过支持多种语言供全球用户使用。
32. 控制连接池行为的参数有哪些?
有 4 个参数控制连接池行为。他们是:
- 连接超时
- 最小池大小
- 最大池大小
- 池化
33.什么是MDI和SDI?
MDI(多文档界面):一个 MDI 允许你打开多个窗口,它将有一个父窗口和多个子窗口。组件从父窗口共享,如工具栏、菜单栏等。
SDI(单文档界面): SDI 在单独的窗口中打开每个文档。每个窗口都有自己的组件,如工具栏、菜单栏等。因此它不受父窗口的限制。
34. 解释程序集的不同部分。
装配体的不同部分是:
装配体的不同部分是:
- 清单– 每个静态或动态程序集都包含一个数据集合,其中提供了有关程序集中的元素如何相互关联的详细信息。程序集清单包含指定程序集版本要求和安全标识所需的完整元数据,以及定义程序集范围和解析对类和资源的引用所需的元数据。
程序集清单将存储在仅包含程序集清单信息的独立 PE(可移植可执行文件)文件中,或存储在带有 MSIL(Microsoft 中间语言)代码的 PE 文件(.exe 或 .dll)中。 - 类型元数据- 元数据为你提供有关程序集内容的附加信息,例如类型、类型名称、方法名称等。元数据将由编译器从源文件中自动生成,编译器会将这些元数据嵌入到目标输出文件中,例如 .exe、.dll 或 .netmodule(在多模块程序集的情况下)。
- MSIL – Microsoft 中间语言 (MSIL) 是实现这些类型的代码。它包括加载、存储、初始化和调用对象方法的指令。除此之外,它还包括控制流、直接内存访问、算术和逻辑运算、异常处理等指令。这是由编译器使用一个或多个源代码文件生成的。在运行时,CLR(Common Language Runtime) 的 JIT(Just In Time) 编译器将 MSIL 代码转换为操作系统的本机代码。
- 资源- 资源可以是相关文件的列表,例如 .bmp 或 .jpg 文件。这些资源是静态的,这意味着它们在运行时不会更改。资源不是可执行项目。
.NET常见面试题和答案合集:.NET Core 面试问题
35.什么是.NET核心?
.NET Core 可以说是 .NET Framework 的更新版本。它是微软提供的一个免费的、通用的、开源的应用程序开发平台。它是一个跨平台的框架,因为它可以在各种操作系统上运行,例如 Windows、Linux 和 macOS。该框架可用于开发移动、网络、物联网、机器学习、游戏、云、微服务等应用程序。
它包含运行基本 .NET Core 应用程序所必需的重要功能,例如跨平台、可共享库等。其余功能以 NuGet 包的形式提供,你可以根据需要将其添加到你的应用程序中。可以这样说,.NET Core 将提升应用程序的性能,减少内存占用,并且更容易维护应用程序。它遵循模块化方法,因此你的应用程序可以仅安装或使用所需的内容,而不是整个 .NET Framework 安装。
36. Dot NET Core 有什么用?
- .NET Core 在创建服务器应用程序时很有用,这些应用程序在 Windows、Mac 和 Linux 等各种操作系统上运行。使用它,开发人员可以在两个运行时中使用 C#、F# 和 VB.NET 编写库和应用程序。
- 一般用于云应用或将大型企业应用修改为微服务。
- .NET Core 3.0 支持 WPF、UWP 和 Windows Forms 之间的交叉开发。
- .NET Core 支持微服务,允许跨平台服务与 .NET Core 框架一起工作,包括使用 .NET Framework、Ruby、Java 等开发的服务。
- .NET Core 的轻量级、模块化和灵活性等特性使在容器中部署 .NET Core 应用程序变得更加容易。这些容器可以部署在任何平台、Linux、云和 Windows 上。
37. 什么是 C# 和 F#?
.NET面试题解析:C# 是 Microsoft 的一种通用且面向对象的编程语言,可在 .NET 平台上运行。它是为 CLI(通用语言基础设施)设计的,它具有可执行代码和运行时环境,允许在各种计算机平台和体系结构上使用不同的高级语言。它主要用于开发Web应用程序、桌面应用程序、移动应用程序、数据库应用程序、游戏等。
F# 是一种开源、功能优先、面向对象的跨平台编程语言,它在 .NET 平台上运行,用于编写健壮、简洁和高性能的代码。我们可以说 F# 是面向数据的,因为这里的代码涉及使用函数转换数据。主要用于制作科学模型、人工智能研究工作、数学问题解决、金融建模、GUI游戏、CPU设计、编译器编程等。
38.什么是CoreCLR?
CoreCLR 是 .NET Core 提供的运行时执行引擎。它由 JIT 编译器、垃圾收集器、低级类和原始数据类型组成。.NET Core 是 .NET 的模块化实现,可用作大型场景类型的基础堆栈,范围从控制台实用程序到云中的 Web 应用程序。
在这里,各种编程语言将由各自的编译器编译(Roslyn 可以编译 C# 和 VB 代码,因为它包括 C# 和 VB 编译器)并生成通用中间语言 (CIL) 代码。当应用程序开始执行时,使用 CoreCLR 中包含的 JIT 编译器将此 CIL 代码编译为本地机器代码。许多操作系统都支持这个 CoreCLR,例如 Windows、Linux 等。
39. webHostBuilder() 的目的是什么?
WebHostBuilder 函数用于通过使用构建器模式webHostBuilder.Use()
一次链接所有内容来创建 HTTP 管道WebHostBuilder.Build()
。此功能由Microsoft.AspNet.Hosting namespace
. Build() 方法的目的是构建必要的服务和Microsoft.AspNetCore.Hosting.IWebHost
托管 Web 应用程序。
40. 什么是零垃圾收集器?
零垃圾收集器允许你进行对象分配,因为这是执行引擎所要求的。创建的对象不会被自动删除,理论上,不再需要的内存永远不会被回收。
零垃圾收集器有两个主要用途。他们是:
- 使用它,你可以开发自己的垃圾收集机制。它提供了正确执行运行时工作所需的功能。
- 它可以用于特殊用例,如生命周期非常短的应用程序或几乎没有内存分配(诸如 No-alloc 或 Zero-alloc 编程的概念)。在这些情况下,不需要垃圾收集开销,最好摆脱它。
41.什么是CoreFx?
CoreFX 是 .NET Core 的一组类库实现。它包括集合类型、控制台、文件系统、XML、JSON、异步等。它是平台中立的代码,这意味着它可以跨所有平台共享。平台中立代码以可在所有平台上使用的单个可移植程序集的形式实现。
42、什么是IGCToCLR接口?
IGCToCLR 接口将作为参数传递给 InitializeGarbageCollector() 函数,并用于运行时通信。它由很多内置方法组成,如 RestartEE()、SuspendEE() 等。
43.在.NET core中生成SQL脚本有什么用?
每当你尝试调试或部署迁移到生产数据库时,生成 SQL 脚本很有用。SQL 脚本可在未来用于检查数据的准确性并进行调整以适应生产数据库的要求。
44.解释通用类型系统(CTS)的类型。
通用类型系统 (CTS) 将 .NET 框架下不同编程语言可以使用的所有数据类型标准化。
CTS 有两种类型。他们是:
- 值类型:它们包含存储在堆栈中或在结构中内联分配的值。它们分为:
- 内置值类型 - 它包括基本数据类型,例如 Boolean、Byte、Char、Int32 等。
- 用户定义的值类型 - 这些由用户在源代码中定义。它可以是枚举或结构。
- Enumerations - 它是以数字类型的形式存储的一组枚举值,并用标签表示。
- 结构 - 它定义了结构的数据(结构的字段)和方法(对该数据执行的操作)。在 .NET 中,所有原始数据类型,如 Boolean、Byte、Char、DateTime、Decimal 等,都被定义为结构体。
- 引用类型:它存储对值的内存地址的引用并存储在堆上。它们分为:
- 接口类型 - 用于实现功能,例如测试相等性、比较和排序等。
- 指针类型 - 它是一个保存另一个变量地址的变量。
- 自描述类型 - 它是一种数据类型,为垃圾收集器提供有关自身的信息。它包括数组(存储在单个名称下的具有相同数据类型的变量的集合)和类类型(它们定义对象执行的方法、属性或事件等操作以及对象包含的数据),如用户定义的类、装箱值类型和委托(用于事件处理程序和回调函数)。
45. 给出 .NET Core 和 Mono 之间的区别?
.NET Core | Mono |
---|---|
.Net Core 是 Microsoft 自己实现的 .NET 框架的子集。 | Mono 是 Xamarin 对适用于 Linux、Android 和 iOS 的 .Net Framework 的完整实现。 |
.NET Core 只允许你构建 Web 应用程序和控制台应用程序。 | Mono 允许你构建 .NET Framework 中可用的不同应用程序类型,包括移动应用程序、支持 GUI 的桌面应用程序等。 |
.NET Core 没有编译成 WebAssembly 兼容包的内置功能。 | Mono 具有编译成 WebAssembly 兼容包的内置功能。 |
.NET Core 从不用于游戏。你只能使用 .NET Core 开发基于文本的冒险或相对基本的基于浏览器的游戏。 | Mono 旨在用于开发游戏。可以使用支持 Mono 的 Unity 游戏引擎开发游戏。 |
46. 什么是传输编码?
Transfer-encoding用于将payload body(HTTP消息体中发送的数据的信息部分)传输给用户。它是一个逐跳报头,不应用于资源本身,而是应用于两个节点之间的消息。每个多节点连接段可以使用各种传输编码值。
Transfer-encoding 设置为“Chunked”,指定启动超文本传输协议的Chunked 编码数据传输机制,其中数据将以一系列“块”的形式发送。当发送到客户端的数据量较大并且在请求处理完成之前不知道响应的总大小时,这很有用。
47. 'debug' 和 'trace' 是否相同?
否。 Trace 类用于调试以及某些构建版本。它提供了执行计划和流程计时的详细信息。而 debug 主要用于调试。调试意味着在执行期间遍历程序代码流。
调试和跟踪允许在没有 VS.NET IDE 的情况下监视应用程序的错误和异常。
48. .NET Core 中的 MSBuild 是什么?
MSBuild 是适用于 Visual Studio 和 Microsoft 的免费开源开发平台。它是一种构建工具,有助于自动化软件产品创建过程,以及源代码编译、打包、测试、部署和文档创建。使用 MSBuild,我们可以构建 Visual Studio 项目和解决方案,而无需安装 Visual Studio IDE。
在通用Windows平台(UWP)应用程序,如果你打开文件夹命名的项目,你会得到即见这两个文件project.json
和*.csproj
。但是如果你在 .NET Core 中打开我们之前的控制台应用程序,你将看到project.json
和*.xproj
文件。
49. .NET常见面试题有哪些:.Net Core 中的通用 Windows 平台 (UWP) 应用程序是什么?
通用 Windows 平台 (UWP) 是用于为 Windows 创建客户端应用程序的方法之一。UWP 应用程序将利用 WinRT API 来提供强大的 UI 以及高级异步功能,这些功能非常适合具有 Internet 连接的设备。
UWP 应用的特点:
- 安全:UWP 应用程序将指定它们访问哪些设备和数据资源。
- 可以在所有设备(在 Windows 10 上运行)上使用通用 API。
- 它使我们能够使用设备的特定功能并使用户界面 (UI) 适应不同的设备屏幕尺寸、DPI(每英寸点数)和分辨率。
- 它可在 Microsoft Store 上的所有或指定的 Windows 10 上运行的设备上使用。
- 我们可以安装和卸载这些应用程序,而不会对机器造成任何风险/导致“机器腐烂”。
- 参与:它使用动态磁贴、用户活动和推送通知,与 Windows 的时间线以及 Cortana 的“从我离开的地方开始”交互,以吸引用户。
- 它可以在 C++、C#、Javascript 和 Visual Basic 中编程。对于 UI,你可以使用 WinUI、HTML、XAML 或 DirectX。
50. 解释 .NET Core 组件。
.NET Core Framework 由以下组件组成:
- CLI 工具:命令行界面 (CLI) 工具是用于开发、构建、执行、恢复包和发布的跨平台工具。它还能够构建可在整个 .NET 框架上运行的控制台应用程序和类库。它与所选平台的 .NET Core SDK 一起安装。所以它不需要在开发机器上单独安装。我们可以通过
dotnet
在 Windows 的命令提示符下键入然后按 Enter来验证 CLI 安装是否正确。如果显示用法和帮助相关的文本,则可以断定 CLI 安装正确。 - Roslyn(.NET Compiler platform):它是一套开源语言编译器,同时具有C#和Visual Basic ( VB.NET )编程语言的代码分析API 。Roslyn 向通用中间语言 (CLI)、句法(词法)和语义代码分析以及代码发射公开了用于动态编译的模块。
- CoreFX: CoreFX 是一组框架库。它由新的BCL(基类库),即
System.*
东西喜欢System.Xml
,System.Collections
等等。 - CoreCLR:基于 JIT(即时)的 CLR(命令语言运行时)。CoreCLR 是跨平台运行的运行时实现,具有 GC、RyuJIT、本机互操作等。
51. .NET core 中的中间件是什么?
- 中间件是组装到应用程序管道中的软件,用于请求和响应处理。每个组件都会选择是否将请求传递给管道内的下一个组件,也可以在管道内的下一个组件之前和之后进行工作。
- 例如,我们可以有一个用于用户身份验证的中间件组件,另一个用于处理错误的中间件,以及一个用于提供静态文件(如 JavaScript 文件、图像、CSS 文件等)的中间件。
- 它可以内置到 .NET Core 框架中,可以通过 NuGet 包添加。这些中间件组件是作为 configure 方法的应用程序启动类的一部分构建的。在ASP.NET Core 应用程序中,这些 Configure 方法将设置请求处理管道。它包含一系列被一个接一个调用的请求委托。
- 通常,每个中间件都会处理传入的请求并将响应传递给下一个中间件进行处理。中间件组件可以决定不调用管道中的下一个中间件。此过程称为使管道短路或终止请求管道。这个过程非常有用,因为它避免了不必要的工作。例如,如果请求是静态文件,如 CSS 文件、图像或 JavaScript 文件等,这些静态文件中间件可以处理和服务请求,从而短路剩余的管道。
此处,有三个中间件与 ASP.NET Core Web 应用程序相关联。它们可以是框架提供的、通过 NuGet 添加的中间件,也可以是你自己的自定义中间件。每个中间件都会添加或修改 HTTP 请求,并且控制权将选择性地传递给下一个中间件,并在所有中间件组件执行时生成最终响应。
52. 区分 .NET Core 与 .NET 框架。
特征 | .NET 核心 | .NET 框架 |
---|---|---|
兼容性 | 它的工作原理是“一次构建,随处运行”。它是跨平台的,因此它兼容不同的操作系统,如 Linux、Windows 和 Mac OS。 | 此框架仅与 Windows 操作系统兼容。尽管如此,它还是为支持所有操作系统上的软件和应用程序而开发的。 |
安装 | 因为它是跨平台的,所以它是独立于操作系统打包和安装的。 | 它以 Windows 操作系统的单个包的形式安装。 |
应用模型 | 它不支持开发桌面应用程序,主要关注 windows mobile、web 和 windows store。 | 它用于开发桌面和 Web 应用程序,同时它还支持 windows 窗体和 WPF 应用程序。 |
性能和可扩展性 | 它提供高性能和可扩展性。 | 与 .Net Core 相比,它在应用程序的性能和可扩展性方面效率较低。 |
支持微服务和 REST 服务 | 它支持开发和实现微服务,用户需要为其实现创建一个REST API。 | 不支持微服务的开发和实现,但支持REST API服务。 |
包装和运输 | 它以 Nugget 软件包的集合形式提供。 | 属于 .Net Framework 的所有库都一次性打包和发货。 |
安卓开发 | 它通过 .NET 标准库与 Xamarin 等开源移动应用平台兼容。开发人员可以利用 Xamarin 的工具为 Android、iOS 和 Windows 手机等特定移动设备配置移动应用程序。 | 它不支持移动应用程序的开发。 |
命令行工具 | 对于所有支持的平台,它提供轻量级编辑器和命令行工具。 | 这个框架对于 CLI(命令行界面)来说很重,开发人员通常更喜欢在轻量级 CLI 上工作。 |
部署模型 | .NET Core 的更新版本一次在一台机器上启动,这意味着它会在现有应用程序的新文件夹/目录中更新,而不会影响它。因此,我们可以说 .NET Core 具有非常好的灵活部署模型。 | 更新版本发布时,最初仅部署在 Internet Information Server 上。 |
53.解释显式编译(Ahead Of Time compiler)。
- Ahead-of-time (AOT) 编译是在构建时(即在程序执行之前)将高级语言编译为低级语言的过程。AOT 编译减少了运行时的工作量。
- AOT 提供更快的启动时间,在大多数代码在启动时执行的大型应用程序中。但是它需要更多的磁盘空间和内存或虚拟地址空间来保存 IL(中间语言)和预编译图像。在这种情况下,JIT(Just In Time) Compiler 会做很多工作,比如磁盘 I/O 操作,这些工作很昂贵。
- 显式编译将在程序执行时将上层语言转换为目标代码。提前 (AOT) 编译器旨在确保 CPU 在与其进行任何交互之前是否能够理解逐行代码。
- Ahead-of-Time (AOT) 编译在构建期间只发生一次,并且不需要将 HTML 模板和 Angular 编译器传送到包中。生成的源代码在下载到浏览器后可以立即开始运行,不需要之前的步骤。AOT 编译会将 HTML 模板转换为可运行的代码片段。AOT 将在构建期间静态分析和编译我们的模板。
AOT编译的好处:
- 应用程序的大小更小,因为编译器本身没有发货,并且可以删除未使用的功能。
- 模板化先前检测到的解析错误(在构建期间)
- 安全性高(不需要动态评估模板)
- 组件的渲染速度更快(预编译模板)
- 对于 AOT 编译,需要一些工具在构建过程中自动完成。
54.什么是MEF?
MEF(Managed Extensibility Framework)是一个可用于开发可扩展和轻量级应用程序的库。它允许应用程序开发人员无需配置即可使用扩展。它还允许扩展开发人员更容易地封装代码,从而避免脆弱的硬依赖。MEF 将允许你在应用程序内以及跨应用程序重用扩展。它是 .NET Framework 4 的一个组成部分。它提高了大型应用程序的可维护性、灵活性和可测试性。
55.在什么情况下会使用.NET Core和.NET Standard Class Library项目类型?
.NET的核心是否有增加.NET API,你的库将访问的表面积,并且只允许.NET核心的应用程序,如果你接受这个是你的库兼容的需求库使用。
如果你需要增加与你的库兼容的应用程序的数量并减少你的库可以访问的 .NET API 的表面积(用户可以与之交互的一段代码),将使用.NET Standard库你没问题。
56.什么是CoreRT?
- CoreRT 是用于提前本地编译 .NET 的本地运行时,它是新的 .NET Native(如 2014 年 4 月宣布)的一部分。
- 它不是虚拟机,也没有即时生成和运行代码的功能,因为它不包含 JIT。它具有RTTI(运行时类型识别)和反射的能力,并具有GC(垃圾收集器)。
- CoreRT 的类型系统的设计方式完全不需要用于反射的元数据。此功能允许拥有一个 AOT 工具链,该工具链可以链接掉未使用的元数据并可以识别未使用的应用程序代码。
57. .NET Core SDK 是什么?
.NET Core SDK 是一组工具和库,允许开发人员为 .NET 5(也称为 .NET Core)和更高版本创建 .NET 应用程序和库。它包括用于构建应用程序的 .NET CLI、用于构建和运行应用程序的 .NET 库和运行时,以及运行 CLI 命令和运行应用程序的 dotnet.exe(dotnet 可执行文件)。这是下载链接。
58. 什么是Docker?
- Docker 是一个开源平台,用于开发应用程序,也用于传送和运行它们。它允许使用容器将应用程序与基础设施分离,以便可以快速交付软件。使用 Docker,你将能够以与管理应用程序相同的方式管理基础设施。
- 它支持快速交付、测试和部署应用程序代码,从而减少代码编写和在生产中运行之间的延迟。
- Docker 平台提供了在松散隔离的环境(即容器)中打包和应用程序执行的能力。隔离和安全允许你在给定主机上同时运行多个容器。容器是轻量级的,它们包含运行应用程序所需的所有必要内容,因此你无需依赖于当前安装在主机中的内容。
59. 什么是 Xamarin?
- Xamarin 是一个开源平台,可用于使用 .NET 开发适用于 iOS、Android 和 Windows 的现代高效应用程序。它是一个抽象层,用于管理共享代码与基础平台代码的通信。
- Xamarin 在托管环境中运行,该环境具有垃圾收集和内存分配等优点。
- 开发人员可以在使用 Xamarin 的平台上共享大约 90% 的应用程序。这种模式允许开发人员用单一语言编写整个业务逻辑(或重用现有的应用程序代码),但在每个平台上实现本机性能、外观和感觉。Xamarin 应用程序可以在 Mac 或 PC 上编写,然后它们将被编译为本机应用程序包,如 iOS 上的 .ipa 文件或 Android 上的 .apk 文件。
60. .NET常见面试题有哪些:如何区分 ASP.NET Core 和 .NET Core?
.NET Core 是一个运行时,用于执行为其构建的应用程序。而 ASP.NET Core 是一组库,它们将形成用于开发 Web 应用程序的框架。ASP.NET Core 库可用于 .NET Core 以及“完整的 .NET Framework”。
使用 ASP.NET Core 的工具和库的应用程序通常被称为“ASP.NET Core 应用程序”,理论上并没有说明它是为 .NET Framework 还是 .NET Core 构建的。因此,“ASP.NET Core”的应用程序可以被视为“.NET Core 应用程序”或“.NET Framework 应用程序”。
61. 编写一个程序来计算两个数的相加。
.NET面试题解析:步骤如下:
1. 你需要创建一个新的 ASP.NET Core 项目“CalculateSum”。打开 Visual Studio 2015,转到File–> New–> Project。在左窗格中选择选项 Web,然后在中央窗格下找到选项ASP.NET Core Web 应用程序(.NET Core)。将项目名称编辑为“CalculateSum”,然后单击“确定”。
2. 在模板窗口中,选择Web Application,将Authentication 设置为“No Authentication”,点击OK。
3. 打开“解决方案资源管理器”并右键单击文件夹“主页”(在视图下),然后单击添加新项目。你需要在 ASP.NET Section 下选择MVC View Page Template并将其重命名为“addition.cshtml”,然后单击Add按钮。
4、打开addition.cshtml,编写如下代码:
@{
ViewBag.Title = "Addition Page";
}
<h1>Welcome to Addition Page</h1>
<form asp-controller="Home" asp-action="add" method="post">
<span>Enter First Number : </span> <input id="Text1" type="text" name="txtFirstNum" /> <br /><br />
<span>Enter Second Number : </span> <input id="Text2" type="text" name="txtSecondNum" /> <br /><br />
<input id="Submit1" type="submit" value="Add" />
</form>
<h2>@ViewBag.Result</h2>
在这里,我们创建了一个简单的表单,它有两个文本框和一个添加按钮。文本框命名为txtFirstNum
和txtSecondNum
。在控制器页面上,我们可以使用以下方法访问这些文本框:<form asp-controller="Home" asp-action="add" method="post">
此表单将指示所有提交将移至 HomeController 并执行方法 add 操作。
5. 打开HomeController.cs
并在其上写入以下代码:
using System;
using Microsoft.AspNetCore.Mvc;
namespace CalculateSum.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "Application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Contact page.";
return View();
}
public IActionResult Error()
{
return View();
}
public IActionResult addition()
{
return View();
}
[HttpPost]
public IActionResult add()
{
int number1 = Convert.ToInt32(HttpContext.Request.Form["txtFirstNum"].ToString());
int number2 = Convert.ToInt32(HttpContext.Request.Form["txtSecondNum"].ToString());
int res = number1 + number2;
ViewBag.Result = res.ToString();
return View("addition");
}
}
}
在这个程序中,我们添加了两个 IAction 方法 add() 和 add()。Addition() 方法会返回添加视图页面, add() 方法从浏览器获取输入,进行处理,结果保存在 ViewBag.Result 中,然后返回给浏览器。
现在,按 Ctrl+F5 运行你的程序。这将在浏览器中启动一个ASP.NET Core 网站。添加/Home/addition
在链接的末尾,然后按回车键。输出格式如下:
.NET常见面试题和答案合集结论
.NET 是一个全栈软件开发框架,主要用于构建大型企业级和可扩展的软件应用程序。.NET 框架在市场上的应用范围很广。它是一个灵活且用户友好的框架,与其他技术配合得很好。
.NET Core 是为响应 Java 流行度的激增而开发的。.NET Core 通常用于低风险项目。某些 .NET 组件可用于 .NET 核心应用程序(但不能反过来)。本文主要关注.Net和.NET Core的框架概念。我们相信它会给你足够的信息,并且对面试中会被问到的常见问题有一个公平的了解。