前言
大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心
一週一個大廠 是我新出的一個系列文章,大概的流程是這樣的:
- 我會收集一些大廠的面經,並試著去回答
- 如果全都會則等待下一週重新一輪
- 如果有不會的,則記錄下來,並去克服它們,寫成文章,然後下一輪
這個系列的目的就是:逼自己學習,寫文章鞏固新知識,且複習舊知識
拼多多
今天是 一週一個大廠 的第二期,今天我們們來複盤一下拼多多的面經,發現不足,並逐一擊破他們吧!
一面
1、簡歷專案問詢 - 細節
略。。。。。
2、垂直水平居中
- 1、position: absolute + left: 50% + top: 50% + transform: translate(-50%, -50%)
- 2、display: flex + justify-content: center + align-items: center
3、display: table-cell + text-align: center + vertical-align: middle
3、一個簡單請求的header會有什麼欄位
Accept
:瀏覽器支援的MIME型別Accept-Encoding:gzip, deflate
:瀏覽器支援的壓縮編碼是gzip和deflateAccept-Language:zh-cn,zh;q=0.5
:瀏覽器支援的語言是簡體中文和中文,優先支援前者Connection:keep-alive
:客戶端與服務端的連線型別為持久連線Content-length
:內容長度Content-type
:內容格式Host
:域名Origin
:訪問來源地址(protocal + host)Referer
:訪問來源地址(完整)4、map、filter、reduce 都怎麼用?
可以看我的文章基礎很好?總結了38個ES6-ES12的開發技巧,倒要看看你能拿幾分?? 裡面的
map、filter、reduce
部分5、Symbol有了解過過嗎?
可以看我的文章基礎很好?總結了38個ES6-ES12的開發技巧,倒要看看你能拿幾分?? 裡面的
Symbol
部分6、ES5繼承、ES6類繼承,靜態方法?
- ES5繼承:工作中遇到的50個JavaScript的基礎知識點 裡的
繼承方式
ES6類繼承:基礎很好?總結了38個ES6-ES12的開發技巧,倒要看看你能拿幾分?? 裡的
Class
7、Promise 超時控制?
利用
Promise.all
const request = (delay) => ( new Promise((resolve, reject) => { setTimeout(() => { resolve('資料') }, delay) }) ) const time = (delay) => ( new Promise((resolve, rejct) => { setTimeout(() => { resolve('超時啦!') }, delay) }) ) const getData = (delay1, delay2) => ( Promise.race([request(delay1), time(delay2)]) ) // 不超時情況 getData(1000, 2000).then(res => console.log(res)) // 超時情況 getData(2000, 1000).then(res => console.log(res))
8、DFS 找節點
function depthFirstSearchNoRecursion (target) { const res = []; const stack = target.slice(); // console.log(stack) while (stack.length > 0) { const node = stack.shift(); // 最上層節點出棧 res.push(node.id); // 如果該節點有子節點,將子節點存入棧中,繼續下一次迴圈 const len = node.children && node.children.length; for (let i = len - 1; i >= 0; i--) { stack.unshift(node.children[i]); } } return res; }
9、Node有什麼特性,適合用來做什麼?
特性
- 1、 它是一個Javascript執行環境
- 2、 依賴於Chrome V8引擎進行程式碼解釋
- 3、 事件驅動
- 4、 非阻塞I/O
- 5、 輕量、可伸縮,適於實時資料互動應用
6、 單程式,單執行緒
場景
- 1、 高併發(最重要的優點)
- 2、 適合I/O密集型應用
10、midway對比egg有什麼優勢?
據我所知就是對 typescript
的支援非常好
11、typescript 有沒有實踐過?
實踐過:
- Vue3 + TS + Vite
React + TS + Vite
12、平時有用什麼設計模式嗎?
可能用了,但是沒去注意,沒去總結
13、平時打包工具 - Webpack 相關
推薦幾篇文章吧:
- 2020年了,再不會webpack敲得程式碼就不香了(近萬字實戰)
14、你有沒有哪些我沒問到你想說的?
略
15、快取相關,cdn 快取處理?
CDN快取
跟瀏覽器http快取
差不多,這一塊還不精通,還得看看16、你有什麼想問的?
我帥嗎?
二面
1、壓力面,質疑觀點?
略
2、拍平陣列
要求
const flatten = (list, level = +Infinity) => {
// ...
};
const array = [1, [2, [3, 4, [5]], 3], -4];
const list1 = flatten(array);
const list2 = flatten(array, 2);
console.log(list1); // [1, 2, 3, 4, 5, 3, -4]
console.log(list2); // [1, 2, 3, -4]
解題
const flatten = (list, level = +Infinity) => {
let res = list
for (let i = 0; i < level; i++) {
res = [].concat(...res)
if (!res.some(item => Array.isArray(item))) break
}
return res
};
3、Promise
要求
const myPromise = val => Promise.resolve(val);
const delay = duration => {
// ...
};
myPromise(`hello`)
.then(delay(1000))
.then(val => console.log(val)); // 一秒之後輸出 hello
解題
const delay = duration => {
return (val) => (
new Promise((resolve, reject) => {
setTimeout(() => resolve(val), duration)
})
)
};
三面
1、專案細節詢問
略。。。
2、Vue 原始碼有讀嗎 - 響應式原理,nextTick
可以看我的Vue原始碼解析專欄
3、最近有沒有研究什麼新技術?
唱跳rap
4、專案優化有哪些實踐?
略。。。根據自己專案回答這幾方面:
- 1、業務方面優化
- 2、請求方面優化
- 3、打包方面優化
4、架構方面優化
5、V8 如何執行一段程式碼?
- 第一步:
Parser
將程式碼轉轉AST(抽象語法樹)
- 第二步:
直譯器Ignition
生成位元組碼 第三步:執行
6、72-編輯距離
不會。。已收集到大廠演算法題中
7、226-翻轉二叉樹
不會。。已收集到大廠演算法題中
8、效能優化的實踐?
略。。。根據自己專案回答。。
9、有其他想問的嗎?
我帥嗎
結語
我是林三心,一個熱心的前端菜鳥程式設計師。如果你上進,喜歡前端,想學習前端,那我們們可以交朋友,一起摸魚哈哈,摸魚群,加我請備註【思否】