C#.NET Core 笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

想创业的老板们看这里 C# .net .NET Core最新题库 会这些高级开发是没什么问题 十多年一线开发观察。。

C#.NET基础笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

C#.NET高级笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

MySQL面试题 2024 金九银十 最新 C# 高级 资深 DB 八股文-CSDN博客

国产精品ORM框架-SqlSugar详解 SqlSugar初识 附案例源码 云草桑 专题一_sqlsuger进阶-CSDN博客

C#高级开发 线上面试题20240711_c# 开发高级面试题-CSDN博客

Redis高频面试题-CSDN博客

数据库SqlServer笔试题_sqlserver 笔试题-CSDN博客

WPF 2024 金九银十 最新 高级 架构 面试题 C#_wpf 面试题-CSDN博客

WPF UI交互专题 界面结构化处理 查看分析工具Snoopy 逻辑树与视觉树 平面图像 平面图形 几何图形 弧线 01_wpf逻辑树和视觉树代码-CSDN博客

目录 C#.NET Core 笔试题

1. 什么是 ASP.NET Core
2.C#10 struct 有什么改进?
3.ASP.NET Core 有哪些好的功能?
4. 如何理解 C#10 中全局的 using
5. 说说什么是顶级语句?
6. 说说 C#10 Lambda 表达式的新特点。
7.ASP.NET Core AOP 的支持有哪些?
8.ASP.NET Core Filter 的注册方式有哪些?
9.ASP.NET Core Filter 如何支持依赖注入 ?
10.ASP.NET Core 如何和读取配置文件中的内容?
11.ASP NET Core 中如何处理异常( Exception )?
12. ASP.NET Core 中如何进行身份验证( Authentication )和授权( Authorization )?
13.ASP.NET Core 中如何进行单元测试和集成测试?
14.ASP.NET Core ASP.NET 比较有哪些更好的地方?
15.ASP.NET Core 中如何进行缓存控制( Caching )?
16. 请描述一下 ASP.NET Core 中的 WebSocket 支持是如何实现的。
17.ASP.NET Core 中如何进行信号 R SignalR )开发?
18.ASP.NET Core 中如何进行 API 版本控制( API Versioning )?
19.ASP.NET Core 中如何处理异常( Exception )?
20.ASP.NET Core 中如何进行分布式缓存( Distributed Caching )?
21. 请解释一下 ASP.NET Core 中的 Kestrel 是什么以及它的作用。
22. 什么是 Model-View-Controller MVC )模式? ASP.NET Core 中如何实现 MVC
23. 什么是 meta packages
24.ASP.NET Core 应用能够跟 ASP.NET4.x 架构一起工作吗?
25. 什么是 ASP.NET Core StartUp 类?
26.StartUp 类的 configservice 方法有什么作用 ?
27.StartUp 类的 configure 方法有什么作用?
28.ASP.NET Core 里面的路径是如何处理的 ?
29.ASP.NET Core 工程里面有多少个工程文件?
30. 什么是 ASP.NET Core 里面的 taghelper
31. 说说 .NET5 _ViewImports 文件的作用。
32. 什么是 Razor 页面 ?
33. 说说 .NET5 __ViewStart 文件的作用
34. 如何在 Razor 页面中实现数据模型绑定?
35. 说说 Record 关键字的用法。
36. 说说在 Linux 系统部署 ASP.NET Core 项目的步骤。
37. 说说热重载是什么。
38. 说说对于泛型特性的理解。
39. 如何理解鉴权和授权两个词。
40. 说说 .NET6 包含了几大方向的开发?
41. 如何理解云原生?
42.ASP.NET Core 应用程序部署 IIS ,需要准备什么?
43. 如何理解 MVC5 的管道和 ASP.NET Core 的管道?
44. ASP.NET Core 设计中,为什么要把把 ResourceFilter 放在授权 Filter 之后,而在其他 Filter 之前。
45. 说说优化 Core WebApi 性能的常见方案
46. 如何理解 MAUI
47. 如何在 ASP.NET Core 中激活 Session 功能?
48. 什么是中间件?
49.Applicationbuilder Use Run 方法有什么区别?
50. 如何使 taghelper 在元素这一层上失效 ?
51. 如何在 Controller 中注入 service 52. 描述一下依赖注入后的服务生命周期 ?
53. 说说 ASP.NET Core 内置容器的特点;
54.ASP.NET Core 中如何读取静态文件?
55.ASP.NET Core 项目如何设置 IP 地址和端口号?
56.ASP.NET Core 项目中, wwwroot 文件夹内包含什么内容?
57..NET6 中中间件的底层实现和 .NET5 中间件的区别。
58. 谈谈对 ASP.NET Core kestrel 的理解。
59. 谈谈对 Autofac 的理解;
60.ASP.NET Core 如何支持 Log4Net 扩展?
61. 说说脚本启动 ASP.NET Core Web 项目
62. 说说 Core WebApi Swagger
63. ASP.NET Core 中处理路由( Routing )?
64. 说说 Core WebApi 特性路由。
65. 说说 RESTful 是什么。
66. 说说脚本在请求 Web CoreApi 的时候,为什么会发生跨域问题?
67. 如何解决跨域问题?
68. 说说你了解到的鉴权授权技术。
69. 请问对 gRPC 有了解吗,说说 gRPC
70.gRPC 有几种模式?
71. 说说如何使用 C# 实现简单模式 gRPC
72. 说说 gRPC 的拦截器有哪些?
73.gPRC 作为一种被调用的服务,有什么保护安全的措施吗?
74. 说说你知道的 ORM 框架。
75. 请问对 EFCore 有了解吗?
76. 说说 EFCore 查询的性能调优小技巧。
77.EFCore 如果通过数据生成实体和 DbContext?
78. 说说对 SaveChanges 的理解。
79. 说说对 EFCore EntityState 的理解。
80. 说说什么是导航属性和引用属性。
81.ASP.NET Core 管道里面的 map 拓展有什么作用?
82.EFCore 有几种配置映射方式?
83..NET 中,如果需要在指定的时间或者某个周期内,执行一个操作,比如清空某个日志表,有哪些方式?
84..NET Core 中, WebAPI MinimalAPI 有什么区别?
85. 开发一个 .NET Core Web 应用时,我们可以通过静态文件中间件将静态资源存放在站点目录中,然后通
http 路径进行访问,那么存放在站点目录有什么问题,有哪些需要考虑的?
86. 什么是负载均衡,以及如何做负载均衡?
87. 网页开发中,一般都是前端主动发起请求,通过后端获取最新数据,如果需要实现实时展示最新数据的功能,比如智慧大屏的动态效果,如何实现?

