在大厂工做了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…
我是小蝌蚪,高级前端工程师,跟着我一块儿攻克前端技术难点。但愿在小伙伴前端进阶的路上有所帮助,助力你们进入本身理想的企业。