開頭
昨天去面了一家公司,價值觀有受到沖擊。
面試官技術方面沒的說,他可能是個完美主義的人,無論什么事情到了他那里好像都有解決的方案,我被說的無所適從,感覺他很厲害。
但我不能認可的是,面試官覺得加班是理所當然的,還說有人想把事情做的更好,愿意自主加班。這個我不否認,但憑什么說加班說的那么理所當然,違背國家制度也這么理所當然嗎?
他問我對加班的看法。我說可以加班,有意義就可以。他繼而反問,有些人覺得給老板打工就是沒意義的,那是否所有加班都是沒意義的呢?我當然說不是,他這么以己度人,我無語了。
我又說,忙的時候可以加,不會一直加下去吧?有沒有階段性休息和調整的說法?
他說沒有,不到公司上市會一直保持這種狀態。
頓時我不知道該說些啥,也許就是價值觀的不同吧,似乎我不加班就說明我工作劃水,效率低。
讓你加班的,可能就是你的同行,這似乎有點兒悲哀。
面經分享
第一部分是我前端面試的經驗總結,第二部分是我認為比較有思考空間的題目
經驗總結
- 一份漂亮的簡歷,需要包括以下部分(排版由上而下)
- 個人亮點(專精領域,個人博客,開源項目)
- 教育經歷(畢業院校,在校經歷、榮譽)
- 工作經歷(實習)
- 項目經歷
- 專業技能
- 扎實的前端基礎,比如你知道
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'/>
作用是什么?flex:1
的 1 代表什么?Generator
如何拋出錯誤?
- 熟悉一門前端框架(React 優先)
- 勤刷 LeetCode 的算法題,熟悉掌握相應的數據結構如常見的鏈表、棧、隊列、哈希表、樹
- 熟悉網絡基礎、Git 命令、Linux 命令
- 多去了解前端的新趨勢(Flutter,PWA,Serveless,GraphQL,CSS Houdini)
- 要有自信,讓面試官感受到你對前端的熱愛
面試題
由于面試的公司和次數略多,老生常談的面試題就不放出來了,也不按公司劃分面試題了
算法題
大多出自 LeetCode ,LeetCode HOT 100,最好自己過一遍,理解最優解
編程題
-
用 Class 實現 EventEmitter,要求擁有 on,once,emit,off 方法
-
實現 deepClone,要求能成功克隆帶有循環引用的對象
-
CSS 實現一個寬度為瀏覽器1/2,寬高比為 2:1 的盒子
-
實現 sum 函數
sum(1)(2)(3) == 6; // true sum(1, 2, 3) == 6; // true 復制代碼
-
實現 sum2 函數
console.log(sum2(1)(2)(3)()) // 6 console.log(sum2(1, 2, 3)()); // 6 復制代碼
-
用尾遞歸實現 fibonacci 數列
-
實現 co 函數
-
實現以下功能,當對一個 arr 做 push 操作時,會自動打印一行提示消息
const arr = [1,2,3]; arr.push(4); // arr pushed a new element: 4 復制代碼
-
代碼實現中斷 Promise 的運行
-
有一組圖片,實現后一張圖片必須等到上一張圖片加載完畢,才能開始加載
-
為 Test 類添加方法,打印指定內容
class Test {constructor() {this.person = { name: "jack", age: 38, position: "CTO" };}// ...... }const test = new Test(); for (const ele of test) {console.log(ele); } // [ 'name', 'jack' ] // [ 'age', 38 ] // [ 'position', 'CTO' ] 復制代碼
-
實現 handler 函數,遇到 b 和 ac 都要去除
console.log(handler("aabaa")); // 'aaaa' console.log(handler("abaccbc")); // 'c' console.log(handler("aaccc")); // 'c' console.log(handler("aaabccc")); // '' 復制代碼
-
實現 decode 函數
decode('HG[3|B[2|CA]]F') === 'HGBCACABCACABCACAF' // true 復制代碼
-
實現 _bind 函數,使打印 success
function Animal(name, color) {this.name = name;this.color = color; } Animal.prototype.say = function() {return `I'm a ${this.color} ${this.name}`; }; const Cat = Animal._bind(null, "cat"); const cat = new Cat("white"); if (cat.say() === "I'm a white cat" &&cat instanceof Cat &&cat instanceof Animal ) {console.log("success"); } 復制代碼
-
CSS 實現圓環進度條效果
-
說出以下打印內容
console.log(-1 >>> 32); console.log(-1 << 32); console.log(1 >> 32); console.log(5 >>> 2);var a = { n: 1 }; var b = a; a.x = a = { n: 2 }; console.log(a.x); console.log(b.x); 復制代碼
簡答題
- 實現 F12 開發者工具的檢查(inspect)功能
- 實現 把一個盒子從一個區域拖放到另一個指定區域中
- 盒子一部分在區域內,一部分在區域外,該如何處理
- 簡述幾個封裝好的關鍵方法
- 開發完的項目,在微信瀏覽器上白屏,該如何排查
- 如何統計一個頁面上哪些區域用戶點擊次數最多
- 如何根據按鈕級別的粒度,設計用戶權限,例如:A 可以訪問按鈕,B 不可以
- 如何對一個網頁內容進行自動化截屏,如何解決登錄限制
- A組件包裹B組件,B組件包裹C組件,它們的 componentDidMount 觸發順序如何
- React setState 到底是異步還是同步的,其原理是什么
- React Hooks 的使用有哪些注意事項
- React 的合成事件機制
- 簡述 React 類組件的新老生命周期,談談 React Fiber 架構的引入
- 詳細介紹一下 Redux 狀態管理,如何和 React 組件連接
- React HOC 的用途,什么是裝飾器模式
- Mobx 的實現原理
- Koa 的中間件原理,介紹一下 compose 函數
- 介紹 NodeJS 的 EventLoop 機制,process.nextTick() 的作用
- NodeJS 是單線程還是多線程,都有哪些線程,JS 為什么是單線程的
- CommonJS 的實現原理
- NodeJS 中存在哪些流,怎么理解 pipe() 及其優點
- require 的解析規則
- 介紹一下負載均衡,NodeJS 的 cluster 和 child_process 是什么
- webpack 是如何進行打包的
- webpack 動態 import 是如何實現的
- 如何編寫自己的 loader 和 plugin
- 簡述 webpack 配置文件中的 externals,UMD 了解嗎
- 介紹一下 DNS,什么是迭代查詢和遞歸查詢,什么是一級域名、二級域名
- HTTP 首部(Header)和實體(Body)的分隔符是什么,用正則如何匹配
- HTTPS 的詳細過程,什么是數字證書,消息摘要,非對稱加密,Hash 算法
- 如何實現 Tab(標簽)頁之間,客戶端與服務器的實時通訊
- HTTP 狀態碼:301、302、307 的區別
- 簡述瀏覽器的垃圾回收機制,什么是強引用、弱引用、循環引用
- 簡述 requestAnimationFrame 和 requestIdleCallback 的作用
- CSS 選擇器的解析順序是從右到左,還是從左到右,為什么
- click 事件在移動端有什么問題,如何解決,你在移動端還遇到那些坑
- 簡述 JWT 的生成過程和優缺點,怎么主動注銷 JWT 和續簽 JWT
- 通過什么檢測網站的性能,有哪些指標
- 如何查看網站的 Ajax 請求是由哪行代碼發出的,一個元素都綁定了哪些事件,Chrome 調試面板 F8,F10,F11 各代表什么
- 說說你對 jpg、gif、jpeg、png、webp、base64 URL 的了解
最后
由于文章篇幅原因,我只把面試題列了出來,詳細的答案,我整理成了一份PDF文檔,這份文檔還包括了還有?高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料 ,幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習。
需要的朋友可以點擊這里免費領取