目录

 


1.什么是ASP.NET Core

首先 ASP.NET Core 可以说是 ASP.NET 的升级版本。它遵循了 .NET 的标准架构,是一个基于 .NET Core
Web 开发框架, 可以运行于多个操作系统上。它更快,更容易配置,更加模块化,可扩展性更强。

2.C#10 struct有什么改进?

主要在于支持了无参数构造函数的改进,在 C# 10 之前,约束了不能有无参数的构造函数,现在在 C#10
方法了这一约束;
public struct Teaach
{
   public Teaach(string firstName, string lastName)
   {
       this.FirstName = firstName;
       this.LastName = lastName;
   } 
   public string FirstName { get; set; } 
   public string LastName { get; set; }
}

3.ASP.NET Core有哪些好的功能?

第一是依赖注入。
第二是日志系统架构。
第三是引入了一个跨平台的网络服务器, kestrel 。可以没有 iis, apache nginx 就可以单独运行。
第四是可以使用命令行创建应用。
第五是使用 appsettings 来配置工程。
第六是使用 StartUp 来注册服务。
第七是更好的支持异步编程。
第八是支持 web socket signal IR
第九是对于跨网站的请求的预防和保护机制。

4.如何理解C#10 中全局的using

using 指令简化了您使用命名空间的方式。 C# 10 包括一个新的全局 using 指令和隐式 usings ,以减少
您需要在每个文件顶部指定的 usings 数量。
全局 using 指令:
如果关键字 global 出现在 using 指令之前,则 using 适用于整个项目。
隐式 usings
隐式 usings 功能会自动为您正在构建的项目类型添加通用的全局 using 指令。要启用隐式 usings ,请
.csproj 文件中设置 ImplicitUsings 属性

5.说说什么是顶级语句?

顶级语句( Top-level Statements )是 C# 9.0 引入的一项功能,它允许开发者在 C# 程序中直接编写执行
代码,而不需要显式地包裹在类、方法或其他结构中。顶级语句的目标是简化小型应用程序、脚本和快
速原型开发的过程。
在传统的 C# 应用程序中,所有的代码都必须放在类的内部,然后通过 Main 方法作为程序的入口点。而
使用顶级语句,你可以在 C# 文件的顶部直接编写执行代码,而无需显式定义类或方法。

6.说说C#10Lambda表达式的新特点。

在之前的版本中我们是需要显式声明委托类型,如上述被注释的代码,在 C# 10 就可以直接使用 var
来声明由编译器去推断委托的类型
public struct Teaach
{
  public Teaach(string firstName, string lastName)
  {
      this.FirstName = firstName;
      this.LastName = lastName;
  }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}// Func func = () => 1;
var func = () => 1;
// Func func2 = ()=>"Hello";
var func2 = () => "Hello";
我们可以在指定输入参数类型的时候,可以设置 ref / out / int 来表示一个值类型的引用传递,示例如
下:
var refFunc = (ref int x) => { x++; };
var outFunc = (out int x) => { x = -1; };
var inFunc = (in int x) => { };
var num = 1;
refFunc(ref num);
Console.WriteLine(num);
outFunc(out num);
Console.WriteLine(num);
C# 10 的委托可以指定返回类型,如下:
// return type
var lambdaWithReturnValue0 = int? () => null;
// return type and input type
var lambdaWithReturnValue1 = int? (string s)
  => string.IsNullOrEmpty(s) ? 1 : null;
// Func
var choose = object (bool b) => b ? 1 : "two";
对于能够推断出类型的方法,我们也可以使用 var 来声明委托,示例如下
// Action func3 = LocalMethod;
var func3 = LocalMethod;
void LocalMethod(string a)
{
  Console.WriteLine(a);
}
var checkFunc = string.IsNullOrEmpty;
var read = Console.Read;
Action write = Console.Write;
对于能够推断出类型的方法,我们也可以使用 var 来声明委托,示例如下:
// Action func3 = LocalMethod;
var func3 = LocalMethod;
void LocalMethod(string a)
{
  Console.WriteLine(a);
}
var checkFunc = string.IsNullOrEmpty;
var read = Console.Read;
Action write = Console.Write;

7.ASP.NET Core AOP的支持有哪些?

通过 Filter 来支持;分别有 IResourceFilter AuthorizeFilter ActionFilter ExceptionFilter ResultFilter
Filter 也被称为拦截器!

8.ASP.NET Core Filter的注册方式有哪些?

方法注册:只对方法生效
控制器注册:对控制器中的所有方法生效
全局注册:对整个项目生效;

9.ASP.NET Core Filter如何支持依赖注入?

可以通过全局注册,支持依赖注入
通过 TypeFilter(typeof(Filter)) 标记在方法,标记在控制器
通过 ServiceType(typeof(Filter)) 标记在方法,标记在控制器,必须要注册 Filter 这类;
TypeFilter ServiceType 的本质是实现了一个 IFilterFactory 接口;

