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

必须手写掌握的代码(既包含拿电脑写,拿笔写):

  1. 手写三层架构
  2. 手写冒泡排序
  3. 手写AJAX:XMLHttpRequest
  4. 手写增删改查、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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为一名 .Net 架构师,我认为核心技能包括以下几个方面: 1. 精通 .Net 技术栈,掌握 C#、ASP.NET、Web API、MVC 等相关技术,并能将它们熟练应用于开发工作中。 2. 良好的架构设计能力。在项目开发过程中,架构设计是极为重要的,需要考虑系统的可扩展性、可维护性、性能等方面。 3. 运维能力。架构师需要对开发生命周期的各个阶段都有深刻的理解,因此了解和掌握运维流程对于问题的排查和定位非常有帮助。 4. 沟通能力。架构师需要和项目经理、开发人员以及其他相关人员进行沟通和协作,协调各方面的工作,以确保项目的顺利进行。 5. 抗压能力。架构师通常要负责多个项目或团队,需要在高压力的环境下工作,提供项目支持和解决方案。 在面试过程中,面试官可能会就以上方面进行提问,需要面试者有足够的实践经验和理论知识来回答问题。同时,面试者也可以提出自己的问题来了解岗位的具体工作内容和团队文化。 ### 回答2: .NET架构师是一种重要的角色,负责设计和管理.NET应用程序的结构。在.NET架构师面试中,通常会涉及以下方面: 1. 熟练掌握.NET编程框架,如ASP.NET、WinForms、WPF、ADO.NET等。此外,必须理解C#和VB.NET.NET编程语言的内部工作原理。 2. 熟悉设计模式和架构模式,并能将其应用于.NET应用程序中。架构模式是对于应用程序架构的通用解决方案,例如MVC、MVVM、Layered Architecture和Microservices等。 3. 能够分析和设计大型分布式系统的存储和处理方案。面试者应该熟悉NoSQL数据库,如MongoDB和Cassandra,以及微服务框架,如Service Fabric和Docker。 4. 熟悉.NET Core,并能够使用其构建跨平台应用程序。这包括使用Docker和Kubernetes来构建和扩展.NET Core应用程序。 5. 了解.NET安全模型和身份验证,包括ASP.NET身份验证和授权、SAML、OAuth和OpenID Connect等协议。此外,在.NET应用程序中实现安全最佳实践,例如跨站点脚本(XSS)防护、跨站点请求伪造(CSRF)防护和密码哈希等。 最后,.NET架构师需要具有优秀的沟通和领导能力,能够与其他开发人员和利益相关者沟通,协调团队,确保.NET应用程序的成功开发和交付。 ### 回答3: .net 架构师面试题主要涉及 .net 框架、C#编程语言、web应用程序的设计以及数据库管理等领域。以下是对几个常见问题的回答: 1. .net 框架的特点是什么? .net 框架是一个通用的编程平台,可用于开发用于多种不同应用程序的软件,如桌面应用程序、Web 应用程序以及移动应用程序。它提供了广泛的功能和 API,这些 API 可以用于编写高质量、高性能的 .net 应用程序。 2. C# 语言的重要性如何? C# 是一种强类型、面向对象的编程语言,它是 .net 框架的一部分。开发人员可以使用 C# 来创建各种软件,包括桌面应用程序、Web 应用程序、游戏、移动应用程序等等。在 .net 应用程序开发中,C# 语言非常重要。 3. 设计 web 应用程序的一般步骤是什么? 设计一个 web 应用程序需要完成以下步骤:需求分析、设计应用程序架构、选择合适的开发工具和技术、编写代码、测试和验证、发布和部署应用程序。其中设计应用程序架构是非常重要的,因为它决定了应用程序的性能和扩展性。 4. 如何管理大规模的数据库? 管理大型数据库的关键在于规划、设计和实施数据管理策略。要管理大规模的数据库,需要有一个合理的数据模型、数据架构和索引策略。此外还需要优化查询和数据访问,以提高性能。最后,还需要进行定期的备份和恢复操作,以减少数据丢失的风险。 总之,作为一个 .net 架构师,在掌握这些基本知识的同时,还需要具备团队管理能力、项目管理技能和沟通能力等方面的能力,以便协调开发团队完成项目目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值