拼多多、酷家樂(lè)面試總結(jié)

前言

離職原因看我這篇文章吧:離開(kāi)蘑菇街后,我最近的一些想法,然后不得不去找工作恰飯呀。

我目前面了五家公司:滴滴、螞蟻、拼多多、酷家樂(lè)、字節(jié)跳動(dòng),拼多多和酷家樂(lè)基本已拿到 offer,螞蟻二面完了,滴滴和字節(jié)即將三面,我先把我已經(jīng)面過(guò)的面經(jīng)先總結(jié)出來(lái),其他的不管過(guò)沒(méi)過(guò),這周內(nèi)我都會(huì)總結(jié)出來(lái),希望能給到正在找工作同學(xué)的幫助。

在文章里我不僅會(huì)列出面試題,還會(huì)給到一些答題建議,個(gè)人能力有限,也不能保證我回答都正確,如果有錯(cuò)誤,希望能糾正我。

酷家樂(lè)

酷家樂(lè)是我最早面的一家公司,還沒(méi)被裁的那周二剛好面完,結(jié)果周五就被裁了,可能這就是冥冥之中吧。

面試的部門(mén)是工具組,是酷家樂(lè)最核心的部門(mén),四面面試官跟我說(shuō)我面的組是工具團(tuán)隊(duì)中的最核心組,會(huì)涉及到一些圖像相關(guān)的技術(shù),比如 Tree.js、WebGL等,所以這個(gè)組其實(shí)也挺好的,感覺(jué)能學(xué)到不少技術(shù)。

一面(電話面)

  • 你在項(xiàng)目如何優(yōu)化的

    我在簡(jiǎn)歷里面寫(xiě)到了性能優(yōu)化相關(guān)的,所以這個(gè)問(wèn)題。

  • 你做的項(xiàng)目有什么值得說(shuō)的

    基本上就是考察項(xiàng)目的亮點(diǎn),可以說(shuō)一些項(xiàng)目難點(diǎn)是如何解決的,或者介紹一些項(xiàng)目中用到的牛逼的技術(shù)。

  • Ts 有什么優(yōu)勢(shì)

    講道理所有現(xiàn)在在網(wǎng)上能查到的優(yōu)勢(shì)都是得益于靜態(tài)語(yǔ)言的優(yōu)勢(shì)。

  • type 和 interface 的區(qū)別

    這是一個(gè)高頻題,如果考察 TS,這應(yīng)該是最容易考察的,網(wǎng)上也都能查到相關(guān)的資料,但是很可能忽略一個(gè)點(diǎn):type 只是一個(gè)類(lèi)型別名,并不會(huì)產(chǎn)生類(lèi)型。所以其實(shí) type 和 interface 其實(shí)不是同一個(gè)概念,其實(shí)他們倆不應(yīng)該用來(lái)比較的,只是有時(shí)候用起來(lái)看著類(lèi)似。

  • React 事件機(jī)制

    我覺(jué)得需要答的點(diǎn):

    1. React 為什么要用合成事件
    2. 事件機(jī)制:注冊(cè)和分發(fā)的過(guò)程。這里面至少要說(shuō)出事件注冊(cè)都是在元素的最頂層 document 節(jié)點(diǎn)上。

    參考資料:一文吃透 React 事件機(jī)制原理

  • 聊聊 React 的 diff

    聊 diff 建議先看看我之前寫(xiě)過(guò)的一篇關(guān)于虛擬 DOM 的文章:從 React 歷史的長(zhǎng)河里聊虛擬DOM及其價(jià)值,有助于理解 diff 的意義。

    diff 的細(xì)節(jié)可以看我之前寫(xiě)的:詳解 React 16 的 Diff 策略

  • React 優(yōu)化

    可以看之前我寫(xiě)的 React 函數(shù)式組件性能優(yōu)化指南,對(duì)于類(lèi)組件也有對(duì)應(yīng)的 API。

  • 怎么理解閉包

    基礎(chǔ)中的基礎(chǔ),雖然社招考得不多,但是如果連閉包都理解不了,應(yīng)該會(huì)減分不少。閉包由于在規(guī)范里沒(méi)有定義,所以很多人下的定義不一樣,理解的角度也不同,但是自己要有一套正確的理解方式,如果按照我的理解 JavaScript 里面所有的函數(shù)都是閉包,因?yàn)橛腥汁h(huán)境,所有的函數(shù)都可以訪問(wèn)全局變量。

  • 節(jié)流怎么實(shí)現(xiàn)的

    防抖和節(jié)流的代碼還是需要會(huì)手寫(xiě)的,這也是一個(gè)閉包的例子,

  • 原型,class B 繼承 class A 翻譯成 es5 應(yīng)該是什么樣子

    說(shuō)實(shí)話,我覺(jué)得這道題其實(shí)蠻有水平的,即考察了如何寫(xiě)出一個(gè)好的繼承方式,也對(duì) new 過(guò)程進(jìn)行了考察,還對(duì)考察了對(duì) Class 的理解。

    注意的點(diǎn):class 是有重載功能的,怎么在子類(lèi)的構(gòu)造函數(shù)里面調(diào)用 super

