1. 程式人生 > 其它 >2021Android大廠面試經驗,Android面試題目

2021Android大廠面試經驗,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 的瞭解

推薦學習資料