1. 程式人生 > >網易前端面試

網易前端面試

這是我經歷的最棒的一次面試,面試體驗很好,面試官也挺不錯,會引導你往哪個方向去思考。

一面:
首先是比較帥氣的一個小哥,先是讓自我介紹,完了之後面試官說講的太快了(哈哈)
然後問了下實習做的東西,主要用的什麼?對React瞭解多少?講講虛擬DOM的概念,Diff演算法有了解過嗎?MVVM模式有了解嗎?然後問如何去判斷(跟蹤)狀態資料變化了,從而觸發檢視UI?
因為簡歷裡有寫看過jQuery原始碼,然後問了些jQuery原始碼的東西。主要是Deferred物件。與ajax返回的物件有何區別?
下來是一個div裡面有一個a標籤一個img標籤,然後讓把整個佈局畫出來,並解釋為什麼?
後面全程都是在這個基礎上的題目。
1. 如果要把a

變成一個塊級元素,怎麼去設定?並畫出佈局
2. 行內元素與塊級元素有什麼區別?inline-blockblock又有什麼區別?
3. 畫一下上面整個的DOM結構,包括文字節點以及屬性節點這些(感覺這個挺細節的)
4. 後面還有如何去獲取a標籤的href屬性(這個當時只說了一種方式,直接訪問a.href,但貌似這個不是面試官想要的,後面面試官有提到getAttribute()方法。)
5. 如何要給a設定寬和高,以及Padding,Margin如何去設定?並且畫出整個佈局?因為這個又涉及到margin重疊的情況,又問如何去防止margin重疊
6. 設寬度之後,設的是哪一部分的寬度?如何去規定要設哪一部分的寬度?(box-sizing)

第二個場景,有一個ul,裡面有很多li元素,如何去使得點選每個元素打印出對應的索引。(一開始考慮用事件委託來做,但是判斷e.targetul的第幾個孩子不是特別方便,還是用了最原始的方法,給所有li繫結點選事件,這裡其實涉及到閉包的問題,如何去規避?一個是考慮到let,另一個就是自執行函式,並將索引作為引數傳進去)

二面:
二面是一個比較溫和的面試官,也是先讓自我介紹,有提到熟悉原生JS,然後面試官問對CSS熟嗎,表示不是很熟悉。然後面試官說那先從不熟悉的開始吧。

  1. 實現一個佈局,上面一個div100px高,中間一個div,高度自適應,最下面一個div,高100px。(當時第一反映是用flex做,不過現在想想直接這種佈局排下來不就是那種佈局,只不過需要把中間的height
    設定成100%)
  2. ajax傳輸資料的時候,在xhr.send(data)時,這個data可以有多種資料格式,比如JSON,比如FormData等等,問如何把一個物件變成這些格式?另外如何去設定?(設定HTTP Header就可以,裡面的Content-Type)
  3. 對HTTP熟悉不?講一下熟悉哪一些方面?講了快取和狀態碼
  4. 有哪些常見的狀態碼,如何去判斷返回的Code是4開頭的?(正則表示式,並要求寫出來)
  5. 快取機制有哪些?說說有什麼欄位(講了強快取和協商快取)
  6. Max-age和Expire有什麼區別?
  7. Etag和last-modified有什麼不同?
  8. ES6有用過哪些覺得好的特性?(let,箭頭函式,class, iterator遍歷器),主要講了for…of這個操作
  9. 下來就問遍歷物件的幾種方法,for … in 可以遍歷到原型鏈上的方法嗎?可是為什麼一個a = { name: 'a' }遍歷之後,只會打印出一個name呢?而沒有原型鏈上的屬性?(涉及到可列舉和不可列舉的概念)
    後面就是手寫程式碼。

  10. instanceof有用過嗎?實現一個instance(obj, fn)函式

  11. Math.max有了解過嗎?實現一個max函式,如何用陣列的foreach方法。(這裡用到call和apply)
  12. obj = { name: '1' },問obj.call等於什麼?另外有一個函式Fn,問Fn.call等於什麼?
  13. 最後就問我有什麼問題?

三面(HR面):
這個HR感覺隨和,一進去就說把包當下,放輕鬆一點。
然後問覺得之前的面試怎麼樣?
下來就是問實習主要做了什麼?參加的比賽主要做了什麼?實驗室的專案主要是研究什麼?對網易有什麼認識?或者說為什麼要來網易?然後為什麼不投網易雲音樂等等。對自己未來十年有什麼想法,最想做的等等。