頭條前端實習崗涼經有感

前言(人生第一次寫掘金文章,望輕噴!)


雖然本身是計科院的學子,雖然接觸前端已經一年半+,雖然系統複習理論知識體系已經一個月+,雖然又花了兩週時間專門針對網上各類面經不難其煩的梳理,雖然有跟着大佬偷偷竊取頭條面試第一手情報,奈何本身真的是太菜了仍是被吊起來打!偷偷記個小本本,回顧一下面試時本身是多麼愚鈍,主要爲了記錄下本身面試時的心路歷程,以及對知識點的天馬行空(貶義)(┬_┬)也但願有面試頭條的同志能收穫一些情報 前端

面試正文呈上(回答的僅是我的拙見,歡迎指正)


  1. 頭條面試官真是親和呀,一上來就跟你噓寒問暖,瞬間讓人內心放鬆了不少。一開始就是基本狀況瞭解,何時開始接觸前端的呀?大學都學過什麼課程呀? 最讓人詫異的,面試官竟然絲絕不想問項目經歷相關的問題(暗自慶幸,以前面試的大佬項目也是一帶而過)!
  2. 談談JS中的類吧。 着重說了傳統語言中類經過拷貝實現繼承,而JS經過原型鏈實現繼承。 那就談談原型吧。 說了構造函數建立的時候,會生成一個原型對象,本質上是一個對象,當在實例上找不到屬性的時候會經過原型鏈在原型對象上查找該屬性。那就談談對象吧。 瞬間就懵逼了,好像歷來都沒思考過這個問題嗎,大腦瞬間過濾一下,大體說了下對象是JS中引用數據類型的一種等等不知所云。(ps: 面完以後躺在牀上思緒萬千,一直以來看各類原型,原型鏈的略高深內容本覺得略有成長,還曾沾沾自喜,卻未曾想面試的時候對於一些最基礎的概念竟不知從何答起,沒法也沒想到要把回答內容引導到熟悉的知識範疇,太沉溺與知識自己,沒重視知識點的基本概念與知識點間的交錯關係)
  3. 對繼承有了解吧。 說了好幾種繼承方法,主要強調了組合繼承的優缺點,以及寄生組合繼承如何解決組合繼承的缺點,原本還想說一下Class繼承,一想本身沒深刻了解過就沒敢說了。那就手寫個繼承吧。 大體實現了個寄生組合繼承。
  4. 談一談es6的新特性吧 首先說了箭頭函數中this的特殊性,又說了let,const造成塊做用域等等,接着結構賦值,模板字符串,函參默認值等等。 (原本看到有人的看法說,能夠理解爲箭頭函數中沒有this,所以其this是經過做用域查找的,沒想到嘴賤的我竟然一不當心順嘴說出了根據閉包查找,結果面試官就反問經過閉包?我冷靜一想按照這個理解,setTimeout中的箭頭函數應該就是經過閉包呀,但瞬間慌了正常調用的箭頭函數可不是這樣,趕忙糾正)
  5. 能實現個三欄佈局嗎 首先說了下flex佈局,又說了absolute+margin佈局,最後又說了float+margin/BFC佈局,嘴賤的我說了BFC實現自適應有一些弊端,而後又巴拉巴拉說了一大堆,還好以前有準備。
  6. 說一說數組的方法吧。 先想到map、filter、forEach、every、some、reduce,又說了pop、push、shift等等。那應該對map挺熟悉的吧,來用reduce實現一個map函數吧。 菜是原罪啊(┬_┬),儘管面試官提醒了一下仍是沒有實現,面完以後網上搜了一下,很懊悔很自責,感受應該能作出來的呀!若是一開始想太多無處下筆的時候,能想到先不用reduce實現個map,而後再將其改爲reduce的形式,感受是能作出來的吧 (聊以自慰罷了,仍是代碼寫少了,以前手寫代碼的時候大可能是網上各類call、apply、bind、debounce之類,如今換了一下就不會寫了,只能說明對JS這個語言沒有徹底深刻的瞭解,仍是浮於表面的這個怎麼實現,那個怎麼實現,哦,看了別人的代碼後我也能本身寫出來了,我會了!我真棒!一遇到新的問題就懵逼就去找答案,沒有想過本身實現能作到哪裏,實現了以後又與別人的實現差在哪裏。歸根結底開發仍是要多寫代碼,多思考,注重理論和實踐的結合啊!!!)
  7. 對JS事件循環有了解吧。 說了下JS是單線程執行的,用異步來實現非阻塞,而事件循環機制是協調執行棧順序執行消息隊列的一種機制。又說了腳本開始運行的時候代碼從上而下執行,遇到異步事件就掛起交給對應的工做線程執行,主線程繼續執行後面的任務,待異步完成後將回調放到對應消息隊列裏,JS同步代碼執行完後會清空微任務隊列,而後取一個宏任務執行,再清空微任務隊列,又說了宏,微任務都有哪些。(感受本身回答的挺好的,還沾沾自喜,卻不想言多必失) 你剛剛說工做線程,可是你不是說JS是單線程執行的嗎? JS是單線程執行的呀,瀏覽器有好多線程啊,好比渲染,定時器,網絡請求線程,但這不妨礙JS是單線程執行的呀(天真傲嬌臉)。我又反問面試官,那JS事件循環究竟是什麼樣的啊?面試官說的啥我記不太清了,大體是說JS執行環境有瀏覽器和Node之別, 瀏覽器V8引擎的事件循環大體也就是你說的那樣,可是node依託於libuv線程池。(原本對瀏覽器和node事件循環都有深刻了解過,但沒想到問到JS事件循環的時候本能想到的是瀏覽器事件循環,且忽略了node事件循環。並且本身好像也只是知道兩個事件循環有不一樣,且學習了相關機制以備出題能寫出執行順序,可是卻並沒認真思考過JS及其宿主環境與事件循環的關係,真是不當心就成了洋洋得意的井底之蛙啊)
  8. 學過數據結構是吧,那實現個二叉樹任意兩節點間路徑的查找吧。 (ps: 對不起我太菜了!!!)

