前端面試問題小彙集

Jouryjc發表於2018-04-04

問題集錦

年後回來到現在,大大小小的也去面了十幾家公司。騰訊、京東、阿里、頭條、shopee、百度、大豐收、深信服、平安科技等等,目前收到了其中5家的offer。在此分享一下經歷。

自我介紹

要有套路。如何引導面試官問你擅長的領域就看自我介紹了。學歷專業簡述、專案細說、興趣特長一句帶過。

react和vue你都使用過,說說它們的區別?

推薦這篇文章

vue的原始碼看過沒?說說基本的實現?實現雙向繫結的原理?

即使沒有實際地閱讀過原始碼,也要找別人分享的部落格去了解其中的原理。

推薦博文

說說你理解的虛擬dom?diff演算法是怎麼做的?
  • 用JS物件模擬DOM樹
  • 比較兩棵虛擬DOM樹的差異
  • 把差異應用到真正的DOM樹上

推薦《深度剖析,如何實現一個Virtual Dom演算法》

redux和vuex的區別?

摘取尤大的知乎回答:

Vuex 其實是一個針對 Vue 特化的 Flux,主要是為了配合 Vue 本身的響應式機制。當然吸取了一些 Redux 的特點,比如單狀態樹和便於測試和熱過載的 API,但是也選擇性的放棄了一些在 Vue 的場景下並不契合的特性,比如強制的 immutability(在保證了每一次狀態變化都能追蹤的情況下強制的 immutability 帶來的收益就很有限了)、為了同構而設計得較為繁瑣的 API、必須依賴第三方庫才能相對高效率地獲得狀態樹的區域性狀態等等(相比之下 Vuex 直接用 Vue 本身的計算屬性就可以)

所以 Vue + Vuex 會更簡潔,也不需要考慮效能問題,代價就是 Vuex 只能和 Vue 配合。Vue + Redux 也不是不可以,但是 Redux 作為一個泛用的實現和 Vue 的契合度肯定不如 Vuex。

說出你知道的所有選擇器權重?

important > 內聯 > ID > 類 > 標籤 | 偽類 | 屬性選擇 > 偽物件 > 繼承 > 萬用字元

說說你知道的所有偽類元素?(知道多少說多少)

LVHA(LV哈,簡單明瞭)、focus、before、after、checked、disabled、last-child、first-child......很多,就不一一列舉了。

你知道的父子選擇器和兄弟選擇器。

父子 > , 兄弟 +

行內元素和塊級元素有哪些?區別是什麼?

不知道的童鞋前往前方

你理解的盒子模型?

必問,無非就是圍繞css3新屬性 box-sizing 的兩個值 content-box 和 border-box。

html5所有的新特性?以及對應屬性的相容性(知道多少說多少)

相容瀏覽器這個問題,知道一些常用API的就好,也不可能全部記住。像canvas這個相容性還是要知道的。

實現三列布局,左右固定寬度,中間響應式。相容性儘量好。

常見的兩列布局、三列布局實現要知道,知道2-3種實現方式為上策。而且相容性方面也要知道,比如用了flex的話就相容IE10+。

BFC的理解。什麼情況會產生BFC。

必問。什麼情況下會產生BFC,怎麼處理等等。

你知道的ES6新特性?

這裡有個注意的點是,常用的一些API要知道基本的實現。比如你常用promise,相關的庫如bluebird是怎麼實現的。

你知道的所有前端安全知識?怎麼預防?怎麼測試?

前端安全XSS、CSRF、SQL隱碼攻擊。什麼場景會產生這些問題。預防和測試手段,測試手段比較少問。

你知道的http狀態碼?

必問。常見的狀態碼和說明必須知道。200、204、206、301、302、304、307、400、401、403、404、500、503

304是怎麼產生的還是要知道的。

你理解的cookie?跟session有什麼區別?http中設定cookie的頭部欄位有哪些?

前兩個問題自行查閱哈,比較簡單。頭部欄位的話有Cookie和Set-Cookie

你知道的http頭部?

通用首部欄位、請求首部欄位、響應首部欄位。這個太多了,平時用到的一些熟悉就好。

Date、Upgrade、Connection、Authorization、Accept、Accept-Charset、Host、From、Referer、Location......

建議閱讀圖解HTTP。

快取相關的頭部?

分為強快取、協商快取去記會簡單點。

推薦博文

你知道的所有排序演算法?手寫快排演算法。

前端對基礎的資料結構和演算法還是要非常熟悉的。這個也經常會問到。

寫出所有你知道的git命令。

團隊協作方面,版本管理工具。

用ES3實現bind函式。

類似這種API的原理,比如new的過程、Object.create的實現、curry函式的實現也會經常碰到。推薦冴羽的深入系列

js實現繼承的方式。

原型鏈、js實現繼承等類似基礎的問題都是必考的。這個還是建議閱讀冴羽的深入系列,整個系列閱讀下來有一個比較深刻的概念。

使用promise模擬一個解決多級回撥巢狀問題。

場景解決方案問題。這種方式出現的頻率還是很高的。類似比如vue在不使用分頁的前提下如何處理海量資料。

平時開發用的工具。

前端常用的一些工具,例如抓包wireshark、fiddler,編碼工具vscode、sublime,除錯工具瀏覽器控制檯等,webpack、gulp等等。webpack的原理要了解下。

專案開發流程。專案中有什麼比較複雜的難點。怎麼解決的。還有沒優化點。

自由發揮,針對性地突出自己擅長的領域。

平時開發中,有注意設計模式嗎?說說你知道的設計模式。

跪!!!但是被問的概率還是蠻大的,需要了解一些基本的設計模式例如單例、工廠、迭代、裝飾者、代理等等。

寫在最後

還有其他一些的問題在這裡就不一一列舉了。針對崗位所需的一些技能去發散,這類問題根據崗位要求而定。比如說京東手Q微信業務,對效能方面要求就很高,對CDN相關的技術也要去了解下。同一份簡歷不要海投,針對每一個崗位要求,適當的改下關鍵字眼,能夠提高面試機會哦,有面試機會就有了一切可能。

主要是想給正在找工作的小夥伴一個全域性觀。文章並沒有詳細地給出每道題的答案,但基本都給出了其他大神的參考文章啦。

找工作是一個煎熬的過程,有挫折,有打擊,當然少不了收穫。希望每個求職者都能斬獲合心意的offer!





相關文章