一年外包經(jīng)驗入職字節(jié)啦
點擊上方關(guān)注 前端技術(shù)江湖,一起學(xué)習(xí),天天進步
寫在最前
我是晨霜,于20年畢業(yè)于一所雙非本科,在經(jīng)歷了一個月左右的面試流程之后,如愿以償?shù)哪玫搅俗止?jié)的offer,本篇主要記錄此次面試經(jīng)歷,希望能夠?qū)δ阌兴鶐椭?/p>
準(zhǔn)備面試
機會是留給有準(zhǔn)備的人的。
筆者之前在阿里巴巴本地生活做外包,由于外包工作性質(zhì)的特殊性,遂在三月底就已經(jīng)開始準(zhǔn)備面試了,主要準(zhǔn)備的是算法和React。
準(zhǔn)備算法
先來講講算法吧,當(dāng)時筆者是一個算法小白,連時間復(fù)雜度都不會算的那種,下面先來講講筆者是如何學(xué)習(xí)算法的。
個人認(rèn)為算法的難度確實偏大,如果一上來就看諸如《算法導(dǎo)論》的書籍或者相關(guān)文章, 肯定會一頭霧水,甚至可能會適得其反,那么此時就需要一個非常好的入門課程來學(xué)習(xí)。這里推薦ssh大神都推薦的波波老師的視頻教程 玩轉(zhuǎn)算法面試[1],真的非常贊,波波老師會從最基礎(chǔ)的講起,還會用動畫的形式來幫助你理解算法。筆者大概花了一個月的時間學(xué)完了該課程,跟著視頻刷了100多道leetcode,學(xué)完之后,思維真的提升了很多。
順便放一個github地址 JavaScript算法與數(shù)據(jù)結(jié)構(gòu)[2],這個比較全面,但不適合入門。
可能會有人認(rèn)為不進大廠就不需要學(xué)習(xí)算法,我個人認(rèn)為學(xué)習(xí)算法是一定有用的,只要你是一個稍微有點追求的程序員,就一定會去學(xué)習(xí)算法。綜合來看筆者過去一個月的面試,雖然算法在面試中占的比例不高,但卻非常關(guān)鍵,例如筆者在面阿里的時候首先就是做算法題,做過了才有后續(xù)面試。
準(zhǔn)備React
首先是hooks,都2021年了,hooks已經(jīng)成為人手必備的技能了吧,這里推薦Dan的 useEffect完整指南[3],看完這個,hooks相關(guān)的問題都能迎刃而解。
React這里推薦卡老師的 React技術(shù)揭秘[4],你想知道的React知識都在里面,例如React為什么要費力做Concurrent Mode,F(xiàn)iber是什么(非常高頻的一個考點),React更新流程又是什么,hooks的原理等等。u1s1,卡老師沒有出小冊而是選擇免費開放給大家,瑞思拜。
一些其他
在準(zhǔn)備完算法+React之后,還需要準(zhǔn)備一些其他的,這里就直接放鏈接了,不過更多的還是在于平時的積累。
webpack的面試題總結(jié)[5] 神三元同學(xué)的面經(jīng)[6] 死磕36個JS手寫題[7] 精讀《Dom diff 原理詳解》[8] TianTianUp同學(xué)的面經(jīng)[9]
面試過程
字節(jié)的面試用的是牛客網(wǎng),形式是視頻面試+在線寫代碼,第一次面試還是比較緊張的。
一面
一面面試官是一個很年輕的同學(xué),因此問的問題也會比較年輕一些。
React17更新了哪些內(nèi)容? React的fiber是什么?解決了哪些問題? setTimeout為什么最小只能設(shè)置4ms,怎么實現(xiàn)一個0ms的setTimeout? 看你簡歷上有寫到rem和vw,能講講嗎?為什么你選擇使用rem而不是vw? 當(dāng)時回答是rem兼容性更好,且px轉(zhuǎn)rem后可以避免過長小數(shù)。 瀏覽器對于小數(shù)單位是怎么計算的? 當(dāng)時沒答上來,只說了句四舍五入,后續(xù)查閱相關(guān)資料得知不同瀏覽器策略不同,有的會四舍五入,有的會直接取整。不管什么單位,瀏覽器最后都會Computed為px后再進行渲染。 interface和type的區(qū)別是什么?你日常工作中是用interface還是type? ts的逆變和協(xié)變有沒有了解過? 沒有 能不能講講小程序的原理? 網(wǎng)上很多相關(guān)文章,把雙線程講出來就行。 看你之前有做過Taro,能不能講講React是怎么跑在小程序里面的? 大概把Taro3的原理講了一遍,主要是jsx->vdom->json->wxml,具體可以看這里 Taro預(yù)渲染[10] 和 Remax實現(xiàn)原理[11] ,之前寫過demo,所以對這塊還是比較了解。 你剛才講到j(luò)son->wxml這一步可以有兩種方式(template遞歸和自定義組件遞歸),能不能講講兩種方式的優(yōu)劣? 簡單講了一下,template遞歸是純視圖層的操作,性能肯定更好,但是由于微信小程序wxml編譯器的限制,template不能遞歸調(diào)用自己(支付寶小程序無此限制),所以Taro在微信環(huán)境中把同一個template寫了n份,只有id不同,就是為了遞歸渲染。 而自定義組件遞歸還要涉及到邏輯層,例如生命周期等,性能會差一些,同時還有Shadow DOM引起的樣式問題,目前kbone使用的是自定義組件遞歸。 小程序有沒有HMR,能不能講講HMR的原理? 小程序沒有HMR,當(dāng)時只講出來了保存代碼小程序是怎么刷新的,HMR沒有講出來。 講講z-index 講講position 實現(xiàn)一個ts Include 不會 實現(xiàn)一個useInterval 寫的不是太對 js event loop執(zhí)行順序 實現(xiàn)一個immutable function immutable(obj) {
return {
set(path, val) {
const paths = path.split('.')
const lastK = paths.pop()
this.get(paths.join('.'))[lastK] = val
return this
},
get(path) {
const paths = path.split('.')
return paths.reduce((a, k) => a[k], obj)
}
}
}這里給一個大佬的實現(xiàn),我實現(xiàn)的太菜
一面到這里就結(jié)束了,可以感受出來,字節(jié)對于前沿技術(shù)和底層還是很看重的。當(dāng)時手寫題部分確實寫的不太好,甚至以為自己涼涼了,結(jié)果還是給過了。
二面
一面結(jié)束后第二天就收到了hr打來的約二面的電話,當(dāng)時心里還是很開心的,二面是交叉面試,面試官年紀(jì)稍微大一點。因為是在晚上,所以很多問題記不太清楚了。
不同于一面面試官,和二面面試官聊了一段時間的項目相關(guān)的問題,根據(jù)自己情況有啥說啥就行。
options請求是什么?有什么作用? cdn的原理是什么,是在網(wǎng)絡(luò)哪一層起的作用? 項目性能是如何做優(yōu)化的? 我主要從網(wǎng)絡(luò),緩存,js,css,接口合并等幾個方面講的,該題比較寬泛,可自行發(fā)揮。 動態(tài)創(chuàng)建script標(biāo)簽并插入到頁面上,說執(zhí)行時機 給你一個“A2B3”這樣的字符串,輸出“AABBB” 接上題“C4(A(A3B)2)2”,帶嵌套的,這兩題都不是原題,但是類似 寫一個curry,要求 add(1)(2)(3)(4) 打印10 一開始我洗的add(1)(2)(3)(4)(),面試官問我能不能把最后的()去掉,最后尋求提示,他說console.log是怎么打印函數(shù)的,豁然開朗,復(fù)寫toString即可。
二面肯定不止問了上面這些問題,但是我能記住的只有這些了。。。
我最后問了二面面試官業(yè)務(wù)相關(guān)問題,他說你去找三面面試官問,當(dāng)時我就知道過了,哈哈。
三面(涼涼)
沒錯,第一次三面涼涼了,甚至都已經(jīng)收到面試失敗的郵件,后面會聊,先看問題。
loader和plugin的區(qū)別是什么? webpack打包優(yōu)化,我還提到了vite,順便講了下vite 小程序原理,以及Taro原理 xss和csrf http2 Tree Shaking原理 最長回文子串 大數(shù)相加
這次面試非常快,因為確實很多都沒答上來,面完之后我就知道,結(jié)束了??。
三面
大概幾天后吧,hr打電話跟我說換個leader重新面試,理由是我一二面表現(xiàn)還不錯,后來才知道,真正的原因是我現(xiàn)在的leader執(zhí)意把我撈起來的。
聊了很多工程化相關(guān)的問題,主要是項目從開發(fā)到上線這一整套流程,聊完之后他也指出了我說的這一套流程有什么不完善的地方。 React fiber http2 Tree Shaking原理 項目優(yōu)化和網(wǎng)絡(luò)優(yōu)化 股票最大收益 大數(shù)相加
其實在這場面試之前,面試官特意讓我等了10分鐘,應(yīng)該是在看我之前沒寫出來的問題,所以在問的時候特意問的和第一次三面比較重疊。
總結(jié)
進來之后leader和我說之所以把我撈起來是因為覺得我有潛力,他也指出其實我面試表現(xiàn)并不是太好,還是有很多可以繼續(xù)改進的地方,他說優(yōu)秀的人是會自驅(qū)的,你第一次沒答上來,如果你是一個優(yōu)秀的人,你第二次一定能答上來,非常感謝我現(xiàn)在的leader。
如果你跟筆者一樣,工作經(jīng)驗少,學(xué)歷不夠好,擔(dān)心投大廠被拒,相等幾年再投,那我建議你大可不必,隨著你工作經(jīng)驗的增加,大廠對你的要求也會增加,你能確定這幾年你的成長速度能跟上大廠對你的要求嗎?種一棵樹最好的時間是十年前,其次是現(xiàn)在。
寫在最后
筆者目前就職于字節(jié)跳動-抖音電商部門,目前團隊在北京和上海都還有非常多的hc,有興趣的可以投遞簡歷到[email protected]或者加我微信suchangvv找我內(nèi)推。祝大家都能找到心儀的工作。
參考資料
玩轉(zhuǎn)算法面試:https://coding.imooc.com/class/82.html
[2]JavaScript算法與數(shù)據(jù)結(jié)構(gòu):https://github.com/trekhleb/javascript-algorithms
[3]useEffect完整指南:https://overreacted.io/zh-hans/a-complete-guide-to-useeffect/
[4]React技術(shù)揭秘:https://react.iamkasong.com/
[5]webpack的面試題總結(jié):https://juejin.cn/post/6844903877771264013
[6]神三元同學(xué)的面經(jīng):https://juejin.cn/post/6844904106537009159
[7]死磕36個JS手寫題:https://juejin.cn/post/6946022649768181774
[8]精讀《Dom diff 原理詳解》:https://juejin.cn/post/6947856296771223589
[9]TianTianUp同學(xué)的面經(jīng):https://juejin.cn/post/6945625394154307592
[10]Taro預(yù)渲染:https://taro-docs.jd.com/taro/docs/prerender/
[11]Remax實現(xiàn)原理:https://remaxjs.org/guide/implementation-notes
The End
歡迎自薦投稿到《前端技術(shù)江湖》,如果你覺得這篇內(nèi)容對你挺有啟發(fā),記得點個 「在看」哦
點個『在看』支持下 
