net开发高级面试题2021_net面试题2021

net开发高级面试题2021_net面试题2021文章目录1.NET/dotnetcore/.NETframework的关系2.corefx,coreclr都是什么?3.asp.netcore3.1Kestrel3.2asp.netcore主要的特性3.3startupclass的作用?3.4Startupclass的configservice方法有什么作用?3.5startupclass的configure方法有什么作用?3.6什么是metapackages?3.7什么是中间件?3.8application


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

2021 .NET/dotnet Core/C# 面试题及参考答案.

文章目录

1. NET/dotnet core/.NET framework 的关系?

先看 2 张图
最新的.NET 5 的示意图
.NET 5
之前的(dotnet core3.x 时代)的示意图
dotnet core .3.1
总结如下:

  1. 2016 年开始,分开了.NET Framework 和.NET Core,后者开源、面向跨平台应用;
  2. 2019 年,.NET Framework 和.NET Core 被.NET5 完成了统一。未来只会有一个.NET,可以支持 Windows、Linux、macOS、iOS、Android、tvOS、watchOS 和 WebAssembly,等等
  3. .Net standard library 是之前.NET Framework 和.NET Core 公共的部分;

2. corefx, coreclr 都是什么?

dotnet 组织包含了.NET Core 的核心代码, 包括 coreclr 和 corefx 等.

  1. coreclr 是运行时代码,
  2. corefx 是各种基础类库的代码. CoreFX 主要包含数个公共库,例如 System.Collections, System.IO, System.Xml 等。

3. asp.net core

3.1. Kestrel

Kestrel 是 asp.net core 引入的跨平台的网络服务器,是默认配置。可以没有 iis, apache 和 nginx 就可以单独运行。
Kestrel 基于 libuv 实现;(node.js 也是基于 libuv)

3.2. asp.net core 主要的特性

  1. 依赖注入。
  2. 日志系统架构。
  3. 引入了一个跨平台的网络服务器,kestrel。可以没有 iis, apache 和 nginx 就可以单独运行。
  4. 可以使用命令行创建应用。
  5. 使用 AppSettings.json 来配置工程。
  6. 使用 start up 来注册服务。
  7. 更好的支持异步编程。
  8. 支持 web socket 和 signal IR。
  9. 对于跨网站的请求的预防和保护机制。

3.3. startup class 的作用?

Startup class 是 dot net core 应用的入口。所有的 dot net core 应用必须有这个 class。这个类用来配置应用。这个类的调用是在 program main 函数里面进行配置的。类的名字可以自己定义。

3.4. Startup class 的 config service 方法有什么作用?

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

3.5. startup class 的 configure 方法有什么作用?

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

3.6. 什么是 meta packages?

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

3.7. 什么是中间件?

中间件在这里是指注入到应用中处理请求和响应的组件。asp.net core 的中间件模型也是洋葱模型(和 node.js d Koa 一样)

3.8. application builder 的 use 和 run 方法有什么区别?

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

3.9. dot net core 管道(pipeline)里面的 map 拓展有什么作用?

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

public void Configure(IApplicationBuilder app)
{ 
   
  app.Map("/path1", Middleware1);
  app.Map("/path2", Middleware2);
}

3.10. 如何在 dot net core 中激活 session 功能?

  1. 首先要添加 session 包.
  2. 其次要在 config service 方法里面添加 session。
  3. 然后又在 configure 方法里面调用 usesession。

3.11. 如何在 controller 中注入 service?

依赖注入的思想:

  1. 在 config services 方法中配置这个 service。
  2. 在 controller 的构造函数中,添加这个依赖注入。

3.12. dot net core 里面的路径是如何处理的?

路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。

主要有两种路径处理方式:

  1. 常规路径处理就是用 MapRoute 的方式设定调用路径
  2. 属性路径处理是指在调用函数的上方设定一个路径属性。

3.13. application builder 的 use 和 run 方法有什么区别?

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

3.14. 依赖注入后的服务生命周期?

在 dot net core 中,我们不需要关心如何释放这些服务, 因为系统会帮我们释放掉。有三种服务的生命周期。

  1. 单实例服务, 通过 add singleton 方法来添加。在注册时即创建服务, 在随后的请求中都使用这一个服务。
  2. 短暂服务, 通过 add transient 方法来添加。是一种轻量级的服务,用于无状态服务的操作。
  3. 作用域服务,一个新的请求会创建一个服务实例。使用 add scoped 方法来添加。

3.15. 什么么是 Razor 页面?

是 dot net core 中支持 ASP 网页表格的一种开发模型。@page 作为页面的起始标志。可以看做是 asp.net core 使用的模板引擎。

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

使用 bindproperty 属性。

3.17. Server.Transfer 和 Response.Redirect 的区别是什么

  1. Server.Transfer 仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
  2. Response.Redirect 则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

3.18. API,什么时候用 Get/Post/Put/Delete

  1. GET: 查询
  2. POST :创建对象
  3. PUT: 修改对象
  4. DELETE:删除

4. C#

4.1. 一个单例(Singleton)类

单线程下的简单实现:

public MySingleton
{ 
   
  private MySingleton(){ 
   }	// 禁止被实例化
  public readonly static MySingletonInstance = new MySingleton();	// 程序加载时就会初始化
}

线程安全的加锁双检查

public class MySingleton
{ 
   
    private static MySingleton _instance = null;
    private static readonly object SynObject = new object();

