日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

【web前端面試題附答案】關(guān)于web前端的設(shè)計(jì)模式

時(shí)間:2021-03-13 10:35:39 類型:web前端
字號(hào):    
設(shè)計(jì)模式不是針對(duì)某個(gè)框架的,而是針對(duì)某類問題或某類需求提出的,因此有廣泛的適用性。


我們學(xué)習(xí)設(shè)計(jì)模式不僅要學(xué)習(xí)理論,還要學(xué)習(xí)如何解決實(shí)際工作中的問題,所以在面試中,設(shè)計(jì)模式通常是結(jié)合某類需求考察的。
1、什么是設(shè)計(jì)模式?
設(shè)計(jì)模式是一套反復(fù)使用的并且經(jīng)過分類編目的代碼設(shè)計(jì)經(jīng)驗(yàn)總結(jié)。
2、設(shè)計(jì)模式有哪些?
GOF提出的23種設(shè)計(jì)模式,分為三大類。
創(chuàng)建型模式,共5種,分別是工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結(jié)構(gòu)型模式,共7種,分別是適配器模式、裝飾器模式、代理模式、外觀模式橋接模式、組合模式、享元模式。
行為型模式,共11種,分別是策略模式、模板方法模式、觀察者模式、選代子模式、責(zé)任鏈模式、命令模式、備忘錄模弌、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
在前端開發(fā)中,有些特定的模式不太適用。當(dāng)然,有些適用于前端的模式并未包含在這23種設(shè)計(jì)模式中,如委托模式、節(jié)流模式等。
3、你用過哪些設(shè)計(jì)模式?
工廠模式。
它的優(yōu)點(diǎn)是可以使用工廠方法而不是new關(guān)鍵字消除對(duì)象間的耦合。同時(shí),將所有實(shí)例化的代碼封裝在一起,實(shí)現(xiàn)代碼重復(fù)。工廠模式解決了重復(fù)創(chuàng)建對(duì)象的問題。


