我是如何拿到百度美团的offer的

403 阅读12分钟

  春招已经结束了,从三月初到到四月中,陆陆续续笔试面试了将近一个半月,也拿到了许多offer,现在来一发迟到但是热乎的面筋……

  从二月底开始投,然后慢慢开始从笔试到面试,基本投了的90%都有笔试或者面试,可能是学校带给我的优势吧,毕竟说实话我的简历确实有点拉闸,被吐槽了好多次,面试官和朋友以及同行都吐槽过我的简历……笔试好像除了滴滴没过,其他公司都过了;面试的话好像投了的基本都给机会面试了,除了一两家(可能是我不配),这里另外吐槽一下赛码网笔试是真的难用。

下面说一下我面试过程中遇到过的问题吧!

  1. JavaScript部分
    • 作用域:let、const的块作用域,暂时性死区?var的函数作用域、变量提升、静态作用域动态作用域、作用域链、
    • 原型链:定义?这里被问到了查找对象上的属性过程,for in遍历会不会遍历原型链(会),如果不想遍历用什么方式obj.hasOwnProperty(key),继承
    • 执行上下文?(作用域和执行上下文两个好好看一下,创建过程,函数定义创建啥,执行时创建啥?分别做了什么事情?)
    • 闭包:什么是闭包?闭包的原理是什么?闭包的应用场景?如何清除?内存泄漏?V8的垃圾回收?(反正扩展就完事了,背八股)
    • 垃圾回收:如何避免内存泄漏?知道weapMap/weakSet吗?什么是弱引用?
    • 定时器的回调函数什么时候执行,定时器的时间一定是准确的吗?怎么解决不准时?
    • ES6:暂时性死区?箭头函数的缺点?Proxy和defineProperty对比,哪个性能更好?
    • 异步:事件循环(浏览器和Node事件循环的区别)、Promise(这里每次都问,问的很多,可能让你看代码输出,也可能让你手写个方法,比如Promise.all()、Promise.race()等……)?
    • async/await:这里单独把这个拿出来说是因为被问到也挺多的,首先就是和promise结合看输出,另一个就是问原理,generator生成器,await原理,另外刚才那个箭头函数可不可以定义为generator函数?
    • 回调地狱,链式调用巴拉巴拉……
    • for循环和for-of遍历数组的区别,性能对比?
    • 伪数组?怎么转换为真实数组?多来几种方法
  2. HTML、CSS部分
    • 语义化?SEO?SPA?PWA?SSR?CSR?
    • 盒模型,给一段css让你看盒子的大小
    • flex布局?会让你写布局,也会让你看弹性盒子大小、flex布局原理
    • grid布局,这里被问了一次吧好像
    • BFC:原理?应用场景?margin重叠?
    • 居中方式,水平垂直居中,越多越好
  3. VueJS
    • 生命周期?重要的就是createdmounted,就是获取vue实例和获取dom,对了还有一个被问到父子组件的生命周期是怎么样的?跳转到其他页面如果让原来的页面组件不销毁?知道组件缓存吗?actived?
    • vue-router原理?hash模式和history模式的区别,分别的实现原理?就离谱,字节面试的时候让我手撸一个vue-router……我直接好家伙
    • vuex:vue状态管理器,说一下作用,然后就会顺着引出组件传值,巴拉巴拉……然后问mapState和this.$store.state获取值的区别,vuex里的值是保存在哪里的?(内存,所以刷新页面就消失了)
    • 说一下通过ref获取dom和原生方法获取dom的区别?
    • MVVM?MVC?
    • 双向数据绑定原理?defineProperty绑定的缺陷?怎么解决?数组下标修改怎么办?怎么劫持数组?然后收一下vue3的proxy,如果多问点可能会问Reflect……
    • Virtual Dom,说一下虚拟dom,有什么好处?虚拟dom的缺点是什么?怎么挂载的?这里会被问到this.$nextTick,实现原理,然后又扯到事件循环,然后又问深了,浏览器刷新每次都重新渲染吗?可不可以不渲染?
    • Diff算法:vue-for中key值的作用是什么?key值可以是哪些类型?可以是object吗?是如何保存的?这里又扯回es6了map/weakmap……然后就问到diff算法,巴拉巴拉,新旧节点如何比较,层级比较巴拉巴拉……
  4. webpack
    • webpack的打包构建过程?
    • 如何设计一个loader?
    • 如何设计一个plugin?
    • 常用的loader,常用的plugin?
  5. 计网
    • http缓存?强制缓存协商缓存?区别?强缓存的状态码是什么?(200)和普通的200有什么区别?缓存都保存在什么位置?(memory、disk)巴拉巴拉……expires的缺陷?last-modified的缺陷?

    • 经典问题:输入url(关键词)到展示页面发生什么?

    • 常用的http请求方法?

    • 常见的http状态码?

    • 跨域?跨域的原因?同源策略?怎么解决跨域?

      • jsonp需要后端配置吗?怎么配置?
      • cores的原理?有哪些相关字段?acess-control-allow-credentials这个字段是干什么的?这里会问到csrf攻击、options预检请求做了什么?什么时候会触发预检请求?
      • nginx反向代理?
      • webpack devServer跨域的原理是什么?生产环境可以用吗?
      • iframe?postMessage?
      • websocket?
    • xss攻击?

    • csrf攻击?

    • 安全这部分不能简单背八股,腾讯和跟谁学面试的时候我被好好上了一课,反正好好仔细研究一下,不能简单背

      另外就是一些八股

      • OSI七层网络模型,TCP/IP模型
      • 各个层做了什么?分别有哪些协议?为什么要分层?
      • 全双工是什么?
      • TCP和UDP的区别是什么?
      • 有些奇葩公司会问端口号和协议号,TCP和UDP的协议号,还有一些应用层协议的协议号,STMP、Telnet、DNS、FTP端口号……(秋招的时候被问了一次,春招没有被问)
      • 三次握手,四次挥手(这里扩展的题有些,比如为啥要握手三次,两次会怎么样?挥手为啥要四次,三次不行吗?最后为啥要等待2msl?)
      • HTTPS握手?(反正这个里面东西也贼多,对称加密非对称加密、怎么生成最后的密钥?客户端怎么验证证书的安全?)
      • HTTP和HTTPS对比,HTTPS耗时主要是哪部分耗时?(SSL握手和对内容的加密,因为最后的其实还是http,但是需要对内容加密,这个加密耗时和最开始的ssl握手耗时)
      • HTTP0.9--HTTP3,背就完事了,
        • 长连接keep-alive?
        • 队头堵塞?
        • 一个域名最大连接数?
        • HTTP2.0新特性?(重点说一下二进制分帧和多路复用)
        • HTTP3的下层协议是UDP如何保障可靠的,巴拉巴拉
      • TCP如何保障可靠传输?(这里好好去看看,重传是怎么做的?流量控制怎么做的?滑动窗口是什么?慢启动是什么?快速恢复……说简单也简单但是挺多的)
  6. 操作系统

    操作系统部门其实问的有点少,就那么点

    • 进程和线程的区别?JavaScript为什么是单线程的?
    • 进程通信方法?
    • 调度算法有哪些?
  7. 数据结构
    • 有哪些常用的数据结构?
    • 满二叉树?完全二叉树?
    • 数组和链表的区别?存储方式?查找速度、增删速度对比?
    • 堆和栈的区别?平衡二叉树?堆排序?
    • 图?不记得了有一家笔试的时候让我求图最短路径?Dijkstra迪杰斯特拉算法,心态直接炸裂
    • 另外的就是一些八股,而且数据结构通常体现在算法题里面……
  8. 算法
    • 链表

      • 反转链表
      • 链表排序
      • 判断链表是否有环
      • 合并链表(2个和n个,其实原理差不多)
      • 删除(找到)链表的倒数第k个节点
    • 二叉树

      • 前序后序中序遍历
      • 层次遍历,(两种,一种是全部放到一个数组里返回,另一种需要每一层单独放到一个数组,最后再全部返回)
      • 之字形遍历
      • 二叉树深度
      • 判断平衡二叉树
      • 是否存在权值为n的路径
      • 重建二叉树
    • 多叉树

      • 是否存在一条m-n的路径,输出这条路径(这题笔试了一次,面试也手写了一次)
      • 多叉树遍历?深度优先广度优先
      • 最短路径
      • 遍历
    • 数组字符串

      数组和字符串相关的其实是最多的,也很常见,而且数组和字符串其实可以相互转化,所以很多题重复的

      • 首先肯定是排序,常见的得会手写,选择插入冒泡必须会,另外就是快排必须得会手写,我当时还被问到js的sort排序是怎么实现的复杂度是多少?

      • 斐波那契数列?最优的版本是O(n)时间,O(1)空间

      • 数组去重,多来几个方法,es6的set用起来,这里会结合排序,数组去重后排序

      • 反转字符串

      • 比较版本号

      • 进制转换

      • 合并有序数组?O(n)复杂度

      • 洗牌算法?

      • 统计字符串(数组)中出现次数最多的字符(数字)?

      • 统计dom中出现次数最多的标签?

      • 设计LRU缓存结构?

      • 有序矩阵搜索?

      • 合并区间(猿辅导)

      • dom转换,将一个虚拟dom(对象)转换为dom结构或者dom结构转为对象(json)

      • 大数相加

      • 括号是否匹配?用个栈就ok了

      • O(n)两数之和

      • 最长递增子序列

      • 无重复序列的最长子串(这里其实有两个,一个是求长度,一个是求子串,看好题目,我字节面试的时候就搞错了)

      • 数组的最大累加和

      • 最长回文子串

      • 买卖股票的最佳时机

      • 打家劫舍


      • call、apply、bind?

      • instanceof、new?

      • 节流和防抖?

      • 手写完整的promise倒是没有遇到,但是很多方法,all、race、any

      • 日期格式化?正则?正则当时被问到贪婪匹配和非贪婪匹配

      • 组合继承继承

      • 数组拍平(虾皮笔试的时候贼恶心,ACM模式给个数组拍平的笔试题,兄弟们想象一下……)

      • 数字千分位展示、保留小数、保留小数后千分位

      • 深拷贝?

      • reduce实现map?(这里其实八股看一下,reduce实现其他函数,有好多的)

  9. 其他面试题
    • 二维码扫码登录原理?

    • 页面监控?埋点?

    • 一个网站的性能有哪些指标衡量?

    • 前端工程化?

    • 大前端方向?

    • 前端业内新技术有关注吗?

    • 怎么学习前端?为啥选择前端?(开放性问题)

    • 如何查看一个网页的加载时间?performance

    • cookie和session?

    • 浏览器存储,sessionStorage和loacalStorage的区别,存储大小?当满了怎么办?会报错吗?如果继续存储怎么办?淘汰算法怎么设计?

    • cookie会跨域吗?怎么让他跨域?然后又扯到网络安全上去了……

    • 性能优化?(其实这个题我个人理解是从上面那个题(url到页面展示)顺着说就完事了)

      • cdn原理?
      • 如何实现缓存?前端和后端分别怎么做?
      • 哪些情况防抖节流?
      • 回流和重绘的区别,怎么减少?
      • async/defer?
  10. 总结

  整个过程还是非常漫长的,持续了一个多月,最多的时候一天三四场面试,而且面试的时候在宿舍,舍友在的时候一度很尴尬,而且自我介绍真的说吐了,基本每次都一样,说了估计至少五六十次吧,甚至我舍友都能背我的自我介绍了……阿西

  但是最后的结果我觉得还行,至少拿到了几个我满意的offer,最可惜的是腾讯的面试因为百度面试冲突被迫放弃了,主要当时不知道百度是连续面试的直接一天面试完。阿里没投,京东拼多多和网易没笔试,京东和拼多多实在太晚了,那个时候已经快结束了,滴滴笔试没过(吐槽赛码网的ACM模式,真的拉跨),小米就纯粹简历没过还是什么原因,测评之后就没有结果了,其他的好多因为时间冲突或者其他原因放弃了很多笔试和面试。

  说一下最后拿到offer的吧:百度、美团、好未来、跟谁学、猿辅导、携程、龙湖、OPPO……还有一些其他就不说了,有些是银行子公司,有些是一些小厂。当时还作死了一波,有好几个offer本来能拿到的(中小厂),但是因为那个时候有几个很不错的offer了,所以我hr面试的时候要了好高的薪资,然后hr直接把我挂了……

  整个春招过程中其实一开始没有保底的时候每次都慌的不行,但是慢慢的随着面试尤其是有了保底offer的时候都成老油条了,都不想复习了,面试前面5分钟可能都还在床上躺着,到面试前两三分钟才爬下来进入面试聊天室,简直了……

  还有很多很多已经不记得了,一直没有录音,全靠印象写了上面那些,所以各位大佬勉强看一下吧……

  一面其实基本都是基础八股文,随便问一点,然后问问简历上的项目,然后写一两个题看看输出就过了,二面三面的话就开始问一些原理性的东西,开始深挖项目,反正直接问到你说不出话来为止,估计面试官就喜欢这个调调……

  吐槽一下:面试过程中千万不要去刷脉脉!!!最后全部结束的时候选择offer的时候可以去脉脉上看一下,让大家给点建议,但是呢建议选择性的看,因为脉脉整体风向就是所有公司都是垃圾,脉脉上就没有一家能去的公司………………