.NET架构师面试题(1)

1.C#中的委托是什么?事件是不是一种委托?

委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。委托用于将方法作为参数传递给其他方法。事件就是通过委托调用的方法。

2.聊聊.NET的管道和.NET Core的中间件

.NET的管道:在管道模型运行开始前,首先HTTP的请求被被传递到HttpRuntime类的一个实例中,然后这个实例对象检测请求并找到被接受的那个应用程序,接下来管道模型就使用HttpApplicationFactory对象来创建一个HttpApplication对象来处理这个请求(在此同时也将创建HttpContext,HttpRequest和HttpResponse),一个HttpApplication可以包含一系列HttpModule对象。

中间件是一种装配到应用管道中以处理请求和响应的程序,使用Run、Map和Use扩展方法来配置请求委托。请求委托用于构建请求管道,处理每个HTTP请求。每个委托可以在下一个委托之前和之后执行操作。委托还可以决定不将请求传递给下一个委托,这称为请求管道的短路。短路通常是可取的,因为它避免了不必要的工作。

Configure方法中的就是中间件,中间件组件的顺序定义了在请求上调用它们的顺序,以及响应的相反顺序,此排序对于安全性,性能和功能至关重要。
常用的中间件顺序
1. 异常/错误处理
2. HTTP 严格传输安全协议,HTTP协议介绍
3. HTTPS 重定向
4. 静态文件服务器
5. Cookie 策略实施
6. 身份验证
7. 会话
8.MVC

3.说说数据库的隔离级别,数据库有哪些锁

数据库事物的四大特性:原子性、一致性、隔离性、持续性(永久性)。

原子性:要么全做,要么全不做;

一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的;

隔离性:一个事务的执行不能被其他事务干扰;

永久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
事务的隔离性:未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可串行化(Serializable )。

未提交读:最低级别,任何情况都无法保证;已提交读:可避免脏读的发生;可重复读:可避免脏读、不可重复读的发生;串行化:可避免脏读、不可重复读、幻读的发生。

举例:未提交读:A更新了数据没有提交B可以看到;已提交读:A更新了数据没有提交B看不到,提交之后可以看到;可重复读:A插入一条数据,提交之后,B看不到,B事物结束之后,在查询可以看到;可串行化:A执行完之后B才可执行。(所有的一切操作都是并行操作)
数据库中的锁:分为独占锁(即排它锁),共享锁和更新锁,细分又可分为表锁、行锁、页锁等。
为什么需要?当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。
共享锁表示对数据进行select操作,多个事务可以同时为一个对象加共享锁。排他锁也叫写锁,排他锁表示对数据进行insert、update或delete操作,如果一个事务对对象加了排他锁,其他事务就不能再给它加任何锁了。更新锁在的初始化阶段用来锁定可能要被修改的资源,这可以避免使用共享锁造成的死锁现象。

4.口述下如何设计一个SOA框架

SOA的全称是Service Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对应用组件进行分布式部署、组合和使用,服务层是SOA的基础,可以直接被应用调用,从而有效控制系统松耦合。简单来说就是A功能布置在A服务器,B功能布置在B服务器,他们都开放出接口供C。。等访问,C不用知道A,B是如何实现的,只管用就可以了。简单的例子webservice、WCF、web api等等。

5.SOA和微服务架构之间的主要区别是什么?

我的理解是:SOA和微服务是一脉相承的,两者都是中立性,语言无关,协议跨平台。微服务的目的是有效的拆分应用,服务的细粒度,重用组合,甚至是每个操作(或方法)都是独立开发的服务,足够小到不能再进行拆分。SOA更适合大型企业中的业务过程编排、应用集成。

6.了解各个framework的底层不?

C#源码文件 →→ C#编译器 →→ 程序集 →→ 本机语言
底层的库:CLR(Common Language Runtime)公共语言运行时,CTS(Common Type System)通用类型系统,CLS(Common Language Specfication)公共语言规范,CIL(Common Intermediate Language)公共中间语言,CLI(Common Language Infrastructure)公共语言基础结构

7.说说浏览器页面的渲染过程

DNS查询 →→ TCP链接 →→ HTTP请求 → 服务器响应 →→ 客户端渲染(HTML,CSS,JS)

8.说说中介模式的设计原理和应用场景

中介者模式是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,只要修改一个对象,其它关联的对象都得进行修改,如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行。房产中介、QQ游戏平台、聊天室、QQ群和短信平台

9.请问如何构架一个高负载的系统?

应用服务和数据服务分离,使用缓存改善网站性能,使用应用服务器集群改善网站的并发处理能力,数据库读写分离,使用反向代理和CDN加速网站响应,使用分布式文件系统和分布式数据库系统,使用NoSQL和搜索引擎,对业务拆分,建立分布式服务。

10.NET系统如何实现水平扩展、如何解决高并发问题

水平扩展:利用Nginx建立分布式系统,增加服务器,增加CPU
解决高并发问题:增加缓存、禁止用户重复操作、建立请求队列

11.说说IIS的工作原理?

对比IIS来说,它依赖HTTP.SYS的内置程序来监听外部的HTTP请求,如果请求的是一个可访问的URL,HTTP.SYS会将这个请求交给IIS工作进程,把信息保存到HttpWorkRequest中,在相互隔离的应用程序域AppDomain中加载HttpRuntime,调用HttpRuntime的ProcessRequest方法,之后就是我们的程序操作,最后返回数据流,并重新返回到HTTP.SYS,HTTP.SYS在将数据返回给客户端浏览器。

12.手写一个千万并发的商品秒杀功能

Redis缓存秒杀的商品ID,数量,一个请求数量减少一个,数量等于0的时候,直接返回失败,成功的数据保存到消息队列中,之后保存到数据库,秒杀的商品比较少的,直接用一个线程安全的列表就可以了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值