阅读 44

大厂面试过程复盘(微信/阿里/头条均拿offer,附答案篇)

背景

本人前端,3年经验,由于个人的原因,决定跳槽,于是大概3月开始找工作,总历时大概2个月,面试了微信/阿里/头条,三家都拿到了offer,来分享一下面经。

问题比较多,而且很多面试题都是跟个人项目相关的,项目相关的问题借鉴意义不大,所以这里总结一些与项目无绝对关系的问题,欢迎围观~

本文答案均以链接的形式给出,因为我本人的一个特点就是回答题目一定要够详细,而且大部分的题目我都写过文章或者公众号转发过文章了,感兴趣可以直接关注公众号前端Q,希望对你有帮助~

整体流程

这里,我梳理了一些自己的心得,方便自己后面做直播,这里就当预告一下,先放个思维导图。

PS: 图片有点大,如果打不开,直接访问

微信

笔试

  1. 数组交集,编写一个函数,输入两个数组,输出它们的交集。输出数组中不含重复的元素,元素排列顺序可随意。

原题地址:

  1. 二叉树的搜索,输入一个普通二叉树的根节点,实现一个调度器,调用调度器的next()方法,将返回二叉树中下一个最小的数;调用迭代器的hasNext()方法,将返回是否存在下一个数。二叉树节点是整数,无序。

原题地址:

  1. 三角形个数,输入一个非负整数的数组,如果将数组元素选作三角形的边长,编写一个函数,输出这个数组可构成的三角形数量。

原题地址:

  1. 数组切分问题,输入一个正序排列的整型数组,如果它可以被切分为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的子序列。

原题地址:

  1. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法.
  2. 求下面代码的输出
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‘);
  1. top k

原题地址:

  1. 闭包问题及优化
for (var i = 0; i < 4; i++) {
  setTimeout(function() {
    console.log(i);
  }, 300);
}

PS:一面笔试要求是30分钟,前4道算法题,二面笔试题是15分钟

