時間過得很快,彷彿20年的金九銀十就在昨天,21年的金三銀四隨之而來了,尚未準備好面試的同窗們不要慌,今天和你們聊得的是淘系前端面試,一共是5面+HR面,會問那些問題?又該如何回答?看完這篇,爲咱們的面試錦上添花!html
這一面主要問了基礎部分, 一部分題目我會帶上提示
主要是 令牌化/建樹/收集樣式表/佈局渲染樹/繪製列表/柵格化/繪製圖塊/...這些過程, 推薦閱讀瀏覽器的工做原理:新式網絡瀏覽器幕後揭祕前端
E-Tag
和Last-Modified
以及對應的標識, 強緩存方案與協商緩存方案的場景, 好比index.html
該用哪一個?Fiber
架構可能會將其打斷), 新版的有什麼特色(getDerivedStateFromProps(nextProps, prevState)
, 這個方法是靜態方法, 也就說你沒法在裏面獲取到this, 還有就是入參爲prevState
, 這樣就保證state
和props
之間更隔離). 還有就是我以爲很好玩的getDerivedStateFromErrors
和componentDidCatch
的協做.React: PureComponent, 淺比較, 放一下shouldComponentUpdate
中shallowEuqal
的源碼:html5
const hasOwn = Object.prototype.hasOwnProperty; function is(x, y) { if (x === y) { return x !== 0 || y !== 0 || 1 / x === 1 / y; } else { return x !== x && y !== y; } } export default function shallowEqual(objA, objB) { if (is(objA, objB)) return true; if ( typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null ) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) return false; for (let i = 0; i < keysA.length; i++) { if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } 複製代碼
particalState
), 內部對參數的Object
類型和Function
類型作了不一樣的處理, 爲函數的狀況下, 會在setState調用完成而且組件開始rerender的時候被調用.Buffer的話主要提了一下它是堆外內存(V8的常駐內存由代碼區/棧/堆/堆外內存組成)啥的.webpack
微信小程序, 這個是二面的重點提問之一, 包括如下幾個方面:程序員
sessionKey
生成token, openid做爲主鍵入數據庫, 再返回自定義的登陸態標識.@Penumbra/cli, 一個思路相似Feflow
的腳手架, 也是 腳手架核心+模板插件包+構建器 的一個組合, 模板插件包的話, 前端包含 Webpack
/Parcel
+ TypeScript
/JavaScript
的組合, 後端包含Koa
/Egg
+ RESTFul
/GraphQL
的組合. 主要問了這些問題:web
Parcel
Sentry
以及Release時上傳Source-Map
文件的方式. 本身實現的話, React的思路主要是一個最外層的<ErrorBoundry />
組件, 藉助getDerivedStateFromError
與componentDidCatch
來捕獲錯誤.FaaS
以及BaaS
, 還有Serverless
對前端意義, 這個問題千人千面, 就不展開來說了.三面和四面發問的角度和提出的問題比較相似, 所以就放在一塊兒講了.面試
@Penumbra/cli
.不要東扯一點西扯一點, 以 技術棧 -> 業務場景 -> 亮點 -> 難點 -> 提煉總結 -> 自我提高 這幾個步驟來敘述會更加條理清晰, 其中亮點/難點以STAR
法則介紹最佳.算法
@Penumbra/cli
這個, 上面已經介紹過, 就再也不贅述. 主要爲了體現 新工程目錄創建繁瑣 -> 應當成員之間統一目錄結構 這個意識.GraphQL, 主要介紹了這些:數據庫
Apollo-Server
& TypeGraphQL
& Apollo-Rest-Datasource
, 至於它們是什麼感興趣同窗能夠去查查. Apollo不只提供了服務端支持, 也提供了客戶端支持, 即Apollo-Client
, 同時使用Server
和Client
來構建應用真的能起到1+1>2的效果, 由於兩者就像是一體的.Webpack性能調優, 從 打包速率 / 打包大小 / 交互友好 三個方面入手的, 這裏能夠稍微列舉一些我以爲比較好用/有趣的Plugin:小程序
VuePress
就用的這個)resolve
字段中配置extension
, loader中配置exclude
, 後者的話則主要是Tree-Shaking(注意, CSS也能夠作搖樹優化), 代碼分割(動態加載以及Lodash/Antd這種龐大的模塊), Source-Map模式, 壓縮代碼等等.React Hooks:
useRef, 還有useImperativeHandle與forwardRef
React-Redux
的useSelector和useDispatch
, React-Use
還有Umi-Hooks
等等.五面的面試官可能比較忙, 所以整個面試過程大概就二十分鐘左右. 以本身的經歷爲主, 若是你是獨行俠, 也能夠講一講本身在社區的貢獻等等, 不要直接說你喜歡獨來獨往一我的全乾.
這一面就是常見的問題啦:
這些問題比較主觀, 爲了不誤導我就不講啦
對將來前端的展望是二面問到的問題, 我我的的想法主要分這麼三點:
Rax
或者Taro
, 真正的一次編寫到處運行. 固然理想是好的, 在它還未乘着七彩祥雲到來前, 仍是專心學好每一端吧~Serverless
無疑是前端仔的下一個風口, 它給予了咱們向後端進發的能力, 讓咱們"本身和本身聯調", 也無需操心本身寫的服務被流量打爆掉. 後端同窗則可以解放出來, 去作一些更有意義的事情.(真的不是搶飯吃)只能說面試真的是很玄學的東西, 若是每一面都能碰見和你至關合得來的面試官, 那整個面試流程真的會很輕鬆愉快。春招逐漸接近尾聲, 也但願你們都能拿到本身滿意的offer!