这个冬天(互联网寒冬)对很多前端er来说是难过的,经济不景气,各大公司纷纷停止初级人员的招聘。然而灾难却不止如此,很多公司为了节约过冬成本,纷纷开启裁员模式。很不幸,作为应届生的我,在一瞬间感受到了公司的冷漠无情。

被裁的第一个周末,几个大佬们一起坐了坐,纷纷表示愿意帮我内推,于是开启了我的面试之旅。我花了三周时间,大概面了有15家公司,这些公司有大有小,有国企也有互联网,我将捡一些我个人感觉还不错的公司对大家进行一个分享,希望能对迫于寒冬裁员浪潮下的小伙伴有一些帮助。

1.Unicareer

这是一家做职业教育的公司。面试就一轮直接就是CTO面试,CTO很年轻,很帅,很有能力,主要问了这些问题:

  • 浏览器同源策略及跨域相关
  • 简单介绍下ES6的promise
  • React中的虚拟dom原理
  • 函数闭包与柯里化(让手写一个函数完成求和操作,func(1)(2)(3)、func(1,2)(3)和func(1,2,3)都能保证可以正常求和)
  • 地址栏输入url后做了那些操作
  • 事件捕获冒泡(两个div,父级包裹子级,分别有click事件,点击子级先触发哪个,如何修改触发顺序)
  • dom的重绘与重排
  • 数组去重的多种方法实现
  • Array.reduce方法怎么使用

由于是第一家面试,也没有做足充分准备,上面这些题我基本都没有答上来,他家的HR很负责,就算你没有通过也会告诉你结果。

2. 跟谁学

同样是一家做教育的公司,这家公司秋招的时候投过,但是一只没有去面试,直接微信联系的HR。由于我比较菜,面试同样只进行了一轮,主要问了这些问题:

  • CSS实现一个围绕y轴旋转的动画效果
  • CSS transform了解多少
  • 数组的所有方法是否有返回值,返回值是什么,会不会改变原数组,会不会返回一个新的数组(当时已懵逼,意识到自己不能在吃老本了,面试结束后就找个篇文章恶补了一下)
  • Array.map、Array.forEach和for循环区别
  • Vue的指令用过哪些
  • 跨域如何处理
  • Array.reduce实现一个对象数组的去重操作([{key: 'a', value: 1}, {key: 'a', value: 2}, {key: 'b', value: 3}]返回[{key: 'a', value: 1}, {key: 'b', value: 2}]相当于key值一样的只保留一个)
  • canvas了解多少(基本不了解)
  • web性能优化

上来的动画效果我没有写出来,数组的各种方法又把我搞懵逼,整个面试不超过半小时就GG了。

3. 老虎证券

美港股证券公司,财大气粗,去年秋招的时候面过,当时还拒了。通过BOSS直聘联系约面。同样一面跪,主要问了这些问题:

  • var、let、const区别(这个区别我竟然真的不知道,下来后把阮一峰的书好好翻了一遍)
  • 块级作用域主要解决什么问题(同样翻阮一峰的书)
  • 闭包相关(特别经典的for循环有setTimeout那道题,以及如何改成想要的结果)
  • this指向(参考你不知道的JS上卷)
  • CSS margin重叠问题怎么解决(当时还不知道BFC这个是怎么用的,用于处理什么问题)
  • 解构赋值和函数默认值一起来问(阮一峰的书有个很经典的例子)
  • Object.create是怎么实现的(红宝书原型式继承有讲)
  • 手写快排
  • 手写一个多列等高布局
  • http状态码

面试发挥的很差,不过面试官小姐姐特别有耐心,聊了两个多小时,基本上全程教我写代码,最后斗胆要了下小姐姐微信,这次面试失败对我打击很大,让我严重意识到了自己的不足。正好是个周五,基本上通宵看完阮一峰的ES6那本书。

4. 快手

