历经两个月20应届社招终于结束了,今天主要分享一下走社招的个人成长经验总结,首先做一个自我介绍。
本人双非本科学历(省内叫“二本”,省外叫“三本”),今年2020应届毕业生,四级考了三次未过。大学做过省内的软件比赛,省赛感觉对就业没啥用,大二做移动端 Android 开发,大三开始转到前端,从零自学前端不到一年半,在二线城市有四个月的实习经历。
由于学校环境因素,错过春招和秋招,校招完全错过,不对,好像这野鸡大学没有校招吧,所以凭着运气想走走社招,看看社招的水深不深。
由于学历限制,社招要想约到面试很难,即便你很强,但是大部分好的公司为了减少招聘筛选范围成本,简历大概率会被pass 掉。社招和校招给我最大的差距就是,公司能不能给你一个面试展现自我的机会。
社招总共面了 6 家,5 家自己海投,1 家内推。5 家拿到 offer,最后选择了内推的那一家。
下面是个人社招面经,小鹿可以保证所有经历和总结的真实性和现实性。由于每个人的技术水平和成长经历不同,不敢保证一定对你有所帮助。
6 个面试中其他 4 个面试内容相对于简单或趋近于正常水平,其余两个有点挑战性。
笔试题如下(其中一家,另一家忘记了):
一般笔试通过后,会进行线上视频或者与电话语音面试,前两个公司大多数问是一些前端简单基础问题和实际项目。
自我介绍
平常项目用什么来布局?给你两个 div 嵌套,有几种方式实现垂直居中?(大约说了四五种)
如何实现两边固定,中间自适应布局?(双飞翼或者圣杯)
各自有什么区别?都是如何实现的?
Flex 布局又是如何实现上述效果的?
数组的常用方法有哪些?(ES5、ES6中)
闭包了解不,说说什么是闭包?
闭包的作用(保护、保存)
应用场景?你在项目中分别应用到哪些地方?(选项卡、团队合作)
HTML 中 input 中 type 属性有几种?(当时说了三种,其他忘记了)
flex 布局中,你经常使用的属性有哪些?
浏览器到页面呈现经过了哪些过程?(DNS、TCP三次握手、构建 DOM、构建 CSSOM 树、合成渲染树、渲染绘制,如果放开说,能说半个小时到一个小时)
说说你看过的 Vue 源码内容。(从双向绑定到依赖收集再到批量异步更新,吧啦吧啦说了一大些)
开源项目后台 java 自己写的吗?(数据库用到的是 mysql,服务器用到的 tomcat)
有没有实习时候的项目展示地址?(公司内部,不开源)
问了我其中一个项目,你项目中主要负责写哪些功能?(组件封装,说白了就是造轮子,颜色选择器、下拉框、数字框等)
你的优势是什么?(技术上:前端性能优化 其他:社区影响力 + 善于总结和分享 + 业务能力 + 沟通能力)
实际项目中遇到的性能优化问题,如何解决的?(从发现问题、然后定位问题、最后解决问题说起)
以上是普遍小公司喜欢问的最基础的技术知识点,尤其是一些 API,其实每个人的回答都一样,所以看不出面试者之间的差距,一般给的薪资也是正常水平,表示很无感。
我简历上写的熟悉 Vue 源码和 Webpack 源码以及设计模式和性能优化相关内容,但是并没有被仔细问到,可能面试官对源码不感兴趣,可能对业务更感兴趣吧。
PS:个人感觉面试问 API 有点多余,有些 API 虽然记不住,但是项目中用到基本搜一下就可以,没必要死记硬背的。
公司三是一个偏向于复杂数据处理业务相关的,对数据处理能力要求很高,所以整个面试过程直接对于一个实际的复杂数据处理业务为题。
当然,限时 45 分钟,整个过程面试官是需要监控你的桌面的,对实际的业务数据处理考察很高。
主要是对数据的扁平化处理以及数据格式等转变,当时的题目处理的数据业务逻辑类似于三级数据联动。
面试官说用什么技术都可以,当时用原生 JS 做的,时间到了,并没有做完。可能四个月没有手写代码了,有点生疏了,所以,面试就此结束。(当是不应该用原生 js,做起来比较慢)
公司是个创业公司,但是没想到从笔试到面试,基本都是对算法考察,后来才知道是个大佬。最后顺利拿到 offer,并给到期望薪资。
1、笔试
笔试面试,是一道 leetcode 上的题,有关数组的。一个无序数组中两个数之和等于给定的值 k。
直接写了哈希表的优化方案,笔试筛选过了之后第二天直接线上视频面试。
2、视频面
自我介绍
看你用过 Git,知道 git 的底层原理内部数据结构吗?
平常用到哪些命令?(常用的命令,实习的公司用到的是 SVN)
Git 和 SVN 的优缺点?知道 Git 的某个高级用法吗?(忘记是哪个命令了)
来做到算法题吧。面试官将提前准备好的题目发给我。
感觉是笔试题的升级版本,找出一个无序数组中多个相邻数据和等于给定的值 k 的值。
面试官说可以写代码也可以先说说思路?我先将代码写了一遍,然后根据代码讲给面试官,面试官说可以,问我当前代码的时间复杂度为多少?能不能可以优化?
空间换时间,借助哈希表将时间复杂度降到 O(n),然后面试官开始问项目相关问题。
项目中,如何做的性能优化?
还有其他优化方案吗?
你的优缺点是什么?缺点如何去弥补的?
你的期望薪资是多少?
这次面试,小鹿是有备而来的,面试前我去公司的产品 PC 端以及移动端发现了不少的 bug,最低级的开发问题,是控制台中存在很多日志信息的输出以及错误的弹出。
公司主要做什么业务的?前端面临的挑战是什么?前端团队多少人?为什么公司产品有这么多的 bug 和问题?
面试官首先介绍了一下自己,清华大学毕业,美国 MBA 留过学,在字节跳动待过几年。(这么厉害,咋来创业公司了,好奇)
后来和说了原因,大厂业务相对比较成熟,试错成本很高。之所以来创业公司,可以从零开发一个产品,学到的东西多。后来谈到自学方面,面试官说技术提高和大厂没有绝对的关系,还是主要看自我提升和不断学习,说白了,在哪都一样,主要还是看自己。
关于产品 bug,是因为之前公司的产品是给外包出去的,最近打算自己找人重构开发,这些 bug 都是外包的开发人员留下的。(这锅甩的好,哈哈哈~)
面试官人很好,也很坦诚,把公司目前真实的状况一一和我解释清楚了。后来按照我的期望薪资给了 offer,我也很有意向去这样一个公司,因为在这种公司会成长很快。
这个公司主要通过朋友内推,如果走社招海投,我这学历估计门都没有。
一道天猫的算法题。
以为没有后续了,不料,三天过后迎来了一面。
自我介绍
面试官说先做到题吧,腾讯会议分享屏幕全程监视,题目如下:
说实话,当时看到题目有点懵逼,对于一个英语四级没过的人,题目都是英文的,当时有点不知所措。但是平常算法题的训练方法也是看的英文题目,没想到关键时刻就用上了。
读完题目之后,和面试官确认了一下题意,然后开始写代码。写了大概 15-20 分钟后,我开始做边界条件测试,测试完几个边界条件之后,这时,面试官说这样可以了。
然后开始根据简历,开始问一些技术问题。
MVVM 和 MVC 以及 MVP 的区别?(MVP 之前开发安卓的时候接触过,忘记了)
双向绑定的原理?(之前手写过,就把实现过程说了下)
父子通信的方式?如果让你实现父子组件双向绑定,你如何设计?(额…,回答到了 input 双向绑定了)
Vuex 的几个模块说一下?
垃圾回收
为什么使用垃圾回收(内存泄漏)
垃圾回收方法(2012年之后,用到了标记清除,因为引用计数存在问题)
如何手动管理内存(全局引用类型手动设置 null)
闭包(什么是闭包,闭包的作用,保护和保存,项目中哪里使用到闭包两个作用,分别举例)
什么是BFC,如何创建 BFC(说了记住的一点,面试官说没关系)
算法题中 delete 一个对象属性key 和 value 什么区别?
什么是冒泡和捕获事件?
说说 async,项目中如何使用的?(说到了下底层实现原理,Generator和 promise 的语法糖)
HTTP 了解哪些?(主要展开说了 HTTP 缓存)
项目中组件库,封装过哪些组件?(颜色选择器、下拉框、特殊数字框等)
项目中遇到的性能优化问题,如何解决的。(首屏渲染缓慢问题和原生性能优化问题)
Webview 与 JS 交互的几种方式;
对混合开发有了解吗?(没做过)
面试过程中,记住的只有上边这些,然后到了反问环节,就问了一个问题,给这次面试做个评价。
面试官首先说了自己的经历,说和我经历有点相同,后端干了三年转到前端。后面说的对我评价有点高,我对你评价是你的技术相当于前端两年的开发经验。
PS:感觉面试官太看得起我了,我个人对于开发经验的看法是,开发经验不仅仅是从基础的掌握深度和算法来衡量的,最主要的是业务能力,而业务能力在面试中很难一下就考察出来,而且大部分应届生没有接触过太过的实际项目,所以这一点还是很难衡量出来的,也是应届生最缺乏的东西。
虽然我个人从大二接触企业实际项目,但是不至于到两年开发经验水平,可能每个人角度不同,技术高度不同,这里就不多强调了。
不一会,HR 打来电话,一面过了,明天同一时间准备二面。
可能是前端的主要负责人,问的比较深。(后来入职之后,才知道按照三四年工作经验来考察的,可怕!)
自我介绍
看到简历中有读过 Vue 源码,问 Vue3.0 即将发布,有什么新特性?(其实我想说的是研究过 Vue2.0 的源码和核心原理)
看你看过 webpack 源码,说一说。(之前自己实现过简易版的 webpack,从打包后的文件收起,webpack 分析预处理,AST 语法解析再到打包好的文件,以及 loader 和 Plugin 如何处理的文件)
项目中手写过 loader 吗?(额,没有…)
HTTP/TCP 了解哪方面内容?(主要深入说了下 HTTP 缓存和四种缓存位置,分别适用于什么场景下)
离线缓存有什么特点
你个人优势是什么?(性能优化)
说说你对性能优化有哪些认识?(从项目出现的首屏渲染问题,然后讲到 webpack 性能瓶颈,六七种解决方案,然后就是 Vue 项目的性能优化,大概说了五六种)
Node 了解不?(项目中只简单写过接口)
然后问了一些 JS 相关的知识点,具体忘记了
未来的个人规划?(争取往全栈发展)
最后问了下期望薪资
二面很多地方都会逐渐深入问了很多,明显感觉有点吃力,这时候自我估么着会凉凉。
反问环节,主要问了下面试官自己哪方面掌握的不太好,即使没过,也能有不少收获。
面试官回答,有些源码的原理还是不怎么深入,HTTP 没有过多展开问你,作为应届生的话,总体感觉掌握这个程度还算可以。
以为要凉凉,过了一会 HR 打来电话,二面通过,明天下午三点会有三面。
以为最后一面是 HR 面,后来面完才知道是技术总监。面试前和我说,这次面试不会过多问技术问题。
自我介绍
班级成绩排名(前几名,面试官夸了下,学习还挺好)
怎么安排实习和上课的时间(这两者没有同时发生过)
大学学了哪些课程?有没有在项目中用到。(说实话,三本,课上能讲给你啥,能入门就谢天谢地了,大多数老师没有实战经验)
简历上写了熟悉网络原理,说说哪个方面?(http缓存,强缓存和协商缓存,从 HTTP1.0 说到 HTTP1.1 吧啦吧啦说了一大些)
排序熟悉吗?有没有在项目中用到过?
快排的时间复杂度?
归并呢?哪个更好?(说了快排,顺便说了下理由,面试官说正想问你理由,你竟然提前说了)
说说你知道的排序有几种?(说了十种,冒泡、选择、插入、计数、基数、桶、堆、快排、堆等)
项目中用到过什么排序?(说了 Array.sort API 的内部原理实现,一般项目中,不会自己写排序)
你认为算法重要吗?为什么?实际项目中用到什么算法?(在封装组件的时候用到了树和递归,比如多级下拉树)
学习一门新语言你是怎么学习的?(What、How、Why)
github 自己在写吗?现在还更新吗?动画怎么做的?为什么会分享这些算法解题思路?(自己在维护,面试期间没有更新,分享第一为了做复盘总结,第二,帮助别人)
说说在实际项目中用到的tcp/http相关知识。(HTTP 缓存)
三次握手和四次挥手了解吗?
HTTP在哪一层?
五层模型了解吗?分别是?每层对应的协议是?
CDN了解吗?说说看?(简单说了下,让我再多多去了解下)
场景提:给你一个网站,首次渲染很慢,如何定位问题,如何进行优化?(分别从 webpack 方面、Vue方面、网络方面以及缓存方面还有 SSR 依次做出回答)
最后,目前有没有offer,期望薪资是多少?(有 offer)
前端主要做什么的?(金融大数据分析与处理,前端对算法和大数据处理有较高要求)
最后问了下什么时候给通知,最早两天后。因为之前答应一家两天后入职,如果这家能过就去这家,反正挺纠结的。最后朋友和我说,正在讨论对你接下来的培养计划,然后我就拒绝之前那一家了,周日晚上收到正式 offer。
文中所有面试答案回答,都整理在小鹿公众号:「小鹿动画学编程」后台回复【前端 PDF】获取!
通过这些社招面试,收获了很多,尤其是对自己的一个技术定位,接下来如何去规划学习路线。
从上一家实习裸辞到现在,差不多四个月的时间,然后再家收完秋一直在找工作状态。有时候真的是缺一个机会,这个机会有时候真的靠运气,天时地利人和嘛。
能不能拿到机会靠运气,拿到机会能不能过,我认为靠的是实力,实力来自于日积月累的努力和能力。
走社招我最大的一点感悟分享给你们的是“优势”。
你算法牛B算优势,你项目经验也算优势,网络原理强也算优势,自己从零开发一个小产品到推广也算优势…
从社招海投,到面试自我介绍,都不断突出自己优势,才会让面试官欣赏你。因为社会很现实,往往以偏概全,想小鹿这种学历低的,简历看都不看。你说学历低不代表能力差,但是公司为了筛选成本低,肯定先 985、211优先,招聘要求明确规定的。
面试了这么多家,在面试中验证了一个问题,平常做啥事都要以最高要求为准,在关键时刻会有不同的效果。
比如算法,很多人认为前端大多数用不到算法,所以就忽略了,万一以后遇到了前端有关算法的工作,那么机会基本会在手中溜了。
我个人认为属于那种比较偏笨的人,对于刷算法,真的不是我强项,能做的就是反复刷,反复总结,反复看,有些东西看多了,自然而然成了下意识,逐渐成为了自己的东西。
其实我大三从安卓转到前端确实稍微晚了点,自学方面可以说是一个野生的前端。
记得面试官问了一个问题,我印象很深,平常自学喜欢看书还是视频?我的回答是,只有对自己有益,无论是书籍还是培训机构资料还是付费的,我都会买来看,对自己知识体系查缺补漏。
而且掌握一个知识点,要足够的深入,二面的时候,我个人明显感觉很吃力的,要深入到知根知底,这也是你的优势所在。不然每个人面试背的都一样,那就没啥区别了。
无论面试官问你什么问题,你要引导面试官往你会的方面说,之前小鹿写的「前端面试小册」为什么会有知识线,因为面试官一个关键词,我们都可以说它半个小时到一个小时,这很能在面试中凸显出你的优势所在。
而且会出现一个出乎意料的结果,你能说的基本说到了,面试官突然发现这个知识点没啥可以问到你了,而且好感度明显上升。
对于面试准备,我真的没有太多时间去充分准备,只能把我能够学到的掌握起来,然后表达清楚给面试官这就足够了。
这所有的一切,我都记录在之前写的文章中,包括很多面试知识点,自学方法,之前都基本写到过,之所以我写出来,是因为我觉得有价值,值的分享给他人看。所以,有空没空的,多翻翻之前的文章,说不定哪次面试就能碰见了~
大部分的面试题基本在之前的前端小册中总结过,但是还远远不够的,应届社招很注重项目经验和实战,所以配上实战食用更佳!
社招这一路走来,比想象中的要难,巴菲特有句话叫做,在别人贪婪时恐惧,在别人恐惧时贪婪,整个社招,历时四个月,我一直在等待一个机会,机会来了,把握住,那么结果不会太差。