10.ASP.NET Core 如何和读取配置文件中的内容?

可以有两种方式,可以通过 IConfiguration 接口来读取;
有可以定义根据配置文件结构一致的实体对象,来绑定到对象中去;或者通过 1 写入, 2 注入读取
必须保证: DBConnectionOption 和配置文件的内容结构一致;
1. services.Configure
(Configuration.GetSection("ConnectionStrings"));//注入多个链接

2.private DBConnectionOption dBConnections = null;
      private DbContext _Context = null;
       
      public DbContextFactory(DbContext context, IOptions
options)
      {
          _Context = context;
          dBConnections = options.Value;
      }

11.ASP NET Core中如何处理异常(Exception)?

我们可以使用 try-catch 块或全局异常过滤器来捕获和处理异常。 ASP.NET Core 中,推荐使用中间件来
处理异常,并返回适当的 HTTP 响应。

12. ASP.NET Core中如何进行身份验证(Authentication)和授权 Authorization)?

ASP.NET Core 提供了身份验证和授权的中间件,可以通过配置身份提供程序、声明策略和角色来实现用
户身份验证和授权控制。

13.ASP.NET Core中如何进行单元测试和集成测试?

我们可以使用 xUnit NUnit 等单元测试框架来编写和运行单元测试,以验证应用程序的单个部分。对于
集成测试,可以使用 Selenium 等工具模拟用户操作并测试整个应用程序。

14.ASP.NET CoreASP.NET比较有哪些更好的地方?

第一是跨平台,它可以运行在三大操作系统上面, windows Linux MAC
第二是对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起。
第三是 ASP.NET Core 处理请求的效率更高,能够处理更多的请求。
第四是 ASP.NET Core 有更多的安装配置方法。

15.ASP.NET Core中如何进行缓存控制(Caching)?

ASP.NET Core 提供了内置的缓存支持,包括内存缓存、分布式缓存等。我们可以在控制器或视图中使用
缓存特性来控制缓存的行为和过期时间。

16.请描述一下ASP.NET Core中的WebSocket支持是如何实现的。

ASP.NET Core 提供了 WebSocket 中间件,可以通过在 Startup 类的 Configure 方法中启用 WebSocket 中间
件,并编写处理 WebSocket 连接的代码来实现实时通信功能。

17.ASP.NET Core中如何进行信号RSignalR)开发?

SignalR ASP.NET Core 中实现实时通信的库,可以通过在 Startup 类的 ConfigureServices 方法中配置
SignalR 服务,然后在控制器或 Hub 类中编写实时通信的逻辑。
2.private DBConnectionOption dBConnections = null;
      private DbContext _Context = null;
       
      public DbContextFactory(DbContext context, IOptions
options)
      {
          _Context = context;
          dBConnections = options.Value;
      }

18.ASP.NET Core中如何进行API版本控制(API Versioning)?

我们可以使用 Microsoft.AspNetCore.Mvc.Versioning 包来实现 API 版本控制。通过配置版本路由、查询
字符串参数等方式,来管理不同版本的 API

19.ASP.NET Core中如何处理异常(Exception)?

我们可以使用 try-catch 块或全局异常过滤器来捕获和处理异常。 ASP.NET Core 中,推荐使用中间件来
处理异常,并返回适当的 HTTP 响应。

20.ASP.NET Core中如何进行分布式缓存(Distributed Caching)?

ASP.NET Core 提供了分布式缓存支持,可以使用分布式缓存提供程序,如 Redis SQL Server 等,在多
个节点之间共享缓存数据。我们可以在控制器或视图中使用缓存特性来控制缓存的行为和过期时间。

21.请解释一下ASP.NET Core中的Kestrel是什么以及它的作用。

答案: Kestrel ASP.NET Core 的内置 Web 服务器,用于处理和响应 HTTP 请求。它具有高性能、轻量
级、跨平台等特点,可以作为单独的 Web 服务器或与其他 Web 服务器一起使用。

22.什么是Model-View-ControllerMVC)模式?ASP.NET Core如何实现MVC

答案: MVC 是一种设计模式,将应用程序分为模型( Model )、视图( View )和控制器
Controller )。 ASP.NET Core 中,我们可以创建控制器来处理用户请求,与模型交互,并返回视
图。

23.什么是meta packages

Meta packages 是指包含所有 ASP dot net code 依赖的一个包。叫做 Microsoft.AspNetCore

24.ASP.NET Core应用能够跟ASP.NET4.x架构一起工作吗?

可以。 ASP.NET Core 应用可以跟标准的 dot net 库一起工作。

25.什么是ASP.NET CoreStartUp 类?

StartUp 类是 ASP.NET Core 应用的入口。所有的 ASP.NET Core 应用必须有这个类。这个类用来配置应
用。这个类的调用是在 program main 函数里面进行配置的。类的名字可以自己定义。

26.StartUp 类的configservice方法有什么作用?

在这个方法里我们可以添加一些 service 进入依赖注入容器。

27.StartUp 类的configure方法有什么作用?

这个方法来定义整个应用如何响应 HTTP 请求。它有几个比较重要的参数, applicationbuilder Hosting environment, logfactory, 在这里我们可以配置一些中间件用来处理路径,验证和 session 等等。

28.ASP.NET Core里面的路径是如何处理的?

路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。
主要有两种路径处理方式, 常规路径处理和属性路径处理。常规路径处理就是用 MapRoute 的方式设定 调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。

29.ASP.NET Core工程里面有多少个工程文件?

launchsetting appsettings Program, StartUp

30.什么是ASP.NET Core里面的taghelper

