大家好,又见面了,我是你们的朋友全栈君。
先看 2 张图 最新的.NET 5 的示意图
之前的(dotnet core3.x 时代)的示意图
总结如下:
dotnet 组织包含了.NET Core 的核心代码, 包括 coreclr 和 corefx 等.
Kestrel 是 asp.net core 引入的跨平台的网络服务器,是默认配置。可以没有 iis, apache 和 nginx 就可以单独运行。 Kestrel 基于 libuv 实现;(node.js 也是基于 libuv)
Startup class 是 dot net core 应用的入口。所有的 dot net core 应用必须有这个 class。这个类用来配置应用。这个类的调用是在 program main 函数里面进行配置的。类的名字可以自己定义。
在这个方法里我们可以添加一些 service 进入依赖注入容器。
这个方法来定义整个应用如何响应 HTTP 请求。它有几个比较重要的参数,application builder,Hosting environment, logo factory, 在这里我们可以配置一些中间件用来处理路径,验证和 session 等等。
Meta packages 是指包含所有 ASP dot net code 依赖的一个包。叫做 Microsoft.AspNetCore.All
中间件在这里是指注入到应用中处理请求和响应的组件。asp.net core 的中间件模型也是洋葱模型(和 node.js d Koa 一样)
这两个方法都在 start up class 的 configure 方法里面调用。都是用来向应用请求管道里面添加中间件的。Use 方法可以调用下一个中间件的添加,而 run 不会。
可以针对不同的路径添加不同的中间件。
public void Configure(IApplicationBuilder app)
{
app.Map("/path1", Middleware1);
app.Map("/path2", Middleware2);
}
依赖注入的思想:
路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。
主要有两种路径处理方式:
这两个方法都在 start up class 的 configure 方法里面调用。都是用来向应用请求管道里面添加中间件的。Use 方法可以调用下一个中间件的添加,而 run 不会。
在 dot net core 中,我们不需要关心如何释放这些服务, 因为系统会帮我们释放掉。有三种服务的生命周期。
是 dot net core 中支持 ASP 网页表格的一种开发模型。@page 作为页面的起始标志。可以看做是 asp.net core 使用的模板引擎。
使用 bindproperty 属性。
单线程下的简单实现:
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;
}
}
}
相同点:都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
String 类是 sealed 类故不可以继承。
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String。 但是简单的字符拼接,String 还是首选。(100?次以内用 String,以上用 StringBuilder)
String、Int32、Boolean 等都属于.Net 中定义的类,而 string、int、bool 相当于 C#中对这些类定义的别名。CTS。
委托可以把一个方法作为参数代入另一个方法,可以理解为指向一个函数的指针。 换个说法来解释,委托就是函数指针,事件就是保存多个函数指针的数组。
事件和委托的区别如下:
装箱:从值类型接口转换到引用类型。 拆箱:从引用类型转换到值类型。
——–END——–
参考: https://www.webtrainingroom.com/interview/asp-net-core-interview-questions-answers > https://www.talkingdotnet.com/asp-net-core-interview-questions/
—————- END —————-
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174305.html原文链接:https://javaforall.cn