<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【前端面試題】06—16道設計模式面試題(附答案)

          共 3154字,需瀏覽 7分鐘

           ·

          2021-03-08 11:01

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

          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關鍵字,在創(chuàng)建對象的過程中,看不到構造函數(shù)實例化的過程。

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

          6、說說你對MC架構和MwWM架構的理解。

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

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

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

          7、什么是事件代理?

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

          8、請說說工廠模式的優(yōu)缺點。

          優(yōu)點如下。

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

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

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

          缺點如下。

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

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

          優(yōu)點如下。

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

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

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

          缺點如下。

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

          (2)如果實例化的對象長時間不利用,系統(tǒng)會認為它是垃圾而進行回收,這將導致對象狀態(tài)的丟失。

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

          好處如下:

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

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

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

          11、什么是代理模式?

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

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

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

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

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

          14、什么時候要使用組合模式?

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

          (1)當想表示對象的“部分-整體”層次結(jié)構(樹狀結(jié)構)時可以使用組合模式

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

          15、設計模式都有哪些問題?

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

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

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

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

          singleton:單例模式,用來減少重復創(chuàng)建對象。

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

          iterator:迭代器模式,用來遍歷對象。

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

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

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


          本文完~

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  乱伦一级| 日本一级黄色A片 | 色情综合 | 人人操人人超碰 | 性大毛片视频 |