南抖音北快手,虽然我不玩,在网上查了一下面经,据说这家公司超级难。面试先做笔试题,还好之前有准备,两道题没做出来,一道是利用localStorage根据请求响应头做一个浏览器缓存的插件,一个是返回给定字符串的全排列结果。一面主要问了这些:

  • display: block、display: inline和display: inline-block的区别
  • CSS水平垂直居中
  • CSS画一个三角形
  • flex-basis这个属性是干嘛的(回答的很差)
  • CSS多列等高布局,要求取内容最多的高度
  • call、apply和bind区别
  • 手写bind(没写出来,大概说了下思路)
  • JS继承每种方式的优缺点
  • Vue computed的实现原理
  • Vue生命周期
  • Vuex怎么使用
  • webpack了解多少
  • 手写快排

一面确实有些东西不知道,不过一面小哥说会有二面的,顺便蹭了个饭,快手的饭挺好吃的。二面是个秃顶小哥,主要问了这些:

  • 扩展运算符和rest参数怎么理解
  • 扩展运算符在ES5中怎么实现(这个有印象,但是没写出来,后来被说基础太差了)
  • flex布局(父元素宽度300px,两个子元素,一个是flex: 1 0 100px,另一个是flex: 2 0 100px,问页面展示是什么样子的)
  • React和Vue的区别
  • React的虚拟dom怎么理解
  • Redux怎么使用(没用过)
  • 手写promise(完全不会)
  • http与https的区别
  • 浏览器不同页面怎么通信(答曰localStorage,面试官不满意)

二面还是暴露了些问题的,等了半小时,二面小哥告诉我技术栈不符合,培养成本较高,还让我好好看下ES6的代码转成ES5后的结果。虽然被拒了,不过也没那么伤心,面试前安慰自己能撑过一轮就是赚了。

5. 百度

百度是百度网盘部门,不在百度大楼,在鹏寰大厦。去年校招也收到百度面试,不过因能力问题没有敢去。一面是个小姐姐,主要问了这些问题:

  • 浏览器输入url到渲染页面做了什么工作(我不到1分钟说完了,小姐姐说你可以说的再细一点吗,然后引导我,我表示全程懵逼,原来还可以这么细,第一题就聊了半个多小时,当时已经没心情回答后面的了)
  • CSS水平垂直居中
  • CSS清除浮动
  • CSS实现一个简单动画
  • JS继承相关及优缺点
  • http缓存
  • cookie、sessionStorage和localStorage的区别

一面面到这里心里凉了半截,已经做好回家复习的准备了,小姐姐说暂时联系不到二面,要不让我回家等通知。绝望中走了1公里,接到电话说可以面一下二面,遂小跑回去等待二面。二面是个小哥,他老婆竟然是我上家同事,二面主要问了这些问题:

  • 线性表、链表、二叉树、图的算法了解多少(卧槽我一个都不知道,小哥满脸尴尬……)
  • http和https了解多少,通信时的加密情况
  • Vue的生命周期
  • Vue的双向数据绑定实现原理(不会,虽然之前被问到过)
  • 设计模式了解多少(吹了一波观察者模式,结果漏洞百出)
  • 如何创建BFC

二面后来跟小哥坦白了,数据结构很多都忘了,说了很多自己学习技术上的事。小哥选择给了个友情三面。

三面是百度网盘的负责人,是个女的,感觉之前在哪里见过,技术的东西没有聊,聊了很多前端学习路线上的事,针对我的离职原因教育了我一番(我不是说的裁员),并表明评级不到t4,社招是没有t4+以下的hc的,让我再努努力,希望下次再来面百度的时候可以收获offer。在这里还是感谢下百度的三位面试官,确实我和他们的差距不是一般的大。尤其一面的小姐姐,就一道题让我学到了很多很多,也为我后面遇到类似题目埋下伏笔。

6. 贝壳金服(理房通)

给贝壳做支付的,金融公司,财大气粗。自己在boss上联系的,抱着试试看的心态来面试的。他家面试一共5轮,2轮技术,1轮合伙人,1轮HR,最后又来了1轮电话技术面。一面直接让看一套笔试题,然后告诉他答案,此外还问了这些问题:

  • CSS水平垂直居中
  • 怎么创建BFC及其解决问题(前面面过)
  • 清除浮动
  • 深拷贝当遇到引用类型为Function时怎么办(当时懵逼了,不记得有问Function的,一般都是问Array或Object,答案是直接浅拷贝Function即可)
  • this指向
  • React的componentWillMount和componentDidMount有啥区别(React我不知道,给他介绍了下Vue)
  • React的key是用来干嘛的(同不知道,猜测跟Vue是一样的功能)
  • Redux怎么使用(同不知道,吹了下Vuex)
  • 平时开发时git操作流程

