前端面試1

記錄下我遇到過的前端面試題 (一)

(一)簡述Vue的雙向綁定:

????????最近的項目基本都是基于Vue進行開發(fā)的疆偿,但是卻對Vue的雙向綁定原理理解的馬馬虎虎鄙皇。被面試到這個問題的時候播玖,我的回答是:基于Object.defineProperty()這個核心方法褐奥,并且通過這個方法的setter和getter對數(shù)據(jù)進行劫持監(jiān)聽和設(shè)置新值肤寝。當(dāng)被問到能再詳細點嗎,就傻眼了(自由發(fā)揮抖僵。鲤看。。)耍群。

鑒于此义桂,雖然不求完全吃透,但是用了這么久蹈垢,起碼雙向綁定的實現(xiàn)邏輯得能簡述出來慷吊。

Vue數(shù)據(jù)雙向綁定原理

采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter曹抬,getter溉瓶,在數(shù)據(jù)變動時發(fā)布消息給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。此時實現(xiàn)過程涉及3個非常重要的東東:Observer堰酿、Watcher疾宏、Compile。

Observer: 一個數(shù)據(jù)監(jiān)聽器触创,首先是通過遞歸方法遍歷所有的屬性值坎藐,并且使用Object.defineProperty( )來對值進行劫持綁定。

Watcher:一個訂閱者哼绑,用于接收Observer發(fā)來的更新信息岩馍,并且執(zhí)行相應(yīng)的更新回調(diào)。

Compile:對每個元素節(jié)點的指令進行掃描和解析抖韩,根據(jù)指令模板替換數(shù)據(jù)蛀恩,以及綁定相應(yīng)的更新函數(shù)

實現(xiàn)過程:

首先數(shù)據(jù)監(jiān)聽器Observer,能夠?qū)?shù)據(jù)對象的所有屬性進行監(jiān)聽茂浮,如有變動可拿到最新值并通知訂閱者Watcher双谆。Watcher連接Observer和Compile的橋梁,能夠訂閱并收到每個屬性變動的通知励稳,執(zhí)行指令綁定的相應(yīng)回調(diào)函數(shù)佃乘,從而更新視圖。


(二)說說瀏覽器渲染過程:

? ? ? ? 當(dāng)時碰到這個問題的時候也是挺懵逼的驹尼,因為不太清楚問的是哪個過程趣避。那么這邊就以頁面生成的過程作為問題。我記得我當(dāng)時的回答是:首頁HTML生成好DOM樹新翎,然后CSS規(guī)則生成樹程帕,接著結(jié)合HTML樹和CSS規(guī)則樹布局。嗯嗯地啰,渣渣的問答愁拭。

具體渲染過程:

1. 解析HTML生成DOM樹。

2. 解析CSS生成CSSOM規(guī)則樹亏吝。

3. 將DOM樹與CSSOM規(guī)則樹合并在一起生成渲染樹岭埠。

4. 遍歷渲染樹開始布局,計算每個節(jié)點的位置大小信息蔚鸥。

5. 將渲染樹每個節(jié)點繪制到屏幕惜论。


注意的是:

1. 渲染過程會碰到渲染阻塞。也就是當(dāng)瀏覽器遇到一個 script 標記時止喷,DOM 構(gòu)建將暫停馆类,直至腳本完成執(zhí)行,然后繼續(xù)構(gòu)建DOM弹谁。每次去執(zhí)行JavaScript腳本都會嚴重地阻塞DOM樹的構(gòu)建乾巧,如果JavaScript腳本還操作了CSSOM句喜,而正好這個CSSOM還沒有下載和構(gòu)建,瀏覽器甚至?xí)舆t腳本執(zhí)行和構(gòu)建DOM沟于,直至完成其CSSOM的下載和構(gòu)建咳胃。

2.?CSS 優(yōu)先:引入順序上,CSS 資源先于 JavaScript 資源社裆; JS置后:我們通常把JS代碼放到頁面底部拙绊,且JavaScript 應(yīng)盡量少影響 DOM 的構(gòu)建向图。


(三)實現(xiàn)一個滾動型的無限加載數(shù)據(jù)組件:

? ? ? ? 當(dāng)時回答的實現(xiàn)邏輯是有2種:

? ? ? ? ?(1) 首先請求前2頁的數(shù)據(jù)泳秀,然后給滾動條綁定一個滾動事件,監(jiān)聽滾動條滾動距離榄攀,當(dāng)滾動條滾動到離底部還有一定的距離的時候馬上請求下一頁的數(shù)據(jù)嗜傅。(記得解綁事件)

? ? ? ? ?(2) 首先請求前2頁的數(shù)據(jù),然后添加一個定時器函數(shù)檩赢,每隔0.5s監(jiān)聽當(dāng)前瀏覽器高度吕嘀,當(dāng)滾動條高度離底部還有一定的距離的時候馬上請求下一頁的數(shù)據(jù)。(記得清楚定時器)

? ? ? ? 如果還有其他更好的辦法贞瞒,麻煩指教下哈哈哈偶房。


(四)CSS垂直居中方式:

