前言
這是我第二次來網(wǎng)易面試了,已掛铆隘,二面面試官對代碼質(zhì)量比較嚴(yán)格,看來要加強(qiáng)對自己寫優(yōu)雅代碼的要求了南用。
一面
一面被分到有兩個面試官的組膀钠,兩位大哥還算好講話,雖然是面試裹虫,但是我和他們談笑風(fēng)生肿嘲,到了最后還有點(diǎn)意猶未盡的感覺~
自我介紹完:
1.?對前端安全的理解
講了講XSS、CSRF筑公、點(diǎn)擊劫持雳窟、社會工程學(xué)等等的特點(diǎn)、攻防方式
2.對模塊化的了解
講了講amd匣屡、cmd封救、es6的模塊特點(diǎn)和區(qū)別,后面想想應(yīng)該加上angular模塊和懶加載的部分
3.angular雙向綁定的原理
這個問題我已經(jīng)...
4.左邊固定右邊自適應(yīng)CSS布局:
- 浮動
- 絕對布局
- 表格與表格布局
- inline-block
- flex
- grid
5.對HTML5標(biāo)簽語義化的理解
我去~又是這題,詳情請看對HTML5標(biāo)簽的一些思考
6.css動畫捣作,追問:js動畫寫過嗎誉结?position有哪些基本值?它們有什么區(qū)別券躁?
簡單說了說translate/transform/animation惩坑,沒有寫過js動畫掉盅。
a/r/f/s...相對于頁面/自身/屏幕/默認(rèn)定位
7.異步的幾種方式
詳情見幾種異步編程的方式
8.自己實現(xiàn)bind函數(shù)
// 簡單的輔助綁定函數(shù)
function bind(fn, obj) {
return function() {
return fn.apply( obj, arguments );
};
}
9.談?wù)勴椖亢蛢?yōu)化的地方?
直接拿成績有毒給他們演示以舒,講了一個懶加載列表+事件代理解決加載列表卡頓的情況趾痘。追問:怎么控制事件觸發(fā)頻率?怎么實現(xiàn)的蔓钟?
用debounce節(jié)流永票,內(nèi)部有個閉包和定時器實現(xiàn)...
10.get和post區(qū)別
二面
面試官一上來就詫異道:咦,你怎么會是*云峰奋刽?不對呀...然后就開始做他自己的事情了(他帶了電腦在做著什么事情)瓦侮,經(jīng)過了大約一分鐘的沉默后,他開始出題了:
1.手寫一個select組件佣谐,就是點(diǎn)一下select出來一個列表肚吏,點(diǎn)擊列表項select自動填充。
我:可以有一個Select狭魂、List罚攀、ListItem類,然后傳統(tǒng)的DOM驅(qū)動的寫法是先獲取到它們的DOM節(jié)點(diǎn)再監(jiān)聽事件雌澄,觸發(fā)事件后執(zhí)行相應(yīng)的邏輯斋泄,MVVM的寫法是使用數(shù)據(jù)來控制它們的行為...然后開始寫
面試官:你寫的太復(fù)雜了,這題根本不需要用到面向?qū)ο蟾湮喕幌?br> 我:請?zhí)崾疽幌拢?br> 面試官:select和列表都在一個父元素里
我:父元素設(shè)為relative定位炫掐,里面的列表設(shè)為absolute定位,然后寫一個函數(shù)睬涧,參數(shù)是源dom和目標(biāo)dom募胃,可以把源dom的值展現(xiàn)到目標(biāo)dom上去。
面試官:嗯...然后繼續(xù)手頭上的工作
(代碼暫時先不貼畦浓,這一塊到底怎么寫才優(yōu)雅我現(xiàn)在還有點(diǎn)疑惑)
2.模版用過沒有痹束?&*%、%¥(沒聽懂讶请,應(yīng)該是一些模板)字符串怎么解析成模板的祷嘶?特別是帶邏輯的那一塊?
我:Angular的字符串解析模板了解一點(diǎn),是用裝飾器...但我還沒說完就叫停了
考官:沒用過就算了吧夺溢,不過怎么可能沒用過呢论巍?
這個時候我已經(jīng)開始出冷汗了...
3.手寫用setTimeout模擬setInterval
開始我說setTimeout里面再調(diào)用setTimeout
面試官:不對
我想了一會:自定義一個mySetInterval函數(shù)
function mySetInterval(cb,time){
let temp = function(){
setTimeout(temp,time)
cb.apply(null)
}
setTimeout(temp,time)
}
面試官:嗯...又是一段沉默,然后繼續(xù)做他的事情
4.給一個字符串?dāng)?shù)組风响,根據(jù)他們的開頭分類
使用哈希做輔助數(shù)據(jù)結(jié)構(gòu)做這件事情嘉汰,本來還想說實現(xiàn)基本功能后應(yīng)該還要考慮健壯性啥的,可是剛寫完就下一題了...
function order(strArr){
let hash = {}
strArr.forEach(e=>{
let key = e.substring(0,1)
if(hash[key]) hash[key].push(e)
else hash[key] = [e]
})
return hash
}
5.代碼優(yōu)化了解過嗎钞诡?
我:我了解一點(diǎn)優(yōu)化時間復(fù)雜度的方法郑现,還有一些優(yōu)化DOM操作的方法,比如使用DOMFragment而不是直接操作DOM...
面試官:不不不荧降,你說的是性能優(yōu)化接箫。我指的是代碼優(yōu)化,就是有幾百行已有的代碼朵诫,你怎么優(yōu)化它辛友?有讀過相關(guān)的書嗎?
我:沒有...能不能推薦一下相關(guān)的資料呢剪返?我面試完去學(xué)習(xí)一下
面試官:這個網(wǎng)上到處都是~結(jié)束這次面試吧废累。