二面(現(xiàn)場(chǎng)面)

  • react 的基本原理

    UI = f(state) ,虛擬 DOM、diff 策略、setState

  • react 如何做性能優(yōu)化

    這個(gè)題也是高頻,見(jiàn)一面回答

  • redux 的重點(diǎn)概念

    store、reduce、action、actionCreater、dispatch

  • 聊一聊 React 的生命周期

    盡量把 React 15 和 16 的進(jìn)行對(duì)比,然后 16 為什么要準(zhǔn)備廢除那幾個(gè)生命周期,以及新增的生命周期可以進(jìn)行替代。

    這個(gè)圖好好的理解一下

    react 生命周期
  • 聊一聊 hooks 怎么處理生命周期

    講道理函數(shù)式組件是沒(méi)有生命周期的,但是如何去模擬類(lèi)組件的生命周期的作用,都是在 useEffect 里面進(jìn)行操作的,因?yàn)樯芷诶锩嫠龅幕径际歉弊饔茫诺?useEffect 里是最合適的,專(zhuān)門(mén)用來(lái)處理副作用。

  • 筆試題一

const a = { b : 3}

function foo(obj) {
  obj.b = 5

  return obj
}

const aa = foo(a)

console.log(a.b)

console.log(aa.b)
  • 筆試題二:
function Ofo() {}

function Bick() {
    this.name = 'mybick'
}

var myBick = new Ofo()

Ofo.prototype = new Bick()

var youbick = new Bick()

console.log(myBick.name)

console.log(youbick.name)
  • 筆試題三:考察盒子模型和 box-sizing 屬性,判斷元素的尺寸和顏色。

  • 實(shí)現(xiàn)一個(gè) fill 函數(shù),不能用循環(huán)。

    考察遞歸

  • 用 ES5 實(shí)現(xiàn)私有變量

    考察閉包的使用

三面(現(xiàn)場(chǎng)面)

  • 簡(jiǎn)歷里面的性能優(yōu)化是如何做的

    減少請(qǐng)求頻率、圖片壓縮、React.memoReact.useMemo

  • class 組件里面如何做性能優(yōu)化(因?yàn)榍懊嫖艺f(shuō)了用 React.memo 做了性能優(yōu)化)

    shouldComponentUpdate(簡(jiǎn)稱 SCU)。SCU 跟 immutable 強(qiáng)相關(guān),一定要好好理解 react 的 immutable,否則很可能理解不了為什么不能直接去修改 state,然后再去 setState,以及 redux 的 reducer 要返回一個(gè)新的對(duì)象。

  • 實(shí)現(xiàn)一個(gè) Typescript 里的 Pick

    type Pick<T, K extends keyof T> = { [P in K]: T[P] }

  • 手寫(xiě) Promise.all

  • 手寫(xiě)并發(fā)只能 10 個(gè)

  • 算法題,怎么判斷單鏈表相交。

    很多種方法,我當(dāng)時(shí)說(shuō)的是最后一個(gè)節(jié)點(diǎn)如果相同,那么就代表相交。

  • 算法題,怎么找到第一個(gè)相交的節(jié)點(diǎn)。

    同時(shí)遍歷兩個(gè)鏈表到尾部,同時(shí)記錄兩個(gè)鏈表的長(zhǎng)度。若兩個(gè)鏈表最后的一個(gè)節(jié)點(diǎn)相同,則兩個(gè)鏈表相交。有兩個(gè)鏈表的長(zhǎng)度后,我們就可以知道哪個(gè)鏈表長(zhǎng),設(shè)較長(zhǎng)的鏈表長(zhǎng)度為len1,短的鏈表長(zhǎng)度為len2。則先讓較長(zhǎng)的鏈表向后移動(dòng)(len1-len2)個(gè)長(zhǎng)度。然后開(kāi)始從當(dāng)前位置同時(shí)遍歷兩個(gè)鏈表,當(dāng)遍歷到的鏈表的節(jié)點(diǎn)相同時(shí),則這個(gè)節(jié)點(diǎn)就是第一個(gè)相交的節(jié)點(diǎn)。

    這是我剛想到的一種方式,不過(guò)當(dāng)時(shí)面試的時(shí)候我記得好像更簡(jiǎn)單,但是想不起來(lái)了。

