前言
才面完蘑菇街就收到了百度的短信,沒辦法,面吧
面試題
1.自我介紹
這次真是超級(jí)后悔提Angular
2.為什么要用依賴注入,它的好處是什么?
它是一種設(shè)計(jì)模式,可以讓類從外部源中獲得它的依賴,而不必親自創(chuàng)建它們。最大的好處是讓使用者和被使用者解耦,從而反轉(zhuǎn)依賴。
3.有沒有用過Angular的工廠?
沒有,ag2 以后的factory和 ag1 的有比較大的區(qū)別,ag2 弱化了 factory 模式,不過了解一點(diǎn)工廠模式:定義一個(gè)創(chuàng)建對(duì)象的接口,但讓實(shí)現(xiàn)這個(gè)接口的類來決定實(shí)例化哪個(gè)類。工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。不過當(dāng)工廠需要實(shí)例化的類越來越多時(shí),工廠類將變成由相互依賴的工廠方法構(gòu)成的巨型蜘蛛網(wǎng)。
4.ES6的模塊化是什么?import進(jìn)來直接用和Angular的依賴注入進(jìn)來用有什么區(qū)別?
import和export導(dǎo)入導(dǎo)出模塊,一個(gè)文件就是一個(gè)模塊,最主要的區(qū)別是依賴前置和依賴反轉(zhuǎn)。
5.數(shù)據(jù)類型有哪幾種?引用和基本數(shù)據(jù)類型的區(qū)別?
7種,number、string、boolean、null、undefined、object、Symbol。
基本放堆里,引用放棧里,引用數(shù)據(jù)類型會(huì)有修改一個(gè)變量,導(dǎo)致和它相同引用的變量也被修改的情況。
6.談?wù)勗玩?,Object.prototype的原型是什么?
原型鏈?zhǔn)荍S這門基于原型編程范式的基礎(chǔ),它把所有對(duì)象都看做是Object的派生,每個(gè)對(duì)象都有原型對(duì)象,使用prototype和__proto__來標(biāo)識(shí),當(dāng)然Object.getOwnProperty()也可以獲取原型,當(dāng)我們需要一個(gè)對(duì)象的屬性時(shí),它會(huì)沿著原型鏈一級(jí)一級(jí)向上找。
null
7.對(duì)象淺拷貝怎么做?使用JSON.parse(JSON.stringify(...))的方法有什么壞處?
Object.assign()或者先轉(zhuǎn)JSON再轉(zhuǎn)回對(duì)象,對(duì)象只有屬性被拷貝過來。
8.談?wù)勯]包,解釋一下閉包中變量在內(nèi)存中的形態(tài)?閉包的實(shí)際應(yīng)用場景有哪些?
閉包是指這樣的作用域,它包含有一個(gè)函數(shù),這個(gè)函數(shù)可以調(diào)用被這個(gè)作用域所封閉的變量、函數(shù)或者閉包等內(nèi)容。通常我們通過閉包所對(duì)應(yīng)的函數(shù)來獲得對(duì)閉包的訪問。
閉包里的變量在內(nèi)存中是不會(huì)被清除的,如果循環(huán)引用會(huì)引起內(nèi)存泄露。
當(dāng)函數(shù)可以記住并訪問所在的詞法作用域時(shí),就產(chǎn)生了閉包,即使函數(shù)是在當(dāng)前詞法作用域之外執(zhí)行。
詞法作用域的查找規(guī)則只是閉包的一部分。
IIFE是封閉的閉包。
應(yīng)用場景:創(chuàng)建一個(gè)模塊(保護(hù)變量),必須有外部的封閉函數(shù),然后至少被調(diào)用一次。封閉函數(shù)必須返回至少一個(gè)內(nèi)部函數(shù),這樣內(nèi)部函數(shù)才能在私有作用域中形成閉包。
9.你為什么選擇學(xué)node?它和多線程語言相比有什么缺點(diǎn)和優(yōu)點(diǎn)?node有可能會(huì)出現(xiàn)java中的死鎖嗎?
前后端同構(gòu),成本小。異步執(zhí)行,非阻塞式,事件驅(qū)動(dòng),某些方面速度和效率沒有java、go之類的語言高。node不會(huì)出現(xiàn)鎖,因?yàn)楦静辉试S使用鎖。
10.談?wù)凧S中的對(duì)象和類,class在JS中的實(shí)現(xiàn)是什么樣的?
詳情請(qǐng)看另一篇文章Javascript的面向?qū)ο?/a>
11.typeof Funcion答案是什么?
"function"