.net面试题19道

1.NET CROE 内置依赖注入的三种生命周期

✳Transient(瞬时):即用即建,用后即弃。就是每次获取这个服务的实例时都要创建一个这个服务的实例。

✳Scoped(作用域):这种类型的服务实例保存在当前依赖注入容器(IServiceProvider)上。在同作用域,服务每个请求只创建一次。

✳Singleton(单例):服务请求时只创建实例化一次,其后相同请求都沿用这个服务。

2.C#中,ref和out在修饰方法参数时有什么区别?

✳ ref参数在传入方法之前必须进行初始化;而out参数在传入方法之前可以不用初始化。

✳ ref参数在方法内部可以直接使用;而out参数在方法内部不能直接使用。

✳ref参数在方法内部可以使用也可以不使用;而out参数在方法返回之前必须对其赋值。

3.什么是依赖注入和控制反转?

控制反转:它把传统上由程序代码直接操控的对象的控制权交给第三方,通过第三方来实现对象组件的管理。ioc容器就是一个对象,负责对象的创建。ioc容器的功能:把所有有依赖关系的类注入到容器中,并解析出这些类的实例。

依赖注入:依赖于抽象,不依赖于实现。

4.如何处理高并发?

①页面静态化,减少不必要的服务端请求

②加CDN,即内容分发网络

③redis缓存,缓存一些主要信息如商品信息

④分布式锁

⑤消息队列(用户通过操作向mq服务端发送消息,收到消息后消费mq消息。预防消息丢失加一张消息发送表)

⑥对用户IP的限流

⑦提高业务门槛(如秒杀商品的并发问题,可以增加条件如会员用户才能秒杀,或者到一定等级或者达到一定的总消费等等)

5.多线程问题:多个线程抢占同一个资源,如何保证资源的安全性?

用lock锁,作用:确保代码块安全运行,不会被其他线程中断。在同一时刻内只允许一个线程进入执行,其他线程需要等待,以达到安全访问。

6.什么是js闭包?

如果一个函数访问了此函数的父级及父级以上的作用域变量,那么这个函数就是一个闭包。

2个特点:①函数嵌套函数 ②内层函数可以访问外层函数的变量和参数。

2个作用:①防止变量和参数被垃圾回收机制回收(变量持久化) ②防止变量和参数被外部污染(变量只在闭包内部可访问)

1个风险:滥用可能会造成内存泄漏。

7.什么是Redis,Redis有哪些数据类型?Redis有哪些优点?

Redis是一个基于内存实现的key-value数据结构的Nosql数据库。

五种数据类型:string,hash,list,set,sorted set 。

①性能好读写速度快  ②支持数据持久化 ③支持数据备份

8.什么是缓存穿透、缓存击穿、缓存雪崩及解决方案?

缓存穿透:用户向应用程序发送查询请求,在缓存中查不到后从数据库中也查不到数据,如果发送大量的这种类型的数据请求数据库,会造成数据库负载过大,就叫做缓存穿透。

解决方案:①缓存空对象null,但可能会导致数据不一致,缓存大量空对象也会占用大量内存。②布隆过滤器,可以检查该条数据是否存在。

缓存击穿:用户向应用程序发送查询请求,缓存中查询不到这条数据,但是在数据库中可以查询到这条数据,如果用户并发的查询这条数据,会使数据库产生较大的负载,就叫做缓存击穿。

解决方案:加分布式锁,当缓存中查不到这条数据则会加个锁,用户并发的查询这条数据,会把这些并发的线程放入队列中,队列中的第一个线程获取到这个分布式锁,如果缓存中不存在则向数据库中查询并写入到缓存中返回给用户,释放第一个线程的锁,队列中的第二个线程,获取到这个锁,查询缓存可以查到这条数据则直接返回给用户,释放第二个线程的锁,以此类推。

缓存雪崩:用户向应用程序发送查询请求,这时候缓存中大量的数据同时过期,查询的数据直接全部命中数据库导致数据库负载过大,就叫做缓存雪崩。

解决方案:①存储缓存数据过期时间时,在默认时间上加个随机值。②构建高可用的Redis集群。

9.缓存和数据库如何保证一致性?

不更新缓存而是删除缓存中的数据,缓存中没了数据之后,再从数据库中读取数据,更新到缓存中。(先更新数据库再删除缓存)

10.索引失效的常见场景

①不满足最左匹配原则 ②使用了select * ③索引列上有计算 ④索引列用了函数 ⑤字符类型没加引号 ⑥like左边包含% ⑦列对比 ⑧使用or关键字 ⑨not in 和 not exists ⑩order by的坑

11.接口优化方案

①负载均衡,增加服务器数量或者设置主从redis来读写分离

②并发调用

③异步处理,mq异步处理

④加缓存redis

⑤优化索引

⑥分库分表

12.什么是DDD?

DDD即领域驱动设计

DDD分层架构:①用户接口层:webapi、身份认证、DTO转换

                          ②应用层:应用服务、事件监听、消息监听

                          ③领域层:聚合(实体,键值对)、领域服务

                          ④基础设施层:数据库、消息队列、缓存、远程接口、第三方工具

优点:可维护性、可持续性、解耦。

13.Vue生命周期

8个阶段:创建前后(beforeCreateed/created)   载入前后(beforeMount/mounted)

                 更新前后(beforeUpdate/updated)     销毁前后(beforeDestroy/destroyed)

14.什么是中间件?

注入到应用中处理请求和响应的组件。

15.什么是深拷贝和浅拷贝?

浅拷贝:只复制某个对象的引用地址,而不是复制对象本身,修改新对象,旧对象也会随之变化。

深拷贝:复制对象的具体内容,不共享内存,修改新对象,旧对象保持不变。

16.什么是值类型和引用类型?

值类型:存储的是变量实际的值。引用类型:存储的是变量的内存地址。

值类型存储在线程栈上,引用类型存储在托管堆上。

17.webapi跨域解决方案?

WebApiConfig.cs文件夹配置跨域 config.EnableCors(new EnableCorsAttribute("*", "*", "*"));或

<add name="Access-Control-Allow-Origin" value="*" />

18.什么是AOP?

面向切面编程。在不改变原有代码的条件下,对该有的功能进行拓展。

可以将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中分离出来,放到一个非业务逻辑的方法中,进而改变这些行为的同时不影响业务逻辑代码;实现了减少重复代码以及模块间低耦合的目的,以此来达到专心处理业务逻辑代码,不用管日志记录、事务控制及权限控制等。

19.什么是单例模式?

单例模式就是:一个类只能有一个实例,并提供对该实例的全局访问点。通俗地说,就是一个类只能创建一个对象,并且在程序的任何地方都能够访问到该对象。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/m0_72568350/article/details/130291177

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值