四面(現(xiàn)場(chǎng)面)

  • 你覺(jué)得你在公司人緣怎么樣

  • 你覺(jué)得你為你們小組做了什么貢獻(xiàn)

  • 為什么要離職

  • 除了我們公司還投了其他公司嗎

  • 薪資和層級(jí)有什么要求

  • 如何垂直水平居中

  • 你看過(guò)開(kāi)源庫(kù)的源碼嗎?

  • 那你聊聊 React 的源碼,把你記得起的講一講

    我看過(guò) React 的一部分源碼的,所以關(guān)于 React 源碼更新部分的東西,應(yīng)該基本都能說(shuō)個(gè)大概。

  • FiberNode 有哪些屬性

  • stadeNode 有什么用?

  • 還有一些技術(shù)問(wèn)題想不起來(lái)了

小結(jié)

酷家樂(lè)面試體驗(yàn)還是不錯(cuò)的,我是一面電話面,面完覺(jué)得 OK 之后就叫到公司去現(xiàn)場(chǎng)面試,6 點(diǎn)半下班了就騎車(chē)去了酷家樂(lè),七點(diǎn)開(kāi)始面試,一口氣面完了三面,飯都沒(méi)來(lái)得及吃,不過(guò)面試官很好給我倒了水。

感覺(jué)面試官對(duì)我的項(xiàng)目似乎不太敢興趣,很少問(wèn)項(xiàng)目的東西,可能由于他們是工具組,連我簡(jiǎn)歷里面組件庫(kù)相關(guān)的也沒(méi)面,考察基礎(chǔ)的比較多,基礎(chǔ)考察得比較全面。

但是由于考慮到我之前做的項(xiàng)目復(fù)雜性不夠,以及工作年限的問(wèn)題,給到的評(píng)級(jí)不高,導(dǎo)致薪資也不是特別高,但是已經(jīng)是這個(gè)評(píng)級(jí)的頂峰了,要是沒(méi)有更好的 offer 酷家樂(lè)還是非常值得去的,特別是工具組。

拼多多

一面

  • react 16 生命周期有什么改變

    componentWillMount,componentWillReceivePropscomponentWillUpdate 準(zhǔn)備廢除,新增了 static getDerivedStateFromPropsgetSnapshotBeforeUpdate

    我還詳細(xì)的介紹了為什么要用 getDerivedStateFromProps 來(lái)代替即將廢除的三個(gè)生命周期,主要是16 版本 render 之前的生命周期可能會(huì)被多次執(zhí)行,具體的可看我的這篇文章:Deep In React之淺談 React Fiber 架構(gòu)(一)

  • 詳細(xì)的介紹一下 getDerivedStateFromProps

  • 你在項(xiàng)目中如何做性能優(yōu)化的

  • flex: 0 1 auto; 是什么意思?

    flex 這個(gè)屬性??碱},好好把阮老師的那篇 flex 語(yǔ)法篇看完 flex 的面試題基本沒(méi)問(wèn)題。

  • less 的 & 代表什么?

  • 算法題:求最大公共前綴,如 ['aaafsd', 'aawwewer', 'aaddfff'] => 'aa'

    不能調(diào)試,全靠編程素養(yǎng),只能面試官才能運(yùn)行。

  • interface 和 type 的區(qū)別

    又考了,上面有回答

  • 有用狀態(tài)管理嗎?

    我常用的是 redux 和 dva,然后再聊了聊區(qū)別已經(jīng) redux 的理念

  • 有用 ssr 嗎?

    沒(méi)用過(guò)

  • node 熟悉嗎?

    寫(xiě)得少

