紙上得來終覺淺,絕知此事要躬行。
面試是大家都無法避免的一個話題。我所在的公司是一個不算小的公司,在這個公司做外包兩年,轉正一年。在金九銀十面試的季節裡也按奈不住想去面試一下。面試的經驗除了現在呆的公司再也沒面試過其他公司。在這裡沒有什麼BAT,沒有什麼美團、小米等大公司,只是單純的想寫一下本次面試的過程。
我面試的公司是一個搞網際網路金融的小貸公司,據說是外資投資,福利待遇很好。不過是剛起步招聘的是核心成員,要求相對很高。由於是一個剛起步的公司技術面和HR面都是同一個人,面試我的是一個全棧開發工程師。
長話短說,下面是我面試時面試官所問的一些問題:
1. 自我介紹
自我介紹可以說是在正規公司面試流程的第一步,公司瞭解一個人就是先從你的自我介紹開始。在這個階段,我只是簡單的說了一下從畢業(15年畢業)到現在,在公司做的一些大型專案和用到的一些技術。這個根據個人不同的情況自由發揮,在此不做大篇幅的介紹。
2. 技術問答
2.1 Vue、React、smarty
在8102年Vue、React、Angularjs三大框架橫行的時代,我的面試官也提出了一些問題。提問了Vue的生命週期和子元件和父元件之間的傳值,模擬了一個修改資料的場景問我是在哪個生命週期去呼叫。
由於我在簡歷上寫了我也用React開發過,所以面試官就問我Vue和React相比較各自的優缺點。在這個問題上我只是簡單的說了一下Vue和React的特點,主要說了一下自己的感受並沒有深入的去比較過他們之間的差別。
如何理解Vue,Vue與smarty模板的差別?面試真的能讓人大開眼界,不僅可以瞭解自己的不足還可以舉一反三的對比各種技術。面試官如果不問我這個問題我還沒有比較過這些東西,後續如果有時間我會把他們之間的差別介紹一下。
2.2 怎麼理解http是一個無狀態協議?(卒)
作為一個優秀的前端網路工程師,瞭解基本的http知識是很有必要的,但作為一個前端菜鳥的我忽略了這方面的知識我檢討。
在網上查閱了一些資料以後明白為什麼說http是一個無狀態協議,通俗的講無狀態就是客戶端請求資料,服務端對這個請求不去記錄、不去關注。若我理解的有偏差歡迎各位大佬給我留言溝通交流。
2.3 如何理解 DOCTYPE
面試官突然問我這個問題一下把我搞蒙了,這個問題感覺已經是一個被淘汰掉的問題,我接觸前端有3年了算不上很高深,沒有使用過刀耕火種的技術去開發前端網頁。對這個問題沒能回答的上來。只是說它是告訴瀏覽器是使用了那種語言規範。
在網上找到了很多關於這些方面的介紹,可以說前端飛快的發展但是也不要忘記最基本的知識。
2.4 get和post的區別
經典面試題之一,憑感覺自己回答了一下但是不是很深入,在這裡有一篇文章解答的很好。一個優秀的前端不僅僅只在於表象,要有專研精神把某一個問題了解透徹這樣才能有進步。
2.5 跨域問題
經典面試題之一,網上資料一大把。
2.6 HTML5、CSS3
在8102年HTML5和CSS3已經得到很多瀏覽器的支援學習好新的規範也是前端必備之一。瞭解並使用HTML5的一些新特性,是很重要的一塊。我的面試官問了我H5的新特性都有那些?css3的選擇器有那些?css3選擇器它們之間的權重和優先順序?(感覺問的應該是css的選擇器)。如何畫一個類似心電圖的線?
2.7 ES6
簡單的說一下ES6新增的方法,除了promise還有那些非同步方法,解構的原理。
2.8 移動端和PC端
如何適應移動端不同解析度不同尺寸,PC端適配移動端,自適應和重新開發移動端的優缺點。根據不同的場景去使用不同的方法,具體情況具體分析。
2.9 演算法
大資料時代都要考一些演算法?下面是面試官的考題分析給大家,希望大家能幫我指點迷津。
一個整型陣列,將其劃分為相同的N(整數)個切片,每個切片加總和是相同的,是否可以找到而已的切片,如果找到就找到了所謂的N等分點,輸出true,否則輸出false。
如:N=4,輸入陣列[2,3,5,1,2,2,1,1,3],切片結果為:[2,3],[5],[1,2,2],[1,1,3],也就找到所謂的4等分點,結果輸出為true。請寫出一個方法實現這個操作。
這個問題的主要思路就是:先求出平均數,然後依次去取陣列裡面,加起來等於平均數的元素。最後就一定要剛好陣列取完了,分片的數量也等於傳入的n。
/**
* @description 是否能夠找到指定陣列的N等分點
* @param { Array } integerArr 整型陣列
* @param { Number } n 幾等份
* @return { Boolean }
*/
function isFindAverage(integerArr, n){
if(!integerArr || !Array.isArray(integerArr) || !(n - 0)){
// 入參不符合要求
return false;
}
// 如果總和不能平均整數,則一定不能平均分片
const average = integerArr.reduce((prev, curr) => prev + curr) / n;
if(average !== parseInt(average)){
return false;
}
// 可以分為幾片
let result = 0;
// 當前分片的總和
let total = 0;
for (var i = 0; i < integerArr.length; i++) {
// 相加剛好為平均數,則去除陣列符合條件的整數,並增加分片數,從頭開始再相加
if(total + integerArr[i] === average){
result++;
integerArr.splice(i , 1);
i = -1;
total = 0;
}else if(total + integerArr[i] < average){
// 相加小於average 則繼續迴圈相加
total += integerArr[i];
integerArr.splice(i , 1);
i--;
} };
// 分片長度為所傳n 且 陣列必須更好長度為0
if(result === n && integerArr.length === 0){
return true;
}
return false;
}複製程式碼
3. 面試官的回答
跳槽可以說是一個很重要的選擇,到最後面試官一般會問一下是否有什麼想了解的。其實在面試之前,面試者就應該對一個公司簡單的瞭解一下。在網上查詢一下這個公司的基本情況,從招聘簡介中也可以看到公司的一些情況。當面詢問也是一個很好的途徑,畢竟面試是相互選擇的。在這個時候可以詢問一下自己想了解的或者不明白的,可以詢問剛才的技術問題。其他的因人而異。
4. 總結
以後的前端工作不再是簡簡單單的切圖仔的工作了,瀏覽掘金的使用者前端開發肯定不是簡簡單單切圖的。從面試的來看企業招人的要求提高了,作為開發者也要相應的提高自己的技術,既要鞏固基礎知識,也要學習新的知識。一個合格的開發者要不斷的學習,沒有一個行業能夠一勞永逸。其實面試也是鞏固自己知識的一個途徑,隔一段時間去面試一下不僅可以瞭解其他公司所使用的技術,所重視的方向;同時也是對自己學習的檢驗。文中如果有什麼紕漏請各位大佬幫忙指出一下。
路漫漫其修遠兮,吾將上下而求索。