背景
本人前端,3年經驗,因爲我的的緣由,決定跳槽,因而大概3月開始找工做,總歷時大概2個月,面試了微信/阿里/頭條,三家都拿到了offer,來分享一下面經。html
問題比較多,並且不少面試題都是跟我的項目相關的,項目相關的問題借鑑意義不大,因此這裏總結一些與項目無絕對關係的問題,歡迎圍觀~前端
本文答案均以連接的形式給出,由於我本人的一個特色就是回答題目必定要夠詳細,並且大部分的題目我都寫過文章或者公衆號轉發過文章了,感興趣能夠直接關注公衆號前端Q
,但願對你有幫助~vue
總體流程
這裏,我梳理了一些本身的心得,方便本身後面作直播,這裏就當預告一下,先放個思惟導圖。
node
PS: 圖片有點大,若是打不開,直接訪問個人博客react
微信
筆試
- 數組交集,編寫一個函數,輸入兩個數組,輸出它們的交集。輸出數組中不含重複的元素,元素排列順序可隨意。
原題地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/webpack
- 二叉樹的搜索,輸入一個普通二叉樹的根節點,實現一個調度器,調用調度器的next()方法,將返回二叉樹中下一個最小的數;調用迭代器的hasNext()方法,將返回是否存在下一個數。二叉樹節點是整數,無序。
原題地址:https://leetcode-cn.com/problems/binary-search-tree-iterator/git
- 三角形個數,輸入一個非負整數的數組,若是將數組元素選做三角形的邊長,編寫一個函數,輸出這個數組可構成的三角形數量。
原題地址:https://leetcode-cn.com/problems/valid-triangle-number/github
- 數組切分問題,輸入一個正序排列的整型數組,若是它能夠被切分爲1個或多個子序列,輸出True,反之False。子序列需爲連續的整型數組,而且長度至少爲3。
例1:
輸入: [1,2,3,3,4,5]
輸出: True
解釋:能夠切分爲2個各自連續的子序列:
1, 2, 3
3, 4, 5
例2:
輸入: [1,2,3,3,4,4,5,5]
輸出: True
解釋:能夠切分爲2個各自連續的子序列:
1, 2, 3, 4, 5
3, 4, 5
例3:
輸入: [1,2,3,4,4,5]
輸出: False
解釋:沒法切分出長度至少爲3的子序列。
原題地址:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/web
- 一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法.
- 求下面代碼的輸出
function test(a,b) {
console.log(b)
return {
test:function(c){
return test(c,a);
}
};
}
var retA = test(0);
retA.test(2);
retA.test(4);
retA.test(8);
var retB = test(0).test(2).test(4).test(8);
var retC = test('good').test('bad');
retC.test('good');
retC.test('bad');
- top k
原題地址:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/面試
- 閉包問題及優化
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 300);
}
PS:一面筆試要求是30分鐘,前4道算法題,二面筆試題是15分鐘
與項目關係不大的問答題
- 節流防抖(實現/場景/源碼,如lodash實現原理)(http://www.javashuo.com/article/p-hewgnbok-mq.html)
- 事件循環(瀏覽器/node/版本差別)(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- setTimeout 實現原理(https://mp.weixin.qq.com/s/7qTRSMqaqG8XZ9rpEBhYNQ)
- react 和 vue 的區別
- Promise 原理(https://juejin.im/post/5d6f7c83e51d4561c541a712)
- 前端錯誤監控及容災(https://mp.weixin.qq.com/s/prf-mXexBh1Ie-ctq9FnzA)
- 性能優化(https://mp.weixin.qq.com/s/qXFd3f7CkEzz4u_1zl-TSw、https://mp.weixin.qq.com/s/dy1u2g9TeCoq2WOdPLqAXw、https://mp.weixin.qq.com/s/DJ8Fdq1_cIoW0_NYekZwFw、https://mp.weixin.qq.com/s/azeUIx0EA86EFQrtIRUKwQ、https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A、https://mp.weixin.qq.com/s/BOdnCYbMQfmCpUC3w3KZqw、https://mp.weixin.qq.com/s/FdG7uVIDXltNyskL3qh8Cw、太多了,貼不過來了,本身再總結吧)
- 談談 node 的內存泄漏(個人總結暫時沒時間寫,能夠看看這篇,https://zhuanlan.zhihu.com/p/25736931)
- 開發過程當中遇到的最大挑戰是什麼(梳理項目,得出難點)
- 學習的動力怎麼來的,如何維持(有興趣能夠留意一下個人直播)
- 瀏覽器的渲染機制是怎樣的(https://mp.weixin.qq.com/s/wcw30EUb2ds3AoW176WGeg)
- SSR 做用及優缺點(seo/首屏快/開發成本高等,我項目用的是vue ssr,沒專門總結,能夠先看這個,https://zhuanlan.zhihu.com/p/35871344)
- 如何進行狀態管理(vuex/redux)
- webpack 及瀏覽器的技術分享目的是什麼,分享了什麼,怎麼作的分享(https://mp.weixin.qq.com/s/1FySzmVrNjS6wjgqALC96g、https://mp.weixin.qq.com/s/wcw30EUb2ds3AoW176WGeg)
- 如何進行項目重構(知乎不少討論,直接去參考就能夠了,或者看看這個https://www.itzhai.com/refactoring/refactoring-principle.html)
- 進程與線程的區別(https://www.zhihu.com/question/25532384)
- 說說知道的設計模式(參考掘金小冊子就能夠了)
- CI/CD(https://mp.weixin.qq.com/s/MbeW8UNZ1fPekWcaNqmsCQ)
PS:因爲面試全過程歷時比較長,一些題目已經忘記了。大概記得這麼點,而後很看項目,每一輪都詳細問了項目~
可能感興趣的問答
- 面試一共幾輪
我本人一共 4 輪技術面 + 1 輪HR面。目前微信職級爲9級如下的技術崗不用通過面委,9級如下的通常4輪技術面,內部轉崗可3輪技術面,9級及以上的須要走面委面試,大概形式是作份ppt去講本身的項目經歷及其餘技術項。9級及以上的就5-10輪技術面不等。
- 歷時多長
我本人總歷時一個多月(相對來講算很快了),因此若是你要面騰訊,千萬不要裸辭,不對,面什麼都不要裸辭,這年頭很差混,慫一點。
- 總體面試流程是怎樣的
內推->一面->二面->三面->四面->HR面->口頭offer->正式offer->背調->入職
每一個階段耗時一到兩週的時間
- 微信工做地點
目前微信總部在廣州,大部分的組都在廣州,其中微信支付在深圳。
- 微信考算法多嗎
多,基本上就是算法+項目
阿里
筆試
- n階樓梯問題(尾遞歸的優化[函數最後調用自身能夠減小中間變量|化遞歸爲循環去優化]/備忘錄優化)
- 節流防抖的實現(分析筆試答案時問到,總結差異,說出應用場景)(http://www.javashuo.com/article/p-hewgnbok-mq.html)
- 深拷貝(類型考慮/Symbol/Date等的構造/循環優化/共用引用優化等),這裏貼2篇文章給你們參考,https://juejin.im/post/5d6aa4f96fb9a06b112ad5b1,https://mp.weixin.qq.com/s/M7KBX3w2KqlWhZFHJSYP6Q)
- 封裝一個只能輸入數字的React組件
問答題
- 輸入URL後發生了什麼(https://mp.weixin.qq.com/s/DLq_GIkdnuOayThfi3jI0A)
- 事件循環說一下(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- JS有幾種基本類型,分別是什麼,與對象的區別(不貼連接了,我認爲是前端的都應該知道)
- JS 執行過程當中是如何保存上下文的(堆和棧,能夠看極客時間的《瀏覽器工做原理》,或者參考我這裏,https://mp.weixin.qq.com/s/klZ6j3Gj9cwHGQFys6Hdjg、https://mp.weixin.qq.com/s/HqADCzMGlIFDNnMRLsPTAA)
- 你認爲何是前端
- 爲何想來阿里
- 最近在看什麼書
- 微前端了解嗎(https://mp.weixin.qq.com/s/awBqvJmqWc7JGxwgB0QQZA、https://mp.weixin.qq.com/s/80S-RFmoZoq8KfCH6YZ_Tg、https://mp.weixin.qq.com/s/HVwcY8JGyrK8VcN1Ic9sWQ)
- 你想成爲何樣的人(我的成長規劃)
- 項目中遇到的最大挑戰是什麼,如何解決的
- node 大量日誌怎麼處理的(緩衝隊列)
- http2 的特色(https://mp.weixin.qq.com/s/OitrWEosrpuXh19o_TDasg)
- node 與其餘語言有什麼區別,其優劣勢是什麼
- csrf 的核心原理(http://www.javashuo.com/article/p-arfoqfvw-db.html)
- node 事件循環(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- FCP/FMP/FP 分別是怎樣定義,如何統計(https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A)
- MySQL 題目,id 惟一,name 能夠重複,求 name 有重複的全部數據
- 有沒有推進過什麼東西
- 將來的一個發展是不是全棧,如何規劃(能夠留意個人直播)
- 鏈路錄屏的原理(能夠分析rrweb便可,參考例子,https://mp.weixin.qq.com/s/PxEzBrr3YF1jD84c_p1uAA)
- 鏈路錄屏法務問題如何解決(屏蔽關鍵信息/用戶受權等)
- FMP 定義及統計,w3c的草案你知道嗎(自行谷歌查找)
- react 項目的可持續維護性如何體現(自行谷歌查找)
- react hooks用過嗎,爲何要用(沒有專門總結,自行谷歌查找)
- h5 和小程序有什麼區別(自行谷歌查找)
- https加密原理,中間人攻擊知道嗎(https://mp.weixin.qq.com/s/aMYp6Y5n26r9vdQIom4g0w、https://mp.weixin.qq.com/s/sHtZhRTNOihmxap5sDD6xQ)
- ng 負載均衡的方式有哪些(https://mp.weixin.qq.com/s/u-XbBwGxHrhJGiMiiqz26w、https://mp.weixin.qq.com/s/o2Us4Zj6DO2NHGQVaHIa1A)
- CDN 有什麼做用(https://github.com/LuckyWinty/fe-weekly-questions/issues/24)
- 不可變數據裏面,immutable,刪除數組裏面的列表(http://www.javashuo.com/article/p-rjpdgbqp-du.html,
http://www.javashuo.com/article/p-ybpzggik-z.html)
- 垃圾回收中,內部函數返給上層的對象是如何管理的
- es 靜態分析原理(https://zhuanlan.zhihu.com/p/33843378)
- 有一個很大很大的文件,如何統計文件裏面重複最多的行是哪行(參考git的記錄存儲)
頭條
筆試題
一面:
- 執行代碼求輸出,並說明爲何,嚴格模式下輸出有變化嗎,爲何
var a = function () {this.b = 3;}
var c = new a();
a.prototype.b = 9;
var b = 7;
a();
console.log(b);
console.log(c.b);
- 給定一個升序整型數組[0,1,2,4,5,7,13,15,16],找出其中連續出現的數字區間,輸出爲["0->2","4->5","7","13","15->16"]
function summaryRanges(arr){
//TODO
}
- 請實現如下的函數,能夠批量請求數據,全部的URL地址在urls參數中,同時能夠經過 max 參數控制請求的併發度,當全部請求結束以後,須要執行 callback 回調函數。發請求的函數能夠直接使用 fetch 便可
function sendRequest(urls: sring[],max:number,callback:()=>void){
//TODO
}
二面:
- 實現一個字符串反轉:
輸入:www.toutiao.com.cn
輸出:cn.com.toutiao.www
要求:
1.不使用字符串處理函數
2.空間複雜度儘量小
- 不借助變量,交換兩個數。
function swap(a, b) {
//TODO
}
- 觀察者模式與發佈訂閱者區別,並寫出其模型
與項目無絕對相關的問答題
- vue 事件機制是如何實現的 (http://www.javashuo.com/article/p-ymuwsgun-ga.html)
- vue 的組件通訊方式有哪些
- react fiber 的實現原理 (http://www.javashuo.com/article/p-xxlyngrv-cq.html)
- vue 響應式數據原理(vue2/vue3/依賴收集/發佈訂閱/watcher消息隊列控制/Vue.set實現)(https://mp.weixin.qq.com/s/zDv_IQ36o_rRD25xN9uyuw、https://mp.weixin.qq.com/s/hTygoAan4yH3V4XV9iE1Pw)
- vue 轉小程序怎麼實現(ast/生命週期對齊/跨平臺模塊兼容/兼容細節點實現過程)
- 性能指標,如何理解TTI,如何統計,與FID有什麼區別,如何實現統計,還聊了不少性能的東西(https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A)
- 說說你所瞭解的安全問題及防禦方法(https://mp.weixin.qq.com/s/rU32rVM6Q-ele01ZB3RFzg)
- 說說你知道的設計模式,並舉個對應的模式例子(https://mp.weixin.qq.com/s/x3OCgS_knmM4D5zNSIVGRg)
- 將來規劃及學習方法
- 你以爲你是怎樣拿到京東校招的sp的
- 遇到的最大挑戰/過去的最大收穫分別是什麼
我本人的博客/公衆號,彷佛面試官都看過,都知道我學過什麼,知道什麼,因此不少我博客上有的東西都沒問,甚至我引伸到過去,都不讓說,有種沒機會表現的感受,哈哈
感覺&更多學習資料
其實單看問題,參考性仍是比較小的,畢竟面試官主要會根據簡歷去發問。這裏的一個感覺就是,項目中遇到的最大挑戰,這個問題真很差答,我當時答得也不夠好,後面又回去總結了一波項目,建議你們都好好總結一下本身平時遇到的問題,尋根究底。
這部分的題目,我會同步到個人每週N題上,歡迎你們來交流答案啊。想刷題的也能夠來,地址以下:
https://github.com/LuckyWinty/fe-weekly-questions/issues
有不少知識點,雖然我沒被問到,可是我寫了很多文章,感興趣的話能夠關注一下個人博客,地址以下:
https://github.com/LuckyWinty/blog
更多我以爲比較好的博客,地址以下:
交流
- 歡迎加我微信(winty230),拉你進技術羣,長期交流學習...
- 歡迎關注「前端Q」,認真學前端,作個專業的技術人...
![GitHub](http://static.javashuo.com/static/loading.gif)