Taghelper 用来在服务器端使用 Razor 视图引擎创建 html 元素的。

31.说说.NET5 _ViewImports文件的作用。

.NET5 中可以支持组件化编程,定义的各种组件,在项目中使用的时候,需要在 _ViewImports 文件中 引入进来。

32.什么是Razor页面?

ASP.NET Core 中支持 ASP 网页表格的一种开发模型。 @page 作为页面的起始标志。。
Stringbulider 的使用,最好制定合适的容量值,否则优于默认值容量不足而频繁的进行内存分

33.说说.NET5 __ViewStart文件的作用

在控制器在返回视图的时候,开始替换视图引擎的时候,从 _ViewStart.cshtml 开始,来初始化展示的视 图界面;

34.如何在Razor页面中实现数据模型绑定?

使用 bindproperty 属性。

35.说说Record关键字的用法。

可以用来简单声明一个类:
record People
{
   public string Name { get; init; } 
   public int Age { get; init; }
}
上面是声明一个类
下面的声明也是声明一个类,和上面的一样;不需要使用大括号来执行属性;
record People2(string Name, int Age);
这里的示例,用 record 声明了两个 实体,第二个 实体 声明的时候使用了简化的写法, record
People2(string Name, int Age); 这样的声明意味着,构造方法有两个参数,分别是 string Name int
Age ,并对应着两个属性,属性的声明方式和 People 一样 public string Name { get; init; } 都是一个
get 一个 init ,对于 record 支持一个 with 表达式,来修改某几个属性的值,这对于有很多属性都相同的
场景来说是及其方便的;

36.说说在Linux系统部署ASP.NET Core项目的步骤。

a. 准备 Linux 系统
b. 安装 ASP.NET Core 的运行时环境(类似于人类生存需要空气和水,那么 ASP.NET Core 程序运行也需要
符合它运行的的环境)
c. 发布 ASP.NET Core 项目(可以直接发布到 Linux 上去,也可以发布成文件系统,然后上传)
d. 上传到 Linux 系统
e. 进入到发布程序的根目录,执行命令:
dotnet run --urls=http://Linux系统的Ip:端口号

37.说说热重载是什么。

热重载由 编辑并继续 ,在不需要停止在代码断点或者重启应用程序的情况下,就可以对代码进行修
改,并可以立即看到代码修改的效果。修改代码后,点击 Vs 上的红色火苗按钮即可。
现在我们可以在 Lambda 表达式中指定 Attribute
var parse3 =[Description("Lambda attribute")](string s) => int.Parse(s);
var choose3 =[Description("Lambda attribute1")]object (bool b) => b ? 1 : "two";

38.说说对于泛型特性的理解。

泛型:不确定的类型,声明时不确定类型,调用时确定类型。可以支持一个类、方法、委托、接口等 类
支持不同类型的需求;那么对于泛型的支持;
C# 10 推广了特性,使得特性可以用泛型,如下例:
public sealed class SomeAttribute : Attribute
{
}  
在使用的时候:
[SomeAttribute]
class A { }  
[SomeAttribute]
class B { }  

39.如何理解鉴权和授权两个词。

鉴权:确定来来访者是谁,解析来访者携带的信息,记录来访这的信息;
授权:鉴权以后,通过来访者的信息内容来分辨是否允许本次返回本次要访问的资源;

40.说说.NET6包含了几大方向的开发?

8 大方向 :
WEB :网站开发
Mobile :手机端开发
Desktop :桌面开发
Microservices :微服务
Cloud :云原生开发
Machin Learning :人工智能
Game Development :游戏开发
Internet of Things :物联网开发

41.如何理解云原生?

云原生:什么是云原生?_云原生到底解决什么问题-CSDN博客

云原生最大的价值和愿景,就是认为未来的软件,会从诞生起就生长在云服务器上,并且遵循一种新的 软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。
第一部分是云应用定义与开发流程。这包括应用定义与镜像制作、配置 CI/CD 、消息和 Streaming 以及 数据库等。
第二部分是云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调 度、服务发现治理、远程调用、API 网关以及 Service Mesh
第三部分是监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、 Tracing 以及在云上 如何实现破坏性测试,也就是混沌工程的概念。
第四部分就是云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。
第五部分是云原生工具集,在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使 用,比如流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。
最后则是 Serverless Serverless 是一种 PaaS 的特殊形态,它定义了一种更为 极端抽象 的应用编写方 式,包含了 FaaS BaaS 这样的概念。而无论是 FaaS 还是 BaaS ,其最为典型的特点就是按实际使用 计费(Pay as you go ),因此 Serverless 计费也是重要的知识和概念。

42.ASP.NET Core应用程序部署IIS,需要准备什么?

需要安装 AspNetCoreMoudleV2

43.如何理解MVC5的管道和ASP.NET Core的管道?

.NET Framework MVC 的管道是通过事件驱动,观察者模式来完成。在 HttpContext 处理的过程中,
定义好事件,然后通过给事件注册行为;请求来了以后,执行事件,从而执行行为,达到扩展目的; ASP.NET Core 中,管道是通过委托来完成的,通过委托的多层嵌套装配,形成一个俄罗斯套娃;请求
来了以后,穿过整个俄罗斯套娃的全部过程;

44.ASP.NET Core设计中,为什么要把把ResourceFilter放在授权 Filter之后,而在其他Filter之前。

ResourceFilter 是用来做缓存的,请求来了以后,如果能取出缓存,也必须是在授权桌,有权限才能取
数据;也是 ResourceFilter 是用来做缓存的,如果有缓存,授权后就可以直接取缓存,就没有必要再去
执行其他的逻辑;如果放在其他 Filter 之后,在执行了其他的 Filter 后取缓存,那么其他的 Filter 执行就没
有价值了。