一面虽然有些React的东西不知道,但是面试官还是给了二面。二面是个架构,问的东西基本全是网络相关,具体如下:

  • http和https的区别
  • http缓存
  • tcp和udp的区别(这个不知道)
  • linux命令了解多少
  • 项目部署发布流程

二面的面试官不太懂前端,我也不太懂网络,不过跟他说了说我项目中的一些优化操作,还是给了后面的面试。隔了3天接到电话说还有一轮电话面试,电话面试主要问了这些问题:

  • Vuex怎么使用
  • 深拷贝遇到死循环怎么办(a对象有b,b对象又有a,当时回答不太好)
  • rem、em和px的区别
  • CSS实现多列等高布局
  • 怎么理解mvvm

除了死循环那个,别的回答的都不错,也是第二天就接到了offer,第一个offer,内心感慨:找工作真难啊。

7. 蛋壳公寓

长租公寓,我现在住的就是蛋壳公寓。公司HR统一内推的,技术面一共三轮。一面主要问了这些问题:

  • 跨域解决方案
  • CSS水平垂直居中
  • 清除浮动

一面小哥很年轻,问的东西也比较少,聊项目偏多。二面来个大叔,气场十足,主要问了这些:

  • JS继承
  • Promise使用方法
  • Vue生命周期
  • Vue组件通信
  • VueRouter的histroy模式和hash模式的区别

二面问的东西偏实际了一些,二面透露他们的项目有Vue和JQuery混搭的风格。三面是个领导,隔了三四天约的三面,主要问了这些:

  • http性能优化
  • http缓存相关

其余的都在问个人平时怎么学习的,感觉蛋壳面试相对轻松,可能是因为工作经验的关系,并没有给我发offer。

8. 一点资讯

看新闻的平台,跟头条类似。之前约面放过HR鸽子,电话解释了半天,同意再给个机会,技术面3轮,1轮HR面。一面小哥胖乎乎萌萌哒,主要问了这些问题:

  • html5语义化标签的好处
  • 用语义化标签手写一个导航栏布局(语义化标签忘了,用ul、li实现,被小哥说了很多细节上的问题,确实后台代码写多了,不会去注意这些)
  • CSS垂直居中
  • CSS实现文本三个点(知道有3个属性控制,但是忘了其中一个)
  • CSS实现一个带小尾巴的对话框(之前研究过类似的,用伪元素好一些)
  • 数组去重的多种方法实现
  • v-if与v-show的区别(这几天的面试中第一次问)
  • 手写快排

一面我还可以hold住,万万没想到的是二面。二面小哥比一面小哥看上去还年轻,主要问了这些问题:

  • 动态规划计算从左上角到右下角数组路线中和最少的一条(直接放弃,跟小哥说思路,小哥说有思路就能写代码)
  • 手写bind(之前看过视频,但是一紧张忘光了,我写了4遍吧,每次小哥都说能不能写好看一点,或者说有语法错误,后来放弃,被小哥疯狂针对)
  • call、apply和bind的区别
  • this指向(还是注意箭头函数)
  • 手写class经过babel编译成ES5的代码(还要考虑静态类,静态方法,小哥说可以不考虑这些,写了一版,被说有错误)
  • 手写Object.create(我按照书上写的,结果还说不对)
  • 手写节流防抖(同样跟小哥说思路,小哥说有思路就能写代码,后来瞎写的,让小哥教我写了个防抖)
  • 手写冒泡排序
  • 手写快排(我说一面写过了,问我有没有可优化的地方,没想出来)
  • http缓存相关
  • 怎么精确获取一个div的位置(我就知道这一个,之前做过拖拽,吹了一会,结果小哥说你的方法不太好,尴尬。。。)

