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

前言

在大廠工做了6年,當了3年的前端面試官,把大廠常問的面試題與答案彙總在個人Github中。但願對你們有所幫助。javascript

項目地址是:github.com/airuikun/We…前端

面試題精選

大廠的一面面試題,你們基本上都能在google上刷到,見過就會,沒見過就死。經過刷題,基本上能作出來85%以上。java

可是到了二面,你會發現難度徒然上升,一道題內,涉及到的技術點不少,不多能在網上查到原題目,由於二面的題目大部分都是從工做中提煉出來的技術點,須要候選人經過本身的想象力和技術實力去設計解決方案。很是考驗候選人前端能力。node

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

難度:阿里p5 ~ p6

不少候選人一上來就說本身精通nodejs開發,可是通過面試之後,發現其實都只是停留在demo的水平,都只是在官網上把例子下載下來隨便運行一下,以爲nodejs其實也就這醬紫。git

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

我隨意列幾個點,歡迎你們補充:面試

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

還有好多,懶得寫了npm

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

第 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…

我是小蝌蚪,高級前端工程師,跟着我一塊兒攻克前端技術難點。但願在小夥伴前端進階的路上有所幫助,助力你們進入本身理想的企業。

相關文章
相關標籤/搜索