最近由於公司的戰略調整與職業發展的緣故離開了老東家,期間變成了求職者的角色,也作了半個月的面試官。如今已經從面試官的職務抽離了出來,故來分享一下 2020 中高級前端工程師常見的面試題。css
面試前的準備
- 中/英文自我介紹
- 離職的緣由
html
- 把帶 css 連接的
<link>
標籤放在 <head>
標籤內,而帶 js 連接的 <script>
標籤儘可能靠近 </body>
, 爲何會有這種提議?若是必須不這樣作,如何處理?
css
- 列舉水平垂直居中的實現
- 簡述一下什麼是盒子模型
- 瞭解過 flex 佈局、 grid 佈局嗎
- 計算樣式權重
JavaScript
- 數組去重
- 數組多層扁平化
- 深拷貝數組和對象
- 數組裏面有 10 萬個數據,取第 1 個數據與第 10 萬個數據的時間相差多少?
- 數組的 map 和 forEach 有什麼區別?
- Fetch 與 XHR 的區別?
- bind、call、apply 的區別?
- 如何檢測變量的類型(儘量多,描述可能出現的問題)?
- 簡述一下原型鏈
- 使用過 ES6 嗎?你經常使用的有哪一些?
- 簡述一下 Promise 的特色
- Promise 怎麼作異常處理?
- Promise 串聯加載?
- Promise 並行加載?
- Promise 限流併發?
- async/await?
- 必定要使用 async/await 嗎,若是我不作異步處理,可能只是處理簡單的關閉彈框不能用 Promise 嗎?
- 事件循環 (event-loop)
計算題
按順序寫出程序的輸出結果:html
考察 this 問題
var length = 10;
function fn() { alert(this.length); }
var obj = {
length: 5,
callApi: function(fn) {
fn();
arguments[0]();
}
}
obj.callApi(fn, 3)
列出下面代碼的不足及優化方案前端
var node = document.querySelectorAll('ul');
for (var i = 0;i < node.length; i++) {
node[i].addEventListener('click', function() {
alert('click' + i);
});
}
改造下面的代碼,使之輸出 0 ~ 9,寫出你能想到的全部解法。vue
for (var i = 0;i < 10; i++) {
setTimeout(() => {
console.log(i)
}, 1000);
}
請寫出下面代碼的運行結果node
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(() => {
console.log('setTimeout');
}, 0);
async1();
new Promise((reslove) => {
console.log("promise1");
reslove();
}).then(() => {
console.log("promise2");
})
console.log("script end");
概念類
- 什麼是閉包?列舉閉包的應用場景
- 什麼是科裏化?
- 節流與防抖
- 說說從瀏覽器地址欄輸入 URL 到頁面加載完的過程當中都發生了什麼事情?
TypeScript
- 爲何要引入 TypeScript,引入的好處是什麼?
React
- 虛擬 dom 是如何提高性能的
- React 經過什麼方式來更新數據
- React 不能直接修改 State 嗎?
- setState 是同步仍是異步的?
- React 生命週期
- 組件通訊
- 簡述一下 React.Context 怎麼使用
- 函數組件是什麼?
- 高階函數、高階組件
- 受控組件與非受控組件的區別
- 異步組件怎麼使用?
- 怎麼對組件的參數作類型約束呢?
- 組件設計原則
- React 性能優化
- 父組件在執行 render 時會不會觸發子組件的 render 事件?若是會該怎麼避免?
- 有了解過 Portals 嗎?
- Hook 相比 class 的優勢
- 自定義 Hook 約束
- 自定義 Hook 使用
- redux 是什麼?
- redux 的三大原則是什麼?
- 描述 redux 單向數據流
Vue
- 列舉 Vue 的生命週期以及它們的應用場景
- 父組件和子組件生命週期鉤子執行順序是什麼?
- DOM 渲染在 Vue 的哪一個生命週期就已經完成
- v-for 遍歷模板時爲何要用 key? key 有什麼用?
- v-if 與 v-show 有什麼區別? 在什麼場景下能夠應用
- 組件通訊
- vue 的雙向綁定原理是什麼?
- 怎麼在組件中實現 v-modal
- vue router 的 beforeEach 和 afterEach 通常用法/使用場景?
webpack
- module、chunk、bundle 分別是什麼?
- loader 和 plugin 有什麼區別?有本身實現過嗎?
- 除了作基礎腳手架外,還用來作過什麼?
- webpack 實現懶加載
- webpack 優化項
- babel-runtime 和 babel-polyfill
- 什麼是 Tree-Shaking
優化類
- SPA(vue/react) 如何優化首頁的加載速度?首屏空白是什麼問題引發的?
- 頁面優化有哪些方案?
解決方案
- 列舉移動端適配方案
- 怎麼處理跨域?
- Vue 與 React 的區別,怎麼作技術選型?
HTTP
- 列舉 HTTP 狀態碼以及它們的含義
- 有了解過 HTTP 緩存嗎?
運維相關
- 瞭解過 docker 嗎?
- 大家項目的 CI/CD 是怎麼搭建的?
- 阿里雲的 CDN 資源有緩存,如何強制更新緩存?
- git 除了
pull
、push
外還了解哪些命令?
其餘
- 你哪些項目實現的比較滿意?
- 你碰到最難的一個問題是什麼?
- 是否寫過測試用例
- 是否瞭解敏捷開發
目前只是整理了常見的題目,如今正在 front-end-lab 中持續更新: 2020 前端面試筆記 ,同窗們能夠 watch 儲存庫的更新,後續也會陸續同步到此處上~react
若是有同窗感興趣的話,後續還能夠分享一些面試的心得,以及作面試官時觀察到的一些問題。最後但願你們能在「金九銀十」的求職季中找到滿意的工做~webpack