? ? 面試的時候好像回答出了好幾個,也沒回答全部军浆。不過當(dāng)時是被面試人員像擠奶一樣擠出來的棕洋,面試員就一句:還有嗎?

????那就重新整理下:

? ? (1)文本居中用line-height乒融;

? ? (2)vertical-align屬性掰盘;

? ? (3)display:table (或者:+?vertical-align);

????(4)display:fiex赞季;

? ? (5)position:absolute + margin愧捕;(有多種實現(xiàn)方式,可以具體查查)?

? ? (6)position:absolute(50%申钩, 50%) +?transform:translate(-50%,-50%)次绘; //實際原理和第5點很像

? ? (7)padding和margin + 已知距離;

? ? (更多.....?)

(五)實現(xiàn)接口同步請求的方式:

? ?當(dāng)時只回答出了函數(shù)內(nèi)回調(diào)(俗稱地獄回調(diào))撒遣、Promise邮偎、async(await)。 后來查了下愉舔,通過generator函數(shù)也可以钢猛。


(六)JS的數(shù)據(jù)類型和引用類型:

??六大數(shù)據(jù)類型:Number、String轩缤、Boolean命迈、Null贩绕、Object、undefind(我當(dāng)時漏掉這個)壶愤;

? 三大引用類型:Object淑倾、Array、Function征椒;


(七) 什么是高階函數(shù)

英文叫Higher-order function娇哆。JavaScript的函數(shù)其實都指向某個變量。既然變量可以指向函數(shù)勃救,函數(shù)的參數(shù)能接收變量碍讨,那么一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)蒙秒。常用高階函數(shù)有map/reduce/filter等等勃黍。



(八) Flex布局

Flex 是 Flexible Box 的縮寫,意為"彈性布局"晕讲,用來為盒狀模型提供最大的靈活性覆获。任何一個容器都可以指定為 Flex 布局∑笆。基本屬性:flex-basis弄息、flex-direction、flex-flow勤婚、flex-grow摹量、flex-shrink、flex-wrap


后話:

簡單粗略記錄了一下蛔六,希望以后再次面試到這個問題荆永,肚子有水還能再吹吹!(僅供參考国章,如有疑問錯誤請指出)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末具钥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子液兽,更是在濱河造成了極大的恐慌骂删,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件四啰,死亡現(xiàn)場離奇詭異宁玫,居然都是意外死亡,警方通過查閱死者的電腦和手機柑晒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門欧瘪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匙赞,你說我怎么就攤上這事佛掖⊙铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵芥被,是天一觀的道長欧宜。 經(jīng)常有香客問我,道長拴魄,這世上最難降的妖魔是什么冗茸? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮匹中,結(jié)果婚禮上夏漱,老公的妹妹穿的比我還像新娘。我一直安慰自己职员,他們只是感情好麻蹋,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布跛溉。 她就那樣靜靜地躺著焊切,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芳室。 梳的紋絲不亂的頭發(fā)上专肪,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音堪侯,去河邊找鬼嚎尤。 笑死,一個胖子當(dāng)著我的面吹牛伍宦,可吹牛的內(nèi)容都是我干的芽死。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼次洼,長吁一口氣:“原來是場噩夢啊……” “哼关贵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卖毁,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤揖曾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亥啦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炭剪,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年翔脱,在試婚紗的時候發(fā)現(xiàn)自己被綠了奴拦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡届吁,死狀恐怖错妖,靈堂內(nèi)的尸體忽然破棺而出隶糕,到底是詐尸還是另有隱情,我是刑警寧澤站玄,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布枚驻,位于F島的核電站,受9級特大地震影響株旷,放射性物質(zhì)發(fā)生泄漏再登。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一晾剖、第九天 我趴在偏房一處隱蔽的房頂上張望锉矢。 院中可真熱鬧,春花似錦齿尽、人聲如沸沽损。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绵估。三九已至,卻和暖如春卡骂,著一層夾襖步出監(jiān)牢的瞬間国裳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工全跨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缝左,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓浓若,卻偏偏與公主長得像渺杉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挪钓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前端面試問題集錦 JavaScript 部分 1是越、JQuery $(document).ready() 和 win...
    涯無凌閱讀 941評論 0 2
  • 1.如何判別Object、Array對象 通過Object.prototype.toString可以檢測Objec...
    卡農(nóng)me閱讀 456評論 0 1
  • 背景 這學(xué)期想找一份暑假實習(xí)诵原,3.12走內(nèi)推投了阿里英妓,現(xiàn)在三面已經(jīng)過去一周多,趁著假期記錄一下绍赛。 一面(3.16)...
    睡的巨晚閱讀 333評論 0 2
  • 1.請你談?wù)凜ookie的弊端 cookie雖然在持久保存客戶端數(shù)據(jù)提供了方便蔓纠,分擔(dān)了服務(wù)器存儲的負擔(dān),但還是有很...
    熊孩子CEO閱讀 722評論 0 11
  • 把我喚醒的是你吗蚌, 在每一個安靜的清晨腿倚。 努力尋找的是你, 在每一次睡醒之后蚯妇。 讓我煩躁的是你敷燎, 在每一次與你分開以...
    無敵老超人閱讀 495評論 6 9