二面快结束的时候,我就问小哥,你们到底要啥样的人,小哥说啥都要,他说简单的同事之前跟他反映过了,他就不问了,他同意有三面,我很诧异,直接问他啥都不会都能有三面吗?小哥答曰:还可以吧。三面来了个领导,跟他闲聊直接问起我上家公司的领导,套了套近乎,不过面试起来还是比较犀利的:

  • 手写插入排序(一言不合就手写,还好我之前在公司分享过)
  • 手写归并排序(这个太长了,记不住,说了下思路,面试官表示理解了)
  • Vue封装组件的流程

其他的基本就是在聊一些项目中的优化问题,简单说了下我这边都是通过减少请求对其进行优化。本来想放弃,没想到让我等下HR面,HR面多夸了夸这几位面试官和公司环境,说了下自己确实能力还不够,还有待提高,并再一次对之前约面放鸽子事件表示抱歉。没想要HR竟然主动加我微信,两天后的周四,跟我说同意发放offer,我欣喜若狂。

9. 用友

做ERP起家,老牌软件公司。被分到了用友医疗这个子部门,技术面就一轮,主要问了这些问题:

  • CSS盒模型及盒模型通过什么属性切换
  • CSS水平垂直居中
  • CSS3新特性用过哪些
  • JS基本数据类型
  • 怎么区分Array和Object
  • 深浅拷贝怎么实现
  • 对于闭包的理解
  • get和post请求区别
  • cookie、sessionStorage和localStorage区别
  • http状态码
  • 同源策略及跨域的理解
  • webpack中跟css有关的loader怎么配置(这个没实际配过,确实不知道)

整体面试难度不大,应该是这里面最轻松的一个。用友的饭真好吃(老板~再来碗米饭)。

10. VIPKID

在线少儿英语教学(我面的教育类公司好多),被不知道哪个猎头给内推了下,面了两面。说是会在下周安排三面。一面主要问了这些问题:

  • JS基本数据类型
  • transform: translateZ(0)有什么好处(头条的笔试题看过这个,说是可以GPU加速,提高浏览器渲染性能,具体原理不懂)
  • H5的video标签的一些api方法
  • 跨域怎么理解
  • 用过哪些ES6的数组的方法(一问这个就会考你ES5怎么实现)
  • Vue组件通信
  • canvas了解多少(不了解)

一面小哥很可爱,问的问题也不是很多,直接进入二面。二面主要问了这些:

  • this指向(出了一道跟箭头函数相关的题,小心陷阱)
  • Array.reduce怎么使用
  • CSS 垂直居中的几种方法
  • 原生JS实现轮播图(若干年前写过一个,说了下思路,把所有的图拼成一个图,通过margin去改变图在窗口显示的位置,小哥提到最后一张图的时候怎么切换,答曰把第一张图在最后一张图后面再放一遍,建议大家手写下,这个解决方案是可行的)
  • 介绍下http缓存(着重问了下协商缓存,配合着304状态码问)
  • http 3xx状态码
  • web性能优化
  • Promise.all用法
  • Promise和async await区别
  • async await底层实现是什么原理
  • Generator每一步的返回结果是什么(以上4题层层逼近,由浅入深)

二面小哥告诉我三面负责人旅游去了,让我准备下三面。整个面试过程一个半小时左右,聊得比较开心,技术栈是Vue,也比较对口。

总结

可能是我工作经验不够的原因,面试还是更侧重基础的东西多一些,JS继承、闭包、this指向基本哪家都会考,手写bind、promise、节流防抖函数也有一些公司会考,还会考一些ES6的新特性经过babel编译成ES5的结果(这个真是吃了大亏),CSS水平垂直居中、多列等高布局、清除浮动考的很多。此外框架的生命周期函数、双向数据绑定原理考得很多,http则主要考察缓存相关的知识。

三周面下来,最大的感触就是累。面试是真的累,身体累,心也累。一天要跑2-3家,最多的一天跑了100里路。每天复习到深夜,越复习发现不会的越多。同事们收到offer后,自己也着急,有的都已经入职了,我还在东跑西跑。不过还好功夫不负有心人吧,拿的这两个offer自己也比较满意。希望这篇水文可以帮助更多在寒冬中迷失的前端er早日找到理想的归宿。