.NET Core面试题

持续更新中......

1、依赖注入的方式
     a、Setter注入:指在客户类中,设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员
          private IServiceClass _serviceImpl;
          public void Set_ServiceImpl(IServiceClass serviceImpl)
          {
                 this._serviceImpl = serviceImpl;
          }
     b、构造注入:指在客户类中,设置一个服务类接口类型的数据成员,并以构造函数为注入点,这个构造函数接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员;即通过客户类的构造函数,向客户类注入服务类实例;由于构造注入只能在实例化客户类时注入一次,所以一点注入,程序运行期间是没法改变一个客户类对象内的服务类实例的
     c、依赖获取:指在系统中提供一个获取点,客户类仍然依赖服务类的接口。当客户类需要服务类时,从获取点主动取得指定的服务类,具体的服务类类型由获取点的配置决定;结合反射使用
     d、IoC容器:.NET平台上有Spring.NET和Unity等


2、.NET Core有哪些好的功能
     a、依赖注入
     b、日志系统架构
     c、使用startup来注册服务
     d、使用appsettings来配置工程
     e、使用命令行创建应用
     f、更好的支持异步编程
     g、支持web socket和signal IR
     h、对于跨网站的请求的预防和保护机制
     i、引入了一个跨平台的网络服务器,kestrel。可以没有iis、 apache和nginx就可以单独运行。Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。 Kestrel 是包含在 ASP.NET Core 项目模板中的 Web 服务器,默认处于启用状态。

3、ASP.NET Core跟ASP.NET比较有哪些更好的地方
     a、跨平台,它可以运行在三大操作系统上面,windows, Linux和MAC
     b、对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起
     c、ASP.NET Core处理请求的效率更高,能够处理更多的请求
     d、ASP.NET Core有更多的安装配置方法

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

5、startup 类的configservice方法有什么作用
    用以配置应用的服务;在这个方法里我们可以添加一些service进入依赖注入容器。比如数据库连接池,mvc、swagger、controllers、filter、jwt、请求头,以及自己定义的接口。
    服务是一个提供应用功能的可重用组件。 在 ConfigureServices 中注册服务,并通过依赖关系注入 (DI) 或 ApplicationServices 在整个应用中使用服务。
    最重要的参数为:IServiceCollection services

6、startup 类的configure方法有什么作用
    用以创建应用的请求处理管道;这个方法来定义整个应用如何响应HTTP请求。
    它有几个比较重要的参数,IApplicationBuilder,Hosting environment,logfactory, 在这里我们可以配置一些中间件用来处理路径,验证和session等等。

7、ASP.NET Core里面的路径是如何处理的
    路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。
    a、常规路径处理:用MapRoute的方式设定调用路径
    b、属性路径处理:在调用函数的上方设定一个路径属性

8、ASP.NET Core工程里面有多少个工程文件
    Program、Startup、launchsetting、appsettings

9、什么是ASP.NET Core里面的taghelper
    Taghelper用来在服务器端使用Razor视图引擎创建html元素的。

10、.NET5中 __ViewStart文件的作用
     在控制器在返回视图的时候,开始替换视图引擎的时候,从_ViewStart.cshtml 开始,来初始化展示的视图界面;视图views的入口文件。

11、如何在Controller中注入service
      a、在startup类的configservices方法中配置/注册这个service
      b、在controller的构造函数中,添加这个依赖注入

12、依赖注入后的服务生命周期
      在ASP.NET Core中,我们不需要关心如何释放这些服务,因为系统会帮我们释放掉。
      a、单实例服务, 通过add singleton方法来添加。在注册时即创建服务, 在随后的请求中都使用这一个服务。
      b、短暂服务, 通过add transient方法来添加。是一种轻量级的服务,用于无状态服务的操作。
      c、作用域服务,一个新的请求会创建一个服务实例。使用add scoped方法来添加。

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

14、ASP.NET Core项目如何设置IP地址和端口号
      可以使用Properties文件夹下的launchSettings配置文件来配置不同的启动方式的时候,分别配置IP和端口号。

15、ASP.NET Core项目中,wwwroot文件夹内包含什么内容
     包含了css、js、js库、字体文件

16、对Autofac的理解
      Autofac是一个IOC容器,支持三种类型的DI依赖注入(构造函数注入,属性注入,基于lambda表达式创建实例),配置文件配置映射关系,支持AOP扩展定制。

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

18、RESTful
      restful其实就是一套编写api接口的设计风格和开发方式,规定如何编写以及如何设置返回值、状态码等信息。
      特点:
          a、每一个URI代表1种资源;
          b、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
          c、通过操作资源的表现形式来操作资源;
          d、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。 