function factory(name, age){
var user= new Object();
user.name= name; 
user age= age;
user. getIntro= function(){return this.name+'\' s age is ' +this.age;
} 
return user ;
var xm= factory( 'xiao ming',20); 
console. log(xm. getIntro() )  
// xiao ming's age is 20

4、工廠模式的概念是什么?

其概念如下:

工廠模式需要3個(gè)基本步驟,原料投入、加工過程以及成品出廠,例如以下代碼。

function playerFactory (username){
var user= new object ();
user .username = username;
return user ;
}
var xm = playerFactory( 'xiao ming ')

player Factory函數(shù)中傳遞的參數(shù)就是“基本原料的投入”。從 var user= new Object()直到return之前,都屬于“加工過程”。最后的 return就如同“成品出廠”。

5、工廠模式的缺陷是什么?

缺陷如下

(1)沒有使用new關(guān)鍵字,在創(chuàng)建對(duì)象的過程中,看不到構(gòu)造函數(shù)實(shí)例化的過程。

(2)每個(gè)實(shí)例化的對(duì)象都創(chuàng)建相應(yīng)的變量和函數(shù),因此需要更多的空間進(jìn)行屬性和方法的存儲(chǔ),從而降低了性能,造成資源的浪費(fèi)。

6、說說你對(duì)MVC架構(gòu)和MwWM架構(gòu)的理解。

在經(jīng)典的MVC架構(gòu)中,包含3個(gè)部分,即模型( Model)、視圖(view)和控制器(Controller)??刂破骺梢栽L問視圖,讓其更新??刂破骺梢栽L問模型,更新數(shù)據(jù)。視圖可以訪問模型,獲取數(shù)據(jù)渲染頁(yè)面。

在MwVM架構(gòu)中,包含3個(gè)部分,即模型( Model)、視圖(View)和視圖模型(View Model)。視圖模型負(fù)責(zé)視圖與模型之間的信息轉(zhuǎn)換,通過欻據(jù)雙向綁定使視圖與模型之間的數(shù)據(jù)得以傳遞。

例如代表性的框架 Angular,它通過數(shù)據(jù)綁定,將模型中的數(shù)據(jù)映射到視圖中,通過事件監(jiān)聽器( event listener),將視圖改變的數(shù)據(jù)存儲(chǔ)在模型內(nèi)

7、什么是事件代理?

事件代理( Event Delegation)又稱為事件委托,是 JavaScript中常用的綁定事件的方式。顧名思義,“事件代理”就是把原本需要綁定到子元素的事件委托給父元素,讓父元素承擔(dān)事件監(jiān)聽的工作。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處有很多,如減少事件數(shù)量,預(yù)測(cè)未來元素,避免內(nèi)存外泄等,有利于提高性能。

8、請(qǐng)說說工廠模式的優(yōu)缺點(diǎn)。

優(yōu)點(diǎn)如下。

(1)一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道它的名稱即可。

(2)擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠類即可。

(3)屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只需關(guān)心產(chǎn)品的接口。

缺點(diǎn)如下。

每次增加一個(gè)產(chǎn)品時(shí),都需要増加一個(gè)具體類和對(duì)象實(shí)現(xiàn)工廠,使得系統(tǒng)中類的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類的依賴。

9、單例模式的優(yōu)缺點(diǎn)是什么?

優(yōu)點(diǎn)如下。

(1)提供了對(duì)唯一實(shí)例的受控訪問。

(2)由于在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以節(jié)約系統(tǒng)資源,對(duì)于一些需要頻繁創(chuàng)建和銷毀的對(duì)象,單例模式無疑能夠提高系統(tǒng)的性能。

(3)可以根據(jù)實(shí)際情況的需要,在單例模式的基礎(chǔ)上擴(kuò)展為雙例模式和多例模式。

缺點(diǎn)如下。

(1)單例類的職責(zé)過重,里面的代碼可能會(huì)過于復(fù)雜,在一定程度上違背了“單職責(zé)原則”。

(2)如果實(shí)例化的對(duì)象長(zhǎng)時(shí)間不利用,系統(tǒng)會(huì)認(rèn)為它是垃圾而進(jìn)行回收,這將導(dǎo)致對(duì)象狀態(tài)的丟失。

10、使用工廠模式最主要的好處是什么?

好處如下:

(1)把對(duì)象的創(chuàng)建集中在一個(gè)地方(工廠),在增加新的對(duì)象類型的時(shí)候,只需要改變工廠方法。當(dāng)不使用工廠模式的時(shí)候,改變創(chuàng)建方式則需要四處修改,增加維護(hù)成本。

(2)新的對(duì)象類型可以很容易地添加進(jìn)來。

(3)只需要關(guān)心工廠方法返回的對(duì)象,不必關(guān)心具體創(chuàng)建的細(xì)節(jié)。

11、什么是代理模式?

代理( proxy)模式,即為目標(biāo)對(duì)象指定代理對(duì)象,并由代理對(duì)象代替目標(biāo)對(duì)象控制客戶端對(duì)目標(biāo)對(duì)象的訪問。

12、原型模式和單例模式的區(qū)別是什么?

單例模式就是保證一個(gè)類只存在一個(gè)實(shí)例,只初始化一次,第一次完成初始化以后,在重復(fù)使用的時(shí)候,返回的都是這個(gè)實(shí)例,而不是新建一個(gè)實(shí)例。如果實(shí)例化的對(duì)象里面的屬性值已經(jīng)改變,就不能用單例了,只能通過原型模式重新實(shí)例化,原型模式允許多次創(chuàng)建實(shí)例對(duì)象。

13、組合模式的適用性指的是什么?

組合模式是表示對(duì)象的“部分-整體”層次結(jié)構(gòu)的一種設(shè)計(jì)模式;組合模式將對(duì)象組合成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。

14、什么時(shí)候要使用組合模式?

在以下情況下使用組合模式

(1)當(dāng)想表示對(duì)象的“部分-整體”層次結(jié)構(gòu)(樹狀結(jié)構(gòu))時(shí)可以使用組合模式

(2)在希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同并且統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象時(shí)使用組合模式。

15、設(shè)計(jì)模式都有哪些問題?

設(shè)計(jì)模式可以讓你用前人總結(jié)的經(jīng)典場(chǎng)景來分析實(shí)現(xiàn)某些功能時(shí)需要什么角色如何合理地設(shè)置接口、提高系統(tǒng)各個(gè)層次的獨(dú)立性、降低耦合度等。然而,這也不是絕對(duì)的。不論是設(shè)計(jì)模式、還是開發(fā)框架,都是為了有效開發(fā)而出現(xiàn)的,但常常出現(xiàn)“殺雞用牛刀”的情況,所以學(xué)的時(shí)候最好要多對(duì)比,從不同角度理解與測(cè)試,不能照搬書中的內(nèi)容,這不是設(shè)計(jì)模式的精髓。

16、你在開發(fā)中都用到了哪些設(shè)計(jì)模式?它們的作用分別是什么?

毎個(gè)模式都描述了一個(gè)在開發(fā)環(huán)境中不斷岀現(xiàn)的問題,然后描述了該問題的解決方案。用這種方式,可以無限次地使用那些已有的解決方案,無須再做重復(fù)、相同的工作。

開發(fā)中常用到的模式如下。

singleton:?jiǎn)卫J?,用來減少重復(fù)創(chuàng)建對(duì)象。

factory:工廠模式,用來解耦。

iterator:迭代器模式,用來遍歷對(duì)象。

observer:觀察者模式,用來收發(fā)消息。

templete:模板模式,用來避免執(zhí)行相同的操作。

strategy:策略模式,用來定義算法等。


<