45.说说优化Core WebApi性能的常见方案

缓存
压缩

46.如何理解MAUI

.NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于创建使用 C# XAML 的本机移动和桌面应 用。
.NET 多平台应用 UI( .NETMAUI) 使你可以使用面向 Android iOS macOS Windows Tizen 的移动 和桌面外形规格的 .net 跨平台 ui 工具包生成本机应用

47.如何在ASP.NET Core中激活Session功能?

首先要添加 session . 其次要在 configservice 方法里面添加 session 。然后又在 configure 方法里面调用 usesession。

48.什么是中间件?

中间件在这里是指注入到应用中处理请求和响应的组件。是通过多个委托来嵌套形成的一个俄罗斯套 娃!

49.ApplicationbuilderUseRun方法有什么区别?

这两个方法都在 StartUp 类的 configure 方法里面调用。都是用来向应用请求管道里面添加中间件的。
Use 方法可以调用下一个中间件的添加,而 run 不会。 run 是终结式的;

50.如何使taghelper在元素这一层上失效?

使用叹号。

51.如何在Controller中注入service

config services 方法中配置这个 service
controller 的构造函数中,添加这个依赖注入。 52. 描述一下依赖注入后的服务生命周期 ?
ASP.NET Core 中,我们不需要关心如何释放这些服务 , 因为系统会帮我们释放掉。有三种服务的生命 周期。
单实例服务, 通过 add singleton 方法来添加。在注册时即创建服务 , 在随后的请求中都使用这一个服 务。
短暂服务 , 通过 add transient 方法来添加。是一种轻量级的服务,用于无状态服务的操作。
作用域服务,一个新的请求会创建一个服务实例。使用 add scoped 方法来添加。

53.说说ASP.NET Core内置容器的特点;

ASP.NET Core 内置容器 IServiceCollection ,只支持构造函数注入;支持三种声明周期:单例、瞬时、 Scoped三种声明周期管理;

54.ASP.NET Core中如何读取静态文件?

可以通过中间件 UseStaticFiles 来配置读取静态文件;

55.ASP.NET Core项目如何设置IP地址和端口号?

可以使用 Properties 文件夹下的 launchSettings 配置文件来配置不同的启动方式的时候,分别配置 IP 和端 口号。

56.ASP.NET Core项目中,wwwroot文件夹内包含什么内容?

包含了 css js js 库、字体文件

57..NET6 中中间件的底层实现和.NET5中间件的区别。

从底层实现没有太大的区别,都是委托的多层嵌套,实现中间件的组装,在 .NET6 中提供了更多的重载
可以来调用;都是基于底层还是转换成委托的多层嵌套式。

58.谈谈对ASP.NET Core kestrel的理解。

Kestrel 是一个跨平台的适用于 ASP.NET Core Web 服务器。 Kestrel Web 服务器,默认包括在 ASP.NET Core 项目模板中。
Kestrel 支持以下方案:
  1. HTTPS
  2. 28
  3. 用于启用 WebSocket 的不透明升级
  4. 用于获得 Nginx 高性能的 Unix 套接字
  5. HTTP/2(除 macOS† 以外)
macOS 的未来版本将支持 †HTTP/2
.NET Core 支持的所有平台和版本均支持 Kestrel 59. 谈谈对 Autofac 的理解;
Autofac 是一个 IOC 容器,支持三种类型的 DI 依赖注入,配置文件配置映射关系,支持 AOP 扩展定制 ;
ASP.NET Core 的使用步骤如下:
1.Nuget 引入 Autofac 程序集
2. Program 类中的 CreateHostBuilder 方法中,通过 .UseServiceProviderFactory(new
AutofacServiceProviderFactory()) 替换容器工厂,把容器替换到框架中;
3. StartUp 中增加 ConfigureContainer 方法,用来配置映射关系
4. 就可以在控制器中配置构造函数注入了

60.ASP.NET Core 如何支持Log4Net扩展?

就是一个日志组件的集成使用,大概分为以下步骤:
1.nuget 引入 log4net 程序集; Microsoft.Extensions.Logging.Log4Net.AspNetCore 程序集合
2. 增加配置文件,配置文件内容如下


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
3. 使用 Log4net 配置
public static IHostBuilder CreateHostBuilder(string[] args)
 {  
 return Host.CreateDefaultBuilder(args) //创建默认主机的建造者;
 .ConfigureLogging(loggbuild =>
 {
 loggbuild = loggbuild.AddLog4Net("CfgFile/log4net.Config");
 })   ///配置logging(指定使用Log4net)
 .ConfigureWebHostDefaults(webBuilder =>   
 {
 webBuilder.UseStartUp(); //如何配置? 配置全交给StartUp来完
成;
 }).UseServiceProviderFactory(new AutofacServiceProviderFactory());
 }
4. 就可以支持注入了,可以在控制器中使用了

61.说说脚本启动ASP.NET Core Web项目

介绍两种方式:
第一种:定位到 Web 项目的编译地址下,就是 bin 文件夹下的 .NET5 文件夹,然后在当前文件夹下打开命
令提示窗口; dotnet dll 文件 ---urls= http://ip 地址:端口号 回车即可;
第二种:定位到 Web 项目的根目录下,然后在当前文件夹下打开命令提示窗口; dotnet run ---urls= http://ip 地址:端口号 回车即可;
推按第二种,第二种方式,在启动的时候,会自动编译项目,然后启动 dll 文件;

62.说说Core WebApiSwagger