    MySingleton() { 
    }

    public static MySingleton Instance
    { 
   
        get
        { 
   
            if (null == _instance)
            { 
   
                lock (SynObject)
                { 
   
                    if (null == _instance)
                    { 
   
                        _instance = new MySingleton();
                    }
                }
            }
            return _instance;
        }
    }
}

4.2. abstract class 和 interface 有什么区别?

相同点:都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:

  1. 接口支持多继承;抽象类不能实现多继承。
  2. 接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
  3. 接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
  4. 抽象类可以定义字段、属性、包含有实现的方法。

4.3. 是否可以继承 String 类?

String 类是 sealed 类故不可以继承。

4.4. StringBuilder 和 String 的区别?

String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String。
但是简单的字符拼接,String 还是首选。(100?次以内用 String,以上用 StringBuilder)

4.5. 什么情况下会用到虚方法?它与接口有什么不同?

  1. 子类重新定义父类的某一个方法时,必须把父类的方法定义为 virtual
  2. 在定义接口中不能有方法体,虚方法可以。
  3. 实现时,子类可以不重新定义虚方法,但如果一个类继承接口,那必须实现这个接口。

4.6. string、String;int、Int32;Boolean、bool 的区别

String、Int32、Boolean 等都属于.Net 中定义的类,而 string、int、bool 相当于 C#中对这些类定义的别名。CTS。

4.7. private、 protected、 public、 internal 修饰符的访问权限。

  1. private : 私有成员, 在类的内部才可以访问。
  2. protected : 保护成员,该类内部和继承类中可以访问。
  3. public : 公共成员,完全公开,没有访问限制。
  4. internal: 当前程序集内可以访问。

4.8. C#中的委托是什么?事件是不是一种委托?事件和委托的关系。

委托可以把一个方法作为参数代入另一个方法,可以理解为指向一个函数的指针。
换个说法来解释,委托就是函数指针,事件就是保存多个函数指针的数组。

事件和委托的区别如下:

  1. 事件只能在方法的外部进行声明,而委在方法的外部和内部都可以声明。
  2. 事件只能在类的内部触发,不能在类的外部触发。而委托在类的内部和外都都可以触发。
  3. 委托一般用于回调,而事件用于外部接口。例如在观察者模式中,在被观察者中可以声明一个事件作为外部观察者注册的接口。

4.9. override 与重载(overload)的区别

  1. 重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。
  2. Override 是进行基类中函数的重写。Override 是面向对象的概念

4.10. 什么是装箱(boxing)和拆箱(unboxing)

装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型。

——–END——–

参考:
https://www.webtrainingroom.com/interview/asp-net-core-interview-questions-answers > https://www.talkingdotnet.com/asp-net-core-interview-questions/


—————- END —————-


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/174305.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 诺基亚面向开发商推出下一代手机游戏平台

    诺基亚面向开发商推出下一代手机游戏平台转自:新浪游戏http://tech.sina.com.cn/t/2005-12-21/1748799015.shtml 北京时间12月21日消息,在下一代手机游戏研讨会上,芬兰移动通信巨头诺基亚公司首次向16家诺基亚第一批游戏开发商展示了其下一代手机游戏开发平台。下一代手机游戏研讨会于2005年12月1日到2日在赫尔辛基举行,于12月7日到8日在温哥华举行。 通过下一代手机游

    2022年5月18日
  • GSLB调度服务原理

    GSLB调度服务原理GSLB,全局负载均衡(GlobalServerLoadBalancing),主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)。是对物理集群的负载均衡,不止是简单的流量均匀分配,还会根据应用场景的不同来制定不同的策略。本文将讨论GSLB的几种实现,并介绍调度服务实现的大体情况。

    2022年6月11日
  • Java编程——九九乘法表

    Java编程——九九乘法表使用Java语言实现九九乘法表的输出,这里利用的是for循环实现输出九九乘法表。最后输出使用的是print而不是println,注意两者的区别。简单来说,就是println在输出一个语句结束之后会自动换行,而print在输出一个语句结束之后不会自动换行。可根据代码的不同做出合适的调整,实现不同的输出结果。publicclassdemo7{publicstaticvoidmain(String[]args){for(inti=1;i<=9;i+

    2022年7月15日
  • tar打包绝对路径文件[通俗易懂]

    tar打包绝对路径文件[通俗易懂]当使用tar打包绝对路径文件时会警告:tar:Removingleading`/’frommembernames[user_00@CoalaaHK1~]$tar-zcvftest2.tar.gz/home/user_00/wade/testtar:Removingleading`/’frommembernames/home/user_00/wade/test/…

    2022年5月31日
  • 集合和数组的相互转换

    集合和数组的相互转换集合和数组相互转换很多时候API的方法只支持集合或数组,比如适配器类中的数据只支持集合,这时候我们就要把数组转换集合。

    2022年6月16日
  • linux修改文件权限的命令_chmod递归修改目录权限

    linux修改文件权限的命令_chmod递归修改目录权限当在ubuntushell下键入ls-lh时,会列出该目录下的文件,如:而每个文件显示前都有类似红框里的内容,这些东西代表的含义是:-代表文件d代表目录,也就是文件夹之后有三组字符的编码,每一组定义了3种访问权限r代表对象是可读的w代表对象是可写的x代表对象是可执行的若没有某种权限,在该权限为会出现单破折线,这三组权限分别…

    2022年9月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号