二面

  • class 組件與函數(shù)式組件的區(qū)別

    生命周期、設(shè)計(jì)理念,感覺(jué)這道題比較開(kāi)發(fā),可以看看 dan 的這篇:函數(shù)式組件與類(lèi)組件有何不同?

  • css 優(yōu)先級(jí)

    important > 內(nèi)聯(lián) > ID選擇器 > 類(lèi)選擇器 > 標(biāo)簽選擇器

  • 避免 css 全局污染。

    我常用的 css modules

  • css modules 的原理

    生成唯一的類(lèi)名

  • 有一個(gè)a標(biāo)簽,如何動(dòng)態(tài)的決定他的樣式。

    我說(shuō)了先寫(xiě)幾個(gè) css,然后外部傳一個(gè)前綴的方式。面試官問(wèn)了都要這樣嗎?我說(shuō)可以通過(guò) context 的方式,就不需要每個(gè)組件都傳了。

  • import 和 require 導(dǎo)入的區(qū)別

    高頻題,考察 ES6 模塊和 CommonJS 模塊 的區(qū)別。關(guān)鍵點(diǎn):1. 前者是值的引用,后者是值的拷貝。 2.前者編譯時(shí)輸出接口,后者運(yùn)行時(shí)加載。

    推薦文章:前端模塊化:CommonJS,AMD,CMD,ES6

  • require 有什么性能問(wèn)題

    好好想想上一個(gè)題的區(qū)別就能想到了

  • 組件庫(kù)如何做按需加載

    我常用的是babel-plugin-import

  • webpack 如何實(shí)現(xiàn)動(dòng)態(tài)加載

    講道理 webpack 動(dòng)態(tài)加載就兩種方式:import()require.ensure,不過(guò)他們實(shí)現(xiàn)原理是相同的。

    我覺(jué)得這道題的重點(diǎn)在于動(dòng)態(tài)的創(chuàng)建 script 標(biāo)簽,以及通過(guò) jsonp 去請(qǐng)求 chunk,推薦的文章是:webpack是如何實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入的

  • react 里有動(dòng)態(tài)加載的 api 嗎?

    React.lazy

  • React.lazy 的原理是啥?

  • webpack 能動(dòng)態(tài)加載 require 引入的模塊嗎?

    應(yīng)該是不能的,前面說(shuō)了,webpack 支持動(dòng)態(tài)導(dǎo)入基本上只能用import()require.ensure

  • require 引入的模塊 webpack 能做 Tree Shaking 嗎?

    不能,Tree Shaking 需要靜態(tài)分析,只有 ES6 的模塊才支持。

  • 設(shè)計(jì)一個(gè)input 組件需要哪些屬性。我說(shuō)了 value 、defaultValue、onChange

  • value 的類(lèi)型是什么?

  • onChange 怎么規(guī)定 value 的類(lèi)型

  • interface 和 type 的區(qū)別

  • 寫(xiě)一個(gè) promise 重試函數(shù),可以設(shè)置時(shí)間間隔和次數(shù)。function foo(fn, interval, times) {}

    常規(guī)題,網(wǎng)上有參考答案的。

三面

  • 組件平臺(tái)有哪些功能?

    詳細(xì)的跟我討論組件平臺(tái)的設(shè)計(jì),因?yàn)樗麄円蚕胱鲆粋€(gè)組件平臺(tái)。

  • 實(shí)現(xiàn)一個(gè) redux

    實(shí)現(xiàn) createStore 的功能,關(guān)鍵點(diǎn)發(fā)布訂閱的功能,以及取消訂閱的功能。

  • 用 ts 實(shí)現(xiàn)一個(gè) redux

    簡(jiǎn)單的加上類(lèi)型,我寫(xiě)的類(lèi)型沒(méi)有 redux 源碼那么復(fù)雜,當(dāng)時(shí)寫(xiě)得比較簡(jiǎn)單。

小節(jié)

一面的時(shí)候其實(shí)我自己感覺(jué)答得不是特別好,連 less 的語(yǔ)法都忘記了,當(dāng)時(shí)面下來(lái)感覺(jué)要涼了,平時(shí)寫(xiě) 樣式的時(shí)間確實(shí)太少了。

很幸運(yùn)的時(shí)候還是給我過(guò)了,二面面試官我覺(jué)得面得很專(zhuān)業(yè),基本都是從淺入深的考察知識(shí)的深度,我感覺(jué)答得還可以,因?yàn)槲沂菍儆谀欠N會(huì)的就盡量深一點(diǎn),暫時(shí)不用的就很少花時(shí)間,所以我目前知識(shí)的廣度很有欠缺,對(duì)于 node、ssr、移動(dòng)端、小程序這些方面我的能力都很薄弱,但是面試的時(shí)候如果你不熟悉,直接說(shuō)不熟悉就行,他就不會(huì)面了。

我準(zhǔn)備面試之前對(duì)我自己的要求就是,我會(huì)的盡量不會(huì)很快就被問(wèn)倒,所以我重點(diǎn)復(fù)習(xí)了我擅長(zhǎng)的知識(shí)。

面下來(lái)感覺(jué)拼多多也沒(méi)有想象中那么難,雖然拼多多薪資算行業(yè)內(nèi)高的,不過(guò)拼多多在上海,我在杭州,另外就是強(qiáng)制上 6 天班,我比較忌憚這點(diǎn)??紤]到我和女朋友本來(lái)就是異地,要是單休,而且節(jié)假日也會(huì)比正常的少,見(jiàn)面的機(jī)會(huì)就更少了。

反正選 offer 這種事還是盡量綜合考慮吧,團(tuán)隊(duì)、薪資、個(gè)人生活都應(yīng)該考慮進(jìn)去。

最后

我是桃翁,一個(gè)愛(ài)思考的前端er,期待你的關(guān)注。
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容