Swagger 是一个 Api 说明文档,支持 Api 测试;现在 CoreWebApi 开发使用 swagger 还挺多的;
.NET5 中已经内置了 Core WebApi ;配置流程如下:
1.Nuget 引入程序集: Swashbuckle.AspNetCore.SwaggerGen
2. 配置服务:
public void ConfigureServices(IServiceCollection services)
{ 
   services.AddControllers();
   services.AddSwaggerGen(c =>
   {
     c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication1", Version = 
"v1" });
   });
 }
3. 配置使用中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ 
 app.UseSwagger();
 app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", 
"WebApplication1 v1")); 
}

63. ASP.NET Core中处理路由(Routing)?

ASP.NET Core 中,路由由路由中间件处理。我们可以通过在 Startup 类的 Configure 方法中配置路由规
则,或者使用特性路由来定义控制器和操作方法的路由。

64.说说Core WebApi特性路由。

Core WebApi 中,每一个 Api 必须指定特性路由,即在 Api 或者控制器上标记特性
Route("api/[Controller]/Api") ;访问 Api ,就按照这个格式访问;

65.说说RESTful是什么。

在传统的服务中,比方说 WebService,WCF Remouting ,都是通过调用方法来做到一个进程去调用另外一个进程的服务,在Core WebApi 中是把要调用的服务资源化,比方说有图书资源, Books ,学生资 源Studentlist ,每一个资源对应一个控制器,然后对外提供增删改查等操作;对外提供统一的 Uri, 可以 对资源Books ,资源 Studentlist 做增删改查的操作;访问的是资源,可以根据不同的额访问方式,做不 同的事儿;

66.说说脚本在请求Web CoreApi的时候,为什么会发生跨域问题?

跨域问题:本质是浏览器的行为,浏览器有一个同源策略,同源策略:协议、 IP 地址相同就认为是同 源;否则就非同源;同源策略限定脚本请求只能请求同源的服务器返回的内容才给正常的使用;否则就 会报跨域问题;其实我们在请求Core WebApi 的时候,浏览器直接访问 Api 没有问题,如果是脚本请求, 就会出现跨域问题;

67.如何解决跨域问题?

三种方式:
1. 后台模拟 Http 请求,既然是浏览器的行为,就避开浏览器,先来一个同源的服务器去请求,然后由服
务器模拟 http 请求去请求到 Core WebApi 的资源,然后响应给前端;
public void ConfigureServices(IServiceCollection services)
{
  services.AddControllers();
  services.AddSwaggerGen(c =>
  {
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication1", Version =
"v1" });
  });
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json",
"WebApplication1 v1"));
}
2.JSONP ,思路:通过 html 部分标签发起请求,比方说 等等,发起请求是可以避开同源策略的,使用这 些标签发起请求,然后带有一个回调函数,然后得到请求后,把回调函数之心一次,把数据解析后使 用;
3. 服务端允许跨域,多种方式,可以自己定义中间件支持跨域,只要把响应的 Response 的头信息
Header 中写入 “Access-Control-Allow-Origin” 即可支持跨域;如果需要让所有的 Api 都支持跨域,就可 以写一个中间件从管道处理模型中去支持跨域,如果要选择性的支持跨域,可以使用ActionFilter 来完 成,也可以通过Cors ASP.NET Core 中提供的中间件,可以支持配置不同的跨域规则)来配置支持跨 域;

68.说说你了解到的鉴权授权技术。

1. 传统的授权技术:通过 Session Cookie 完成授权;实现特点 : 让无状态的 http 请求,变的有状态,让 第一次请求和第二次请求之间产生联系,第一次请求进入服务器,在服务器写入一组session ,然后返回
sessionId 给客户端存在 Cookie, 第二次请求,从 cookie 中渠道 SessionId, 传递给服务器,服务器鉴别 SessionId,如果是上一次来的 SessionId, 就认为之前来请求过;就认为有权限;
2. 流行鉴权授权方式: Token 授权,在 Core WebApi 中主要就是 JWT IdentityServer4; 都是独立的授权 中心,授权后办法token ,然后客户端带着 token 去请求 Api,Api 方验证 Token ,验证通过就有权限,验证 不通过就没有权限;

69.请问对gRPC有了解吗,说说gRPC

有了解,说 gRPC 可以先说 RPC,PRC :所谓 RPC(remote procedure call 远程过程调用 ) 框架实际是提供了 一套机制,使得应用程序之间可以进行通信,而且也遵从server/client 模型。使用的时候客户端调用 server端提供的接口就像是调用本地的函数一样。
所谓 gRPC 是由谷歌开发的一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、 Java Go 语言版本,分别是: grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持 .

70.gRPC有几种模式?

四种模式:
1 ,简单模式:简单模式只是使用参数和返回值作为服务器与客户端传递数据的方式,最简单。
2 ,客户端流模式:即从客户端往服务器端发送数据使用的是流,即服务器端的参数为流类型,然而在服 务器相应后返还数据给客户端,使用的也是流的send 方法。一般在服务器端的代码,需要先 recv 再 send,而客户端与此相反。但是在后面的双向模式中可以使用 go 的协程协作。
3 ,服务器端流模式:即服务器端返回结果的时候使用的是流模式,即传入的数据是通过参数形式传入 的。但是在往客户端发送数据时使用send 方法,与客户端返回数据的方式大同小异。
4 ,双向模式:客户端如果不适用协程,那么发送必须在接收之前。如果使用协程,发送与接收并没有先 后顺序。为了保证协程的同步,可以使用互斥量进行约束。

71.说说如何使用C#实现简单模式gRPC

