在大廠工做了6年,當了3年的前端面試官,把大廠常問的面試題與答案彙總在個人Github中。但願對你們有所幫助。javascript
項目地址是:github.com/airuikun/We…前端
大廠的一面面試題,你們基本上都能在google上刷到,見過就會,沒見過就死。經過刷題,基本上能作出來85%以上。java
可是到了二面,你會發現難度徒然上升,一道題內,涉及到的技術點不少,不多能在網上查到原題目,由於二面的題目大部分都是從工做中提煉出來的技術點,須要候選人經過本身的想象力和技術實力去設計解決方案。很是考驗候選人前端能力。node
不少候選人一上來就說本身精通nodejs開發,可是通過面試之後,發現其實都只是停留在demo的水平,都只是在官網上把例子下載下來隨便運行一下,以爲nodejs其實也就這醬紫。git
其實經過nodejs真正開發過大型工程化工具cli,你就會發現存在不少的windows和mac等系統的兼容性問題,甚至是連nodejs官網上的API都是有問題而且是不可信的。github
我隨意列幾個點,歡迎你們補充:面試
還有好多,懶得寫了npm
若是你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…windows
這題就是典型的大廠二面題,題目簡單一看就明白,可是真要實現能寫一條龍出來。瀏覽器
你們都知道,由於安全限制,瀏覽器是不能直接操做你電腦裏的文件系統的,可是這題卻讓你點擊一個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…
這個誤刪分支致使代碼丟失的錯誤,常常會出如今實習生和新招的校招生當中,若是你是一個前端團隊的main coder或者項目負責人,對git必需要很是熟悉,要否則會常常出現代碼誤刪,代碼丟失等問題。這個問題你如何解決呢?
若是你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…
若是你用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…
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…
實現方案不少,提供一個思路:
自行實現一個x插件,註冊一個全局命令叫xxx,npm run start的時候,並行執行這個xxx命令,xxx命令會經過npm info調取a、b、c三個插件的最新信息,分別截取version,而後與本地三個插件的version進行對比,發現不一樣的,就去update。
若是你有更好的答案或想法,歡迎在這題目對應的github下留言:github.com/airuikun/We…
這題首先要實如今內存不足的狀況下進行轉發文件流,
當你答出來之後,面試官確定會問你,當不當心斷網了,如何繼續斷點續傳?
你還能想出這整個流程中存在的其餘什麼問題?
死亡三連問,舅問你怕不怕
mmp娃如今在哭鬧,我得去衝奶粉了,代碼太長我就不貼了,小夥伴本身想一下,歡迎說出你的實現思路
若是你們有好的idea,歡迎你們到個人github裏補充:github.com/airuikun/We…
針對端口轉發經典問題,我專門寫了一個文章,輕鬆搞笑通俗易懂,你們能夠看一下,放鬆放鬆《小蝌蚪傳記:端口轉發——夜店傳說》
本人還寫了一些前端進階知識的文章,若是以爲不錯能夠點個star。
blog項目地址是:github.com/airuikun/bl…
我是小蝌蚪,高級前端工程師,跟着我一塊兒攻克前端技術難點。但願在小夥伴前端進階的路上有所幫助,助力你們進入本身理想的企業。