[TOC]
# 面試回答問題的技巧
點擊關注本[公眾號](http://www.hmoore.net/book/dsh225/javascript_vue_css/edit#_118)獲取文檔最新更新,并可以領取配套于本指南的《**前端面試手冊**》以及**最標準的簡歷模板**.
技術面試通常至少三輪:
1. 基礎面試: 主要考察對崗位和簡歷中涉及到基礎知識部分的提問,包括一部分算法和場景設計的面試題,這一面可能會涉及現場coding.
2. 項目面試: 主要考察簡歷中涉及的項目,會涉及你項目的相關業務知識、扮演角色、技術取舍、技術攻堅等等.
3. HR面試: 這一面通常是HR把關,主要涉及行為面試,考察候選人是否價值觀符合公司要求、工作穩定性如何、溝通協作能力如何等等.
當然,對于初級崗或者校招生會涉及一輪筆試,相當多的公司會在現場面之前進行一輪電話面試,目的是最快速有效地把不符合要求的候選人篩除,對于個別需要跨部門協作的崗位會涉及交叉面試,比如前端候選人會被后端的面試官面試,一些有管理需求的崗位或者重要崗位可能會涉及總監面試或者vp面.
而一個正常的技術面試流程(以項目面為例)分為大致三個部分:
1. 自我介紹
2. 項目(技術)考察
3. 向面試官提問
那么該如何準備技術面試,如何在面試中掌握主動權呢?
## 自我介紹
幾乎所有的面試都是從自我介紹這個環節開始的,所以我們得搞清楚為什么自我介紹通常作為一個面試的開頭.
### 為什么需要自我介紹
首先,有一個很普遍的問題就是面試官很可能才剛拿到你的簡歷,他需要在你自我介紹的時候快速瀏覽你的簡歷,因為技術面試的面試官很多是一線的員工,面試候選人只是其工作中的一小部分,很多情況下是沒有提前看過你的簡歷的.
其次,自我介紹其實是一個熱身,面試官和候選人其實是陌生人,自我介紹不管是面試還是其他情況下,都是兩個陌生人彼此交流的起點,也是緩解候選人與面試官之間尷尬的一種熱身方式.
最后,自我介紹是展示自我、引出接下來技術面試的引子,是你自己指定技術面試方向的一次機會。
知道了以上原因,我們才能進行準備更好的自我介紹。
### 自我介紹的幾個必備要素
自我介紹歸根到底是一個熱身運動,因此切忌占用大量的篇幅,上來就把自己從出生的經歷到大學像流水賬一樣吐出來的,往往會被沒耐心的面試官打斷,而這也暴露了候選人講話缺乏重點、溝通能力一般的缺點。
但是,一些關鍵信息是必須體現的,就我個人而言,以下信息是必備的:
* 個人信息: 至少要體現出自己的姓名、崗位和工作年限,應屆生則必須要介紹自己的教育背景,如果自己的前東家是個大廠(比如BAT)最好提及,自己的學歷是亮點(985或者碩博或者類似于北郵這種CS強校)最好提及,其他的什么有沒有女朋友、是不是獨生子沒人在意,不要占用篇幅。這個部分重點在于「你是誰?」。
* 技術能力: 簡要地介紹自己的技術棧,切忌把自己只是簡單使用過,寫過幾個Demo或者看了看文檔的所謂「技術棧」也說出來,一旦后面問到算是自找尷尬。這個部分的重點在于「你會什么?」。
* 技能擅長: 重點介紹自己擅長的技術,比如性能優化、高并發、系統架構設計或者是溝通協調能力等等,切忌夸大其詞,要實事求是,這是之后考察的重點。這個部分重點自在于「你擅長什么?」
### 自我介紹要有目的性
#### 要重點匹配當前崗位的技術棧
你的面試簡歷可能包含了各種各樣的技術棧,但是在自我介紹過程中需要匹配當前崗位的技術要求.
就比如你目前面試的是移動端H5前端的開發崗位,就重點在自我介紹中突出自己在移動前端的經驗,而此時大篇幅得講述自己如何用Node支撐公司的web項目就顯得很不明智.
#### 要在自我介紹中做刻意引導
如果你的自我介紹跟流水賬一樣,沒有任何重點,其實面試官也很難辦,因為他都沒法往下接話...
而只要你稍作引導,絕大部分面試官就會接你的話茬,比如「你在自我介紹中重點提及了一個項目,碰到了一些難點,然后被你攻克了,效果如何如何好等等」,如果我是面試官一定會問「你的xx項目的xx難點后來是怎么解決的?」。
面試官的目的是考察候選人的能力,對候選人做出評估,因此需要知道候選人擅長什么,是否匹配崗位,面試官絕大多數情況下很樂意你這種有意無意的引導,這樣雙方的溝通和評估會很順利,而不是故意刁難候選人。
### 如何準備自我介紹
其實最好的方法也是最笨的方法就是把自我介紹寫下來,這個自我介紹一定要體現上面提到的幾大必備要素,在面試前簡單過幾遍,能把自我介紹的內容順利得表達出來即可,切忌跟背課文一樣.
自我介紹的時間最好控制在1-3分鐘之間,這些時間足夠面試官把你的簡歷過一遍了,面試官看完簡歷后正好接著你的自我介紹進行提問是最舒服的節奏,別上來開始10分鐘的演講,面試官等待的時候會很尷尬,這么長的篇幅說明你的自我介紹一定是流水賬式的.

## 技術考察
一個好的技術考察的開始,必須得有自我介紹部分好的鋪墊和引導,有一種情況我們經常遇見:
> 候選人說了一大堆非重點的自我介紹,面試官一時語塞,完全get不到候選人的重點,也不知道候選人擅長什么、有什么亮點項目,然后就在他簡歷的技術棧中選了本公司也在用的技術,候選人這個時候也開始冒汗,因為這個技術棧并不是他的擅長,回答的也磕磕絆絆,面試官的引導和深入追問也沒有達到很好的效果,面試就在這種尷尬的氣氛中展開了,面試結束后面試官對候選人的評價是技術不熟練、沒有深入理解原理,候選人的感受是,面試官專挑自己不會的問。
所以在前面的部分,一定要做好引導,把面試官的問題引到我們擅長的領域,但是這樣還不夠,正所謂不打無準備之仗,我們依然需要針對可能出現的問題進行準備.
那么如何準備可能的面試題?
比如你擅長前端的性能優化,在自我介紹的部分已經做好了引導,接下來面試官一定會重點考察你性能優化的能力,很可能會涉及很有深度的問題,即使你擅長這方面的技術,但是如果沒有準備也可能臨場亂了陣腳.
### 多重提問
自我多重提問的意思是,當一個技術問題拋出的時候,你可能面對更深層次的追問

依舊以前端性能優化為例,面試官可能的提問:
1. 你把這個手機端的白屏時間減少了150%以上,是從哪些方面入手優化的?這個問題即使你沒做過前端性能優化也能回答個七七八八,無非是組件分割、緩存、tree shaking等等,這是第一重比較淺的問題。
2. 我看你用webpack中SplitChunksPlugin這個插件進行分chunk的,你分chunk的取舍是什么?哪些庫分在同一個chunk,哪些應該分開你是如何考慮的?如果你提到了SplitChunksPlugin插件可能會有類似的追問,如果沒有實際操作過的候選人這個時候就難以招架了,這個過程一定是需要一定的試錯和取舍的.
3. 在分chunk的過程中有沒有遇到什么坑?怎么解決的?其實SplitChunksPlugin這個插件有一個暗坑,那就是chunk的id自增性導致id不固定唯一,很可能一個新依賴就導致id全部打亂,使得http緩存失效.
以上只是針對SplitChunksPlugin插件相關的優化提問,當然也可能從你的性能測試角度、代碼層面進行考察,但是思路是類似的。
因此不能把自己準備的問題答案停留在一個很淺顯的層面,一方面無法展示自己的技術深度,另一方面在面試官的深度體情況下容易丟分,因此在自己的答案后面多進行自我的追問,看一看能不能把問題做的更深入。
### 答題法則
很多面試相關的寶典都推薦使用STAR法則進行問題的應答,我們不想引入這個額外的概念,基礎技術面試的部分老老實實回答面試官的問題即可,通常需要問題運用到這個法則的是項目面,比如讓你介紹一下你最得意的項目,回答問題的法則有這幾個要點:
* 項目背景: 簡要說一下項目的背景,讓面試官知道這個項目是做什么的
* 個人角色: 讓面試官知道你在這個項目中扮演的角色
* 難點: 讓面試官知道你在項目開發過程中碰到的難點
* 解決方案: 針對上面的難點你有哪一些解決方案,是如何結合業務進行取舍的
* 總結沉淀: 在攻克上述的難點后有沒有沉淀出一套通用的解決方案,有沒有將自己的方案在大部門進行推廣等等
重點就在于后面三條,也是最體現你個人綜合素質的一部分,我是面試官的話會非常欣賞那種可以發現問題、找到多種方案、能對多種方案進行比對取舍還可以總結沉淀出通用解決方案回饋團隊的人。
從上述幾點可以體現出一個人的技術熱情、解決問題的能力和總結提高的能力
### 刻意引導
是的,在回答面試官提問的時候也可以做到刻意引導。
我們就舉幾個簡單的例子:
* 除了Vue還用過Angular嗎? 這個時候很多候選人就很實誠回答「沒有」,其實我們可以回答的更好,把你知道的說出來展示自己的能力才是最重要的,你可以說「我雖然沒用過,但是在學習雙向綁定原理的時候了解了一下Angular臟檢查的原理,在學習Nestjs的時候了解了依賴注入的原理,跟Angular也是類似的」,面試官一定會接著問你臟檢查和依賴注入的問題,雖然你沒有用過Angular,但是Angular的基本原理你都懂,這是很好的加分項,說明候選人有深入理解原理的意愿和觸類旁通的能力
* Vue如何實現雙向綁定的? 很多候選人老老實實答了`object.defineproperty`如何如何操作,然后就沒有了,其實你可以在回答完之后加上一嘴「Vue 3.0則選擇了更好用的Proxy來替代object.defineproperty」或者「除了object.defineproperty這種數據劫持的方式,觀察者模式和臟檢查都可以實現雙向綁定」,面試官大概率會問「Proxy好在哪?」或者「聊聊臟檢查」等等,這樣下一個問題就會依然在你的可控范圍內

我們第一個例子把本來回答不上來的問題,轉化為了成功展示自己能力的加分項,第二個例子讓自己更多的展示了自己的能力,而且始終使面試官的問題在自己的可控范圍內
## 向面試官提問
這個部分基本到了面試尾聲了,屬于做好了不影響大局,但是可能加分,如果做不好很容易踩雷的區域.
首先我們聲明幾個雷區:
* 切忌問結果: 問了也白問,絕大部分公司規定不會透露結果的,你這樣讓大家很尷尬
* 切忌問工資: 除了HR跟你談工資的時候,千萬別跟技術面試官談工資,工資是所有公司的高壓線,沒法談論
* 切忌問技術問題: 別拿自己不會的技術難題反問面試官,完全沒意義,面試官答也不是不答也不是
有幾個比較好的提問可供參考:
* 如果我入職這個崗位的話,前三個月你希望我能做到些什么?
* 我的這個崗位的前任是為什么離職的,我什么地方能做的更好?
* 你對這個職位理想人選的要求是什么?
盡量圍繞你的崗位進行提問,這可以使得你更快得熟悉你的工作內容,也讓面試官看到你對此崗位的興趣和熱情,重要的是這些問題對于面試官而言既可以簡略回答,也可以詳細的給你講解,如果他很熱情得跟你介紹此崗位相關的情況,說明你可能表現得不錯,否則的話,你可能不在他的備選名單里,這個時候就需要你早做打算了.
## 總結
我們用大量篇幅介紹了技術面試中的一些應試技巧,但是歸根到底候選人的基本功和豐富的項目經驗才是硬道理.
如果你看完了整篇文章,并進行了精心的準備,他是可以讓你從75分到85分的實用技巧,而不是讓你從55到85的什么秘籍.
## 公眾號
想要實時關注筆者最新的文章和最新的文檔更新請關注公眾號**程序員面試官**,后續的文章會優先在公眾號更新**簡歷模板**:關注公眾號回復「模板」獲取
《**前端面試手冊**》:配套于本指南的突擊手冊,關注公眾號回復「fed」獲取

- 前言
- 指南使用手冊
- 為什么會有這個項目
- 面試技巧
- 面試官到底想看什么樣的簡歷?
- 面試回答問題的技巧
- 如何通過HR面
- 推薦
- 書籍/課程推薦
- 前端基礎
- HTML基礎
- CSS基礎
- JavaScript基礎
- 瀏覽器與新技術
- DOM
- 前端基礎筆試
- HTTP筆試部分
- JavaScript筆試部分
- 前端原理詳解
- JavaScript的『預解釋』與『變量提升』
- Event Loop詳解
- 實現不可變數據
- JavaScript內存管理
- 實現深克隆
- 如何實現一個Event
- JavaScript的運行機制
- 計算機基礎
- HTTP協議
- TCP面試題
- 進程與線程
- 數據結構與算法
- 算法面試題
- 字符串類面試題
- 前端框架
- 關于前端框架的面試須知
- Vue面試題
- React面試題
- 框架原理詳解
- 虛擬DOM原理
- Proxy比defineproperty優劣對比?
- setState到底是異步的還是同步的?
- 前端路由的實現
- redux原理全解
- React Fiber 架構解析
- React組件復用指南
- React-hooks 抽象組件
- 框架實戰技巧
- 如何搭建一個組件庫的開發環境
- 組件設計原則
- 實現輪播圖組件
- 性能優化
- 前端性能優化-加載篇
- 前端性能優化-執行篇
- 工程化
- webpack面試題
- 前端工程化
- Vite
- 安全
- 前端安全面試題
- npm
- 工程化原理
- 如何寫一個babel
- Webpack HMR 原理解析
- webpack插件編寫
- webpack 插件化設計
- Webpack 模塊機制
- webpack loader實現
- 如何開發Babel插件
- git
- 比較
- 查看遠程倉庫地址
- git flow
- 比較分支的不同并保存壓縮文件
- Tag
- 回退
- 前端項目經驗
- 確定用戶是否在當前頁面
- 前端下載文件
- 只能在微信中訪問
- 打開新頁面-被瀏覽器攔截
- textarea高度隨內容變化 vue版
- 去掉ios原始播放大按鈕
- nginx在MAC上的安裝、啟動、重啟和關閉
- 解析latex格式的數學公式
- 正則-格式化a鏈接
- 封裝的JQ插件庫
- 打包問題總結
- NPM UI插件
- 帶你入門前端工程
- webWorker+indexedDB性能優化
- 多個相鄰元素切換效果出現邊框重疊問題的解決方法
- 監聽前端storage變化