### .Net 面试题整理
#### 模块划分
- .netcore框架部分
- c#基础部分
- Linux部分
- clr部分
- 中间件部分
- 数据库部分
- 架构设计部分
- 算法部分
#### .netcore框架面试题
第二题,asp dot core有哪些好的功能?
1. 是依赖注入。
2. 是日志系统架构。
3. 是引入了一个跨平台的网络服务器,kestrel。可以没有iis, apache和nginx就可以单独运行。
4. 是可以使用命令行创建应用。
5. 是使用APP settings json file来配置工程。
6. 是使用start up来注册服务。
7. 是更好的支持异步编程。
8. 是支持web socket和signal IR。
9. 是对于跨网站的请求的预防和保护机制。
第三题,dot net core跟dot net比较有哪些更好的地方?
1.是跨平台,它可以运行在三大操作系统上面,windows, Linux和MAC。
2.是对架构本身安装没有依赖,因为所有的依赖都跟程序本身在一起。
3.是dot net core处理请求的效率更高,能够处理更多的请求。
4.是dot net core有更多的安装配置方法。
第四题什么是meta packages?
Meta packages是指包含所有ASP dot net code依赖的一个包。叫做Microsoft.AspNetCore
第五题,don net core应用能够跟dot net 4.x架构一起工作吗?
可以。Dot net core应用可以跟标准的dot net 库一起工作。
第六题,什么是dot net core的startup class?
Startup class是dot net core应用的入口。所有的dot net core应用必须有这个class。这个类用来配置应用。这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义。
第七题, Startup class的config service方法有什么作用?
在这个方法里我们可以添加一些service进入依赖注入容器。
第八题,startup class的configure方法有什么作用?
这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,application builder,Hosting environment, logo factory, 在这里我们可以配置一些中间件用来处理路径,验证和session等等。
第九题,什么是中间件?
中间件在这里是指注入到应用中处理请求和响应的组件。
第十题,application builder的use和run方法有什么区别?
这两个方法都在start up class的configure方法里面调用。都是用来向应用请求管道里面添加中间件的。Use方法可以调用下一个中间件的添加,而run不会。
第十一题,dot net core 管道里面的map拓展有什么作用?
可以针对不同的路径添加不同的中间件。
第十二题,dot net core里面的路径是如何处理的?
路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。
主要有两种路径处理方式, 常规路径处理和属性路径处理。常规路径处理就是用MapRoute的方式设定调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。
第十三题,如何在dot net core中激活session功能?
首先要添加session包. 其次要在config service方法里面添加session。然后又在configure方法里面调用usesession。
第十四题,dot net core工程里面有多少个工程文件?
global, launch setting,app settings,bundle config,bower, package。
第十五题,什么是dot net core里面的tag helper?
Tag helper用来在服务器端使用Razor视图引擎创建html元素的。
第十六题, 如何使tag helper在元素这一层上失效?
使用叹号。
第十七题,什么是Razor页面?
是dot net core中支持ASP网页表格的一种开发模型。@page 作为页面的起始标志。
第十八题,如何在Razor页面中实现数据模型绑定?
使用bindproperty属性。
第十九题, 如何在controller中注入service?
在config services方法中配置这个service。
在controller的构造函数中,添加这个依赖注入。
第二十题,描述一下依赖注入后的服务生命周期?
在dot net core中,我们不需要关心如何释放这些服务, 因为系统会帮我们释放掉。有三种服务的生命周期。
单实例服务, 通过add singleton方法来添加。在注册时即创建服务, 在随后的请求中都使用这一个服务。
短暂服务, 通过add transient方法来添加。是一种轻量级的服务,用于无状态服务的操作。
作用域服务,一个新的请求会创建一个服务实例。使用add scoped方法来添加。
Startup里面有哪些方法,分别是用来做什么的
EF的封装,多数据源,扩展表达式,怎么生成数据库, 如果要提升效率有哪些注意点
.net core 部署在linux下如何做,同时监听多个端口怎么做
linux问题
怎么处理时区,怎么查找程序装在哪里,centos不维护了怎么办
cicd怎么处理
.net core 怎么解决跨域问题
.netcore2.2的路由和3.1有什么区别
怎么接入Autofac,把ioc容器换了
#### C# 基础面试题
● 继承,接口,抽象类,引用,ref out,代理,反射,事件
● C#有几种委托,区别是什么
● C#有哪些集合类,这些类的区别是什么
● 泛型,有哪些约束条件
● 元组
● 表达式树怎么封装
● 扩展方法是什么,怎么用
● 什么是PLinq,他是如何工作的
● Task是什么,怎么使用,和ThreadPool的区别是什么
● TaskSchedule是什么,怎么工作
● Async和Await是做什么的
● 怎么用c#实现订阅发布模式
● 怎么用c#实现事件委托模型
C#有几种委托,区别是什么
https://www.cnblogs.com/xiao-qian/p/12688043.html
2.1 delegate
public delegate int TestDelegate(int x, int y);
2.2 Action
Action是无返回值的泛型委托。
Action 表示无参,无返回值的委托
Action<int,string> 表示有传入参数int,string无返回值的委托
2.3 Func
Func是有返回值的泛型委托
Func<int> 表示无参,返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
2.4 predicate
predicate 是返回bool型的泛型委托
predicate<int> 表示传入参数为int 返回bool的委托。
2.5 四者之间的区别
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Action至少1个参数,至多4个参数,无返回值,
Func至少0个参数,至多4个参数,根据返回值泛型返回。必须有返回值,不可void
Predicate至少1个参数,至多1个参数,返回值固定为bool
1、值类型与引用类型
值类型:struct、enum、int、float、char、bool、decimal
引用类型:class、delegate、interface、array、object、string
2、装箱与拆箱
装箱:把值类型转换成引用类型
拆箱:把引用类型转换成值类型
装箱:对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。
(1)第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针。
(2)第二步:将值类型的实例字段拷贝到新分配的内存中。
(3)第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。
在装箱时是不需要显式的类型转换的,不过拆箱需要显式的类型转换。
3、堆和栈
存放在栈中时要管存储顺序,保持着先进后出的原则,他是一片连续的内存域,有系统自动分配和维护;
堆是无序的,他是一片不连续的内存域,有用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。
栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放。而堆则需要GC清理。
使用引用类型的时候,一般是对指针进行的