分为客户端和服务端;
服务端:
1. 通过 vs 新建一个 gRPC 服务,会内置一 proto 文件;内容如下,可以理解成是一个模板,通过这个模板 可以生成对应的类文件。
syntax = "proto3"; //规范---标准---工具生成C#
option csharp_namespace = "gRPCDemo.DefaultServer";
package greet;
// The greeting service definition.
service Greeter {
 // Sends a greeting
 rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
 string name = 1;
}
// The response message containing the greetings.
message HelloReply {
 string message = 1;
}
2. 需要让这个文件生效,就必须要在 项目文件 中配置使用这个文件; GrpcServices=“ Server ”, 这是服务端 的配置;
 
   
   
 
3. 编译,就可以通过这个模板生成一些类,包含这些类的方法;
客户端:
1.Vs 新建一个控制台,作为客户端
2. 把服务端的那个 proto 文件,连同文件一起 Copy 到客户端来。
3. 配置客户端的项目文件 , 如下。请注意 GrpcServices=“Client”
 
   
   
 
4. 编译后,编写调用 gRPC 的方法如下:
private static async Task TestHello()
{
     using (var channel = GrpcChannel.ForAddress("https://localhost:5001"))
     {
       var client = new Greeter.GreeterClient(channel);
       var reply = await client.SayHelloAsync(new HelloRequest { Name = "音娱乐行www.520mus.top" });
       Console.WriteLine("Greeter 服务返回数据: " + reply.Message); 
     }
 }

72.说说gRPC的拦截器有哪些?

分为客户端拦截器,和服务端连接器,是 AOP 的编程思想的体现。
分别有:
BlockingUnaryCall :拦截阻塞调用
AsyncUnaryCall: 拦截异步调用
AsyncServerStreamingCall 拦截异步服务端流调用
AsyncClientStreamingCall 拦截异步客户端流调用
AsyncDuplexStreamingCall 拦截异步双向流调用
UnaryServerHandler 用于拦截和传入普通调用服务器端处理程序
ClientStreamingServerHandler 用户拦截客户端流调用的服务端处理程序
ServerStreamingServerHandler 用于拦截服务端流调用的服务器端处理程序
DuplexStreamingServerHandler 用于拦截双向流调用的服务器端处理程序

73.gPRC作为一种被调用的服务,有什么保护安全的措施吗?

有的,可以使用 JWT ,无论是对称可逆加密还是非对称可逆加密,都是可以支持的;

74.说说你知道的ORM框架。

EntityFramework6
EntityFrameworkCore
SqlSugar
FreeSql
DosORM 等等 ~~

75.请问对EFCore有了解吗?

有了解。
Entity Framework Core 是适用于 .NET 的新式物件资料库对应程式。其支援 LINQ 查询、变更追踪、更新 以及结构描述移转。
EF Core 透过 [ 资料库提供者外挂程式模型 ] 来搭配使用 SQL Server/SQL Azure SQLite Azure Cosmos DB、 MySQL PostgreSQL 及更多资料库。。、
private static async Task TestHello()
{
    using (var channel = GrpcChannel.ForAddress("https://localhost:5001"))
    {
      var client = new Greeter.GreeterClient(channel);
      var reply = await client.SayHelloAsync(new HelloRequest { Name = "音娱乐行www.520mus.top " });
      Console.WriteLine("Greeter 服务返回数据 : " + reply.Message);
    }
}

76.说说EFCore查询的性能调优小技巧。

如果说查询出来的数据,只是做展示,不做增删改查,可以在查询的时候,增加 AsNoTracking() 方法,
可以提高性能,可以避免在内存中存在副本;
建议在查询的时候,多使用 Find() 方法,会有限走内存缓存,如果内存已经存在,就不会去数据库中去操
查询数据;

77.EFCore 如果通过数据生成实体和DbContext?

步骤如下:
1.Nuget 引入 如下程序集
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer  
Install-Package Microsoft.EntityFrameworkCore.Tools
2.在Vs中打开工具--nuget包管理器--程序包管理器控制台:命令执行:
Scaffold-DbContext "Data Source=www.520mus.top;Initial Catalog=www.520mus.top;User 
ID=sa;Password=sa123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -Force -
Context 520musDbContext -ContextDir /
注:命令参数应用如下:
命令参数:
-OutputDir *** 实体文件所存放的文件目录
-ContextDir *** DbContext 文件存放的目录
-Context *** DbContext 文件名
-Schemas *** 需要生成实体数据的数据表所在的模式
-Tables *** 需要生成实体数据的数据表的集合
-DataAnnotations
-UseDatabaseNames 直接使用数据库中的表名和列名(某些版本不支持)
-Force 强制执行,重写已经存在的实体文件

78.说说对SaveChanges的理解。

SaveChanges 是以 Context 为维度的一次提交,对于数据库操作的一切动作,只要是在同一个 Context
例,所有的操作,在调用 SaveChanges 方法后,统一体现到数据库中去;

79.说说对EFCoreEntityState的理解。

因为 EFCore 对于数据库的所有操作都是通过上下文 DbContext 来完成的,且是通过 SaveChanges 方法统
一落实到数据库中去的; EntityState EFCore 在对数据库操作增删改的时候,记录当前被操作的数据对
象和 Context 的关系,针对与不同的操作,对应的一个状态信息,一共五种状态;一共五种:
Detached = 0, 当前对象和 context 没有任何关系,没有被上下文跟踪
Unchanged=1 , 当前对象被 context 跟踪,数据没有做任何修改
Deleted=2, 当前对象被 context 跟踪,且标记是数据删除,调用 SaveChanges 后将会从数据中删
除;
Modified=3 当前对象被 context 跟踪,且有属性数据被修改过,调用 SaveChanges 后将会从数据中
修改;
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer  
Install-Package Microsoft.EntityFrameworkCore.Tools
命令参数:
-OutputDir *** 实体文件所存放的文件目录
-ContextDir *** DbContext 文件存放的目录
-Context *** DbContext 文件名
-Schemas *** 需要生成实体数据的数据表所在的模式
-Tables *** 需要生成实体数据的数据表的集合
-DataAnnotations
-UseDatabaseNames 直接使用数据库中的表名和列名(某些版本不支持)
-Force 强制执行,重写已经存在的实体文件 Added=4 当前对象被 context 跟踪,且数据并没有存在数据库中,调用 SaveChanges 后将会新增
到数据库中去;
80. 说说什么是导航属性和引用属性。
实体框架 中的导航属性提供了一种在两个实体类型之间导航关联的方法。 导航属性在概念模型中由
NavigationProperty 元素 (CSDL) 定义。 针对对象参与到其中的每个关系,各对象均可以具有导航属
性。 使用导航属性,您可以在两个方向上导航和管理关系,如果重数为一或者零或一,则返回
EntityReference ,或者如果重数为多个,则返回 EntityCollection 。 也可以选择单向导航,这种情况下
可以删除导航属性。

