小蝌蚪系列:三年大廠面試官——二面題(偏難)

第一名的小蝌蚪發表於2019-08-05

前言

在大廠工作了6年,當了3年的前端面試官,把大廠常問的面試題與答案彙總在我的Github中。希望對大家有所幫助。

專案地址是:github.com/airuikun/We…

面試題精選

大廠的一面面試題,大家基本上都能在google上刷到,見過就會,沒見過就死。通過刷題,基本上能做出來85%以上。

但是到了二面,你會發現難度徒然上升,一道題內,涉及到的技術點很多,很少能在網上查到原題目,因為二面的題目大部分都是從工作中提煉出來的技術點,需要候選人通過自己的想象力和技術實力去設計解決方案。非常考驗候選人前端能力。

第 1 題:在nodejs開發的時候 處理過什麼windows和mac的平臺相容性問題

難度:阿里p5 ~ p6

很多候選人一上來就說自己精通nodejs開發,但是經過面試以後,發現其實都只是停留在demo的水平,都只是在官網上把例子下載下來隨便執行一下,覺得nodejs其實也就這醬紫。

其實通過nodejs真正開發過大型工程化工具cli,你就會發現存在很多的windows和mac等系統的相容性問題,甚至是連nodejs官網上的API都是有問題並且是不可信的。

我隨意列幾個點,歡迎大家補充:

  • 相容環境變數設定,用cross-env,因為export和set有系統差異性
  • windows不支援 & ,並行執行npm-script用npm-run-all或者concurrently
  • 非同步同步化:util.promisify + async/await
  • 不要直接用官網的fs.readFileSync,用fs-extra去代替
  • 拼接路徑要用path.join,Unix系是/,Windows是\

還有好多,懶得寫了

如果你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 2 題:設計一個方案,在瀏覽器中點選一個button,然後能在你的前端專案原始碼檔案中增加一個index.js檔案,如何實現?提供思路

難度:阿里p6 ~ p7

這題就是典型的大廠二面題,題目簡單一看就明白,但是真要實現能寫一條龍出來。

大家都知道,因為安全限制,瀏覽器是不能直接操作你電腦裡的檔案系統的,但是這題卻讓你點選一個button,能在你的前端專案程式碼檔案裡生成一個檔案,那怎麼實現呢?

其實你如果看了很多的跨平臺包的核心core檔案,你就會發現他們實現原理都類似,都是約定好一個規範,然後實現一個bridge橋接去進行許可權穿透。要寫出來就太多了,大家可以自行去研究一下。

還有一個思路,涉及到npm + cli + node server去實現。首先實現一個npm外掛,在bin裡註冊一個命令,當你在前端專案中npm run start後,呼叫這個命令,通過這個命令起一個node-dev-server,然後通過http請求去讓這個node-dev-server去建立index.js檔案。

這題其實也有很簡單的方法可以去實現,有簡單有難,很靈活,當然你的回答越難越有深度,就越能體現你的創造力和實力。

怎麼樣,小夥伴有想法和思路麼?歡迎在我的github裡留言。

如果你有更好的想法或疑問,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 3 題:如果一個實習生,他本地git的A分支被誤刪了, A分支程式碼沒有被push到遠端,如何找到之前A的提交記錄和程式碼

難度:阿里p6 ~ p6+

這個誤刪分支導致程式碼丟失的錯誤,經常會出現在實習生和新招的校招生當中,如果你是一個前端團隊的main coder或者專案負責人,對git必須要非常熟悉,要不然會經常出現程式碼誤刪,程式碼丟失等問題。這個問題你如何解決呢?

如果你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 4 題:如果你用nodejs實現的爬蟲伺服器的IP被指定網站封了,如何解封?

難度:阿里p6 ~ p7

如果你用nodejs實現爬蟲去扒取網站內容,就很有可能會被別人反爬蟲機制給封殺掉。當然,解決方法多種多樣,我沒做過大型完善的爬蟲服務,但是做過小型的,遇到這種情況我實現方案是做幾層ip池,當抓取失敗後,通過自動隨機切換ip代理池去繞過封鎖,我簡單寫一下ip代理的實現原理的虛擬碼吧,其實就是用nodejs實現一個代理,很簡單

    http.createServer((req, res)=>{
      request(
        `http://xxx/${req.url}`,
        { proxy: "xxx.xxx.xxx:xxx" },
        function(error, response, body) {
          if (!error && response.statusCode == 200) {
            res.end(body);
          } else {
            console.log(error);
          }
        }
      );
    }).listen(8888,()=>{
        console.log('run')
    });
複製程式碼

如果你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 5 題:用nodejs,將base64轉化成png檔案

難度:阿里p5 ~ p6

    const fs = require('fs');
    const path = 'xxx/'+ Date.now() +'.png';
    const base64 = data.replace(/^data:image\/\w+;base64,/, "");//去掉圖片base64碼前面部分data:image/png;base64
    const dataBuffer = new Buffer(base64, 'base64'); //把base64碼轉成buffer物件,
    fs.writeFile(path, dataBuffer, function(err){//用fs寫入檔案
        if(err){
            console.log(err);
        }else{
            console.log('寫入成功!');
        }
    })
複製程式碼

一般你要是做出來了將base64轉化成png檔案,面試官又會壞壞的讓你舉一反三一下,會問你:實現一下將png檔案,轉化成base64,來少年,實現一下

    const fs = require("fs");
    const util = require("util");
    const imageData = await util.promisify(fs.readFileSync(fileUrl)); // 例:xxx/xx/xx.png
    const imageBase64 = imageData.toString("base64");
    const imagePrefix = "data:image/png;base64,";
    console.log(imagePrefix + imageBase64);
複製程式碼

如果你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 6 題:請設計一個方案:有a、b、c三個npm外掛,它們會經常更新,在前端專案npm run start啟動後,要求a、b、c三個npm外掛自動更新到最新版本

難度:阿里p5+ ~ p6+

實現方案很多,提供一個思路:

自行實現一個x外掛,註冊一個全域性命令叫xxx,npm run start的時候,並行執行這個xxx命令,xxx命令會通過npm info調取a、b、c三個外掛的最新資訊,分別擷取version,然後與本地三個外掛的version進行對比,發現不同的,就去update。

如果你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…

第 7 題:大檔案轉存問題:伺服器A有一個1000G的檔案, 需要通過服務端B轉發到服務端C,但是伺服器B記憶體只有1個g, 怎麼去實現這個大檔案轉存

難度:阿里p6+ ~ p7+

這題首先要實現在記憶體不足的情況下進行轉發檔案流,

當你答出來以後,面試官肯定會問你,當不小心斷網了,如何繼續斷點續傳?

你還能想出這整個流程中存在的其他什麼問題?

死亡三連問,舅問你怕不怕

mmp娃現在在哭鬧,我得去衝奶粉了,程式碼太長我就不貼了,小夥伴自己想一下,歡迎說出你的實現思路

如果大家有好的idea,歡迎大家到我的github裡補充:github.com/airuikun/We…

第 8 題:如何實現內網穿透,埠轉發瞭解一下?

難度:阿里p5+ ~ p6+

針對埠轉發經典問題,我專門寫了一個文章,輕鬆搞笑通俗易懂,大家可以看一下,放鬆放鬆《小蝌蚪傳記:埠轉發——夜店傳說》

結語

本人還寫了一些前端進階知識的文章,如果覺得不錯可以點個star。

blog專案地址是:github.com/airuikun/bl…

我是小蝌蚪,高階前端工程師,跟著我一起攻克前端技術難點。希望在小夥伴前端進階的路上有所幫助,助力大家進入自己理想的企業。

相關文章