背景
本人前端,3年经验,因为我的的缘由,决定跳槽,因而大概3月开始找工做,总历时大概2个月,面试了微信/阿里/头条,三家都拿到了offer,来分享一下面经。html
问题比较多,并且不少面试题都是跟我的项目相关的,项目相关的问题借鉴意义不大,因此这里总结一些与项目无绝对关系的问题,欢迎围观~前端
本文答案均以连接的形式给出,由于我本人的一个特色就是回答题目必定要够详细,并且大部分的题目我都写过文章或者公众号转发过文章了,感兴趣能够直接关注公众号前端Q
,但愿对你有帮助~vue
总体流程
这里,我梳理了一些本身的心得,方便本身后面作直播,这里就当预告一下,先放个思惟导图。
node
PS: 图片有点大,若是打不开,直接访问个人博客react
微信
笔试
- 数组交集,编写一个函数,输入两个数组,输出它们的交集。输出数组中不含重复的元素,元素排列顺序可随意。
原题地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/webpack
- 二叉树的搜索,输入一个普通二叉树的根节点,实现一个调度器,调用调度器的next()方法,将返回二叉树中下一个最小的数;调用迭代器的hasNext()方法,将返回是否存在下一个数。二叉树节点是整数,无序。
原题地址:https://leetcode-cn.com/problems/binary-search-tree-iterator/git
- 三角形个数,输入一个非负整数的数组,若是将数组元素选做三角形的边长,编写一个函数,输出这个数组可构成的三角形数量。
原题地址:https://leetcode-cn.com/problems/valid-triangle-number/github
- 数组切分问题,输入一个正序排列的整型数组,若是它能够被切分为1个或多个子序列,输出True,反之False。子序列需为连续的整型数组,而且长度至少为3。
例1:
输入: [1,2,3,3,4,5]
输出: True
解释:能够切分为2个各自连续的子序列:
1, 2, 3
3, 4, 5
例2:
输入: [1,2,3,3,4,4,5,5]
输出: True
解释:能够切分为2个各自连续的子序列:
1, 2, 3, 4, 5
3, 4, 5
例3:
输入: [1,2,3,4,4,5]
输出: False
解释:没法切分出长度至少为3的子序列。
原题地址:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/web
- 一只青蛙一次能够跳上1级台阶,也能够跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法.
- 求下面代码的输出
function test(a,b) {
console.log(b)
return {
test:function(c){
return test(c,a);
}
};
}
var retA = test(0);
retA.test(2);
retA.test(4);
retA.test(8);
var retB = test(0).test(2).test(4).test(8);
var retC = test('good').test('bad');
retC.test('good');
retC.test('bad');
- top k
原题地址:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/面试
- 闭包问题及优化
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 300);
}
PS:一面笔试要求是30分钟,前4道算法题,二面笔试题是15分钟
与项目关系不大的问答题
- 节流防抖(实现/场景/源码,如lodash实现原理)(http://www.javashuo.com/article/p-hewgnbok-mq.html)
- 事件循环(浏览器/node/版本差别)(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- setTimeout 实现原理(https://mp.weixin.qq.com/s/7qTRSMqaqG8XZ9rpEBhYNQ)
- react 和 vue 的区别
- Promise 原理(https://juejin.im/post/5d6f7c83e51d4561c541a712)
- 前端错误监控及容灾(https://mp.weixin.qq.com/s/prf-mXexBh1Ie-ctq9FnzA)
- 性能优化(https://mp.weixin.qq.com/s/qXFd3f7CkEzz4u_1zl-TSw、https://mp.weixin.qq.com/s/dy1u2g9TeCoq2WOdPLqAXw、https://mp.weixin.qq.com/s/DJ8Fdq1_cIoW0_NYekZwFw、https://mp.weixin.qq.com/s/azeUIx0EA86EFQrtIRUKwQ、https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A、https://mp.weixin.qq.com/s/BOdnCYbMQfmCpUC3w3KZqw、https://mp.weixin.qq.com/s/FdG7uVIDXltNyskL3qh8Cw、太多了,贴不过来了,本身再总结吧)
- 谈谈 node 的内存泄漏(个人总结暂时没时间写,能够看看这篇,https://zhuanlan.zhihu.com/p/25736931)
- 开发过程当中遇到的最大挑战是什么(梳理项目,得出难点)
- 学习的动力怎么来的,如何维持(有兴趣能够留意一下个人直播)
- 浏览器的渲染机制是怎样的(https://mp.weixin.qq.com/s/wcw30EUb2ds3AoW176WGeg)
- SSR 做用及优缺点(seo/首屏快/开发成本高等,我项目用的是vue ssr,没专门总结,能够先看这个,https://zhuanlan.zhihu.com/p/35871344)
- 如何进行状态管理(vuex/redux)
- webpack 及浏览器的技术分享目的是什么,分享了什么,怎么作的分享(https://mp.weixin.qq.com/s/1FySzmVrNjS6wjgqALC96g、https://mp.weixin.qq.com/s/wcw30EUb2ds3AoW176WGeg)
- 如何进行项目重构(知乎不少讨论,直接去参考就能够了,或者看看这个https://www.itzhai.com/refactoring/refactoring-principle.html)
- 进程与线程的区别(https://www.zhihu.com/question/25532384)
- 说说知道的设计模式(参考掘金小册子就能够了)
- CI/CD(https://mp.weixin.qq.com/s/MbeW8UNZ1fPekWcaNqmsCQ)
PS:因为面试全过程历时比较长,一些题目已经忘记了。大概记得这么点,而后很看项目,每一轮都详细问了项目~
可能感兴趣的问答
- 面试一共几轮
我本人一共 4 轮技术面 + 1 轮HR面。目前微信职级为9级如下的技术岗不用通过面委,9级如下的通常4轮技术面,内部转岗可3轮技术面,9级及以上的须要走面委面试,大概形式是作份ppt去讲本身的项目经历及其余技术项。9级及以上的就5-10轮技术面不等。
- 历时多长
我本人总历时一个多月(相对来讲算很快了),因此若是你要面腾讯,千万不要裸辞,不对,面什么都不要裸辞,这年头很差混,怂一点。
- 总体面试流程是怎样的
内推->一面->二面->三面->四面->HR面->口头offer->正式offer->背调->入职
每一个阶段耗时一到两周的时间
- 微信工做地点
目前微信总部在广州,大部分的组都在广州,其中微信支付在深圳。
- 微信考算法多吗
多,基本上就是算法+项目
阿里
笔试
- n阶楼梯问题(尾递归的优化[函数最后调用自身能够减小中间变量|化递归为循环去优化]/备忘录优化)
- 节流防抖的实现(分析笔试答案时问到,总结差异,说出应用场景)(http://www.javashuo.com/article/p-hewgnbok-mq.html)
- 深拷贝(类型考虑/Symbol/Date等的构造/循环优化/共用引用优化等),这里贴2篇文章给你们参考,https://juejin.im/post/5d6aa4f96fb9a06b112ad5b1,https://mp.weixin.qq.com/s/M7KBX3w2KqlWhZFHJSYP6Q)
- 封装一个只能输入数字的React组件
问答题
- 输入URL后发生了什么(https://mp.weixin.qq.com/s/DLq_GIkdnuOayThfi3jI0A)
- 事件循环说一下(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- JS有几种基本类型,分别是什么,与对象的区别(不贴连接了,我认为是前端的都应该知道)
- JS 执行过程当中是如何保存上下文的(堆和栈,能够看极客时间的《浏览器工做原理》,或者参考我这里,https://mp.weixin.qq.com/s/klZ6j3Gj9cwHGQFys6Hdjg、https://mp.weixin.qq.com/s/HqADCzMGlIFDNnMRLsPTAA)
- 你认为何是前端
- 为何想来阿里
- 最近在看什么书
- 微前端了解吗(https://mp.weixin.qq.com/s/awBqvJmqWc7JGxwgB0QQZA、https://mp.weixin.qq.com/s/80S-RFmoZoq8KfCH6YZ_Tg、https://mp.weixin.qq.com/s/HVwcY8JGyrK8VcN1Ic9sWQ)
- 你想成为何样的人(我的成长规划)
- 项目中遇到的最大挑战是什么,如何解决的
- node 大量日志怎么处理的(缓冲队列)
- http2 的特色(https://mp.weixin.qq.com/s/OitrWEosrpuXh19o_TDasg)
- node 与其余语言有什么区别,其优劣势是什么
- csrf 的核心原理(http://www.javashuo.com/article/p-arfoqfvw-db.html)
- node 事件循环(https://mp.weixin.qq.com/s/QgfE5Km1xiEkQqADMLmj-Q)
- FCP/FMP/FP 分别是怎样定义,如何统计(https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A)
- MySQL 题目,id 惟一,name 能够重复,求 name 有重复的全部数据
- 有没有推进过什么东西
- 将来的一个发展是不是全栈,如何规划(能够留意个人直播)
- 链路录屏的原理(能够分析rrweb便可,参考例子,https://mp.weixin.qq.com/s/PxEzBrr3YF1jD84c_p1uAA)
- 链路录屏法务问题如何解决(屏蔽关键信息/用户受权等)
- FMP 定义及统计,w3c的草案你知道吗(自行谷歌查找)
- react 项目的可持续维护性如何体现(自行谷歌查找)
- react hooks用过吗,为何要用(没有专门总结,自行谷歌查找)
- h5 和小程序有什么区别(自行谷歌查找)
- https加密原理,中间人攻击知道吗(https://mp.weixin.qq.com/s/aMYp6Y5n26r9vdQIom4g0w、https://mp.weixin.qq.com/s/sHtZhRTNOihmxap5sDD6xQ)
- ng 负载均衡的方式有哪些(https://mp.weixin.qq.com/s/u-XbBwGxHrhJGiMiiqz26w、https://mp.weixin.qq.com/s/o2Us4Zj6DO2NHGQVaHIa1A)
- CDN 有什么做用(https://github.com/LuckyWinty/fe-weekly-questions/issues/24)
- 不可变数据里面,immutable,删除数组里面的列表(http://www.javashuo.com/article/p-rjpdgbqp-du.html,
http://www.javashuo.com/article/p-ybpzggik-z.html)
- 垃圾回收中,内部函数返给上层的对象是如何管理的
- es 静态分析原理(https://zhuanlan.zhihu.com/p/33843378)
- 有一个很大很大的文件,如何统计文件里面重复最多的行是哪行(参考git的记录存储)
头条
笔试题
一面:
- 执行代码求输出,并说明为何,严格模式下输出有变化吗,为何
var a = function () {this.b = 3;}
var c = new a();
a.prototype.b = 9;
var b = 7;
a();
console.log(b);
console.log(c.b);
- 给定一个升序整型数组[0,1,2,4,5,7,13,15,16],找出其中连续出现的数字区间,输出为["0->2","4->5","7","13","15->16"]
function summaryRanges(arr){
//TODO
}
- 请实现如下的函数,能够批量请求数据,全部的URL地址在urls参数中,同时能够经过 max 参数控制请求的并发度,当全部请求结束以后,须要执行 callback 回调函数。发请求的函数能够直接使用 fetch 便可
function sendRequest(urls: sring[],max:number,callback:()=>void){
//TODO
}
二面:
- 实现一个字符串反转:
输入:www.toutiao.com.cn
输出:cn.com.toutiao.www
要求:
1.不使用字符串处理函数
2.空间复杂度尽量小
- 不借助变量,交换两个数。
function swap(a, b) {
//TODO
}
- 观察者模式与发布订阅者区别,并写出其模型
与项目无绝对相关的问答题
- vue 事件机制是如何实现的 (http://www.javashuo.com/article/p-ymuwsgun-ga.html)
- vue 的组件通讯方式有哪些
- react fiber 的实现原理 (http://www.javashuo.com/article/p-xxlyngrv-cq.html)
- vue 响应式数据原理(vue2/vue3/依赖收集/发布订阅/watcher消息队列控制/Vue.set实现)(https://mp.weixin.qq.com/s/zDv_IQ36o_rRD25xN9uyuw、https://mp.weixin.qq.com/s/hTygoAan4yH3V4XV9iE1Pw)
- vue 转小程序怎么实现(ast/生命周期对齐/跨平台模块兼容/兼容细节点实现过程)
- 性能指标,如何理解TTI,如何统计,与FID有什么区别,如何实现统计,还聊了不少性能的东西(https://mp.weixin.qq.com/s/wDKKj5R8SYm-_75Zn1y30A)
- 说说你所了解的安全问题及防御方法(https://mp.weixin.qq.com/s/rU32rVM6Q-ele01ZB3RFzg)
- 说说你知道的设计模式,并举个对应的模式例子(https://mp.weixin.qq.com/s/x3OCgS_knmM4D5zNSIVGRg)
- 将来规划及学习方法
- 你以为你是怎样拿到京东校招的sp的
- 遇到的最大挑战/过去的最大收获分别是什么
我本人的博客/公众号,彷佛面试官都看过,都知道我学过什么,知道什么,因此不少我博客上有的东西都没问,甚至我引伸到过去,都不让说,有种没机会表现的感受,哈哈
感觉&更多学习资料
其实单看问题,参考性仍是比较小的,毕竟面试官主要会根据简历去发问。这里的一个感觉就是,项目中遇到的最大挑战,这个问题真很差答,我当时答得也不够好,后面又回去总结了一波项目,建议你们都好好总结一下本身平时遇到的问题,寻根究底。
这部分的题目,我会同步到个人每周N题上,欢迎你们来交流答案啊。想刷题的也能够来,地址以下:
https://github.com/LuckyWinty/fe-weekly-questions/issues
有不少知识点,虽然我没被问到,可是我写了很多文章,感兴趣的话能够关注一下个人博客,地址以下:
https://github.com/LuckyWinty/blog
更多我以为比较好的博客,地址以下:
交流
- 欢迎加我微信(winty230),拉你进技术群,长期交流学习...
- 欢迎关注「前端Q」,认真学前端,作个专业的技术人...
