2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(九)
201、简述 private、 protected、 public、 internal 修饰符的访问权限
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 当前程序集内可以访问。
202、属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?
属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的,极端的例子。Public Age{get{return 100;}set{}}。加分的补充回答:用reflector反编译可以看出,属性内部本质上就是set_***、get_***方法
class Person
{
public int Age
{
get
{
return 3;
}
set
{
}
}
}
Person p1 = new Person();
p1.Age = 30;
p1.Age++;
Console.Write(p1.Age);//输出3
必须手写掌握的代码(既包含拿电脑写,拿笔写):
- 手写三层架构
- 手写冒泡排序
- 手写AJAX:XMLHttpRequest
- 手写增删改查、SQLHelper
203、关于三层架构
通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
204、说说在软件设计中你遇到的以空间换时间的例子?
参考回答:谈Cache(缓存)、索引这些例子。用额外的磁盘、内存空间的消耗来提高执行速度。Lucene.Net也是一个例子。
205、asp.net中的错误机制。(常考)
参考:
定制错误页来将显示一个友好的报错页面。
页面中未捕获一样会触发Page_Error(不常用),应用程序中的未捕获异常会触发Application_Error。通过HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。
206、介绍几个使用过的开源的项目
Lucien.net、NPOI、JQuery、ASP.Net AJAX toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等网站上有更多的开源项目
207、数据访问通过aspx页面和DB层会很慢,有什么解决方法
(1)浏览器使用缓存;(2)使用压缩的JS和CSS(3)减少发送HTTP请求的次数;(4)后台,对于一些不经常变化的数据进行Cache;(5)对可能的低效率的SQL语句进行优化;(6)进行服务器负载均衡
208、关于网络结构
网络结构指计算机网络的结构。计算机网络由计算机系统、通信链路和网络结点组成,它是计算机技术和通信技术紧密结合的领域,承担着数据通信和数据处理两类工作。
从逻辑功能看,网络又可分为资源子网和通信子网。资源子网提供访问网络和处理数据的能力,它由主计算机系统、终端控制器和终端组成。
通信子网提供网络通信功能,它由网络结点、通信链路和信号变换设备组成。
而网络中通信子网的结构直接影响网络结构。通信子网按其传送数据的技术可分为点-点通信信道和广播通信信道两种。
209、关于反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。
反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
210、如何搭建一个大型网站架构,需要考虑哪些因素?
211、C#中的扩展方法是什么?
https://blog.csdn.net/weixin_39520967/article/details/122659327
212、什么是局部类?
https://www.cnblogs.com/yramvj/p/16052661.html
213、【软件架构】SOLID代表什么?它的原理是什么?
设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。
https://www.cnblogs.com/suli0827/p/9515842.html
214、【软件架构】KISS原则是什么意思?
软件设计中有很多原则,其中KISS就是一个很典型的例子,其核心思想就是“解耦,解耦,再解耦”,职责单一化,功能单一化为以后的维护和重构都会带来极大的便利。
https://blog.csdn.net/u013008898/article/details/120156842
215、【设计模式】“编程为接口而不是实现”是什么意思?
基于接口而非实现编程,是一条设计原则,它先于很多编程语言诞生,是一条比较抽象、泛化的设计思想。 这条原则中的接口,可以理解为编程语言中的接口或者抽象类。
基于接口而非实现编程的优势
可以提高代码质量,因为应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴漏稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本不需要改动,以此来降低耦合性,提高扩展性
https://blog.csdn.net/weixin_38345081/article/details/103253490
216、【DevOps】持续集成,持续交付和持续部署之间有什么区别?
1、持续集成
持续集成:Continuous Integration,它是指软件个人研发的部分向整体部分交付,频繁进行集成以便更快地发现其中的错误。选择持续集成系统是持续集成的其中一步,还需要建立合适的持续集成文化比如代码质量管控、测试文化等,做好持续集成,可为持续交付与持续部署打好坚实基础。
2、持续交付
持续交付:Continuous Delivery,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。
3、持续部署
持续部署:Continuous Deployment,持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”。
https://blog.csdn.net/weibo1230123/article/details/123813813
217、【软件架构】什么是故障转移?
故障转移:软硬件出现故障,能够有其它相关的软硬件设备来承接相关的工作任务,以保障系统正常工作。
218、【软件架构】系统的ACID属性是什么?
A:原子性
C:一致性
I:隔离性
D:持久性
219、【设计模式】解释下内聚和耦合?
- 内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。
- 耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求强内聚,弱耦合。
https://blog.csdn.net/weixin_43729854/article/details/106694678
220、SOLID是设计模式吗?
否,设计模式是针对软件编程中常见问题的可重用解决方案,而SOLID是一组原则,我们可以称其为准则,它使我们可以创建一个系统,在该系统中,每个零件都将松散地连接到其他零件上。
221、什么是CQRS设计模式?
https://www.cnblogs.com/daxnet/archive/2011/01/06/1929099.html
222、什么是算法?
223、你所了解的敏捷开发是什么?它跟瀑布式有什么区别?
https://blog.csdn.net/wdr2003/article/details/88025941
224、在LINQ中,IEnumerable接口与IQueryable有何不同?
https://www.cnblogs.com/liuqiyun/p/8507356.html
225、Git跟SVN有什么区别,如何设置Git的权限?
https://blog.csdn.net/weixin_45846291/article/details/107728694