時(shí)隔一年半,我,一個(gè)卑微的前端菜雞,又來(lái)寫面經(jīng)了
大廠技術(shù)??高級(jí)前端??Node進(jìn)階
點(diǎn)擊上方?天天Up,關(guān)注公眾號(hào)
回復(fù)1,加入高級(jí)Node交流群

高德 滴滴 美團(tuán) 網(wǎng)易 快手 騰訊 金山 360 百度 知乎 微軟等大廠面試經(jīng)驗(yàn)
一年半以前,寫了個(gè)萬(wàn)字前端面經(jīng),最終去了字節(jié)混飯吃,因?yàn)橐恍I(yè)務(wù)調(diào)整的原因,我又跑路了,沒(méi)寫一面二面都是一輪掛的或者后面我不想面了的,附帶部門的是掛了或者我拒了之后又面了另外的部門,按照一面開始時(shí)間先后排序,還有很多優(yōu)秀的公司我面了但是忘記錄音,比如 momenta、完美世界、掌閱等等。現(xiàn)已完成更新,全文共計(jì)一萬(wàn)三千字,
每家的自我介紹和離職原因部分我就省略了~
寫在前面- 本次面試持續(xù)了整整四周,密度非常大,平均每天四家,身心俱疲,如果不是時(shí)間緊迫建議不要把面試安排得這么密集
- 八股文雖然很多沒(méi)什么用,但是該背還得背
- 算法和數(shù)據(jù)結(jié)構(gòu)不是短時(shí)間就能練成的,不過(guò)好在前端不會(huì)有太難的算法題,都是基本的動(dòng)態(tài)規(guī)劃,回溯,數(shù)組遍歷,鏈表,二叉樹的問(wèn)題,如果自己算法實(shí)在不太行,找工作提前一兩個(gè)月把力扣上比較經(jīng)典的題刷一刷,遇到題最起碼不至于沒(méi)思路,各種排序的原理還是要看看的,很容易被問(wèn)到,而且一旦答不上來(lái)很減分
- 不管你寫 Vue 的還是 React 的(如果你寫 ng 當(dāng)我沒(méi)說(shuō)),很容易被問(wèn)到兩者區(qū)別,建議從多個(gè)角度去聊,比如框架特性、生態(tài)、開發(fā)體驗(yàn)、社區(qū)評(píng)價(jià)、性能、源碼等多個(gè)角度聊
- 有亮點(diǎn)的項(xiàng)目最好多準(zhǔn)備幾個(gè),最好是不同類型的,比如業(yè)務(wù)的、偏中后端的、組件庫(kù)的、工程化的和新興技術(shù)的,根據(jù)自己擅長(zhǎng)的內(nèi)容最起碼準(zhǔn)備兩三個(gè),有的面試官就是想看你都做過(guò)哪些有難度的事情,一招鮮這時(shí)候就不好用了
- 對(duì)不同的角色的面試官問(wèn)的問(wèn)題,要在不同的角度回答,比如同樣問(wèn)你有沒(méi)有處理過(guò)兼容性問(wèn)題,對(duì)前面的面試官,就可以回答遇到過(guò)的不兼容的場(chǎng)景和解決細(xì)節(jié),遇到后面 leader 的面試就可以更多地從如何高效驗(yàn)證排查兼容性問(wèn)題這個(gè)角度回答,注意場(chǎng)景
- 最后一般面試官都會(huì)給提問(wèn)題的時(shí)間,我個(gè)人一般是問(wèn)業(yè)務(wù)內(nèi)容、技術(shù)棧、團(tuán)隊(duì)規(guī)模或者未來(lái)業(yè)務(wù)和技術(shù)上發(fā)展方向,到后面的面試官我會(huì)問(wèn)一下這位面試官在這個(gè)團(tuán)隊(duì)中的角色,根據(jù)他的角色結(jié)合他對(duì)上面幾個(gè)問(wèn)題的表述可以初步判斷出這個(gè)團(tuán)隊(duì)是邊緣的,還是核心的,還是單純是個(gè)畫大餅的
- 整體面下來(lái),面試體驗(yàn)最好的是微軟,謙卑,有禮貌,感覺(jué)微軟面試官是有一整套面試話術(shù)的,比如
- “接下來(lái)我會(huì)問(wèn)你一些業(yè)務(wù)相關(guān)問(wèn)題,請(qǐng)?jiān)诓贿`反當(dāng)前公司原則的情況下回答,如果我的問(wèn)題你不方便回答可以直接告訴我”
- “接下來(lái)這個(gè)題你可以用你任何熟悉的編譯器進(jìn)行作答”
- “我接下來(lái)描述的問(wèn)題如果你有任何不清楚的都可以隨時(shí)打斷我”
- 我答的題,還有我描述的項(xiàng)目,面試官一般都會(huì)先給予肯定答復(fù),如果有問(wèn)題再做進(jìn)一步的提問(wèn)
- 中途有一輪,面試官的問(wèn)題我理解錯(cuò)了,實(shí)現(xiàn)了另一個(gè)東西,面試官第一反應(yīng)是自己沒(méi)有表述清楚,而且說(shuō)我理解的這個(gè)方向的代碼實(shí)現(xiàn)得很好
- 后面英文面試時(shí),我英語(yǔ)很差,面試官說(shuō)了一大段英語(yǔ)我基本沒(méi)聽(tīng)明白,面試官問(wèn)我是不是自己說(shuō)太快了
一面
- 換膚都做過(guò)什么處理,有沒(méi)有處理過(guò)可能改變尺寸的換膚
- i18n 在團(tuán)隊(duì)內(nèi)部都做了哪些實(shí)踐
- webpack 遷移 vite 遇到了哪些問(wèn)題
- CI/CD 做了哪些實(shí)踐
- 鑒權(quán)有了解么,jwt 如何實(shí)現(xiàn)踢人,session 和 jwt 鑒權(quán)的區(qū)別
- TCP 三次握手 http1.0,1.1,2 都有哪些區(qū)別
- https,為什么 https 可以防中間人攻擊
- 冒泡排序
二面
- 給你一個(gè)已經(jīng)升序排列的數(shù)組,給一個(gè)數(shù)字,找一下這個(gè)數(shù)字在這個(gè)數(shù)組里出現(xiàn)了幾次
- 洗牌算法,如何驗(yàn)證這個(gè)洗牌算法可以把牌洗得足夠亂
- node stream 去取一個(gè)超大數(shù)據(jù)量的日志,由于內(nèi)存限制每次只能取一部分,現(xiàn)在希望在全部日志中隨機(jī)取一萬(wàn)條,如何做
- 介紹一下項(xiàng)目 有哪些是由你主導(dǎo)提出的方案做的事情
一面
- 介紹一下 promise,它為啥叫 promise
- esmodule 介紹一下,它和 commonjs 的區(qū)別,主要的優(yōu)勢(shì)是什么
- 介紹一下 vite 的原理,它會(huì)去編譯你的代碼嗎,vite 引用 commonjs 的包的時(shí)候怎么處理
- 如何轉(zhuǎn)成 esm vue3 的組合式 API 有了解嗎,它有哪些優(yōu)勢(shì)
- 介紹 https cors 介紹一下
- 微前端有了解嗎
- 為什么你們移動(dòng)端 h5 用 vue,pc 管理端用 react?
- git 對(duì)象上的操作有了解過(guò)嗎?git reset、rebase 這些操作用過(guò)嗎 ?
- 看你之前跳的都比較頻繁,每段都沒(méi)超過(guò)兩年,京東有個(gè)二五原則,這個(gè)問(wèn)題你怎么看
二面
- 你們小程序是用的 taro,對(duì) taro 原理有了解嗎
- 你們 cms 系統(tǒng)的架構(gòu)是怎樣的
- 你有了解過(guò) webpack 現(xiàn)在也支持 esm 了嗎?
- 你們的組件庫(kù)是全公司公用的還是團(tuán)隊(duì)內(nèi)自己的,是從 0 開發(fā)還是參考其他開源組件庫(kù)在別人的基礎(chǔ)上搞的?
- 有用 vue3 嗎,為什么團(tuán)隊(duì)沒(méi)有上 vue3?
- 你們 react 用的是什么語(yǔ)法?fiber 原理有了解嗎?
- 你們當(dāng)前團(tuán)隊(duì)有多少人,未來(lái)想做哪方面?
- 怎么理解 vue 單向數(shù)據(jù)流的
- Vue 組件之間的通信方式都有哪些,用過(guò) eventbus 么,eventbus 的思想是什么
- 寫個(gè)自定義 v-modal
- 和listener 有了解嗎
- Vue 生命周期有哪些,都是做什么的,updated 什么情況下會(huì)觸發(fā),beforeCreate 的時(shí)候能拿到 Vue 實(shí)例么,組件銷毀的時(shí)候調(diào)用的是哪個(gè) API
- 什么情況下會(huì)觸發(fā)組件銷毀,銷毀的時(shí)候會(huì)卸載自定義事件和原生事件么
- 自定義指令寫過(guò)么,自定義指令都有哪些鉤子
- 傳統(tǒng)前端開發(fā)和框架開發(fā)的區(qū)別是什么
- Vue2 的數(shù)據(jù)響應(yīng)式有兩個(gè)缺陷,你知道是哪兩個(gè)缺陷么,為什么會(huì)有這樣的缺陷,如何解決
- Vue 如何實(shí)現(xiàn)的數(shù)組的監(jiān)聽(tīng),為什么 Vue 沒(méi)有對(duì)數(shù)組下標(biāo)修改做劫持
- Symbol 有了解嗎,迭代器有了解嗎,哪些是可迭代的
- 用 Set 獲取兩個(gè)數(shù)組的交集,如何做
- 實(shí)現(xiàn) Promise.all
- animation 和 transition 有什么區(qū)別
- 寫個(gè)動(dòng)畫,一個(gè)盒子,開始時(shí)縮放是 0,50%時(shí)是 1,100%時(shí)是 0,開始結(jié)束都是慢速,持續(xù) 2 秒,延遲 2 秒,結(jié)束后固定在結(jié)束的效果
這是我面的比較離譜的一個(gè),問(wèn)各種 API,沒(méi)什么實(shí)際營(yíng)養(yǎng),說(shuō)實(shí)話挺無(wú)聊的,面試體驗(yàn)也一般
BOSS 直聘- 聊一下最復(fù)雜的項(xiàng)目
- 在無(wú)障礙的項(xiàng)目中做過(guò)哪些
- 做黑夜模式有沒(méi)有考慮過(guò)用戶設(shè)置了定時(shí)切換手機(jī)黑夜模式的情況
- 你們開發(fā)的 h5 項(xiàng)目依賴的安卓和蘋果的 webview 的內(nèi)核分別都是什么
- Lottie 動(dòng)畫上做過(guò)哪些優(yōu)化,有考慮在低端機(jī)上用 CSS 動(dòng)畫做么
- 如果讓你做一個(gè)動(dòng)畫,一個(gè)地球本身在自轉(zhuǎn),外面有個(gè)飛機(jī)圍著它轉(zhuǎn),飛機(jī)的螺旋槳自己也在轉(zhuǎn),有哪些需要考慮的點(diǎn)
- CI/CD 上做過(guò)哪些
- webpack 遷移 Vite 遇到過(guò)哪些問(wèn)題,之前 webpack 慢是為什么,有過(guò)優(yōu)化么
- 業(yè)務(wù)內(nèi)的公共工具提煉了哪些
- 自己做著玩的這些項(xiàng)目介紹一下,主要都是做什么的
- 這次找工作主要看重什么
- 寫 Vue 多還是 React 多?
- 職業(yè)規(guī)劃
- CSS 實(shí)現(xiàn)一個(gè)扇形
- 問(wèn)輸出,以及原因(具體代碼我沒(méi)記,但是這個(gè)考點(diǎn),以下題也都是)
var?a?=?{?name:?"Sam"?};
var?b?=?{?name:?"Tom"?};
var?o?=?{};
o[a]?=?1;
o[b]?=?2;
console.log(o[a]);
- 問(wèn)輸出
async?function?async1()?{
??console.log("async1?start");
??await?async2();
??console.log("async1?end");
}
async?function?async2()?{
??console.log("async2");
}
console.log("script?start");
setTimeout(()?=>?{
??console.log("setTimeout");
},?0);
async1();
new?Promise((resolve)?=>?{
??console.log("promise1");
??resolve();
}).then(()?=>?{
??console.log("promise2");
});
console.log("script?end");
- 問(wèn)輸出
const?promise1?=?Promise.resolve("First");
const?promise2?=?Promise.resolve("Second");
const?promise3?=?Promise.reject("Third");
const?promise4?=?Promise.resolve("Fourth");
const?runPromises?=?async?()?=>?{
??const?res1?=?await?Promise.all([promise1,?promise2]);
??const?res2?=?await?Promise.all([promise3,?promise4]);
??return?[res1,?res2];
};
runPromises()
??.then((res)?=>?console.log(res))
??.catch((err)?=>?console.log(err));
- Vue 的 nextTick 是做什么的?8.React 的合成事件和原生事件了解嗎?
- webpack 和 vite 的區(qū)別是什么,切 Vite 的動(dòng)力是什么
- 之前的開發(fā)模式是怎樣的,是一個(gè)人負(fù)責(zé)一個(gè)模塊還是按照需求排期分配
- 微前端有了解么
HR 約我現(xiàn)場(chǎng)二面,我說(shuō)我去不了北京,HR 說(shuō)幫我協(xié)調(diào)一下遠(yuǎn)程面試,之后就再也沒(méi)聯(lián)系我
陌陌- 之前做過(guò)哪些工具
- 移動(dòng)端兼容性問(wèn)題遇到過(guò)哪些
- 如何限制 Promise 請(qǐng)求并發(fā)數(shù)
- 實(shí)現(xiàn)這個(gè) pipe
const?fn?=?pipe(addOne,?addTwo,?addThree,?addFour);?//?傳入pipe的四個(gè)函數(shù)都是已實(shí)現(xiàn)的
fn(1);?//?1?+?1?+?2?+?3?+?4?=?11,輸出11
- 了解過(guò) Vue3 么,為什么還沒(méi)有上 Vue3,了解 Proxy 么,它和 defineProperty 的區(qū)別是什么,性能上有什么區(qū)別么
- Vue 如果想做模板的復(fù)用,應(yīng)該怎么做
- 有做過(guò)骨架屏么,是怎么做的
- 有做過(guò)懶加載么
- 有過(guò) React Native 的經(jīng)歷嗎
- MySQL 優(yōu)化有了解過(guò)么
一面
- 如果實(shí)現(xiàn)一個(gè)三欄布局,需要三欄占同樣的寬度,放多個(gè)元素時(shí)會(huì)自動(dòng)換行,有哪些做法
- 移動(dòng)端適配是用 rem 還是 vw?分別的原理是什么?你們用什么方案?
- ES6 語(yǔ)法用過(guò)哪些,都有哪些常用的特性
- Promise 詳細(xì)聊一下,可以解決哪些問(wèn)題
- p 成功的會(huì)如何走,如果 p 失敗了進(jìn)入 b 之后,b 中又失敗了是否會(huì)繼續(xù)執(zhí)行后面的 c 或 d
p.then(a,?b).then(c).catch(d);
- 下面這個(gè) class 的四個(gè)屬性分別屬于這個(gè) class 的什么,fn 和 f 有什么區(qū)別
class?A?{
??static?a?=?1;
??b?=?2;
??fn()?{}
??f?=?()?=>?{};
}
- 實(shí)現(xiàn)一個(gè) node 異步函數(shù)的 promisify
- Vue 生命周期都有哪些
- keep-alive 的原理是什么,如果不用它的話怎么自己實(shí)現(xiàn)類似的效果
- v-if 和 v-show 的區(qū)別
二面
- 介紹一下之前做的項(xiàng)目
- 如果需要你實(shí)現(xiàn)一個(gè)全文翻譯功能,富文本的標(biāo)簽部分你是如何處理的,翻譯之后數(shù)據(jù)如何回填
- typescript 實(shí)現(xiàn)一個(gè)字符串類型去左側(cè)空格
type?A?=?"???Hello?world!???";
type?B?=?LeftTrim;?//??'Hello?world!???'
- 如果需要你實(shí)現(xiàn)一個(gè)彈幕的組件,你需要如何設(shè)計(jì)這個(gè)組件的 props 和 state,內(nèi)部如何實(shí)現(xiàn),有哪些地方可以優(yōu)化
三面
- 介紹一個(gè)有挑戰(zhàn)性的項(xiàng)目
- 無(wú)障礙方面你了哪些優(yōu)化
- i18n 方面你都做過(guò)哪些
- 你們做的是一個(gè)怎么樣的產(chǎn)品
const?data1?=?{?"a.b.c":?1,?"a.b.d":?2?};
const?data2?=?{?"a.b.e":?3,?"a.b.f":?4?};
//?把如上兩個(gè)對(duì)象合并成一個(gè)JSON,其中的.需要處理成對(duì)應(yīng)的層級(jí)
- 你對(duì) serverless 的理解是什么樣的
- 未來(lái)發(fā)展方向希望是怎樣的
- 對(duì)技術(shù)上有什么期望
一面
- 之前做過(guò) SSR 是哪種服務(wù)端渲染,是同構(gòu)么
- 介紹一些上一份工作主要都負(fù)責(zé)哪些事情
- 介紹一下單例模式和它在前端的應(yīng)用
- 介紹一下原型鏈
- 介紹一下前端的繼承方式
- HTTP,TCP,七層網(wǎng)絡(luò)結(jié)構(gòu),講一下
- chrome 瀏覽器最多同時(shí)加載多少個(gè)資源,那如果想同時(shí)加載更多資源應(yīng)該怎么辦
- http2 的多路復(fù)用是什么原理
- 實(shí)現(xiàn)一個(gè)改變 this 指向的 call 方法,介紹一下原理
- 求斐波那契數(shù)列第 N 項(xiàng)
- 跨端有了解過(guò)么,Taro,uniapp 有寫過(guò)么
- 有 Devops 相關(guān)的經(jīng)驗(yàn)么
- Docker 和 k8s 有相關(guān)經(jīng)驗(yàn)么
- 了解 JSON Web Token 么,它和其他的鑒權(quán)方式有什么區(qū)別
- 網(wǎng)絡(luò)安全有了解么,CSRF 如何防御,SameSite 有哪幾個(gè)值
二面
- 之前的工作在每個(gè)階段給你帶來(lái)了哪些成長(zhǎng)
- 你之前做過(guò)的比較有亮點(diǎn)的項(xiàng)目
- 如果你還在之前的部門的話,你有哪些事情是還想做的
- 對(duì) TDD 的看法是怎樣的
- 移動(dòng)端一套代碼適配多端是如何做的
二面前面聊了聊項(xiàng)目,最后一直在給我將部門未來(lái)的發(fā)展趨勢(shì),說(shuō)了很久,說(shuō)實(shí)話我聽(tīng)得有點(diǎn)困了,然后不知道為啥給我掛了
小紅書- 介紹一個(gè)比較難的項(xiàng)目
- 如果用戶希望自己定義一個(gè)顏色生成對(duì)應(yīng)的皮膚,應(yīng)該怎么制定方案
- webpack 遷移 Vite 遇到過(guò)哪些問(wèn)題
- Vue 和 React 的區(qū)別
- Vue 和 React 的 Diff 算法有哪些區(qū)別
- 編寫一個(gè)方法,判斷一個(gè)字符串是否是合法的 XML
const?str1?=?"123";?//?true
const?str2?=?"123";?//?true
const?str2?=?"123";?//?false
- 在一個(gè)矩陣中查找一個(gè)字符串,可以上下左右移動(dòng),但是不能回頭,如果能找到這個(gè)字符串返回 true
const?str?=?"abcde";
const?matrix?=?[
??["0",?"0",?"0",?"0",?"0",?"0"],
??["0",?"0",?"a",?"b",?"0",?"0"],
??["0",?"0",?"0",?"c",?"d",?"0"],
??["0",?"0",?"0",?"0",?"e",?"0"],
];
- 青蛙跳臺(tái)階,一次可以跳 1 階,2 階或者 3 階,如果想跳上一個(gè) N 階共有幾種跳法
前面吹逼時(shí)間有點(diǎn)長(zhǎng),導(dǎo)致后面三道算法題做題時(shí)間不太夠了,掛了
美團(tuán)(酒旅)一面
- 之前做過(guò)的有難度的項(xiàng)目
- 瀏覽器緩存機(jī)制
- HTTPS 介紹一下
- 節(jié)流和防抖的原理是什么
- 事件循環(huán)介紹一下
- 輸出結(jié)果
async?function?async1()?{
??console.log("async1?start");
??await?async2();
??console.log("async1?end");
}
async?function?async2()?{
??console.log("async2");
}
console.log("script?start");
setTimeout(()?=>?{
??console.log("setTimeout");
},?0);
async1();
new?Promise((resolve)?=>?{
??console.log("promise1");
??resolve();
}).then(()?=>?{
??console.log("promise2");
});
console.log("script?end");
- 0.1 + 0.2 為什么不等于 0.3,為什么會(huì)有誤差,如何解決
- 大數(shù)加法如何實(shí)現(xiàn)
- v-for 為什么會(huì)有 key
- 為什么 vue 的 data 用一個(gè)函數(shù)而不是一個(gè)對(duì)象
- 虛擬 DOM 介紹一下
- diff 算法介紹一下
- webpack 和 Vite 的區(qū)別,遷移過(guò)程是怎么樣的
- 前端工程化你是怎么理解的
二面
- 在之前公司業(yè)務(wù)和技術(shù)上主要都負(fù)責(zé)哪些
- 技術(shù)選型和技術(shù)架構(gòu)都是怎樣的
- 研發(fā)流程上有做效率工具么
- node 的框架用的是哪個(gè),內(nèi)存監(jiān)控是怎么做的,你了解過(guò)哪些 node 的框架
- vue 和 react 都看過(guò)哪些部分源碼,v-model 的原理是什么,虛擬 dom 的優(yōu)缺點(diǎn)是什么
- typescript 相比 JavaScript 的優(yōu)點(diǎn)是什么
- export 和 module.exports 的區(qū)別
- node 的內(nèi)存泄露是如何監(jiān)控的
- node 讀取文件的時(shí)候,fs.readFile 和 stream 有什么區(qū)別
- 你的優(yōu)勢(shì)和劣勢(shì)是什么
聊了好多 node 監(jiān)控相關(guān)的,說(shuō)實(shí)話沒(méi)咋接觸過(guò)
知乎一面
- 介紹有難點(diǎn)的項(xiàng)目
- 使用 Vite 遇到過(guò)哪些問(wèn)題
- esbuild 有了解嗎
- 當(dāng)你們把體量很大的項(xiàng)目拆分后,有沒(méi)有遇到拆分之前沒(méi)有的問(wèn)題
- 組內(nèi)工具包你們是如何保證向下兼容的
- 以下兩種寫法有什么區(qū)別,會(huì)出現(xiàn)什么效果,如果不一樣的話如何能得到同樣的效果
export?default?class?App?extends?React.Component?{
??state?=?{
????cnt:?0
??};
??render()?{
????return?(
??????<>
????????<button
??????????onClick={()?=>?{
????????????this.setState({?cnt:?this.state.cnt?+?1?});
????????????setTimeout(()?=>?{
??????????????this.setState({?cnt:?this.state.cnt?+?1?});
????????????},?1000);
??????????}}
????????>
??????????add?cnt
????????button>
????????<div>cnt:?{this.state.cnt}div>
??????>
????);
??}
}
export?default?function?App()?{
??const?[cnt,?setCnt]?=?useState(0);
??return?(
????<>
??????<button
????????onClick={()?=>?{
??????????setCnt(cnt?+?1);
??????????setTimeout(()?=>?{
????????????setCnt(cnt?+?1);
??????????},?1000);
????????}}
??????>
????????add?cnt
??????button>
??????<div>cnt:?{cnt}div>
????>
??);
}
- 問(wèn)輸出
const?p1?=?new?Promise((resolve,?reject)?=>?{
??setTimeout(()?=>?{
????resolve(1);
????throw?new?Error();
??},?2000);
});
const?p2?=?p1
??.then((val)?=>?{
????console.log(val);
????return?val?+?1;
??})
??.catch((err)?=>?{
????console.log(err);
????return?err;
??});
Promise.all([p2,?Promise.reject(3)])
??.then((val2)?=>?{
????console.log(val2);
??})
??.catch((err2)?=>?{
????console.log(err2);
??});
- 寫個(gè)二叉樹遍歷,深度優(yōu)先廣度優(yōu)先
- Typescript 類型了解過(guò)嗎,infer 是做什么的,實(shí)現(xiàn)一個(gè) Pick 和一個(gè) Omit
二面
- SSR 和 CSR 的區(qū)別,Nuxt 這類的 SSR 方案和直接渲染 ejs 這類方案有什么本質(zhì)的區(qū)別
- Vue 和 React 使用的比重是怎樣的,這兩者各自的優(yōu)劣介紹一下
- PureComponent 會(huì)引入什么問(wèn)題,什么情況下會(huì)需要用到它
- Vue 的單文件開發(fā)模式,這個(gè)解析 vue-loader 是如何實(shí)現(xiàn)的。
- 如果 template 語(yǔ)言換掉的話,會(huì)如何處理。
- script 的部分會(huì)如何處理,由于 babel-loader 是只能針對(duì) js 類型的文件進(jìn)行轉(zhuǎn)化,那.vue 文件中的 script 標(biāo)簽是如何被 babel-loader 讀取的。
- vue scoped 是怎么實(shí)現(xiàn)的,dom 上的哈希是如何和 style 中的哈希對(duì)應(yīng)起來(lái)的,又是如何保證每次生成的哈希不變的
- babel.config.js 和.babelrc 有什么區(qū)別,應(yīng)該在什么場(chǎng)景使用,同時(shí)使用的話會(huì)出現(xiàn)什么現(xiàn)象
- Vue 調(diào)用 render 函數(shù)的時(shí)機(jī)是在什么時(shí)機(jī)被觸發(fā)的,后續(xù)狀態(tài)變更導(dǎo)致 render 又是誰(shuí)觸發(fā)的
- Vue 和 React 在數(shù)據(jù)更新上的差異,Vue 這種數(shù)據(jù)劫持的方式會(huì)不會(huì)帶來(lái)額外的問(wèn)題,Vue3 在這些問(wèn)題上有優(yōu)化么
- 和forceupdate 都做了哪些事
- 異步更新 DOM 這個(gè)操作,Vue 和 React 都是如何實(shí)現(xiàn)的,Vue 的異步處理還有其他方式可以做么,除了 MessageChannel 還有其他和他用法類似的 API 么
- 公用的代碼如何做提取,如何判斷一個(gè)資源是否應(yīng)該被提取
- Portal 除了做了把組件提到對(duì)應(yīng)的 DOM 下之外,還做了哪些事
- 用什么方式發(fā)請(qǐng)求,axios 是個(gè)同構(gòu)的工具,它是如何實(shí)現(xiàn)區(qū)分 Node 和瀏覽器環(huán)境的
- axios 內(nèi)部如何把 xhr 的 callback 轉(zhuǎn)換為 promise 的,如何處理請(qǐng)求異常的
二面問(wèn)得比較細(xì),很多地方的細(xì)節(jié)其實(shí)沒(méi)太關(guān)注過(guò),掛了
騰訊(看點(diǎn))一面
- 實(shí)現(xiàn) ob 和 watch 方法,希望當(dāng)方法傳入 watch 函數(shù)時(shí)會(huì)執(zhí)行一次,之后每次修改 data 上的屬性時(shí),會(huì)觸發(fā)對(duì)應(yīng)的 console
const?data?=?ob({?count:?0,?foo:?"test"?});
watch(()?=>?{
??console.log("watch-count",?data.count);
});
watch(()?=>?{
??console.log("watch-foo",?data.foo);
});
data.count?+=?1;
console.log("showcount",?data.count);
delete?data.count;
data.foo?=?"test2";
- 輸入一個(gè)字符串,遇到方括號(hào)則對(duì)方括號(hào)內(nèi)的字符串重復(fù) n 次,n 是方括號(hào)前面的數(shù)字,如果沒(méi)有數(shù)字則為 1 次,可能存在嵌套
const?test1?=?"a2[b]a2[b2[c]]";
//?abbabccbcc
const?test2?=?"2[3[c]]a2a";
//?cccccca2a
const?test3?=?"[abc][d]3[e2]4";
//?abcde2e2e24
二面
- Vue2 和 3 的區(qū)別,依賴收集和派發(fā)更新都是如何做的,vue 是如何保證父組件重新渲染不導(dǎo)致子級(jí)重新渲染的
- webpack 異步加載和分包的原理是什么
- Vite 依賴與預(yù)構(gòu)建是把所有的用到的依賴都合并到一起還是每個(gè)都是單獨(dú)的包,一個(gè)包安裝了多個(gè)版本問(wèn)題如何處理?
- node 的進(jìn)程管理了解過(guò)么?多進(jìn)程都有哪些方案?
4.1 worker 掛了如何能監(jiān)測(cè)到?
4.2 IPC 通信是什么?
4.3 如果用 cluster 啟動(dòng)多進(jìn)程后,子進(jìn)程是多個(gè)端口還是一個(gè)端口?
4.4 一個(gè) worker 是一個(gè)進(jìn)程嗎?它有獨(dú)立的 pid 么?
5.5 進(jìn)程之間數(shù)據(jù)通信如何做 - node 內(nèi)存泄露是如何監(jiān)控的?原理是什么??jī)?nèi)存是監(jiān)控進(jìn)程的還是監(jiān)控 docker 的?
- webpack 打 polyfill 都有哪幾種方式
- http2 都有哪些應(yīng)用,多路復(fù)用和 1.1 版本 keep-alive 有什么區(qū)別和聯(lián)系,如果 http1.1 服務(wù)端需要按順序處理請(qǐng)求,那為什么有的時(shí)候在一個(gè)頁(yè)面里看圖片,有時(shí)下面的圖片會(huì)先出來(lái),http pipeline 有了解嗎,http 流傳輸有了解嗎
- 前端的工程化都做了哪些事情?git CI/CD 都做了哪些事?比如 lint,安全檢查,圈復(fù)雜度都有關(guān)注嗎?lint 的規(guī)則是你們業(yè)務(wù)自己定制的嗎?組件測(cè)試和自動(dòng)化測(cè)試有做嗎?上線的流水線有配過(guò)嗎?小流量上線是如何做測(cè)試的?
- Taro 多平臺(tái)的兼容是怎樣做的,Taro 是怎么把 react 代碼編譯成運(yùn)行時(shí),運(yùn)行時(shí)是什么樣的代碼,又是如何讓它在原生小程序的 DSL 中執(zhí)行的
- 前端監(jiān)控報(bào)警是怎么做的,都有哪些監(jiān)控指標(biāo),報(bào)警的策略是怎樣的,關(guān)注哪些指標(biāo)和維度,白屏如何監(jiān)控
- 都做過(guò)哪些優(yōu)化,動(dòng)畫的剪包如何做,F(xiàn)PS 是如何監(jiān)控的
這個(gè)真的是有點(diǎn)。。。難,很多完全是我知識(shí)盲區(qū),尤其 node 的部分和 Taro 的部分,掛得服氣
金山一面
- 主要做過(guò)哪些項(xiàng)目
- Vue 兄弟組件傳值方式都有哪些
- 介紹一下 Vuex
- 介紹一下 diff 算法
- Websocket 介紹一下,它和 http 有什么關(guān)系
- 介紹一下 https
- 用三個(gè)正面的詞和三個(gè)負(fù)面的詞評(píng)論一下你自己
- 介紹一下你最近讀過(guò)的一本書
- 有沒(méi)有做過(guò)哪些和代碼沒(méi)關(guān)系的但是比較精通的事情
- 你對(duì)下一份工作的期望是怎樣的
二面
- 對(duì)上家公司的感受,自己的成長(zhǎng),不滿的地方
- 之前的團(tuán)隊(duì)規(guī)模是怎樣的
- 之前的業(yè)務(wù)是怎樣的
- 對(duì)下一份工作的期望是怎樣的
一面
- 對(duì)下一份工作有怎么樣的期望,你對(duì)這個(gè)規(guī)劃做過(guò)哪些努力
- 介紹一個(gè)有難點(diǎn)的工作
- 為什么之前要把項(xiàng)目從 SSR 遷移到 CSR
- 實(shí)現(xiàn)一下 koa 中間件原理,如何判斷調(diào)用了多次 next 并拋出錯(cuò)誤
- 事件循環(huán)介紹一下,Node 事件循環(huán)中如果在 Poll 階段不停地產(chǎn)生新的事件會(huì)怎樣
- Node 中如果要對(duì)很大的字符串做 JSON.parse 應(yīng)該怎樣處理
- 講一下瀏覽器中的重繪和重排
- 介紹一下瀏覽器的合成層
- 如果一個(gè)頁(yè)面需要同時(shí)適配 PC 端和移動(dòng)端,應(yīng)該怎么做,rem 和 vw 方案有什么區(qū)別
- typescript 定義一個(gè)對(duì)象應(yīng)該如何定義,如果定義對(duì)象的 key 必須是字符串,應(yīng)該如何定義
- Vue 的響應(yīng)式原理介紹一下,Watcher 的 cleanDeps 是做什么的
- computed 和 watch 是什么原理
- 如果 data 里有一個(gè)對(duì)象,不希望它被深層監(jiān)聽(tīng),需要怎么做
- 給定任意二維數(shù)組,輸出所有的排列組合項(xiàng)。比如
[['A','B'], ['a','b'], ['1', '2']],輸出['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2'] - 給出任意一個(gè)二維數(shù)組,要求輸出數(shù)組元素的所有排列組合。如
[['A', 'B', 'C'],[ 'A1', 'B1', 'C1'],[ 'A2', 'B2']],輸出["AA1A2", "BA1A2", "CA1A2", "AB1A2", "BB1A2", "CB1A2", "AC1A2", "BC1A2", "CC1A2", "AA1B2", "BA1B2", "CA1B2", "AB1B2", "BB1B2", "CB1B2", "AC1B2", "BC1B2", "CC1B2"]
二面
- Node 服務(wù)遷移到輕服務(wù)主要都做了什么
- 你們的 RPC 用的哪個(gè)框架,grpc 和 thrift 的區(qū)別有了解么,protobuf 有了解嗎
- serverless 有多少了解,它適合做什么,都用它寫過(guò)什么
- 客戶端提供 API 版本不一致這類兼容性問(wèn)題你是如何做的處理
- webpack 遷移 Vite 有遇到什么問(wèn)題,snowpack 有了解過(guò)么,它和 vite 有什么區(qū)別
- 對(duì) React 熟悉么,hooks 有哪些最佳實(shí)踐
- 性能優(yōu)化都做過(guò)哪些
- 一個(gè)頁(yè)面的性能指標(biāo)都有哪些,你是如何做監(jiān)控的,如何監(jiān)控 node 服務(wù)的性能監(jiān)控
- 實(shí)現(xiàn)一個(gè)二叉樹中序遍歷的迭代器,時(shí)間復(fù)雜度最好是多少,最差是多少,空間復(fù)雜度是多少
三面
- 實(shí)現(xiàn)一個(gè)函數(shù),傳入一個(gè)數(shù)組,數(shù)組中每一項(xiàng)代表一個(gè)線段的起止位置,計(jì)算所有線段覆蓋的長(zhǎng)度總量,并編寫測(cè)試用例
lineCoverage([
??[0,?1],
??[2,?3],
]);?//?2
lineCoverage([
??[0,?2],
??[2,?3],
??[3,?4],
]);?//?4
lineCoverage([
??[0,?2],
??[1,?3],
??[2,?4],
]);?//?4
lineCoverage([
??[0,?5],
??[1,?3],
??[2,?4],
]);?//?5
lineCoverage([
??[0,?6],
??[2,?6],
??[6,?7],
]);?//?7
- 計(jì)算一個(gè)矩陣內(nèi),所有 1 覆蓋的區(qū)域(島嶼問(wèn)題) 力扣
//?howManyDots(canvas:number[][]):?number
//?//?上下左右相鄰視為一起
//?[[0,0,0],
//??[0,1,0],
//??[0,0,0]]
//?=>1
//?[[1,1,0,1],
//??[0,0,1,0],
//??[0,1,1,0]]
//?=>3
//?[[1,1,1,1],
//??[0,0,0,1],
//??[1,0,0,1],
//??[1,1,1,1]]
//?=>1
便利蜂- Vue 從修改屬性到渲染到頁(yè)面上都經(jīng)歷了什么
- 詳見(jiàn)代碼
/\*\*
-?目標(biāo):
-?實(shí)現(xiàn)一個(gè)簡(jiǎn)單的觀察者模式(或發(fā)布-訂閱模式)
??\*/
const?shop?=?{
apple:?5,?//?蘋果?5?元
potato:?2,?//?馬鈴薯?2?元
tomato:?3,?//?西紅柿?3?元
orange:?7,?//?橙子?7?元
}
????/**
????*?現(xiàn)在我們有一個(gè)便利店的實(shí)例對(duì)象,目標(biāo)是需要增加對(duì)商品價(jià)格的監(jiān)聽(tīng),當(dāng)商品價(jià)格發(fā)生變化時(shí),觸發(fā)對(duì)應(yīng)的事件。
????*?1、小明關(guān)注蘋果價(jià)格變化
????*?2、小剛關(guān)注橙子價(jià)格變化
????*?3、當(dāng)價(jià)格變化時(shí),自動(dòng)觸發(fā)對(duì)應(yīng)的事件
????*/
????class?Pubsub?{
??????constructor()?{
??????}
??????list?=?{};
??????//?監(jiān)聽(tīng)方法,添加監(jiān)聽(tīng)者,監(jiān)聽(tīng)對(duì)象,和監(jiān)聽(tīng)事件的方法,
??????//?提示,可以將移除方法作為監(jiān)聽(tīng)方法的返回值
??????listen?=?(key,?listener,?callback)?=>?{
??????}
??????//?發(fā)布消息的方法
??????publish?=?(key,?price)?=>?{
????????/**?該如何定義?發(fā)布方法??**/
??????}
????}
????//?定于一個(gè)Pubsub的實(shí)例對(duì)象
????const?pubsub?=?new?Pubsub();
????const?event1?=?pubsub.listen('apple',?'小明',?(listener,?price)?=>?{
??????console.log(`${listener}關(guān)注的apple的最新價(jià)格是${price}元`);
????})
????const?event2?=?pubsub.listen('apple',?'小強(qiáng)',?(listener,?price)?=>?{
??????console.log(`${listener}關(guān)注的apple的最新價(jià)格是${price}元`);
????})
????const?event3?=?pubsub.listen('orange',?'小剛',?(listener,?price)?=>?{
??????console.log(`${listener}關(guān)注的orange的最新價(jià)格是${price}元`);
????})
????const?event4?=?pubsub.listen('orange',?'小強(qiáng)',?(listener,?price)?=>?{
??????console.log(`${listener}關(guān)注的orange的最新價(jià)格是${price}元`);
????})
????/**
????*?應(yīng)該補(bǔ)充怎樣的邏輯能夠使得我們能夠監(jiān)聽(tīng)shop中的屬性值變化呢?
????*?提示:vue中雙向綁定是怎么實(shí)現(xiàn)的呢?
????*?vue2.0或vue3.0的實(shí)現(xiàn)方式都是可以的
????*/
????/**?我們?cè)O(shè)置一個(gè)觀察者方法,讓?shop這個(gè)實(shí)例對(duì)象便成為可觀察對(duì)象?**/
????const?observable?=?()?=>?{
????};
????const?newShop?=?observable(shop);
????newShop.apple?=?6;
????/**?小明關(guān)注了蘋果的價(jià)格,蘋果價(jià)格變更將會(huì)觸發(fā)事件
????**?console.log將會(huì)輸出:??小明關(guān)注的apple的最新價(jià)格是6元
????**/
????newShop.tomato?=?10;
????/**?無(wú)人關(guān)注西紅柿價(jià)格,不會(huì)觸發(fā)事件?**/
????newShop.orange?=?11;
????/**?小剛關(guān)注了橙子的價(jià)格,橙子價(jià)格變更將會(huì)觸發(fā)事件
????**?console.log將會(huì)輸出:??小剛關(guān)注的orange的最新價(jià)格是11元
????**/
????console.log(newShop);
????/**
????**?輸入出newShop
????**/
????console.log(newShop.apple);
????/**
????**?輸入出newShop的apple新值
????**/
- 如果需要你實(shí)現(xiàn)掃碼登錄、單點(diǎn)登錄,有什么方案 做的業(yè)務(wù)不太感興趣,后續(xù)沒(méi)有繼續(xù)面
- 為什么之前用 SSR,為什么又從 SSR 遷移成 CSR
- 離線包的原理是什么
- React hooks 比 class component 的優(yōu)勢(shì)在哪,如何在 hooks 中實(shí)現(xiàn) shouldComponentUpdate 這個(gè)生命周期,有實(shí)現(xiàn)過(guò)自定義的 hooks 么,useCallback 和 useMemo 的區(qū)別是什么
- 為什么你們移動(dòng)端選擇 vue,pc 選擇 react,這兩個(gè)在性能上有什么區(qū)別么
- 有做過(guò)哪些性能優(yōu)化
- vite 的原理是什么,遷移 vite 有遇到什么問(wèn)題么
- serverless 有什么了解,它背后的實(shí)現(xiàn)原理是什么,你用它做過(guò)哪些東西
- 反轉(zhuǎn)鏈表
- 一個(gè)字符串的全排列 問(wèn)題基本都答上來(lái)了,題也都寫出來(lái)了,但是不知道為啥掛了
一面
- 主要的技術(shù)棧
- 主要都是和客戶端如何協(xié)作
- Vue 新版本特性有了解么
- 在工作中有用到什么設(shè)計(jì)模式么
- typescript 裝飾器有了解么,類裝飾器的 this 是如何處理的
- 有用過(guò)抽象類么
- 舉例一下 Map 和 object 的區(qū)別,如果需要一個(gè)字典的需求,都是 key: value 的形式,那應(yīng)該怎么選擇這兩個(gè)呢
- Map 和 WeakMap 有什么區(qū)別
- js 垃圾回收機(jī)制有了解嗎
- 二分查找的時(shí)間復(fù)雜度是多少,簡(jiǎn)要描述一下過(guò)程,O(logN)是怎么算出來(lái)的,TopK 的時(shí)間復(fù)雜度是多少,快排的時(shí)間復(fù)雜度是多少
- ES5 的繼承都有哪幾種,主要介紹一下組合寄生,下面這個(gè)的輸出是什么,this 指向誰(shuí)
class?A?{
??constructor()?{
????console.log(this.name);
??}
}
class?B?extends?A?{
??constructor()?{
????super();
????this.name?=?"B";
??}
}
const?b?=?new?B();
- 輸入一個(gè)二叉樹和兩個(gè) node,輸出這兩個(gè) node 的最近公共祖先
二面
- 如果讓你實(shí)現(xiàn)一個(gè)計(jì)算器,都需要考慮哪些問(wèn)題 比較開放的一個(gè)題,邊說(shuō)邊寫
三面
- 看新的機(jī)會(huì)的時(shí)候你更看重哪些方面,對(duì)哪些方面會(huì)感興趣
- 當(dāng)前薪資
- 接觸過(guò)哪些排序算法,歸并排序的思路是什么,一個(gè)數(shù)組做歸并排序的話,一共經(jīng)歷了多少次合并
- 最有挑戰(zhàn)的項(xiàng)目是什么樣的
- 有沒(méi)有經(jīng)歷過(guò)比較痛苦的階段
- 最近有在學(xué)什么新的東西么
- 之前的工作中有沒(méi)有你比較欣賞或者崇拜的工程師
- 前端緩存策略,last-modified 和 etag 有什么區(qū)別,分別的適用場(chǎng)景是什么
一面
- 根據(jù)我的簡(jiǎn)歷逐個(gè)捋項(xiàng)目
- 對(duì)一個(gè)樹形結(jié)構(gòu)遍歷,輸出所有葉子節(jié)點(diǎn)
- 寫一共獲取 URL 后的參數(shù)的方法 很簡(jiǎn)單的一輪面試
二面
- 在上家公司做的主要業(yè)務(wù)是哪些,你負(fù)責(zé)哪些,哪些是迭代比較多的
- 換膚方案你們具體是如何實(shí)現(xiàn)的
- 國(guó)際化方案是如何做的
- 頁(yè)面間同步狀態(tài)一般都有哪些方案,分別的應(yīng)用場(chǎng)景都是哪些
- localstorage 的會(huì)不會(huì)出現(xiàn)不同項(xiàng)目的 key 覆蓋別人的 key 的問(wèn)題,如何解決
- 業(yè)務(wù)的技術(shù)選型是如何考慮的
- 寫一個(gè)發(fā)布訂閱模式的 on/emit/off
7.1 如果需要把訂閱者執(zhí)行成功和失敗的方法分開,需要怎么做
7.2 如果希望失敗的可追溯,找到是哪個(gè)訂閱者的報(bào)錯(cuò),需要怎么做
7.3 實(shí)現(xiàn)一下 before 和 after 方法,可以添加一些前置的和后置的訂閱者
7.4 現(xiàn)在希望給所有的訂閱者加打點(diǎn)上報(bào)的功能,并且提供全局的開關(guān),需要如何設(shè)計(jì)
7.5 如果需要給某一個(gè)訂閱者單獨(dú)加一個(gè)打點(diǎn),需要如何設(shè)計(jì) - 如果想給一個(gè)對(duì)象上的所有方法在執(zhí)行時(shí)加一些打點(diǎn)上報(bào)的功能,如何做
這一輪面試面了一個(gè)半小時(shí),真的就是在一個(gè)功能上加來(lái)加去,其實(shí)想想還是挺考驗(yàn)代碼健壯度的
三面
- 為什么考慮做前端
- 做好一個(gè)產(chǎn)品工程師或者軟件工程師,核心在于哪里
- 介紹一個(gè)有代表性的項(xiàng)目
- 主要都負(fù)責(zé)哪些業(yè)務(wù),工作的 C 端和 B 端的占比是怎樣的
- 目前都看了哪些機(jī)會(huì),下一份工作是怎么考慮的,希望做哪個(gè)方向
- 整體開發(fā)流程是怎樣的
- 工作節(jié)奏是怎樣的
- 個(gè)人優(yōu)勢(shì)和缺點(diǎn)
一面
- 以什么樣的心態(tài)找下一份工作,對(duì)下一份工作有什么樣的要求
- 有什么比較感興趣的業(yè)務(wù),你在這個(gè)業(yè)務(wù)中想要做什么
- 如果希望 DOM 中的一個(gè)值和 js 中的變量雙向綁定,使用原生 js 可以怎么做,React 和 Vue 分別又都是怎么做的
- proxy 和 defineProperty 的區(qū)別是什么,各自的優(yōu)勢(shì)和缺點(diǎn)是什么
- 瀏覽器發(fā)請(qǐng)求和 node 發(fā)請(qǐng)求都有什么區(qū)別,瀏覽器都為發(fā)請(qǐng)求做了哪些默認(rèn)行為
- 如何理解線程和進(jìn)程
- 為什么 Vite 比 webpack 快很多,ESM 和 commonJS 的區(qū)別是什么,為什么 ESM 加載會(huì)更快,如何理解 ESM 的靜態(tài)
- 都做過(guò)哪些打包的優(yōu)化
- 在 CI/CD 中都需要做哪些事情可以把流程做得更好
- 最近在學(xué)習(xí)什么
二面
- 介紹一下你負(fù)責(zé)的業(yè)務(wù)
- 為什么要對(duì)一些項(xiàng)目做重構(gòu)
- 組件庫(kù)你們是如何做的,你在里面是什么角色,組件與組件之間的調(diào)用關(guān)系如何處理
- 劉海屏你們?nèi)绾芜m配的
- 有對(duì)小程序做過(guò)從打開到完全展現(xiàn)這個(gè)流程的監(jiān)控么
- 講講對(duì) TDD 的理解
- 有用到敏捷開發(fā)么,對(duì)代碼質(zhì)量保障效果如何
- 提升開發(fā)效率你們有做過(guò)什么么
- 性能上優(yōu)化有做過(guò)哪些事情
- 平時(shí)如何學(xué)習(xí)
- 這次換工作考慮的是什么
- 如果不考慮錢的問(wèn)題,你最想做一個(gè)什么樣的產(chǎn)品
一面
- 輸出,原因,解釋一下調(diào)用棧和作用域鏈的關(guān)系
let?a?=?3;
function?func(a)?{
??a?=?10;
??console.log(a);
}
func();
console.log(a);
- 實(shí)現(xiàn)一下 Promise.all
- 數(shù)組轉(zhuǎn)成嵌套對(duì)象
["a","b","c","d"]?=>?{a:?{b:?{c:?{d:?null}}}}
- 解釋一下事件循環(huán)
- 解釋瀏覽器渲染機(jī)制:重繪、重排,如何優(yōu)化?
- Vue 和 React 對(duì)比
二面
- 在上家主要做哪些業(yè)務(wù)
- 對(duì) B 端和 C 端在技術(shù)開發(fā)上側(cè)重點(diǎn)都有哪些
- 對(duì)技術(shù)選型是怎么考量的
- 下一步有哪些規(guī)劃
- 如何能創(chuàng)造出一個(gè)技術(shù)產(chǎn)品
- 請(qǐng)寫一個(gè)抽獎(jiǎng)程序 ,已有參與抽獎(jiǎng)的員工工號(hào)組成的數(shù)組 staffIds。
規(guī)則 1:同一員工不可重復(fù)中獎(jiǎng)。
規(guī)則 2:每輪執(zhí)行抽獎(jiǎng)程序,入?yún)⑹潜据喴槿〉闹歇?jiǎng)人數(shù) n,將中獎(jiǎng)人工號(hào)打印出來(lái) - webpack 遷移到 Vite 有什么優(yōu)勢(shì),遇到過(guò)什么問(wèn)題,遷移后如何測(cè)試
三面
- 在上一份工作主要負(fù)責(zé)哪部分業(yè)務(wù)
- 前后端架構(gòu)是怎樣的
- 怎么理解 SSR,在項(xiàng)目中如何應(yīng)用
- B 端都做過(guò)哪些內(nèi)容,架構(gòu)是怎樣的
一面
- 瀏覽器請(qǐng)求頭和響應(yīng)頭都能記起哪些,都是做什么的
- 協(xié)商緩存與強(qiáng)緩存
- 響應(yīng)頭和跨域相關(guān)都有哪些,之前都是如何解決跨域的
- Access-Control-Allow-Origin 用 * 和指定域名的區(qū)別是什么
- 跨域是否允許攜帶 cookie,如果希望攜帶 cookie 需要如何做,如果 a.com 是我的域名,向 b.com 發(fā)請(qǐng)求,帶的是哪個(gè)域名的 cookie
- 請(qǐng)求頭的 host,origin,refer 的區(qū)別是什么
- 在什么場(chǎng)景下會(huì)發(fā)起 options 請(qǐng)求
- !important 在什么場(chǎng)景用,css 選擇器權(quán)重是如何計(jì)算的
- 盒模型的邊距疊加,如何解決盒子塌陷,如何創(chuàng)建 BFC
- ==和===的區(qū)別,a==1&&a==2 有什么方式讓它返回 true
- Object.create(null)和直接創(chuàng)建一個(gè){}有什么區(qū)別
- new 一個(gè)函數(shù)做了哪些事
- 對(duì)事件循環(huán)的理解
- Vue 和 React 源碼讀過(guò)哪些部分,印象最深刻的是哪些
- 簡(jiǎn)單介紹以下 Vue-router 的原理
- diff 算法簡(jiǎn)單介紹一下
- 前端工程化做過(guò)哪些
- 如何做到的逐步減少項(xiàng)目中的 typescript 報(bào)錯(cuò)
- 寫過(guò) webpack 插件么
- babel 轉(zhuǎn)換的原理是什么
- 性能優(yōu)化做過(guò)哪些
- 離線存儲(chǔ)是如何做的
- 都用過(guò)哪些設(shè)計(jì)模式
- 對(duì)線上各類異常如何處理,對(duì)線上的靜態(tài)資源加載失敗如何捕獲
- node 多進(jìn)程間通信是如何做的
- koa 中間件原理實(shí)現(xiàn)是如何做的
- 如何界定一個(gè)依賴包的安全性
- node 做過(guò)哪些性能優(yōu)化
二面
- 在 git CI 做過(guò)哪些事,做的動(dòng)機(jī)是什么
- 無(wú)障礙做過(guò)哪些事
- 業(yè)務(wù)上,前端和后端的工作占比是怎樣的
- 有升級(jí)到 Vue3 么,覺(jué)得 Vue 的優(yōu)點(diǎn)是怎樣的
- Vue 和 React 覺(jué)得哪個(gè)更優(yōu)雅
- 有沒(méi)有做過(guò)給團(tuán)隊(duì)開發(fā)提效的技術(shù)方案
- 在上家公司最大的成長(zhǎng)是什么
- 今年的全年 OKR 是什么
- 下一份工作有什么期待
三面
- 有亮點(diǎn)的項(xiàng)目
- 腳手架用的是什么,有自己做過(guò)腳手架么,Vite 的原理是什么,如何區(qū)分環(huán)境
- Vue3 的組合式 API 有了解么
- typescript 和 Vue2 遇到過(guò)兼容性問(wèn)題么
- 為什么要把 SSR 遷移到 CSR
- 離線包的原理是什么,有做離線包增量更新么
- bridge 原理有了解么
- 對(duì)頁(yè)面的異常監(jiān)控有了解嗎
- 介紹一下 React 的優(yōu)化
- 性能優(yōu)化都做過(guò)哪些
- 寫一個(gè) EventBus,包含 emit/on/off
- 之前工作中的亮點(diǎn)
- 組件庫(kù)有做過(guò)嗎
一面
- 做 2B 多一些還是 2C 多一些
- 介紹一下盒模型,怪異模式和標(biāo)準(zhǔn)模式有什么區(qū)別
- 如何做 CSS 屏幕適配
- 移動(dòng)端有沒(méi)有遇到過(guò)滑動(dòng)穿透的問(wèn)題
- 有沒(méi)有遇到過(guò)移動(dòng)端瀏覽器兼容問(wèn)題
- js 的數(shù)據(jù)類型都有哪些,有什么區(qū)別,為什么基本數(shù)據(jù)類型存到棧但是引用數(shù)據(jù)類型存到堆
- 數(shù)據(jù)類型常用的判斷方式都有哪些
- ES6 都用到哪些
- Promise 都有哪些方法
- Promise 的 then 的鏈?zhǔn)秸{(diào)用,返回的一個(gè)新的 promise 的狀態(tài)是什么
- await 和 promise 的關(guān)系,分別的應(yīng)用場(chǎng)景有哪些
- esmodule 和 commonjs 區(qū)別是什么,還接觸過(guò)其他的模塊化方案么
- 瀏覽器都有過(guò)哪些了解,內(nèi)核都有哪些,chrome 瀏覽器開啟一個(gè)頁(yè)簽時(shí)開啟了多少個(gè)進(jìn)程,對(duì)應(yīng)開啟了哪些線程
- 異步加載 js 的方式都有哪些
- 加載 css 和 js 時(shí)會(huì)阻塞 dom 渲染么
- 強(qiáng)緩存和協(xié)商緩存誰(shuí)的優(yōu)先級(jí)誰(shuí)高,區(qū)別是什么,強(qiáng)緩存和服務(wù)器有通訊么,沒(méi)有通訊的話有狀態(tài)碼么,狀態(tài)碼是誰(shuí)返回的,緩存是存到了哪里
- cookie 都有哪些屬性
- samesite 作用是什么
- cookie 和 storage 的區(qū)別是什么
- http 都有哪些版本,1.1 有什么不好的地方么,隊(duì)頭阻塞是什么引起的,2.0 有沒(méi)有完全解決了隊(duì)頭阻塞問(wèn)題
- get 和 post 有什么區(qū)別
- 工程化都做過(guò)哪些
- Vue 和 React 的區(qū)別
- SSR 和 CSR 的區(qū)別是什么,分別的適用場(chǎng)景是什么,什么叫同構(gòu),除了 SSR 還有什么方案可以解決首屏渲染問(wèn)題
- 有寫過(guò) webpack 插件么
- babel 配置過(guò)么,preset 和 plugin 誰(shuí)的優(yōu)先級(jí)高
- 項(xiàng)目代碼規(guī)范是如何做的,如何避免有人本地跳過(guò)代碼規(guī)范
- git commit 的有限制么
- eslint 和 prettier 的沖突是如何解決的
- CI 和 CD 的區(qū)別,除了 gitlab 的 CI/CD 之外還接觸過(guò)哪些
- docker 有了解么,有實(shí)際用過(guò)么
二面
- 之前主要是 Vue 還是 React,用哪個(gè)多一些?有看過(guò)一些源碼么
- Vue3 和之前版本的差異在哪兒
- 之前小程序是如何開發(fā)的
- Node 了解過(guò)哪些,之前的 SSR 都是如何做的
- 接下來(lái)工作有哪些期望
- wasm 之前有哪些了解
- 屏幕內(nèi)有一個(gè)矩形,有一條對(duì)角線,如果在矩形上點(diǎn)擊,如何判斷點(diǎn)擊的位置是在對(duì)角線上方,還是下方,還是點(diǎn)到了對(duì)角線上
- 如果想給這個(gè)矩形畫個(gè)對(duì)角線,可以有哪些方式
- 之前的數(shù)據(jù)可視化是如何做的
- 有沒(méi)有一些技術(shù)沉淀的東西,比如在技術(shù)社區(qū)的交流或者寫一些文章
- 除了編碼以外,有沒(méi)有做過(guò)管理方面的事情
- serverless 有哪些了解
- 現(xiàn)在工作分工的職責(zé)定界是怎么樣的
- 前端工程化都做了哪些
一面
- 主要技術(shù)棧有哪些
- 主要業(yè)務(wù)有哪些
- 主要的技術(shù)方案是什么樣的
- SSR 遷移到 CSR 的背景是怎樣的,各自的優(yōu)勢(shì)是什么,為什么服務(wù)端渲染頁(yè)面會(huì)比客戶端快
- 首屏性能優(yōu)化都有哪些
- 都有用到過(guò)哪些協(xié)議
- 遇到的無(wú)障礙的挑戰(zhàn)是哪些,屏幕閱讀器功能是如何實(shí)現(xiàn)的了解嗎
- 國(guó)際化做過(guò)哪些
- 都做過(guò)哪些方面的重構(gòu),重構(gòu)都做了哪些優(yōu)化
- webpack 遷移 vite 遇到了哪些問(wèn)題
- 對(duì) serverless 有哪些了解,都用它做了哪些事情
- 測(cè)試驅(qū)動(dòng)開發(fā)是怎么樣的流程,有什么方案可以提高 TDD 的效率
- 前端安全都遇到過(guò)哪些問(wèn)題
- https 講一下
- 常見(jiàn)的 HTTP 狀態(tài)碼都有哪些
- 瀏覽器進(jìn)程模型有了解嗎
- 瀏覽器渲染流程是怎樣的
- 事件循環(huán)介紹一下
- Vue 的插槽的實(shí)現(xiàn)原理是什么
- 都做過(guò)哪些性能優(yōu)化
二面
- Vue 和 React 哪個(gè)寫的多一些
- Vue 的組合式 API 的優(yōu)勢(shì)是什么
- Vue2 的重復(fù)邏輯封裝一般都有哪些方式
- 如果是需要通過(guò)調(diào)用 API 顯示 UI 組件,這種需要如何實(shí)現(xiàn)(比如 Toast、Dialog)
- useCallback 和 useMemo 的區(qū)別和使用場(chǎng)景
- 對(duì)一個(gè)公共組件或者工具做打包,一般都需要產(chǎn)出哪些范式的文件
- commonjs 和 esm 的模塊引入和加載執(zhí)行的區(qū)別是什么
- node 調(diào)用 RPC 是怎么做的,對(duì) thrift 有哪些了解
- SSR 和 CSR 的優(yōu)勢(shì)分別是什么
- Node 用的什么框架
- 如果頁(yè)面中有大量的 DOM 更新,導(dǎo)致頁(yè)面變卡,有哪些方案可以優(yōu)化
- 換膚方案是如何做的
- 如果在 js 中執(zhí)行 location.href = url,這個(gè)行為有可能會(huì)有哪些安全問(wèn)題
- CSRF 原理,整體的攻擊鏈路是怎樣的,都有哪些解決方案
- XSS 都有哪些方式,如果過(guò)濾都需要過(guò)濾哪些內(nèi)容
三面
面試官遲到五分鐘沒(méi)有任何道歉,讓我開攝像頭自己不開,面試全程一直在 pua,問(wèn)我有挑戰(zhàn)的項(xiàng)目,我一句話得被打斷三次,極其沒(méi)有禮貌。以下是面試官原話
你這個(gè)項(xiàng)目我理解也沒(méi)什么難點(diǎn)啊
你沒(méi)做過(guò)客戶端你不懂
為什么你需要解決代碼里有很多報(bào)錯(cuò)的問(wèn)題,我理解頭條的程序員應(yīng)該不會(huì)寫出都是報(bào)錯(cuò)的代碼吧
頭條對(duì)你的培養(yǎng)可能真的不夠
我沒(méi)有覺(jué)得頭條不好的意思,我只是覺(jué)得頭條對(duì)你的成長(zhǎng)可能真的沒(méi)什么幫助
你們這個(gè)架構(gòu)本身就是有問(wèn)題的
我認(rèn)為你在計(jì)算機(jī)底層思維上還是有很大問(wèn)題的
我這邊也有很多頭條來(lái)的程序員,他們都用過(guò)這個(gè),你們那邊怎么沒(méi)用過(guò)
微軟中國(guó)一面
- 為什么選擇做前端這個(gè)行業(yè)
- Vue 和 React 的區(qū)別,項(xiàng)目是如何做選型的
- 介紹一個(gè)之前重構(gòu)的項(xiàng)目
- typescript 的優(yōu)缺點(diǎn)
- 有沒(méi)有經(jīng)歷過(guò)需求無(wú)法實(shí)現(xiàn)或?qū)崿F(xiàn)難度較大的情況,這種情況如何處理呢
- 之前做過(guò)最有挑戰(zhàn)的問(wèn)題
- 實(shí)現(xiàn)一個(gè)類似微信聊天列表頁(yè)的布局,有如下需求
1.?有一個(gè)吸頂?shù)臋冢瑑?nèi)部的內(nèi)容不需要實(shí)現(xiàn)
2.?一個(gè)吸底部的按鈕欄,內(nèi)部有四個(gè)按鈕,按鈕功能不需要做,只需要實(shí)現(xiàn)布局
3.?中間的列表可滾動(dòng)
//?多說(shuō)一下,這個(gè)其實(shí)考察的是畫頁(yè)面的基本能力和細(xì)節(jié),比如假如使用fixed布局,滾動(dòng)條會(huì)是全屏的
//?但是如果使用absolute,限制屏幕高度100%,中間局部滾動(dòng)就可以把滾動(dòng)條限制到中間部分,甚至可以隱藏滾動(dòng)條
//?面試考畫頁(yè)面的話,一定要多注意這類細(xì)節(jié),還有比如BEM命名、1px邊框等問(wèn)題是否有意識(shí),這些都要考慮
- 最長(zhǎng)遞增子序列 力扣
- 最長(zhǎng)連續(xù)遞增子序列 力扣
二面
- 之前主要做的業(yè)務(wù)都是哪些
- 團(tuán)隊(duì)的規(guī)模和分工是怎樣的
- 之前做過(guò)的有挑戰(zhàn)的項(xiàng)目
- SSR 為什么要遷移到 CSR,如果不遷移的話如何能做到 CSR 離線包的效果
- 搜索旋轉(zhuǎn)排序數(shù)組 力扣
三面
- 之前做過(guò)的有挑戰(zhàn)的項(xiàng)目
- Vue 和 React 的區(qū)別
- Vue 數(shù)據(jù)雙向綁定原理
- 頁(yè)面第一次加載會(huì)觸發(fā)哪些 Vue 的生命周期
- Vue 的 filter 原理有了解嗎,如果需要你實(shí)現(xiàn)一個(gè) filter,可以實(shí)現(xiàn)把一個(gè)字符串首字母大寫的功能,你要如何做(最開始問(wèn)原理,導(dǎo)致我后面理解錯(cuò)了,我以為是讓我實(shí)現(xiàn)一下 Vue 的 filter 功能了,然而人家其實(shí)要的是'abc' => 'Abc'的一個(gè)方法,但是面試官對(duì)我的實(shí)現(xiàn)持肯定態(tài)度)
- 用 css 實(shí)現(xiàn)一個(gè) Tooltip:界面上有一個(gè) Button,鼠標(biāo) hover 上去后會(huì)在 Button 上方顯示一個(gè) tooltip,這個(gè) tooltip 有圓角,下方有一個(gè)小三角形
- 對(duì)閉包的理解,閉包的適用場(chǎng)景和缺點(diǎn)
- 從輸入 URL 到頁(yè)面渲染都發(fā)生了什么
- 英語(yǔ)測(cè)試(說(shuō)實(shí)話我沒(méi)太聽(tīng)明白,我英文水平很差,直接跪了)
四面
- 做過(guò)的有挑戰(zhàn)的項(xiàng)目
- 無(wú)障礙都做過(guò)哪些
- 合并兩個(gè)有序數(shù)組 力扣
- 合并多個(gè)有序數(shù)組(這題里我解答完之后自認(rèn)為時(shí)間復(fù)雜度是 O(n2),循環(huán)中用到了 shift 這個(gè)方法,面試官問(wèn)我這個(gè)的時(shí)間復(fù)雜度是多少,我說(shuō)是 O(n),面試官說(shuō)有什么辦法可以解決這個(gè)么,我說(shuō)可以基于原有的方式倒著循環(huán),這樣就可以用 pop 代替 shift 了,面試官問(wèn)我為什么 pop 時(shí)間復(fù)雜度是 O(1),我說(shuō)不知道,面試官讓我有時(shí)間可以去了解一下均攤算法)
五面
- 下一份工作的期望
- 有挑戰(zhàn)的項(xiàng)目
- SSR 遷移 CSR 的原因,遇到過(guò)哪些問(wèn)題
- LRU 算法 力扣 (這個(gè)題我最開始用 Map 做的,面試官跟我說(shuō)如果不用 Map,如何實(shí)現(xiàn)每次查詢和刪除都能做到 O(1),我沒(méi)思路,面試官問(wèn)我查詢 O(1)用什么,我說(shuō)用哈希,問(wèn)我插入刪除 O(1)用什么,我說(shuō)用鏈表,可我不知道怎么結(jié)合到一起,面試官提示我可以用雙向鏈表,然后我才做出來(lái)的)
六面
- 英語(yǔ)的自我介紹
- 為什么會(huì)選擇做前端,做前端的動(dòng)機(jī)是怎樣的
- 在追求極致體驗(yàn)方面做過(guò)哪些
- 都會(huì)關(guān)注哪些指標(biāo),如何做檢測(cè)
- 之前的工作中迭代速度是怎樣的
- 未來(lái)三到五年的規(guī)劃是怎樣的
- 有沒(méi)有做過(guò)自動(dòng)化測(cè)試方案,對(duì)于兼容性如何做自動(dòng)化測(cè)試
- 對(duì)于 UX 還原度,應(yīng)該如何高效測(cè)試
- 一個(gè) PC 頁(yè)面,如果需要適配手機(jī)屏幕,都有哪些需要注意的,可能需要解決哪些問(wèn)題,需要如何去測(cè)試
- 主要技術(shù)棧是哪些
- 之前參與的重構(gòu)的項(xiàng)目有哪些有難度的地方
- SSR 遷移到 CSR 是基于什么考慮
- 項(xiàng)目的體量大概都有多大
- 項(xiàng)目?jī)?yōu)化或者重構(gòu)后,一般從哪些方面評(píng)判效果好還是不好呢
- bridge 的原理有了解么,有遇到過(guò)什么問(wèn)題么,在一些沒(méi)有 bridge 的場(chǎng)景里有沒(méi)有做過(guò)特殊處理
- 做過(guò)喚起 app 么,有遇到過(guò)什么問(wèn)題嗎,如何判斷喚起是否成功
- 國(guó)際化采用的什么方案
- 換膚方案是如何做的
- 小程序和 H5 都有哪些區(qū)別,有看過(guò)小程序底層如何實(shí)現(xiàn)的么
- 為什么要做 Vite 遷移,遷移有遇到了什么問(wèn)題
- 寫一個(gè) React Hooks,用來(lái)倒計(jì)時(shí),傳入時(shí)間,返回 start、pause、restart、isRunning
- 實(shí)現(xiàn)一個(gè)方法,傳入一個(gè) url 的數(shù)組和一個(gè)數(shù)字,對(duì) url 進(jìn)行請(qǐng)求,并根據(jù)數(shù)字限制最大請(qǐng)求數(shù)
一面
- 對(duì)下一份工作有什么期望
- React 閱讀過(guò)哪部分源碼
- Vue 和 React 的區(qū)別
- proxy 和 defineproperty 的在 Vue 中區(qū)別是什么
- Vue-router 原理
- js 和 ts 混合開發(fā)有沒(méi)有最佳實(shí)踐
- Vite 為什么會(huì)比 webpack 快
- Rollup 和 webpack 打包結(jié)果有什么異同
- 問(wèn)輸出,解釋一下函數(shù)調(diào)用棧和作用域鏈的關(guān)系
function?bar()?{
??console.log(project);
}
function?foo()?{
??var?project?=?"foo";
??bar();
}
var?project?=?"global";
foo();
- 問(wèn)輸出,如果希望循環(huán)中輸出 123,有哪些方式可以改
for?(var?i?=?0;?i?3;?i++)?{
??setTimeout(()?=>?{
????console.log(new?Date(),?i);
??},?1000);
}
console.log(new?Date(),?i);
- 對(duì) js 的異步是如何理解的
- 如何理解閉包
- 求一個(gè)字符串的不重復(fù)的最長(zhǎng)字串的長(zhǎng)度 力扣
- 判斷一個(gè)對(duì)象是否是循環(huán)引用對(duì)象
- 團(tuán)隊(duì)內(nèi)部 eslint 的規(guī)范是如何指定的
- 從輸入 url 到渲染頁(yè)面,都發(fā)生了什么
二面
- 主要負(fù)責(zé)的業(yè)務(wù)
- 換膚方案是如何做的
- 國(guó)際化方案是如何做的,都做了哪些語(yǔ)種
- 離線包的方案原理是什么
- node 主要都做了哪些
- 安全問(wèn)題遇到過(guò)哪些,CSRF 的加簽名是如何做的
- 單向鏈表反轉(zhuǎn)
- 快速排序
三面
- 主要負(fù)責(zé)哪些業(yè)務(wù)
- 有過(guò)帶人的經(jīng)驗(yàn)么
- 輸出數(shù)組中頻率第二高的元素的下標(biāo)
- 冪等與非冪等的區(qū)別
- get 請(qǐng)求是否可以傳圖片
- 有沒(méi)有遇到過(guò)前端安全問(wèn)題
- 線上問(wèn)題一般如何處理
???“分享、點(diǎn)贊、在看” 支持一波??
