.netcore/.net6/.net7面试题汇总
嗨,你好,陌生人,你的头发掉光了么ლ(′◉❥◉`ლ),哈,我的还在,气人不。已经好久没有更新此文章了,最近很荣幸在公司给大家做了.net7开发实战培训,一共8节,已经顺利结课,非常感谢各位同事的支持。培训之后忽然想到这篇文章还没有补全,然后又到了一年一度金三银四的季节,所以接下来要完善一下此文章,希望可以帮助到大家(有些问题还没补全答案,如果没有大家先思考一下怎么回答,如果你有更好的问题或者答案,欢迎在下方评论)。
目前楼主在备考高项(已获取PMP,ACP证书),要是你也在考,我们可以一起交流学习。
先说一下我培训课程的目录:net7入门,依赖注入,中间件,Orm,DDD,Identity,docker,微服务入门。下面的问题也会在我的PPT中找到。
【腾讯文档】.net7培训课程
https://docs.qq.com/pdf/DYml2WmtKR1hQblRh?
【项目】git地址:
https://gitee.com/seven-lu/IntelliRay.git
net7面试题
1、.netcore框架为什么可以跨平台?
2、net7的启动过程是core框架的核心,请简要说明net7的启动过程。
3、如何获取appsetting配置文件中的数据?
4、请说明你对restfulapi风格的理解。
5、什么是依赖注入?
依赖注入是ASP.Net Core的核心,依赖注入我们可以分开来理解
依赖:当一个类需要另一个类协作来完成工作的时候就产生了依赖
注入:把依赖的创建丢给其它人,自己只负责使用,其它人丢给你依赖的这个过程理解为注入。
startup ConfigureServices方法 可以使用netcore自带的di或者使用第三方autofac
jesse大佬文章: https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html
6、依赖注入的生命周期有哪些,请详细说明含义。
Transient:每一次GetService都会创建一个新的实例
Scoped:在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)
Singleton:整个应用程序生命周期内只创建一个实例
7、依赖注入的方式都有什么?
8、什么是中间件,谈谈你对中间件的理解
中间件在这里是指注入到应用中处理请求和响应的组件。
startup Configure方法
9、中间中有map,use和run三种方式,说明每种方式的功能。
中间件在这里是指注入到应用中处理请求和响应的组件。
startup Configure方法
10、什么是认证,什么是授权?
11、请列出Outh2.0四种授权模式
12、EFCore 怎么做性能优化
EF SQL监控 ,优化效率
使用AsNoTracking(),无跟踪查询技术
EF预热
对于复杂的可以使用sqlquery 用sql语句查询
扩展问题
1、说一下常用的状态码,并分别说出他们的含义。
2、如何理解敏捷开发。
3、谈谈你理解的软件开发流程。
架构层面,设计思想
1、谈一谈你对DDD思想的理解。
DDD,领域驱动设计。就是通过领域来指导软件设计,是一种十分抽象的软件设计思想,它主要分为战略设计和战术设计
战略方面,通过事件风暴进行领域模型的划分,划分出核心域,子域,支撑域,定义通用语言,划分出界限上下文。
在战术设计方面,ddd将架构分层,“松耦合,高内聚”是架构设计的整体思想。按照DDD思想,可以分为领域层,基础设施层,应用层,接口层。
接口层为前端用户提供api接口。基础设施层可以放一些第三方的服务,数据库连接等内容。应用层是对领域服务的编排,是很薄的一层(目前我自己的架构,应用的是cqrs,所有的相关逻辑都是放在了应用层,而领域层只是放了实体,因为暂时还不是特别理解领域层的服务和事件都应该写什么)。领域层包括实体,值对象,聚合根,领域服务,领域事件等内容
2、DDD有四种领域模型,都有什么,在战术层面是怎么实现的?
1、失血模型
失血模型简单来说,就是domain object只有属性的getter/setter方法的纯数据类,所有的业务逻辑完全由business object来完成
2、贫血模型
简单来说,就是domain ojbect包含了不依赖于持久化的领域逻辑,而那些依赖持久化的领域逻辑被分离到Service层。
3、充血模型
充血模型和第二种模型差不多,所不同的就是如何划分业务逻辑,即认为,绝大多业务逻辑都应该被放在domain object里面(包括持久化逻辑),而Service层应该是很薄的一层,仅仅封装事务和少量逻辑,不和DAO层打交道。
4、胀血模型
基于充血模型的第三个缺点,干脆取消Service层,只剩下domain object和DAO两层,在domain object的domain logic上面封装事务。
3、DDD四层架构是什么?
4、谈谈你对CQRS架构的理解,在net7中通过什么方式实现?
微服务
1、什么是微服务架构,什么时候使用微服务架构?
2、微服务架构的需要注意的问题有哪些?
数据库
1、mysql的数据引擎有哪些
myisam
innodb
2、数据库事务
3、什么是sql注入?
利用sql语言漏洞获得合法身份登陆系统
4、如何做数据库优化?
设计:存储引擎,字段类型,范式与逆范式
功能:索引,缓存,分区分表。
架构:主从复制,读写分离,负载均衡。
详解:https://www.cnblogs.com/sharpest/p/10390035.html
docker
1、列出docker常用命令
docker images //查看所有镜像文件
docker ps //查看运行中的容器
docker ps -a //查看所有容器
docker exec -it xx /bin/bash //进入容器内部
docker logs -f xx //查看容器日志
docker run //启动容器
docker login //登录镜像仓库
docker pull //拉取镜像
docker push //推送镜像
docker save -o //将指定镜像保存成 tar 归档文件
docker load -i //导入使用 [docker save] 命令导出的镜像
docker cp //用于容器与主机之间的数据拷贝
docker history //查看指定镜像的创建历史。
docker build //用于使用 Dockerfile 创建镜像。
docker tag // 标记本地镜像,将其归入某一仓库。
2、docker部署的方案有哪些,如何将打包的镜像在另一台机器上运行?
Redis
1、说一说redis数据类型以及使用场景
string 字符串(可以为整形、浮点型和字符串,统称为元素)
list 列表(实现队列,元素不唯一,先入先出原则)
set 集合(各不相同的元素)
hash hash散列值(hash的key必须是唯一的,hash 特别适合用于存储对象)
sort set 有序集合
2、什么是缓存雪崩,缓存击穿?
缓存雪崩:在请求redis的时候,key大面积失效,导致大量请求到数据库
缓存击穿:在请求数据的时候,key值不存在或者失效,导致请求直接穿透到数据库进行请求
3.数据同步
4.过期时间机制
5.redis持久化方式以及优缺点
RDB:
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式.
1、RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
2、生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
3、RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
劣势
RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。
AOF:
redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
优势:
1、AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
2、AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
3、AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
4、AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据
劣势:
1、对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大
2、AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的
3、以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来。
6、redis 单机最大存储量
7、哨兵模式
c#基础
1、什么是aop?
面向切面编程-通过预编译方式和动态代理实现程序功能的统一维护的一种技术。降低业务逻辑部分的耦合度,提高程序的可重用性,提高开发效率。
比较常见的场景是:日志记录,错误捕获、性能监控等
2、什么是托管和非托管?
托管代码:是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理
非托管代码:直接编译成目标计算机码,由操作系统直接执行的代码,内存回收要继承IDisposable接口手动回收
3、string和stringbuilder的区别
string 每次内容发生变化,都会生成一个新对象,重新分配内存
stringbuilder 每次操作都是对自身进行操作,而不是生成新的对象
4、ref和out的区别
ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
5、重载与重写
overload重载:同一个类下,相同的函数名,不同参数列表
override重写:是对父类的方法进行重写;基类函数用virtual修饰,派生类用override修饰
注:不能重写非虚方法或静态方法
6、一个类可以继承几个父类,几个接口?
在创建一个类的时候只能继承一个父类 但可以实现多个接口
7、委托和事件,委托中action和func的区别用法
委托是面向对象的、类型安全的,是引用类型。使用delegate关键字进行定义
详解:https://www.cnblogs.com/wangjiming/p/8300103.html
8、常用修饰符
public: 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private: 只有同一类或结构中的代码可以访问该类型或成员。
protected: 只有同一类或结构或者此类的派生类中的代码才可以访问该类型或成员。
internal: 同一程序集中的任何代码都可以访问该类型或成员,但别的代码不可以。
9、C#中,string str = null 与 string str =""的区别
String str=null没有分配内存,String str=""分配了内存
10、是否可以继承String类
String类是一个最终类,被final修饰,所以不能被继承
11、String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对像s。
12、堆和栈
引用类型存在堆上,值类型存在栈上
13、什么是GC。Idispose的用法
GC,垃圾回收器,用于自动回收托管堆中无效对象的内存,释放内存空间。
程序在运行过程中 ,有很多对象分配内存空间后,使用一次就不再使用了,这不仅占用内存空间,导致内存溢出,还可能影响程序的性能。所以我们自动释放内存
原理可参考:https://my.oschina.net/u/4354590/blog/4321333
14、抽象类abstract class与接口interface的异同
同:都不能被实例化。都可以被继承。都可以包含方法声明。派生类必须实现抽象类(接口)中未实现的方法。
异:接口可以被多重实现,抽象类只能被单一继承。
15、using关键字的使用场景
作为指令:用于导入其他命名空间中定义的类型或为命名空间创建别名
作为语句:用于定义一个范围,在此范围的末尾将释放对象
16、task异步用法,它和thread有什么区别?
1.什么是thread
当我们提及多线程的时候会想到thread和threadpool,这都是异步操作,threadpool其实就是thread的集合,具有很多优势,不过在任务多的时候全局队列会存在竞争而消耗资源。thread默认为前台线程,主程序必须等线程跑完才会关闭,而threadpool相反。
总结:threadpool确实比thread性能优,但是两者都没有很好的api区控制,如果线程执行无响应就只能等待结束,从而诞生了task任务。
2.什么是task
task简单地看就是任务,那和thread有什么区别呢?Task的背后的实现也是使用了线程池线程,但它的性能优于ThreadPoll,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。但是相对前面的两种耗内存,Task依赖于CPU对于多核的CPU性能远超前两者,单核的CPU三者的性能没什么差别。
17、异步方调用同步方法和同步方法调用异步方法性能上有什么区别?
18、静态类在程序的生命周期,何时初始化,静态类的静态方法和类的静态方法啥区别
其他大佬整理的,希望可以帮助到你
https://www.yuque.com/ysgstudyhard/da6e0c/wlcivg
https://zhuanlan.zhihu.com/p/526163635