基础知识 - .Net 架构与设计模式

1.什么是AOP

答:OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。

而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。

主要意图

将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

主要功能

日志记录,性能统计,安全控制,事务处理,异常处理等等。

2.列出你所了解的设计模式。说一说使用设计模式可能带来的好处。

答:工厂模式,客户端不需要创建指定类,面向接口或抽象进行编码,让Factory来创建具体的类。

装饰模式,同一个基类继承,或许实现同一个接口,并注入装饰类的实例。扩展现有类的行为来包装现有类的过程。

模板模式,定义算法的骨架,将某些步骤或细节推迟到子类实现。

状态模式,对象所有基于状态变化的行为,推给依赖的子类来实现,从而减轻case语句量。

策略模式,将算法封装为对象,客户端通过抽象类或接口来引用这些算法。

依赖倒置,减少耦合性。单一职责,客户端通过抽象类或接口不需理会具体实现增加内聚性。

开关封闭,客户端调用这一部分封闭不再需要修改,如果出现新的情况,通过继承抽象类或实现接口添加新的类,就可以完成变化需要。易于扩展。

 3..现在有一个ASP.NET的应用程序,程序中使用了若干Session变量,此应用程序运行在WebFarm模式中,你需要确保所有的服务器上的此程序都能获取这些Session变量,而且当任何一台服务器重启或者停止响应,这些Session对象都不丢失,你应该采取怎样的方案?

答:Redis

4.一般你是怎么解决数据的并发问题的?

答:a)、缓存memcached/Redis(批量读取和延迟修改)

b)、关注点之数据库优化(分离活跃数据/读写分离/分区;分表;索引优化;)

c)、图片服务器分离

d)、使用lock(乐观并发/悲观并发)

e)、使用队列

5.ASP.Net中常见内置对象有?

答:a).Response对象:通过该对象的属性和方法可以控制如何将服务器端的数据发送到客户端浏览器。

b). Request对象:当客户发出请求执行ASP.NET程序时,客户端的请求信息会包装在Request对象中,这些请求信息包括请求报头(Header)、客户端的机器信息,客户端浏览器信息,请求方法(如POST、GET)、提交的窗体信息等。

c).Server对象:反映了Web服务器的各种信息,它提供了服务器可以提供的各种服务。

d). Application对象:一个集合对象,并在整个ASP.NET网站内可用,不同的用户在不同的时间都可以访问Application对象的变量。由于它是一个内置对象,所以使用它的时候与使用Response对象和Request对象类似,不需要进行任何对象的实例化,就可以直接使用。

e).Session对象:负责存储、读取和改变一个特定用户的会话信息。对于每个用户的每次访问Session对象是唯一的。

f). Cookie对象:在Web程序设计中,它表示一个长度不超过4K的一个普通的文本文件。这个文件在用户的硬盘上,可以由Web浏览器进行访问。

6.请简单描述WebAPI跟WebService两者的区别。

答:webapi用的是http协议,webservice用的是soap协议 

webservice只能托管在IIS上,而webapi可是Web Host,Self Host
webapi是Representational State Transfer(资源/表现层/状态转换)风格无状态的,相对webservice更轻量级。

7.简述以下SOA的理解?

答:面向服务的架构(Service-oriented architecture)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

SOA是一种软件系统架构,其通过松耦合的方式,将各个组件的不同功能单元——服务(Service)——连接起来。

企业服务总线(Enterprise Service Bus,ESB),

企业数据总线不是对多个子模块的集成,他在这里充当数据通道的作用,数据总线不关心业务,数据总线根据给的地址和协议去调服务,上端不关心服务在哪里是什么,只找数据总线。

(1)松散耦合;(2)粗粒度;(3)位置和传输协议透明;所谓位置的透明,就是指不论服务组件的实际位置URL如何变化,客户端的调用程序的URL都不需要改变。所谓传输协议的透明,就是指不管服务组件的传输协议如何变化,客户端的调用程序的传输协议都不需要改变。 

SOA架构中有三种角色:

(1)服务提供者Provider:发布自己的服务,并且对服务请求进行响应。

(2)服务注册中心Agent:注册已经发布的web service,对其进行分类,并提供搜索服务。

(3)Consumer服务请求者:利用服务中心查找所需要的服务,然后使用该服务。

SOA的三种操作:

(1)发布操作:为了使服务可访问,需要发布服务描述以使服务使用者可以发现它。

(2)查找操作:服务请求者定位服务,方法是查询服务注册中心来找到满足其标准的服务。

(3)绑定操作:在检索到服务描述之后,服务使用者继续根据服务描述中信息来调用服务。

8.为什么需要依赖注入?

答:a).高层次模块不应该依赖低层次模块,他们应该依赖于一种抽象。

b).这种抽象不应该依赖细节,细节应该依赖于抽象。

从可测试性的角度看,依赖注入是一个基础。因为它使得我们能够在测试时更自然地向被测试代码注入依赖项。

传统的代码,每个对象负责管理与自己需要依赖的对象,导致如果需要切换依赖对象的实现类时,需要修改多处地方。依赖注入把对象的创造交给外部去管理,很好的解决了代码紧耦合(tight couple)的问题,是一种让代码实现松耦合(loose couple)的机制。

松耦合让代码更具灵活性,能更好地应对需求变动,以及方便单元测试。

posted @ 2019-09-11 15:10  FH1004322  阅读(280)  评论(0)    收藏  举报