与项目关系不大的问答题

  1. 节流防抖(实现/场景/源码,如lodash实现原理)()
  2. 事件循环(浏览器/node/版本差异)()
  3. setTimeout 实现原理(
  4. react 和 vue 的区别
  5. Promise 原理(
  6. 前端错误监控及容灾(
  7. 性能优化(
  8. 谈谈 node 的内存泄漏(我的总结暂时没时间写,可以看看这篇,
  9. 开发过程中遇到的最大挑战是什么(梳理项目,得出难点)
  10. 学习的动力怎么来的,如何维持(有兴趣可以留意一下我的直播)
  11. 浏览器的渲染机制是怎样的(
  12. SSR 作用及优缺点(seo/首屏快/开发成本高等,我项目用的是vue ssr,没专门总结,可以先看这个,
  13. 如何进行状态管理(vuex/redux)
  14. webpack 及浏览器的技术分享目的是什么,分享了什么,怎么做的分享(
  15. 如何进行项目重构(知乎很多讨论,直接去参考就可以了,或者看看这个https://www.itzhai.com/refactoring/refactoring-principle.html)
  16. 进程与线程的区别(
  17. 说说知道的设计模式(参考掘金小册子就可以了)
  18. CI/CD(

PS:由于面试全过程历时比较长,一些题目已经忘记了。大概记得这么点,然后很看项目,每一轮都详细问了项目~

可能感兴趣的问答

  1. 面试一共几轮

我本人一共 4 轮技术面 + 1 轮HR面。目前微信职级为9级以下的技术岗不用经过面委,9级以下的一般4轮技术面,内部转岗可3轮技术面,9级及以上的需要走面委面试,大概形式是做份ppt去讲自己的项目经历及其他技术项。9级及以上的就5-10轮技术面不等。

  1. 历时多长

我本人总历时一个多月(相对来说算很快了),所以如果你要面腾讯,千万不要裸辞,不对,面什么都不要裸辞,这年头不好混,怂一点。

  1. 整体面试流程是怎样的

内推->一面->二面->三面->四面->HR面->口头offer->正式offer->背调->入职

每个阶段耗时一到两周的时间

  1. 微信工作地点

目前微信总部在广州,大部分的组都在广州,其中微信支付在深圳。

  1. 微信考算法多吗

多,基本上就是算法+项目

阿里

笔试

  1. n阶楼梯问题(尾递归的优化[函数最后调用自身可以减少中间变量|化递归为循环去优化]/备忘录优化)
  2. 节流防抖的实现(分析笔试答案时问到,总结差别,说出应用场景)()
  3. 深拷贝(类型考虑/Symbol/Date等的构造/循环优化/共用引用优化等),这里贴2篇文章给大家参考,)
  4. 封装一个只能输入数字的React组件

问答题

  1. 输入URL后发生了什么(
  2. 事件循环说一下()
  3. JS有几种基本类型,分别是什么,与对象的区别(不贴链接了,我认为是前端的都应该知道)
  4. JS 执行过程中是如何保存上下文的(堆和栈,可以看极客时间的《浏览器工作原理》,或者参考我这里,)
  5. 你认为什么是前端
  6. 为什么想来阿里
  7. 最近在看什么书
  8. 微前端了解吗(
  9. 你想成为什么样的人(个人成长规划)
  10. 项目中遇到的最大挑战是什么,如何解决的
  11. node 大量日志怎么处理的(缓冲队列)
  12. http2 的特点(
  13. node 与其他语言有什么区别,其优劣势是什么
  14. csrf 的核心原理()
  15. node 事件循环()
  16. FCP/FMP/FP 分别是怎样定义,如何统计(
  17. MySQL 题目,id 唯一,name 可以重复,求 name 有重复的所有数据
  18. 有没有推动过什么东西
  19. 未来的一个发展是否是全栈,如何规划(可以留意我的直播)
  20. 链路录屏的原理(可以分析rrweb即可,参考例子,
  21. 链路录屏法务问题如何解决(屏蔽关键信息/用户授权等)
  22. FMP 定义及统计,w3c的草案你知道吗(自行谷歌查找)
  23. react 项目的可持续维护性如何体现(自行谷歌查找)
  24. react hooks用过吗,为什么要用(没有专门总结,自行谷歌查找)
  25. h5 和小程序有什么区别(自行谷歌查找)
  26. https加密原理,中间人攻击知道吗(
  27. ng 负载均衡的方式有哪些(
  28. CDN 有什么作用(
  29. 不可变数据里面,immutable,删除数组里面的列表(,
    )
  30. 垃圾回收中,内部函数返给上层的对象是如何管理的
  31. es 静态分析原理()
  32. 有一个很大很大的文件,如何统计文件里面重复最多的行是哪行(参考git的记录存储)

头条

笔试题

一面:

  1. 执行代码求输出,并说明为什么,严格模式下输出有变化吗,为什么
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);
  1. 给定一个升序整型数组[0,1,2,4,5,7,13,15,16],找出其中连续出现的数字区间,输出为["0->2","4->5","7","13","15->16"]
function summaryRanges(arr){
    //TODO
}
  1. 请实现以下的函数,可以批量请求数据,所有的URL地址在urls参数中,同时可以通过 max 参数控制请求的并发度,当所有请求结束之后,需要执行 callback 回调函数。发请求的函数可以直接使用 fetch 即可
function sendRequest(urls: sring[],max:number,callback:()=>void){
    //TODO
}

二面:

  1. 实现一个字符串反转:
    输入:www.toutiao.com.cn
    输出:cn.com.toutiao.www

要求:
1.不使用字符串处理函数
2.空间复杂度尽可能小

  1. 不借助变量,交换两个数。
function swap(a, b) {
    //TODO
}
  1. 观察者模式与发布订阅者区别,并写出其模型

与项目无绝对相关的问答题

  1. vue 事件机制是如何实现的 ()
  2. vue 的组件通信方式有哪些
  3. react fiber 的实现原理 ()
  4. vue 响应式数据原理(vue2/vue3/依赖收集/发布订阅/watcher消息队列控制/Vue.set实现)(
  5. vue 转小程序怎么实现(ast/生命周期对齐/跨平台模块兼容/兼容细节点实现过程)
  6. 性能指标,如何理解TTI,如何统计,与FID有什么区别,如何实现统计,还聊了很多性能的东西(
  7. 说说你所了解的安全问题及防护方法(
  8. 说说你知道的设计模式,并举个对应的模式例子(
  9. 未来规划及学习方法
  10. 你觉得你是怎样拿到京东校招的sp的
  11. 遇到的最大挑战/过去的最大收获分别是什么

我本人的博客/公众号,似乎面试官都看过,都知道我学过什么,知道什么,所以很多我博客上有的东西都没问,甚至我引申到过去,都不让说,有种没机会表现的感觉,哈哈

感受&更多学习资料

其实单看问题,参考性还是比较小的,毕竟面试官主要会根据简历去发问。这里的一个感受就是,项目中遇到的最大挑战,这个问题真不好答,我当时答得也不够好,后面又回去总结了一波项目,建议大家都好好总结一下自己平时遇到的问题,寻根究底。

这部分的题目,我会同步到我的每周N题上,欢迎大家来交流答案啊。想刷题的也可以来,地址如下:

有很多知识点,虽然我没被问到,但是我写了不少文章,感兴趣的话可以关注一下我的博客,地址如下:

更多我觉得比较好的博客,地址如下:

交流

  • 欢迎加我微信(winty230),拉你进技术群,长期交流学习...
  • 欢迎关注「前端Q」,认真学前端,做个专业的技术人...

原文:https://www.cnblogs.com/LuckyWinty/p/13124480.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