handler機制的原理面試,2021年不想被公司優化統統都會!
前言
又到了金九銀十的面試季,自己也不得不參與到這場戰役中來,其實是從去年底就開始看,android的好機會確實不太多,但也還好,3年+的android開發經歷還是有一些面試機會的,不過確實不像幾年前門檻那麼低了,總的體會就是小的創業公司比較注重你的專案經歷是否和自己的貼合,直接能過來獨當一面。大廠除了看中專案經歷外,還比較注重你知識面的廣度,是廣度、深度和解決方案等多方面的考察,平時夠工作要好好積累臨時刷題只聊點皮毛估計是過不了關的。下面就總結一些遇到的題目,各種風格的都有。這裡先列舉問題。
面經分享
第一部分是我前端面試的經驗總結,第二部分是我認為比較有思考空間的題目
經驗總結
- 一份漂亮的簡歷,需要包括以下部分(排版由上而下)
- 個人亮點(專精領域,個人部落格,開源專案)
- 教育經歷(畢業院校,在校經歷、榮譽)
- 工作經歷(實習)
- 專案經歷
- 專業技能
- 紮實的前端基礎,比如你知道
<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 的瞭解
總結
【Android 詳細知識點思維腦圖(技能樹)】
我個人是做Android開發,已經有十來年了,目前在某創業公司任職CTO兼系統架構師。雖然 Android 沒有前幾年火熱了,已經過去了會四大元件就能找到高薪職位的時代了。這隻能說明 Android 中級以下的崗位飽和了,現在高階工程師還是比較缺少的,很多高階職位給的薪資真的特別高(錢多也不一定能找到合適的),所以努力讓自己成為高階工程師才是最重要的。
這裡附上上述的面試題相關的幾十套位元組跳動,京東,小米,騰訊、頭條、阿里、美團等公司19年的面試題。把技術點整理成了視訊和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節。
由於篇幅有限,這裡以圖片的形式給大家展示一小部分。
詳細整理在Gitee可以見;
網上學習 Android的資料一大堆,但如果學到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那麼很難做到真正的技術提升。希望這份系統化的技術體系對大家有一個方向參考。
最後,贈與大家一句話,共勉!