前言
简单说一下自己的背景
- 18年毕业于南京某工业大学,工业工程专业
- 跨考浙大计算机失败,完全没有准备校招,彻底拉跨
- 焦虑异常,遂从去年8月份开始通过网络学习前端知识,直到1月份开始找工作,进入了一家线下教育机构,担任前端开发,制作类似于慕课网的线上平台,后由于通勤时间太长(来回4个小时),跳槽至离家不远的一所公司,制作智能工业方面的前端页面
最近因为种种原因,想换个环境,于是开始找工作,把简历重新写一写,然后通过掘金沸点的内推和BOSS直聘,陆陆续续投了十几家,结果,只有帆软和头条的面试。。。真的感觉好尴尬,不过不谈其他的,就讲讲头条的失败经历吧。
面试过程
第一轮视频面
一开始定了5点半的面试时间,结果5点15面试间就开了,倒让我有些猝不及防。面试官是个小姐姐,年纪应该也不大,估计跟我差不多,但想想人家这个年纪已经开始面试候选人了,我还在想着怎么获得一个面试的机会,还是有点后悔的,假如考研成功,假如校招就能来面头条,肯定会是一个崭新的局面。所以还是要早点努力啊,努力的越早结果才会越好。下面写下流程:
-
自我介绍
一开始还是有点紧张,磕磕绊绊地讲了一下自己的经历,不过面试官应该也不是很感兴趣,就直接开始问问题了。
-
盒模型
这个问题比较基础,我就回答了盒模型的标准模式和怪异模式,然后又具体讲了相关的属性名,之后还给了一道题目,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .box { width: 10px; height: 10px; border: 1px solid #000; padding: 2px; margin: 2px; background: blue; } #box1 { box-sizing: border-box; } #box2 { box-sizing: content-box; } </style> </head> <body> <div id="box1" class="box"></div> <div id="box2" class="box"></div> </body> </html>问这两个盒子的蓝色区域高度是多少。这个时候我还没缓过神,回答了几次都没考虑清楚,还好面试官不时提出反问,我才彻底想明白。
-
垂直居中怎么做
这里就是回答了几个常见的作法,flex,绝对定位,然后面试官根据我的回答继续问,比如flex的align-items有几个属性,分别是什么作用,然后绝对定位的top, transform的尺寸都是根据什么计算的,总体来说还是面的比较细的。
-
js的数据类型
这边首先是问了js有多少种数据类型,然后问typeof的用法,然后又扩展到有几种判断数据类型的方式,我回答了Object.prototype.string,然后在面试官的暗示下,又想到instanceof也可以,到这就基本上答完了。
-
url从输入到渲染完成发生了什么。
这题非常经典,其实我今天才刚研究过,就直接开始讲了,从dns到TCP到http到渲染树,每一个都稍微讲了一些细节,结果讲完之后,面试官好像关注的不在这些上面,而是开始询问页面渲染的细节,于是我又开始讲dom树和cssom树合并成渲染树,但好像还是没达到面试官的要求,于是她又出了道题:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="a.css"> <script src="a.js"></script> </head> <body> <script src="b.js"></script> </body> </html>问这个html文件是怎么执行的。这个问题还真难住我了,因为我从开始学就很少会去写纯html文件,都是在用框架,所以反而对这种写法不熟悉,然后胡乱地答了些,面试官再次使出绝技:无情反问。于是我开始从浏览器内部线程地角度去考虑,回答先加载script并顺序执行,然后dom树和css树去获取css文件并渲染,其实答得问题挺大的,但面试官到此也就没继续问了。
-
写一个函数获取最长无重复字串
这算是来了道算法题吧,不过我看到后还是挺开心的,因为可以用动态规划做,其实几种算法思想,我也就对动态规划熟悉一点,然后就直接马不停蹄地开写了,一波直接写完,还在肉眼debug的时候,面试官看我写完了,就开始问我细节问题,这个时候我还算讲的比较自信的,但说的和想的总是不一样,写的时候感觉思路非常清晰,但说出来就感觉自己像个弱智,说了好几遍,面试官也没太听懂,那咋办呢,再给个字符串测试一下吧。测试下来没问题,好,那就算通过了。
-
有什么要问的
到这里其实我还真不知道问什么,毕竟才第一轮,所以也没说什么,面试官就跟我说,他去给主管汇报一下,等10分钟。
第二轮视频面
等了10分钟左右,面试间再次开通,我以为是来说一下面试结果,结果主管来了,说直接开始下一轮面试。我????然后就直接开始了。
-
用ruduce实现map
这第一道题就给我整懵了,我倒是之前用forEach实现过,但ruduce还真没试过,于是想了半天,面试官也一直在给我提示,但我确实是愣住了,怎么都想不出来,其实现在再思考一下,基本思路还是有的,但当时真就是没思路,确实面试遇到没遇见过的东西,下意识就开始慌了,最后只能无奈放弃,然后面试官说,看你简历上写的熟悉es5,es6,但好像还不是很熟练,我只能尴尬的笑,心里感叹,给自己挖坑了。
-
写一个render方法
JS编码实现一个render方法,使得可以这样调用,例如: const year = '2017'; const month = '09'; const day = '21'; const str = render('${year}-${month}-${day}'); console.log(str); // 输出 2017-09-21这时候我还是懵圈状态,然后也没有思路,面试官倒是一直再提醒我,可惜我不争气啊,搞来搞去搞不定,最后还是只能放弃。
-
一个常规的异步问题
这个算是唯一一个我能回答的问题了,结果async的用法记岔了,还是错了几个,这是最难受的,其实之前异步问题我已经蛮自信的了,所以这次面试完全没有去复习这方面的内容,结果太长时间没看就中招了,这个问题答错是我对自己最不满意的地方,前两个问题不会还情有可原,这个问题答错真是活该被刷。
-
尾声
到了这一步,面试官应该也对我上一个问题没答出来接受不了,直接就说我不契合他们的工作,并且直言我的基础还要再补一补,确实如此,其实我准备了挺多框架相关的知识,但完全没机会被问到,就倒在了js的基础上。之后面试官很和善地开始跟我交流面试的情况,提到了我的问题所在,我也就乘机问了一些让我很困惑地问题,最后我们互相加了微信,面试就这样“愉快”地结束了。
总结
这次面试对我的触动还是蛮大的,也因此,在结束后我立刻写下了这篇失败感言,实际上,从整体来看,题目算很难吗?我觉得远远谈不上,至少和掘金上其他大佬面试时见到的题目一比,我这个就是小菜,但就是这样的一些基础题,我却没有全部回答到位,这里面很值得深思。我真的要好好想一想,我的js基础是不是像我认为的那样熟练了。真正扎实的基础,是值得被给予机会的。
相信有缘看到我这篇文章的人,会觉得自己可以稳稳通过,但还是不要太乐观,因为我也问了面试官,其实面试题的难度是跟你的工作经验有关的,就是因为我的经验比较少,所以才都是基础题,不过如果有和我经历相似的人,倒是可以去尝试一下,也未尝不是个机会。
总之,这次面试,让我对于大厂有了进一步的认识,至少他们不再是遥不可及,只要我稳扎稳打,一步一个脚印,说不定半年后,我就可以写一篇新的文章《面试分享:一年经验面试头条的成功经历》。
最后,如果大家有什么内推机会的话,希望能带带我。。。