網易前端面試
這是我經歷的最棒的一次面試,面試體驗很好,面試官也挺不錯,會引導你往哪個方向去思考。
一面:
首先是比較帥氣的一個小哥,先是讓自我介紹,完了之後面試官說講的太快了(哈哈)
然後問了下實習做的東西,主要用的什麼?對React瞭解多少?講講虛擬DOM的概念,Diff演算法有了解過嗎?MVVM模式有了解嗎?然後問如何去判斷(跟蹤)狀態資料變化了,從而觸發檢視UI?
因為簡歷裡有寫看過jQuery原始碼,然後問了些jQuery原始碼的東西。主要是Deferred物件。與ajax返回的物件有何區別?
下來是一個div
裡面有一個a
標籤一個img
標籤,然後讓把整個佈局畫出來,並解釋為什麼?
後面全程都是在這個基礎上的題目。
1. 如果要把a
2. 行內元素與塊級元素有什麼區別?
inline-block
與block
又有什麼區別? 3. 畫一下上面整個的
DOM
結構,包括文字節點以及屬性節點這些(感覺這個挺細節的) 4. 後面還有如何去獲取
a
標籤的href
屬性(這個當時只說了一種方式,直接訪問a.href
,但貌似這個不是面試官想要的,後面面試官有提到getAttribute()
方法。) 5. 如何要給
a
設定寬和高,以及Padding,Margin如何去設定?並且畫出整個佈局?因為這個又涉及到margin
重疊的情況,又問如何去防止margin
重疊 6. 設寬度之後,設的是哪一部分的寬度?如何去規定要設哪一部分的寬度?(box-sizing)
第二個場景,有一個ul
,裡面有很多li
元素,如何去使得點選每個元素打印出對應的索引。(一開始考慮用事件委託來做,但是判斷e.target
是ul
的第幾個孩子不是特別方便,還是用了最原始的方法,給所有li
繫結點選事件,這裡其實涉及到閉包的問題,如何去規避?一個是考慮到let
,另一個就是自執行函式,並將索引作為引數傳進去)
二面:
二面是一個比較溫和的面試官,也是先讓自我介紹,有提到熟悉原生JS
,然後面試官問對CSS
熟嗎,表示不是很熟悉。然後面試官說那先從不熟悉的開始吧。
- 實現一個佈局,上面一個
div
,100px
高,中間一個div
,高度自適應,最下面一個div
,高100px
。(當時第一反映是用flex做,不過現在想想直接這種佈局排下來不就是那種佈局,只不過需要把中間的height
ajax
傳輸資料的時候,在xhr.send(data)時,這個data可以有多種資料格式,比如JSON,比如FormData等等,問如何把一個物件變成這些格式?另外如何去設定?(設定HTTP Header就可以,裡面的Content-Type)- 對HTTP熟悉不?講一下熟悉哪一些方面?講了快取和狀態碼
- 有哪些常見的狀態碼,如何去判斷返回的Code是4開頭的?(正則表示式,並要求寫出來)
- 快取機制有哪些?說說有什麼欄位(講了強快取和協商快取)
- Max-age和Expire有什麼區別?
- Etag和last-modified有什麼不同?
- ES6有用過哪些覺得好的特性?(let,箭頭函式,class, iterator遍歷器),主要講了for…of這個操作
下來就問遍歷物件的幾種方法,for … in 可以遍歷到原型鏈上的方法嗎?可是為什麼一個
a = { name: 'a' }
遍歷之後,只會打印出一個name呢?而沒有原型鏈上的屬性?(涉及到可列舉和不可列舉的概念)
後面就是手寫程式碼。instanceof
有用過嗎?實現一個instance(obj, fn)
函式Math.max
有了解過嗎?實現一個max
函式,如何用陣列的foreach
方法。(這裡用到call和apply)obj = { name: '1' }
,問obj.call
等於什麼?另外有一個函式Fn
,問Fn.call
等於什麼?- 最後就問我有什麼問題?
三面(HR面):
這個HR感覺隨和,一進去就說把包當下,放輕鬆一點。
然後問覺得之前的面試怎麼樣?
下來就是問實習主要做了什麼?參加的比賽主要做了什麼?實驗室的專案主要是研究什麼?對網易有什麼認識?或者說為什麼要來網易?然後為什麼不投網易雲音樂等等。對自己未來十年有什麼想法,最想做的等等。