19、跨域问题
      跨域问题:本质是浏览器的行为,浏览器有一个同源策略。
      同源策略:协议、IP地址相同就认为是同源,否则就非同源;同源策略限定脚本请求只能请求同源的服务器返回的内容才给正常的使用,否则就会报跨域问题;其实我们在请求Core WebApi的时候,浏览器直接访问Api没有问题,如果是脚本请求,就会出现跨域问题。
      解决跨域问题的方式:
          a、后台模拟Http请求,既然是浏览器的行为,就避开浏览器,先来一个同源的服务器去请求,然后由服务器模拟http请求去请求到Core WebApi的资源,然后响应给前端;
          b、JSONP
          c、服务端允许跨域:可以自己定义中间件支持跨域,只要把响应的Response的头信息Header中写入“Access-Control-Allow-Origin” 即可支持跨域;如果需要让所有的Api都支持跨域,就可以写一个中间件从管道处理模型中去支持跨域;如果要选择性的支持跨域,可以使用ActionFilter来完成;也可以通过Cors(ASP.NET Core中提供的中间件,可以支持配置不同的跨域规则)来配置支持跨域。

20、鉴权授权技术
     a、通过Session、Cookie完成授权:让无状态的http请求,变的有状态,让第一次请求和第二次请求之间产生联系;第一次请求进入服务器,在服务器写入一组session,然后返回sessionId给客户端保存在Cookie中,第二次请求,从cookie中取到SessionId,传递给服务器,服务器鉴别SessionId,如果是上一次来的SessionId,就认为之前来请求过,就认为有权限。
     b、通过Token授权:在Core WebApi中主要就是JWT和IdentityServer4;都是独立的授权中心,授权后颁发token,然后客户端带着token去请求Api,Api方验证Token,验证通过就有权限,验证不通过就没有权限。

21、gRPC
     RPC框架:远程过程调用(remote procedure call),提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。
     gRPC是由谷歌开发的一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。
     四种模式:
        a、简单模式:简单模式只使用参数和返回值作为服务器与客户端传递数据的方式,最简单。
        b、客户端流模式:即从客户端往服务器端发送数据使用的是流,即服务器端的参数为流类型,然而在服务器响应后返还数据给客户端,使用的也是流的send方法。一般在服务器端的代码,需要先receive再send,而客户端与此相反。但是在后面的双向模式中可以使用go的协程协作。
        c、服务器端流模式:即服务器端返回结果的时候使用的是流模式,即传入的数据是通过参数形式传入的。但是在往客户端发送数据时使用send方法,与客户端返回数据的方式大同小异。
        d、双向模式:客户端如果不适用协程,那么发送必须在接收之前。如果使用协程,发送与接收并没有先后顺序。为了保证协程的同步,可以使用互斥量进行约束。
     gRPC作为一种被调用的服务,可以使用JWT作为保护安全的措施,无论是对称可逆加密还是非对称可逆加密,都是可以支持的。

22、EF Core
      EF Core 是一个ORM(对象关系映射)框架 。
      EF Core查询的性能调优小技巧:
         a、使用DbContext池
         b、优先使用异步方法
         c、批处理语句
         d、关闭状态追踪,AsNoTracking()
         e、关闭状态同步,context.ChangeTracker.AutoDetectChangesEnabled = false

23、对EF Core中SaveChanges的理解
     SaveChanges是以Context为维度的一次提交,对于数据库操作的一切动作,只要是在同一个Context实例的所有的操作,在调用SaveChanges方法后,统一提交到数据库中去。

24、对EF Core中EntityState的理解
     EntityState是EF Core 在对数据库操作增删改的时候,记录当前被操作的数据对象和Context的关系。
         a、Detached = 0,  当前对象和context没有任何关系,没有被上下文跟踪
         b、Unchanged=1,当前对象被context跟踪,数据没有做任何修改
         c、Deleted=2,当前对象被context跟踪,且标记是数据删除,调用SaveChanges后将会从数据中删除
         d、Modified=3,当前对象被context跟踪,且有属性数据被修改过,调用SaveChanges后将会从数据中修改
         e、Added=4,当前对象被context跟踪,且数据并没有存在数据库中,调用SaveChanges后将会新增到数据库中去

25、EF Core的导航属性
      a、集合导航属性:主表中对子表相关数据的引用
      b、引用导航属性:子表中对主表数据的引用
      c、反转导航属性:一个导航属性对应的另一端的导航属性

26、什么是中间件
     中间件指注入到应用中处理请求和响应的组件。
     微软的解释:中间件是一种装配到应用管道以处理请求和响应的软件。
     每个组件选择是否将请求传递到管道中的下一个组件,可在管道中的下一个组件前后执行工作。
     请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值