題主2019年非985/211非計算機專業本科畢業(野生程序員),以前在騰訊實習了半年多+畢業後在騰訊工做了一年,一直都是前端開發。php
做者:flytamcss
年中的時候因我的緣由,打算離開騰訊,到外面看看,投了若干簡歷,最終面試了字節跳動、蝦皮、快手、拼多多這4家公司。有的喜有的憂,本文是對本次面試的一個總結。html
快手是最先約的面試,在boss直聘上投完大概幾天就約了。也是我本次第一家面試的公司。時間某個工做日的晚上8點,那天早早溜回家面試了,是在牛客網上進行的前端
主要問的問題以下:vue
react
16新增了哪些生命週期、有什麼做用,爲何去掉某些15的生命週期(寫過碼看過文檔都能答上了)html5
fiber怎樣的,如何實現異步渲染(鏈表/可中斷)node
redux
和redux-saga
的區別和原理react
項目中用到的saga-duck
是個什麼東西linux
useEffect
的實現原理(坦白說本身沒看過react的實現,就說了下preact的實現)webpack
異步渲染和舊版的diff的區別
babel實現轉碼的過程(詞法/語法分析)
項目的技術棧怎麼選型(這種問題好幾回都被問到,感受我真的不太知道怎麼答)
小程序底層實現原理了解多少(說了下雙線程模型/預加載webview
)
項目nodeJs應用異常退出如何處理(pm2/uncaughtException事件等)、日誌上報怎麼作(輸出重定向到文件,elk服務傳傳到kibana)
graphic schema怎麼設計(說了下我對於項目中的理解,資源維度,感受回答不太好)
有哪些技術驅動業務的案例(說了下這個插件的思路和webpack
一些優化)
最後寫了一道算法:最大乘積子序列,有正負數的狀況。應該對應於這個leetcode題目。這裏我理解錯題意覺得這個序列是能夠不連續的,並且對於理解錯的題意也用了一種錯誤的寫法,用了o(n2)
的一種實現。而後面試官提示說o(n)
,最後仍是沒作出來。這個題目其實本身在以前的刷題的時候本身也是比較順利能解出來了,這裏有點惋惜,面試臨場代碼能力仍是有待增強
最後面試官大概講了下部門狀況,他們那邊是深圳快影前端團隊,目前規模還不大,正在大力招人。最後還問了下我如何看待目前部門工程化建設不足的問題,我表示這是一個很好的機會去挑戰本身(hhh)。
當時此次面試以前,差很少兩年沒面試了(上一次面試仍是2018年的8月),不少地方本身感受也是表現不太好。雖然面試官最後說了認爲我是一個比較優秀的同窗,讓我當時迷之自信誤覺得會有下一輪。過了一週沒有任何答覆後,去boss直聘上問了下hr,答覆說算法有待增強,第一次面試涼涼~
拼多多投的是廣州的部門,好像是小程序團隊,經過一個同窗內推的
一面 47分鐘。某天晚上9點
redux
的理念(說了下action
dispatch
state啥的
,單向數據流)
react-redux
中connect
怎麼實現(高階組件、context
注入store、subscribe訂閱store數據變化)
mixin
hoc 繼承的區別,優缺點
react
diff如何實現
react
舊版的diff用深度優先仍是廣度優先。爲何用深度優先,廣度優先能實現嗎(其實我認爲廣度也能實現的,面試官問廣度有啥很差,我確實不知道..)
diff的時間複雜度?爲何?(o(n)。提了下react優化o(n3)->o(n))
react-router
實現原理(hash/html5 history)
客戶端路由hash
/history
實現的區別、原理
有哪些常見的http
頭
websocket
/輪詢的好處和缺點 (性能、兼容性)
websocket
的握手過程(urgrade websocket
)
tcp
的握手過程
tcp/udp的區別
一個應用場景redux觸發幾回action如何設計(這個問題感受有點迷,不知道有啥問,我回答也有點迷,面試官說能夠了...)
儘量多實現pdd app導航佈局實現(就是相似4等分div並列排布)
如何清除浮動
BFC實現原理
開放題:pdd首頁假設沒有任何優化,儘量多的想優化的辦法(懶加載、打包優化、webpack速度、代碼壓縮、雪碧圖、http2 balabala....)
二面 週日 下午2.30 35分鐘
css的盒子模型(content-box border-box)
實現動畫有哪些方法 (js css)
react mixing hoc 繼承 hook之間的區別/優缺點
瀏覽器渲染出一個頁面的過程
vue/react技術選型
項目相關,項目重構開發如何並行balabala...
項目中工程化進行了哪些優化
項目中繼續進行優化會從哪些方面去作(說了下webpack5 module fedration)
nodejs項目的性能優化
linux文件權限(4 2 1 )
前端監控怎樣實現 (數據採集、上報、展現之類)
三面 原本約了去星期天廣州現場的,結果車票都買好了,前幾天,hr說部門架構調整,崗位暫時不開放了。又涼了~
拼多多的面試時間仍是很合適的,周天+晚上9點,基本能夠避免上班的尷尬(畢竟11 11 6...)。問的問題也中規中矩吧。不過也無緣了。拼多多的兩輪是比較少有的不須要手寫代碼的,都是電話面試。
蝦皮經過一個同窗內推的,面的金融部門
蝦皮都是qq視頻面試+騰訊文檔word寫代碼
一面 週二早上
http 302 301 307之間的區別
301和302對於seo來講哪一個更好 (301)
跨域是什麼、如何解決
jsonp有什麼缺點
圖片base64和外鏈的應用場景,各有什麼優缺點(base64減小請求數,可是會增長額外的體積)
http緩存機制
https的握手過程是怎樣的
set/map的區別
hook的侷限性
setState和hook的區別
decorator的做用,編譯後是怎樣的(@decorator -> decorator(target)...)
symbol是什麼,通常用來作什麼
csrf 是什麼 如何防範
sql注入是什麼,如何防範
react 調用setState以後發生了什麼
nodejs事件循環機制
pm2的原理,有哪些模式(cluster fork)
docker和k8s有了解多少(k8s聽過沒用過)
移動端端一個元素拖動,如何實現和優化(節流、改變位置)
-for in
/for of
看代碼輸出
幾道看代碼說輸出(忘了具體題目了)
描述鏈表的反轉怎樣實現,複雜度多少
編程
instanceOf
for of
遍歷一面考的都是一些基礎知識,須要必定牢固的基礎知識準備才行
二面 時間 一面以後的下午
給了兩段效果上均可以實現child 繼承 parent,細節上的差異
function child(){} function parent(){} child.prototype.__proto__ = parent.prototype child.prototype = new parent()
一些代碼看輸出的題目。考點有函數this
指向的問題
如何監聽html外鏈資源加載失敗(面試官又追問了onerror
和addEventListener
的error都能嗎。面試官說onerror不行,具體我沒試過...)
Mutation Observer
、Intersection Observer
使用場景(Intersection聽過沒用過)
127.0.0.1
和0.0.0.0
差異(一個只能經過localhost
,一個能夠經過本機ip或者localhost都行)
利用promise js sleep函數實現
jsx轉換後是怎樣的
redux
compose
函數作什麼的,中間件呢
redux-saga
是什麼,和redux-thunk
有什麼區別
dva有了解嗎
umi.js
有用過嗎
req.pipe(res)
stream 如何處理數據消費和數據生產的速率不一致問題
writeable stream drain
事件是作什麼的(這是和一個控制讀寫速率有關的事件)
二面考得比較細,問了不少看代碼問輸出的問題,也問了一些比較細節的問題,有些細節的地方確實實際也沒接觸過。
字節是經過一個同窗內推的。字節也是本身比較中意的公司之一吧。爲了準備字節面試,刷了很多leetcode,雖然好像面試也沒怎麼考,可是經過這段時間刷leetcode,不得不認可感受本身的代碼能力也有必定提高
某個週日晚上20點
一面
經常使用的http狀態碼(101 200 204 301 302 304 307 400 404 500...)
301和302的區別(永久/臨時)
前端路由怎樣實現(hashchange
事件 hack history.pushState)
前端路由直接刷新404怎樣處理(404時重定向到index.html 如nginx)
從前端到後端全鏈路如何設計實現一個登錄的流程(session方案、jwt)
什麼是跨域,怎樣處理
簡單請求和複雜請求的區別
瀏覽器的緩存策略說下
domain屬性解決跨域。幾種domain設置對跨域是否生效
ts 泛型作什麼的,infer關鍵字的做用
題目
實現typescript的Paramters
、ReturnType
(考察infer關鍵字使用)
實現Promise.all
(每一個promise resolve結果存數組,最後一個promise返回時,把數組返回)
實現一個併發請求控制函數,限制併發數
二面 一面以後立刻進行了二面
jwt的原理(之前用過,比較好說)
xss和csrf是怎樣的,如何去解決
pureComponent
和Component
的區別(前者shouldComponentUpdate
默認比較props)
react
hoc hook解決了什麼問題
有哪些經常使用的react hook,它們作了什麼(useState
useReducer`` useContext
等等...)
項目實現一箇中間層的意義(前端全鏈路日誌打通)
setState
同步仍是異步
setState
傳遞對象和函數有什麼區別?如何選擇
合成事件怎樣的,有什麼好處
事件冒泡和事件捕獲的區別、react中的冒泡和捕獲呢(react中都是合成事件,不管冒泡和捕獲,對應於原生事件都是冒泡)
怎樣看待加班(hhh 加班很正常啦,在騰訊的時候也是天天加班)
爲啥選擇跳槽
題目
實現css
垂直、水平居中
實現bind
函數
實現快速排序
三面 三面是leader面,某個週二下午進行
爲何以前拿了實習offer沒來/下一份工做有怎樣的預期
graphql
相比restful
的區別、優勢缺點()
爲啥選擇了redux-saga
做爲解決方案(解決異步優雅/提供不少工具函數)。redux
的異步中間件方案有哪些,對比。saga
對比dva
?
graphql的鑑權在哪裏作
協程是什麼(語言層面實現的併發),Go/nodeJs怎樣去實現協程(Go使用go關鍵字、node
可使用Generator
實現、我理解react
16的異步渲染也是協程的實現)
react
fiber
的機制是怎樣的
鎖機制的做用,node和Go如何處理死鎖
Go/node實現併發怎麼作
node和Go的優缺點怎樣理解
編程
useState
三面可能由於簡歷寫了本身寫過一些Go(其實我只是我的項目的一些玩具),面試官問了很多node和Go的問題,而後我就先代表Go本身只是簡單學過,而後就按照個人理解回答node和Go的問題..幸虧感受回答得也7788吧
四面 由於某些緣由,前3面發了offer後我選擇換了部門,因而就有了4面
介紹項目 項目難點
項目作了哪些優化
一個廣告頁面,如何統計在不一樣平臺上的停留時間
爲什麼選擇換工做
四面基本上都是聊項目,可貴沒有作題。咱們準備面試的時候必定也要先整理下本身的項目的一些難點之類的,因此四面過程仍是比較輕鬆的
字節感受整體難度是這4個公司面試難度最大的,寫代碼也是最多的,並且感受面試的時候寫代碼真的比平時加了很多debuff
,這個仍是很是考驗心理素質和代碼能力的。最後仍是有驚無險拿了字節跳動的offer啦~
這就是本次跳槽面試經歷小總結。忠告各位:目前大環境也確實很差,各位跳槽要慎重,千萬別裸辭~