<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          拼多多和酷家樂(lè)面試總結(jié)(已拿offer)

          共 5726字,需瀏覽 12分鐘

           ·

          2020-05-07 23:23

          ee9bb5099acf539a8917b845aae008d6.webp

          前言

          離職原因看我這篇文章吧:離開(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ù)。

          一面(電話(huà)面)

          • 你在項(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):

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

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

          聊聊 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í)話(huà),我覺(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è)圖好好的理解一下

            8754aedfac51af31169fe4ced8722a03.webpreact 生命周期
          • 聊一聊 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)稱(chēng) SCU)。SCU 跟 immutable 強(qiáng)相關(guān),一定要好好理解 react 的 immutable,否則很可能理解不了為什么不能直接去修改 state,然后再去 setState,以及 redux 的 reducer 要返回一個(gè)新的對(duì)象。

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

            type Pick = { [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ò)的,我是一面電話(huà)面,面完覺(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 生命周期有什么改變

            componentWillMountcomponentWillReceivePropscomponentWillUpdate 準(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ǔ)法篇[2]看完 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)組件有何不同?[3]

          • 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[4]

          • 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)入的[5]

          • 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)注。

          參考資料

          [1]

          一文吃透 React 事件機(jī)制原理: https://toutiao.io/posts/28of14w/preview

          [2]

          flex 語(yǔ)法篇: https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

          [3]

          函數(shù)式組件與類(lèi)組件有何不同?: https://overreacted.io/zh-hans/how-are-function-components-different-from-classes/

          [4]

          前端模塊化:CommonJS,AMD,CMD,ES6: https://juejin.im/post/5aaa37c8f265da23945f365c

          [5]

          webpack 是如何實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入的: https://juejin.im/post/5d26e7d1518825290726f67a




          推薦閱讀




          我的公眾號(hào)能帶來(lái)什么價(jià)值?(文末有送書(shū)規(guī)則,一定要看)

          每個(gè)前端工程師都應(yīng)該了解的圖片知識(shí)(長(zhǎng)文建議收藏)

          為什么現(xiàn)在面試總是面試造火箭?

          瀏覽 85
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  A片在线视频 | 性欧美XX | 特级西西人体444.444人体聚色 | 操逼黄视频 | 小早川怜子 无码 在线 |