面後總結


雖然寫代碼很菜,可是一直以爲本身回答的時候作的很好,但當躺在牀上的時候才發覺本身回答的也很屎,心得以下:node

  1. 頭條是要招能手寫簡單業務邏輯,且對理論基礎有必定認知的人,大概6:4開吧。而我自己代碼就寫的少,準備的還都是各類理論假大空,結果一動手就暴斃!
  2. 我對基礎知識還算比較重視,常常會對一個知識點看各類文章,而後看到亮點且對本身有收穫的知識點就偷走,記在小本本上。本覺得是一種摸索出來的很優秀的學習方法,卻未曾想這些我認爲正常的"真理"每每禁受不了事實的考驗,大概是太沉溺與本身知足的"真理",卻並無對其進行進一步的驗證。
  3. 關於手寫代碼這一塊,以爲仍是平時要多寫,多深挖各類實現的關聯,這樣對JS語言就會有更好的認識。而不是我會這個,我會那個,咦新人?我不會!
  4. 引導面試官,把問題引導到本身確信的,熟悉的知識,而不是本身主觀臆測的地方。大忌呀,不過仍是由於對知識的不熟悉的緣由吧!

一些我認爲很棒的知識講解清單


  1. 前端緩存 看完之後收穫頗多,把一直以來緩存位置的疑惑也給解決了
  2. Jsonp詳解 終於知道Jsonp的真正運做原理了
  3. 跨域詳解 各類跨域詳解,用promise封裝Jsonp實現方式,讓我眼前一亮
  4. js常見的內存泄漏及解決方法總彙 不錯的總結
  5. JS手寫代碼 其餘都挺好的,感受防抖節流還見過更好的版本
  6. 前端安全知識 終於對XSS,CSRF有個清晰的認識了

終於寫完了,人生第一次,真好!es6

相關文章
相關標籤/搜索