關於第一天的前端面試經歷總結.... ——當天被告知未通過 -开发者知识库

關於第一天的前端面試經歷總結.... ——當天被告知未通過 -开发者知识库,第1张

兩日前,發了一篇吐槽,莫名的火了一把。經過大家的建議與鼓勵,於是修改了簡歷,開始了重新投遞,2天后接到第一份面試邀請。

此文為個人面試經歷,QA問答過程與總結,不透露面試公司及面試人員,內容真實,如果有面試過我的大佬看到博客,歡迎指出問題,希望對一些找工作中的朋友有所幫助。

循序可能有點亂,沒記太清。

1.面試時間 2017.2.30下午兩點——公司薪資6K

  • Q:請先做一下自我介紹
  • A:barbarbar,然而順便談了下自己的學習經歷,講了下自己在寫的項目啥的。
  • Q:談談你對閉包的理解。
  • A:關於閉包,我個人的理解用一句話概括就是:一個函數在父級函數執行完畢后,如果任然留有對父級函數內部變量(作用域)的引用,那么就會建立閉包,我個人對閉包就是這樣的看法,如果有什么錯誤,請務必幫我訂正....

    原文出自js面對對象編程指南P88:如果一個函數會在其父級函數返回之后,留住對父級作用域的連接的話,相關閉包就會被創立起來

  • Q:談談你對ES6新的聲明變量的方式的一些看法
  • A:關於這個問題,新的方式,比較有趣的就是所謂的暫時性死區什么的,簡單的來講吧。關於的第一個const,其實就是聲明一個常量,不允許變更。另一個let,就是零時變量,或者說是局部變量(這兩個都屬於局部變量),能夠由中括號直接產生一個零時的局部作用域了,而不必使用以前的立即執行匿名函數了,let非常適合在for循環之類的場景中使用,不再需要使用迭代函數就能獲得當前的變量了,對比var來看,新的這兩個變量聲明都不會在執行時被提升,並且編譯速度比var更快。

  • Q:你說const聲明的是常量,不能被改變嘍?
  • A:const聲明的的確是常量,只不過是字面量常量不能被改變,如果是對象類型的話,是引用,對象的屬性被改變是無法被檢測到的,就像vue中,父子組件中通信,以及數據,如果是對象屬性被改變,是無法被檢測到的。

  • Q:你說Vue中如果對象屬性被修改無法被檢測到,那么你有什么解決方案?
  • A:這個,其實我覺得最好的解決方案就是嚴格遵守vue的理念,父子組件通信時不去修改什么對象屬性,對象數據的屬性,非要改動添加的話:使用(Object.assign() 或 _.extend())面試時,沒想起來單詞怎么拼.....

    關於對象屬性的的修改的方法,有興趣的可以了解下,Object.defineProperty(vue好像就是基於它實現的雙向數據綁定,還沒讀源碼,不清楚楚),Object.assign是把屬性添加到對象的方法。

  • Q:關於數組去重復你用什么方法?
  • A:因為目前我自己都是使用ES6 Webapck2的方式寫的代碼,所以用的是Array.from(new Set(arr)或者[...new Set(arr)]的方式去重,原理是,用了set類型,允許重復的值得特性,然后使用from方法或者解構的方法來得到數組,關於其他的方法的話,有太多了,比如什么循環去重,什么迭代(reduce)啥的,我就懶得講了,因為真的太多了。

  • Q:你提到了Set類型,那你講下對Es6里 Map 類型的看法。
  • A:關於這個Map啊...(猶豫了一下)說實話,我沒怎么去使用這個新的類型,畢竟怎么說好呢,目前我是將Map當成一個嵌套數組看待,畢竟Map和對象相比,只是比對象多提供了一個迭代用的接口,並且據說速度會比對象訪問屬性更快一點,現在來說,實在是沒有什么使用場景,常用的一些工具函數,比如下划線.jslodash.js(不知道單詞是否拼錯),暫時都還沒有提供對map的方法,但對象卻有千千萬的各類方法,並且,map能夠實現的對象類型也能夠實現,比如迭代對象可以用for (let [k, v] of Object.entries(obj)),哦,最后一點差異就是允許key使用數字。不知道你有啥其他的看法嘛,或者知道map的一些使用場景,可以和我分享一下。

    樓主只用過下划線.js...對於loadsh.js沒提供是猜測的。另外對象迭代這里出自,阮一峰大神寫的ES6入門指南,對象篇。完整的是:

let obj = { one: 1, two: 2 };
for (let [k, v] of Object.entries(obj)) {
console.log(
`${JSON.stringify(k)}: ${JSON.stringify(v)}`
);
}
// "one": 1
// "two": 2
  • Q:關於new一個對象,你講一下,具體是怎么實現的?
  • A: 什么?new一個對象,額,這個不就是一個構造函數,然后new一個新的對象嘛,還能有什么流程嘛。不太清楚,你具體問的內容哈,你是問,構造函數內容的執行邏輯原理還是啥?

  • Q:那你談一下對於原型的理解
  • A:原型啊,從哪里開始講呢,我之前好像寫過篇關於原型的博文,要不看看博文?畢竟在我看來,這方面內容太廣了,一定要講的話,可以說,(比面試時稍微把邏輯更通一點,面試時太緊張邏輯有點亂)原型自身就是一個對象,有自己的屬性與方法,默認情況下是有一個指針指向原型的構造函數,構造函數也有個指針指向自己的prototype...然后由構造函數new出來的對象,在原型鏈上默認指向構造函數指着的原型。。。好吧,我編不下去了,說真的,這玩意我得有個圖或者紙才好演示啊。。要不你給我張紙,我畫個圖?

    廖雪峰大神寫的教程非常棒,推介一下:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344997013405abfb7f0e1904a04ba6898a384b1e925000

  • Q:既然你原型不懂,那就談談原型鏈吧?
  • A: (心里活動:原型我得有紙才能演示,原型鏈,不得更需要紙嗎),啊,原型鏈啊,我之前真的自己寫過篇關於原型鏈的整理,能給你看下博客嗎?...你讓我憑空講...好吧,大概原型鏈就是...說實話,我現在用的都是Es6的class方法,雖然class也是基於原型鏈的語法糖,但是簡單方便啊,所以我這段時間都都沒怎么關心原型鏈的,畢竟原型鏈繼承在js面對對象編程指南里寫了十幾種方法啊...我這人,有時候喜歡簡單高效的東西,就像數組去重,我都用set,只有遇到一些相關問題,我才回去找新的解決方案。(后面把十幾種方法拍張照給大家觀摩觀摩,雖然有些不是基於原型的)

  • Q:你說你都是遇到問題再去解決,那你談談移動端一像素問題你是怎么解決的?
  • A:移動端一像素啊,簡單來講,就是設置個偽類,然后響應下屏幕的dpr,用css3的縮放進行解決。用一些預處理器寫個mixin函數就能解決。

  • Q:有其他的解決方案嗎?
  • A:這個老實說,還真沒研究過,在前面我提過,很多東西我都是遇到問題然后去解決的,如果目前有最優解決方案,我為啥要去用其他的,比如目前移動布局我用的就是flex布局,我感覺兼容性也不差。。。當然,主要原因也在於我沒啥工作經驗。

    順手再推一波阮一峰大神的flex教程:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

  • Q:你有使用過css預處理器嗎?
  • A:目前在使用stylus,less也有接觸過,stylus我主要喜歡無需括號,以及變量或者函數不用加什么奇怪的前綴

  • Q:對於手機應用你有過了解嗎?
  • A:如果指的是混合開發的webapp手機應用,我最近研究過weex,就是阿里去年開源的那個類似react native的,目前正准備寫點什么個人項目,但是因為時間緣故所以暫時還是只計划。

  • Q:對於性能優化,你有什么方案?
  • A:性能優化啊,說實話,我目前因為主要都是自己的作品,沒遇到過什么特別徐亞喲優化的地方,如果一定要講的話。。。好吧,我簡單講一下吧,比如不要使用全局變量,因為相比局部變量,全局變量被索引時的速度最慢;不要過多使用閉包,閉包會占用內存;要對閉包中需要遞歸的地方進行尾遞歸優化不然容易導致內存泄漏(主要好像是ie下,沒有實際測試過),對script標簽進行合並,畢竟頁面遇到script標簽就會停止渲染(主要是因為瀏覽器不能確定script標簽會不會改動dom),在使用ajax時,對一些內容盡量使用get(get默認會保留緩存),額...還有的話,說實話,我來面試前忘了去找份面試指南背,很多東西由於我沒有實際的遇到過我並沒有太過深入。如果是我遇到過得問題,我詳細我應該能夠了解。說起來之前拜讀過一本叫做js函數式編程指南的..因為內容有點深,就只看了部分。

    關於全局變量被索引的速度最慢,出自高性能js...沒有實際測試過,閉包內遞歸要使用尾遞歸優化,附送上連接,同樣是阮一峰大神的:http://www.ruanyifeng.com/blog/2015/04/tail-call.html ,關於 js函數式編程指南連接:https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/ (非常贊的一本免費電子書,不知為何,關注的人很少)

  • Q:你提到了ajax,那就談下ajax吧。
  • A:ajax啊,這玩意其實很簡單,主要就是異步的從后端獲取數據嘛,搞來搞去也就那么些接口啥的,在初學js時,我為了能響應ajax還簡單的學了php,就是后端提供接口,前端用get或者post或者其他方式去請求數據,不會讓頁面停止運行啥的,目前我在寫的項目中接入了聊天機器人,由於跨域問題,就用node做了個中轉層,用來轉發對機器人api的請求,流程就是前端請求本地的服務器,服務器請求機器api...

  • Q:你對於跨域的解決方法了解多少?
  • A:前端跨域嗎,最常用的應該是jsonp吧,后端動態生成script(能夠執行的js函數),然后把數據發送過來。或者是用node做個中轉層啥的,方法好像挺多,H5也有種新的方案,不過沒深入研究。

  • Q:我們這邊后端用的不是node,是java,你怎么使用jsonp。
  • A: 啊,java不能返回動態的script嗎?我之前學過的php好像行,現在在學的python也行啊。

  • Q:python是什么?
  • A:python就是...它是一門編程語言,當初學node寫爬蟲時,發現node用模塊模擬的多線程本質還是單線程,並且錯誤處理還麻煩,我還得用進程維護模塊去啟動...然后上網查,發現都說python好,於是就開始學了些python,把教程簡單過了遍,后來因為些事情所以就沒怎么碰了。。。。

    安利下廖雪峰大神的python教程:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

  • Q:那你現在目前在做什么
  • A:目前,有個個人博客在寫完成度太低,所以沒有開源,后端使用koa2(優雅的async函數才是我的追求,express的嵌套,見鬼去)正考慮前端要不要上個react,畢竟我目前一直在深入Vue2,對同樣是Mvvm的react好像沒做過啥具體項目。

  • Q:其他對公司有什么想問的嘛?
  • A:barbarbarabr(問了些關於公司結構的問題)


  • 不知道為何,面試當天就被告知未通過,我在想,果然是因為沒有背過前端面試題嘛。。。還是原型那里沒回答出了問題,對於面試官,一直帶着笑容,然而,一些反問的內容均未給出回復。。。全程笑眯眯。。年齡目測比我年長幾歲的樣子。。
  • 結論:背面試指南。

更新

  • 由於面試失敗,並且文章是個人總結,所以總會帶有個人色彩,但是實際面試中客氣很多,文章中省略了很多禮貌用語.....添了些個人情緒。
  • 經過與一個前輩的聊天,自知自己所學的東西都只是入門,沒有一樣深入的,所以請不要誤會以上內容為....會誤會的自行腦補即可Q.o,真的只是實際總結,畢竟該學的東西遠遠沒有學完,生命不息,學習不止。

更新於2017.4.2
目前已經找到了非常滿意的前端實習工作,薪資100/天,成功解決房租問題。

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复