@[TOC](.NET 中级开发常见面试题目(干货))
尊敬的.NET开发工程师
你们好! 博主很荣幸与你们在同一个行业,以下的面试题希望对你们有所帮助,如有不足之处请补充和指点。
.NET CORE
-
什么是.NET CORE?
.NET CORE 是ASP.NET 的升级版本,是一个免费的,开源的,配置更多,跨平台的web开发框架,更轻量级和模块化 性能较好, -
.NET 和.NET CORE的区别在哪里?有什么优势?
优势在于.NET CORE 是一个跨平台的,开源的,可移植的,可扩展性的,高性能的框架。
.NET 只在windos上运行 基于windos系统
更长的历史,更加成熟
适合桌面级和企业级的应用
包含windos特有的功能 ru windos forms WPF
适应于旧版的应用依赖于windows特性的项目
.NET CORE
跨平台 可以在windos mac linux上运行
更轻量级模块化性能较好
开源 开发社区活跃 构建高性能的web应用 微服务 -
.NET CORE中的中间件是什么?在什么情况下使用?原理是什么?
中间件是注入到应用程序中用于处理请求响应的组件。
中间件用于构建可扩展的应用程序,它可以帮助开发人员更轻松的实现应用程序的可重用性和可维护性,更好管理应用程序的组件和资源。 -
依赖注入是什么?依赖注入的几种方式?
依赖注入是一种软件设计模式,它允许将组件之间的依赖关系从组件的实现中分离出来,从而使组件可以在不同的环境下重复使用。
构造函数注入,属性注入,接口注入,方法注入。 -
.NET CORE SERVICE服务的生命周期?
初始化 ,运行,关闭,销毁。 -
redis是什么?有几种数据类型?
字符串,列表,hash表,集合,无序集合。 -
详细描述RabbitMQ中间件?
是一种消息中间件,它可以帮助应用程序在分布式系统中进行异步通信,它提供了一种可靠的方式开传递数据信息,并且可以支持大量的消费者和生产者。 -
.NET CORE 有哪些中间件 常见有几种?请详细说明?*
IIS, WebSockets,SignalR。
IIS是一种web服务器软件,用于处理HTTP请求,提供静态文件服务,支持ASP,.NET 等动态网页。
webSockets是一种可以在客服端和服务端简历双向通信的技术。
Signalr是一个实时通信库,可以让您在web应用程序中实现通信功能。 -
什么是单例模式?什么是DDD?
单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
DDD的是领域驱动设计,是一种软件设计模式,应用于实现复杂的软件设计,对程序进行解耦和封装,分为战略设计和战术设计两大块,战略设计是以为业务的角度出发,划分不同的业务领域,战术设计是以技术的角度出发,主要以技术实现为主。 -
Net core中中间件怎么使用
中间件是在请求-响应管道中间处理HTTP请求的组件,可以进行日志记录、身份验证、请求转发、响应处理等操作。
中间件在Startup.cs中的Configure方法中配置,按顺序添加执行。
使用示例:
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware(); // 添加自定义中间件
app.UseRouting(); // 路由中间件
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // 映射控制器
});
}
12.简单描述一下MQ消息队列和RD缓存机制?
MQ基于AMQP协议,包含生产者 交换机 队列 消费者等组件
生产者将消息发送到交换机 交换机根据路由规则将消息路由到对应的队列
消费者从队列中获取。
链接 MQ=>生产者发送消息=》消费者接收消息=》
Redis数据结构通过LPUSH从列表中插入元素
链接Redis-=>生产者发送消息=》消费者接收消息=》
13.什么是ABP框架
ABP是一个基于.NET平台的开源应用程序框架
主要用于构建现代化的web应用和分布式系统
分层架构:基础设施层 应用层 领域层 表现层
拥有强大的依赖注入和多租户支持 模块化设计系统
分层多个模块提高了代码的复用性和可管理性
数据访问 缓存管理 身份验证。
14.EF CORE进行性能优化
使用合理的索引 优化查询语句 使用缓存查询 批量操作
监控和性能分析
15.什么是DOCER?
Docker 是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的环境中运行。
.NET 和C#
- 什么是.NET?
.net 是一个开放源代码的跨平台开发平台。 - .NET什么情况下用到锁?
保护共享资源,防止多个线程访问同时访问该资源,从而导致数据不一致的问题。 - .NET怎么捕获异常?有哪几种方式?
try catch finall,或者使用日志写入异常数据。 - 当一个程序需要处理大量数据的时候,程序运行很慢,还有可能阻塞,怎么避免阻塞和进行优化处理?
使用异步加载方法。 - 简单描述什么是AOP?
面向切面对象,是一种编程技术,它允许开发人员将程序分解为可以重用的模块,这些模块可以在不同的程序中重复使用。 - 什么事泛型?泛型有哪些好处?
泛型是一种编程技术,它允许程序员在编写代码时,使用参数化类型,以便在编译时可以检查类型的安全性。 - 简单描述什么是异步加载?
在不阻塞浏览器的情况下。加载网页内容的一种技术。 - 委托是什么?事件是什么?
可以把一个方法作为参数代入另一个方法,类似于c++中的函数的指针,允许一个或多个方法调用委托给另一个对象。
事件事一种编程技术,它允许您在特定的时间点触发特定的代码。 - 用过哪几种设计模式?
工厂模式,抽象工厂模式,单例模式。 - 什么是ORM?什么是EF
对象关系映射,它是一种技术用于面向对象的编程语言中的对象映射大关系数据库的表。EF是一个用于.NET 的ORM框架,用于构建数据访问层。
12.接口和抽象类的区别
接口只能定义方法签名没有实现
支持多继承 定义契约强调能做什么
不能包含字段或构造函数
默认成员Public
抽象类可以包含方法的实现
不支持多继承 强调是什么
可以包含字段 属性 构造函数
默认成员 Publc protected private
13.MVC中的过滤器有哪些?
身份证验证和授权、动作方法、结果、异常处理、资源处理
14.NET 和 net Entity Framework的区别
.net 是一个跨平台的开发框架 支持多种编程语言,提供了基础类库
和运行时环境,用于开发各种类型的应用程序(web 桌面 移动 云服务)
Entity Framework 是.NET 中的一个对象关系映射框架
支持LINQ查询 数据库迁移 事务处理等功能
15.常见的加密算法
MD5 DES RSA SHA
16.简单描述一下 Socket通信
Socket通信是一种网络协议,常用于网络应用程序的通信。
创建Socket实例=》连接服务器=》数据传输=》接收数据=>关闭连接
17.HTTP TCP UDP的区别
HTTP面向应用层的协议 基于请求响应模式 适用于web浏览器等客户端和服务器
之间的通信。
TCP面向连接的传输层协议 提供可靠的数据传输 确保数据的完整性和顺序。
UDP 无连接的传输层协议 传输速度快但是不保证数据的顺序和完整性,适应于对实时性要求高的场景。
18.sing和stringbuilder的区别
string是不可变的类 每次修改都会生成一个新的对象 性能差
stringbuilder是可变的适合频繁的修改和拼接字符串 性能好
19.winform 在不连接数据库的情况下怎么进行通信
文件共享系统 内存映射文件 命名管道 TCP UDP 网络协议
20.线程和进程的区别
线程是资源调度分配的单位 是最小的逻辑单元。
一个线程有多个进程。
数据库
-
什么是.存储过程?
预编译的SQL语句,由多行sql语句组合而成的。
存储过程是一种特殊的程序,可以被多次调用,可以接收参数,也可以返回结果。 -
什么是事务?
是一组操作。要么全部成功要么全部失败,它们是原子性的,意味着它们不能被中断,只能作为一个整体来处理。
原子性 要么全部完成 要么全部不执行
一致性 事务开始和接收时 数据库状态必须保持一致
隔离性 每个事务都是独立的,不受其他事务的干扰
持久性 一旦提交事务 结果就是会永久保存。 -
视图和存储存储过程的区别?
视图是一张虚拟表,它可以从一个或多个表中检索数据但是不能接收参数,也不能执行SQL语句。
存储过程是一种特殊的程序,可以被多次调用,可以接收参数,执行一系列的SQL语句,并可以返回结果。 -
SQL SERVER 和oracle的区别?各有哪些优势?
sql server和oracle主要区别在于它们的架构,可用性,安全性,可扩展性和可移植性,sql server 提供了更多的可用性和安全性,oracle提供了更多的可扩展性和可移植性。 -
什么聚集索引?和非聚集索引?详细说明区别和优点?
聚集索引是主键值,非聚集索引不是主键值,聚集索引一个表只能有一个,非聚集索引一个表可以有多个,聚集索引的物理存储记录是物理上连续,
非聚集索引是逻辑上连续,聚集索引查询比非聚集索引要快,聚集索引是一种特殊的索引它会对索引列的值进行排序,非聚集索引是一种普通索引不会进行排序。 -
索引的优缺点?
增加查询和检索数据的速度,能快速定位到数据,在进行增删改操作的时候会对数据维护造成一定的影响。 -
怎么优化SQL语句?
不使用*号,尽量少用连接,左连接替换内连接,优化分组语句,建立索引,union 替换union all,取别名,使用合理的数据类型,使用合理的查询参数,避免使用子查询。 -
在数据量达到几个亿的情况下怎么对数据库进行优化?
使用ES技术优化,数据库ES技术是一种基于事件的技术,它可以帮组开发人员构建自动响应事件的程序,从而提高应用程序的可扩展性和可维护性。 -
什么情况下不走索引查询扫描整个表?
模糊查询,索引值为空,数据类型不正确,当索引中数据量大于数据表数据量的时候。
10.ORDER BY 排序走索引吗?
会走索引,取决于索引类型和排序的字段是否在索引中。
11.** 数据库中的N+1问题处理**
N+1问题通常是指在执行查询时,主查询返回N条记录,而后续每条记录都执行一次额外的查询,造成大量不必要的查询,降低了性能。常见的处理方式:
使用批量查询:通过一次性获取相关数据(如使用JOIN或批量查询)来减少查询次数。
延迟加载(Lazy Loading)与急切加载(Eager Loading):使用急切加载(如Include)来避免N+1问题,而不是让ORM在查询之后逐一加载相关数据。
缓存:对于高频次访问的数据,可以通过缓存技术来减少数据库访问。
12.数据库怎么实现分页?
使用LIMT 和OFFFSET 或者ROW_number()函数
LIMIT 用于限制查询结果返回的行数。
OFFSET 用于指定从结果集的哪一行开始返回数据,偏移量从 0 开始计数。
ROW_NUMBER() 是一个窗口函数,它会为结果集中的每一行分配一个唯一的行号。可以利用这个行号来筛选出指定页码范围内的记录。
13.数据库死锁的原因和解决方案
多个事务在执行过程中相互等待
事务执行操作顺序不当 导致资源相互依赖
选择一个事务进行牺牲 使用缓存机制
事务开始的时候把需要使用的所有数据对象全部加锁
将某些事务占用的资源抢占分配给其他的事务
总结
以上就是博主在面试中面试官问到的问题,希望能对你们有所帮助,现在找工作两年以上的经验基本上都不会问一些基础的问题,大部分面试官都是会问底层的一些原理和新的技术,我们作为一个开发人员一定不要固步自封,安于现状,一定要去学习新的知识和加深自己对框架的理解,不然的话会被这个社会淘汰,躺平和不可能躺平的,只能卷,使劲卷吧,互联网的黄金时代已经过去了,不卷找工作都难难难!