面试必问的问题集
-
EF 中DBContext是线程安全的吗?
不是线程安全的,因为在一个同一时刻,一个上下文只能执行一个异步方法实体状态改变, 对应一个上下文,不能跨上下文修改实体状态,也不能跨上下文应用实体状态 什么是线程安全呢? 线程安全,指某个函数、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成
-
EF怎么做查询优化
1. 适时的使用AsNoTracking()进行数据查询 2. 使用Any()判断值是否存在 3. 最后一步才使用ToList 4. 建立适当的索引 5. 优化SQL语句
-
索引的使用,索引未命中怎么办?在什么情况下会未命中
哪些情况需要建立索引? 1. 主键自动建立唯一索引,查询与其它表关联的字段,外键关系建立索引 2. 有大量重复值且经常有范围查询和排序、分组的列,或者经常频繁访问的列,或者返回 大量数据记录时考虑建立聚集索引 3. 精确匹配的查询搜索条件(where)中经常使用的列需要建立索引
-
DotNet Core中有哪几种注入方式
Sington 每次都获取同一个实例 Scope 每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例 AddTransient 每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
-
深Copy和浅Copy的区别
浅拷贝:只对值类型(或string)类型分配新的内存地址。引用类型仍指向原来的地址。所以引用 类型浅拷贝后,对拷贝对象操作仍会影响原始对象。 深拷贝:拷贝到了指针指向的内存块的值,拥有新的内存地址
-
中间件和Filter的区别
Asp.net Core五类过滤器: Authorization Filter、Resource Filter、Acton Filter、Exception Filter、 Result Filter。(授权、资源、操作、异常、结果)优先级逐次递减。 过滤器更贴近业务,它关注与应用程序本身;而中间件是一个可以处理HTTP请求或响应的软件管道。
-
Task和Thread的区别
Thread 类主要用于实现线程的创建以及执行。Task 类表示以异步方式执行的单个操作。 1.Task 是基于 Thread 的,是比较高层级的封装,Task 最终还是需要 Thread 来执行 2.Task 默认使用后台线程执行,Thread 默认使用前台线程 3.Task 可以有返回值,Thread 没有返回值 4.Task 可取消任务执行,Thread 不行 5.Thread 在父方法上获取不到异常,而 Task 可以。
-
Lock的使用
-
Dictionary和ConcurrentDictionary的区别
ConcurrentDictionary是线程安全的集合,可以由多个线程同时并发读写Key-value Dictionary不是线程安全的
-
Https和Http的区别
http 明文传输,数据都是未加密的安全性较差。https(ssl+http) 数据传输过程是加密的,安全性较好。 https需要证书。http 页面响应速度比 https 快 http 和 https 使用的是完全不同的连接方式,用的端口也不一样, 前者是 80,后者是 443。(http工作在TCP 协议,默认80端口)
-
TCP和UDP的区别
TCP是面向连接的,要求系统资源比较多,有三次握手确认机制,可靠稳定。比较安全 UDP是无状态连接的,程序结构较简单,要求资源较少,所以传输数据比较快,但容易 丢包(常用于视频直播)
-
使用过哪些设计模式?普通工厂和抽象工厂有什么区别
工厂模式;单例模式 简单工厂:是由一个工厂对象创建产品实例,一般是使用静态方法。 抽象工厂:将公共的方法抽象出来,想创建什么样的产品,只需要实现这些接口就可以得到不同的产品。