81.ASP.NET Core管道里面的map拓展有什么作用?

可以针对不同的路径添加不同的中间件。

82.EFCore有几种配置映射方式?

两种:
1. 特性映射
2. 通过 DbContext 中的 OnModelCreating 方法来配置映射;

83..NET中,如果需要在指定的时间或者某个周期内,执行一个操 作,比如清空某个日志表,有哪些方式?

1 、数据库设置定时作业,执行对应的 SQL 语句
2 、编写逻辑,发布成 Windows 服务
3、采用第三方定时作业,比如Quartz , hangfire等

84..NET Core中,WebAPIMinimalAPI有什么区别?

.NET Core 中, WebAPI MinimalAPI 是用于构建 Web 应用程序的两种不同的方法。它们之间的区别在
于开发体验、代码复杂性以及适用场景等方面。
1. WebAPI
WebAPI 是传统的方式,它使用 ASP.NET Core MVC 框架来构建 RESTful 风格的 API 。这种方式
需要在项目中设置控制器、路由和操作等元素来处理 HTTP 请求和响应。
WebAPI 提供了更多的灵活性,可以处理复杂的路由、中间件、过滤器、授权等需求。
它适用于需要灵活性、自定义路由和中间件处理的项目,以及需要构建复杂 API 的场景。
2. MinimalAPI
MinimalAPI .NET 6 中引入的一种新的方式,旨在简化构建小型 API 的过程。它的目标是减少
冗余代码,提供更简洁的开发体验。
使用 MinimalAPI ,你可以在一个文件中定义路由、处理请求和返回响应,从而避免了传统的
控制器和路由配置。
MinimalAPI 适用于构建小型 API 、原型开发、快速验证概念等场景,其中代码量相对较少且不
需要复杂的配置。
总结: 如果你需要更大的灵活性、自定义处理流程,以及复杂的路由和中间件,那么传统的 WebAPI 可能
更适合你。
如果你的项目规模较小、重点在于快速构建和验证概念,或者你希望减少冗余代码,那么可以考虑
使用 MinimalAPI
需要注意的是,根据你的项目需求和团队的偏好,选择适合的方法是很重要的。两种方法都有其优势,
根据具体情况做出选择。

85.开发一个.NET Core Web应用时,我们可以通过静态文件中间件 将静态资源存放在站点目录中,然后通过http路径进行访问,那么存 放在站点目录有什么问题,有哪些需要考虑的?

需要考虑部署问题,单机部署站点这种方式 OK ,但是如果做了负载均衡,会存在图片资源在各个服务器 比较分散的情况,从而出现资源404

86.什么是负载均衡,以及如何做负载均衡?

负载均衡是一种分布式系统设计中常用的技术,用于在多个服务器或计算资源之间均匀分配工作负载,
以提高系统的性能、可伸缩性和可靠性。以下是几种常见的负载均衡方法和策略:
1. 硬件负载均衡器 : 使用专门的硬件设备(负载均衡器)来分发流量到多台服务器。这些设备可以智
能地根据服务器的负载情况进行流量分配,通常支持多种负载均衡算法。
2. 软件负载均衡器 : 在应用层使用软件来实现负载均衡。例如,使用反向代理服务器(如 Nginx
Apache )来分发流量到不同的后端服务器。
3. DNS 负载均衡 : 通过 DNS 服务器将请求分发到多个服务器的不同 IP 地址上。这种方式需要配置 DNS
解析来映射不同的域名或子域名到多个服务器 IP 地址。

87.网页开发中,一般都是前端主动发起请求,通过后端获取最新数 据,如果需要实现实时展示最新数据的功能,比如智慧大屏的动态效 果,如何实现?

可以通过实时通信技术来实现, .NET Core 提供了一个很方便的库, SignalR ,可以实现大屏动态效果

    会这些面试可能也没得个 没有全日制的本科慎重选行 十年一线开发的建议

C#.NET基础笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

C#.NET高级笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-CSDN博客

MySQL面试题 2024 金九银十 最新 C# 高级 资深 DB 八股文-CSDN博客

国产精品ORM框架-SqlSugar详解 SqlSugar初识 附案例源码 云草桑 专题一_sqlsuger进阶-CSDN博客

C#高级开发 线上面试题20240711_c# 开发高级面试题-CSDN博客

Redis高频面试题-CSDN博客

数据库SqlServer笔试题_sqlserver 笔试题-CSDN博客

WPF 2024 金九银十 最新 高级 架构 面试题 C#_wpf 面试题-CSDN博客

WPF UI交互专题 界面结构化处理 查看分析工具Snoopy 逻辑树与视觉树 平面图像 平面图形 几何图形 弧线 01_wpf逻辑树和视觉树代码-CSDN博客

你可能感兴趣的:(.net,C#,面试,.net,C#,.net,core,面试题,金九银十)