1. 程式人生 > >2018.6 猿輔導前端開發面試

2018.6 猿輔導前端開發面試

    時間:2018-6-14下午

    地點:望京,利星行中心

    前晚通宵升級到很晚,整個人是腦袋發懵到的公司樓下,地點很好找,就是下午兩點的大太陽真的是把人晒暈了。哈哈,言歸正傳,這家公司很尊重每一個面試者,整個面試過程很舒服。每個面試官應該是要求限時在一小時之內,我這次一共是經過了三輪面試官的洗禮偷笑(哈哈,一次性進行完整個技術面,我還蠻喜歡這種方式的,減少了面試者頻繁來面試的時間),感受了一下公司的氛圍,還是蠻喜歡的。下面就對我記得的面試內容整理一下,能記多少真是不好說,畢竟我現在996,每天都是飄著去上班的睡覺。。。

    第一輪面試

    1、自我介紹

    2、基礎知識:包括如何使一個元素垂直和水平居中、js生成物件的幾種方式、陣列的常用方法等等,比較基礎

    3、專案介紹:說說自己參與過什麼專案,在其中用到的技術有什麼提升之類的

  第二輪面試

    1、專案:自己參與過哪些專案,在其中的角色,成長點,遇到的難點問題等。能聊多少看你懂多少、面試官想知道多少了

    2、演算法:手寫演算法,不能說思路,一定要求手寫!!!可能是怕遇到眼高手低的孩紙們吧,這部分都要求手寫。一個是類似洗牌的演算法,記不很清楚了,還有一個演算法題是(問題1,見文章最後):給定一個數組a和一個長度值l,生成一個指定長度值為l的新陣列b,要求b中的每一個元素都是從a中隨機獲取的,且陣列元素不可重複。記得很清楚是因為改了好幾次,老是忘寫一些東西,所以這裡友情提示一下:面試官要求手寫程式碼的,一定要寫完整,不要試圖用一些註解或口頭的說明,核心程式碼很重要,程式碼完整性也很重要!!!

下面說一下這個問題的思考,記錄一下。

    3、談談你對打包工具的理解,怎麼看es6,怎麼理解語義化標籤等開放性問題    

    第三輪面試

    1、為什麼想要找工作?如何評價上一家公司?

    2、演算法題:問題2,見文章最後

    3、暢談了一下公司發展和新部門的情況(感覺像聽了一場小宣講會~)

    三輪面試結束已經七點半了哭。雖然很餓,但是整個過程中面試官一直很耐心地傾聽,並引導面試者開闊思路,有沒有更優解,直到時間結束或面試者自己放棄為止。

    結束語:猿輔導公司飛速發展中,但沒有節奏很緊張的感覺,感覺好像是比較追求員工效率的公司(面試從公司溜達一圈的感覺偷笑)。面試官nice,感覺前端要求難度中等吧,希望前端技術能更紮實的小夥伴可以考慮一下。這次面試整體感覺沒有白來!

    劃重點:以上內容,純屬一個人在家無聊發瘋寫的,聽聽就好,實踐出真知,沒事出去面個試啊~

    問題1:給定一個數組a和一個長度值l,生成一個指定長度值為l的新陣列b,要求b中的每一個元素都是從a中隨機獲取的,且陣列元素不可重複。

    思路:首先考慮到的是b能夠成功生成的條件:a中不重複的元素個數>l。考慮好了邊界條件,之後是如何往b中扔元素,注意隨機+去重這兩個問題,剩下的就是編碼了。下面是參考程式碼:

function generate(a,l){ if(a.length < l) return '老陣列長度不足!'; /*a長度可能超出,可以生成新陣列後擷取長度為l的賦值給b,也可以生成為l的b(這裡選第二種)*/ var i=0, tmp=[], b=[];// 每次獲取a的一個隨機元素,同時將 while(i<l && tmp.length<=a.length) { var random = Math.floor(Math.random()*(a.length)); if(tmp.indexOf(random) == -1) { // 判斷隨機元素是否已經使用過,未使用則放入臨時陣列記錄 tmp.push(random); var number = a[random]; // 獲取陣列a中的隨機數 console.log(random+"..."+number); if(b.indexOf(number) == -1) { //部分IE不支援indexOf請自行解決。也可以使用jquery的$.inArray方法,總之就是不重複扔進b b.push(number); i++; // 新隨機數時+1 } } } if(b.length==l) return b; else return '新陣列長度不足: '+ b;}
// 測試var a=[3,2,1,6,3,9,2,5];generate(a, 5)    問題2:使用js寫一個棧結構。然後如何讓這個棧滿足兩個呼叫者同時使用的要求?

    首先第一問,棧的js實現,這個很簡單,後進先出嘛,網上一搜很多,這裡就不浪費篇幅寫啦

    第二問,如何滿足兩個呼叫者同時使用的要求。

    我首先想到的就是給每個棧元素的索引index作處理,第一個想法加一個額外的下標標誌一下是哪個呼叫者的元素。然而增加額外標誌位就意味著會增加對記憶體空間的佔用,不友好。面試官反覆問我還有沒有其他的方法,然後我又想到可以直接用下標做標誌位,奇偶位來區分呼叫者。這時候又面臨另一個問題,中間可能出現大量被浪費的空間資源。OK,第三種方法,怎麼省空間資源呢?把地址空間分段處理一下,比如0~9是第一個呼叫者,10~19第二個呼叫者,20~29仍然是第一個呼叫者,以此類推,空間資源省了一點,但還是不行,浪費少了不等於不浪費啊。再然後,考慮可以從棧頭是第一個呼叫者,棧尾是第二個呼叫著使用,空間資源終於不浪費了。這仍然不是好的方法,但由於面試時間有限,我只能回去思考了。如果大家有好的思路可以在評論區或私信我,歡迎騷擾。