今天看到一篇漫画,[3年.NET开发应聘大厂惨遭淘汰,如何翻身打脸面试官?],好多问题,一下子还真的回答不了,这里对这些问题进行了整理,增加下脑容量,哈哈。俗话说不想当将军的士兵不是好士兵,不想当架构师的程序员,不是一个努力要进步的程序员,努力加油,不断学习。有人说架构师都是一批秃顶的人,程序员都是一群XX,其实现实是,架构师好多不是秃顶,不用担心自己成了架构师变成秃顶,那都是吓人的。程序员也是懂得浪漫的,要不然那么多浪漫的程序,那么多酷炫的技巧都是怎么实现的。

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

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

public class DelegateTest
{
public delegate int AddDelegate(int a, int b); //定义委托类型
public AddDelegate addDelegate; //定义委托
public event AddDelegate AddDelegateForEvent; //定义事件 public int Add(int a, int b) {
Console.WriteLine($"a:{a},b:{b}");
return a + b;
}
//委托和事件的使用
public static void Test() {
DelegateTest text = new DelegateTest();
text.addDelegate = text.Add; ;
text.addDelegate(, ); text.AddDelegateForEvent += text.addDelegate;
text.AddDelegateForEvent += text.addDelegate;
text.AddDelegateForEvent(, );//或者下面的使用
//AddDelegate d = text.AddDelegateForEvent;
//d(10, 20);
//结果
//a: 1,b: 2
//a: 10,b: 20
//a: 10,b: 20
}
//Func和Action的使用
public static void Test2() {
Func<int, int, int> add = (int a, int b) => { return a + b; };
Action<int, int> addVoid = (int a, int b) => { int c = a + b; };
}
}

C#中委托这篇文章,对委托有更多的介绍。Fun和Action是微软封装的委托,一个有返回值,一个没有,C#高级功能(三)Action、Func,Tuple这篇文章介绍的比较详细。

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

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

ASP.NET MVC请求生命周期

URL Routing Module →→ Matching Route Entry →→ Route Handle →→ Http Handle →→ Controller Factory →→ Controller →→ Action Invoker →→ Module Binders →→ Authentication Filter →→ Authorization Filter →→ Action Filter →→ Action Execution →→ Action Filter →→ Action Result
简单就是:Url →→ Route →→ Controller →→ Action →→ View

其他的ASP.NET生命周期的文章,ASP.NET生命周期 , WebForm页面运行周期--页面关系

.NET Core的中间件

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

public class Startup
{
//此处省略部分代码,创建一个新的Core web项目,可以自行查看
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

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

中间件例子:

 public class LogMiddleware
{
private readonly RequestDelegate _next;
public LogMiddleware(RequestDelegate next)
{
_next = next;
} public async Task Invoke(HttpContext context)
{
Debug.WriteLine("程序运行 开始。");
await _next(context);
Debug.WriteLine("程序运行 结束。");
}
} public static class LogMiddlewareExtensions {
public static IApplicationBuilder UseLog(this IApplicationBuilder app) {
return app.UseMiddleware<LogMiddleware>();
}
}

在Configure中 app.UseLog();就可,程序运行,会在VS调试输出的地方显示
程序运行 开始。
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "Index", controller = "Home"}. Executing action ----此处省略部分输出
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action WebCore.Controllers.HomeController.Index (WebCore) in 13.9555ms
程序运行 结束。

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等等。

SOA框架的文章,Web Service 和WCF的比较

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在将数据返回给客户端浏览器。

Win10下IIS配置图解MVC项目发布图解IIS添加网站图解

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

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

.NET架构师知识普及的更多相关文章

  1. IT架构师介绍-软件架构设计学习第一天(非原创)

    文章大纲 一.架构师定义二.架构师分类与具备能力三.研发人员发展的技术路线四.架构师知识体系五.参考文章   一.架构师定义   什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也有所 ...

  2. 向架构师进军--->系统架构设计基础知识

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在讲解系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师 ...

  3. WEB架构师成长之路-架构师都要懂哪些知识 转

    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...

  4. WEB架构师成长之路之三-架构师都要懂哪些知识

    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...

  5. 向架构师进军---&gt;系统架构设计基础知识

    假设你对项目管理.系统架构有兴趣,请加微信订阅号“softjg”,增加这个PM.架构师的大家庭 在解说系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师和架构设计等相关的概 ...

  6. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  7. 34张史上最全IT架构师技术知识图谱 最新下载

    本文是笔者多年来积累和收集的知识技能图谱,小编极力推荐分享给身边的技术人儿,希望这份技术知识图谱能够帮助到每一位奋斗在技术路上的小伙伴. 下面是笔者多年来积累和收集的知识技能图谱,有的是笔者原创总结的 ...

  8. .NET架构师必备知识

    .NET架构师,我归纳一下要学的知识: 成为优秀程序员,需要学好的知识: 1. 面向对象编程.UML画图.设计模式.代码重构 2. 常用ORM工具 3.  MVC,WCF,XMl, JQuery ,S ...

  9. 要成为一个 Java 架构师得学习哪些知识?

    作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

随机推荐

  1. Android无线调试——抛开USB数据线

    开发Android的朋友都知道,真机调试需要把手机与PC相连,然后把应用部署到真机上进行安装和调试.长长的USB线显得很麻烦,而且如果需要USB接口与其他设备连接的话显得很不方便.今天介绍一种不通过U ...

  2. APP和服务端-架构设计(一)

    架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...

  3. CCD 与 CMOS

    窗帘快门与全局快门: 窗帘快门,每次只允许一条缝的光线摄入,因此会呈现自上而下的扫描式拍摄,也就意味着画面上的不同高度,其实拍摄的时间是不同的,也就进一步造成了在高速移动的火车上,如果拍摄窗外的景物, ...

  4. WPF,SilverLight中直线的样式示例

    原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...

  5. 微软输入法TSF SampleIME 代码浅说

    原文:微软输入法TSF SampleIME 代码浅说 微软提供了一个简单的TSF拼音输入法的示例SampleIME,主要的问题是:不支持数字键选候选字,不能自动上屏,没有联想功能.在笔者开发动态输入法 ...

  6. 构建自己的PHP框架(composer)

    完整项目地址:https://github.com/Evai/Aier Composer 利用 PSR-0 和 PSR-4 以及 PHP5.3 的命名空间构造了一个繁荣的 PHP 生态系统.Compo ...

  7. Matlab随笔之指派问题的整数规划

    原文:Matlab随笔之指派问题的整数规划 注:除了指派问题外,一般的整数规划问题无法直接利用Matlab函数,必须Matlab编程实现分支定界法和割平面解法. 常用Lingo等专用软件求解整数规划问 ...

  8. WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容

    原文:WPF实现选项卡效果(3)--自定义动态添加的AvalonDock选项卡内容 简介 在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任 ...

  9. WPF特效-绘制实时2D激光雷达图

    原文:WPF特效-绘制实时2D激光雷达图 接前两篇: https://blog.csdn.net/u013224722/article/details/80738619 https://blog.cs ...

  10. abp.message

    abp.message.success(app.localize('SomeMessage'), app.localize('Title')) .done(function() { //do some ...