现在经历的所有磨难,都是对未来对自己的考验。
前言
各位掘友们,大家好,我是神奇的程序员,最近逛沸点,看到好多掘友所在的公司因为疫情,各种降薪和变相裁员,在这里我想告诉大家的是: 没有过不去的坎,调整好心态,提升自己的硬性实力,精心准备接下来的每一场面试,一个萝卜一个坑,总有适合自己的公司。
前几天就看到了掘金酱发起的这次活动,迫于公司有个很急的项目在做,现在才写了这篇文章。
接下来就跟大家分享下我在面试中的一些经历,以及我是如何当上组长的,希望我的这次分享,能够帮助正处于低谷中的掘友找到方向。
面试经历
先跟大家分享下我从上家公司(湖北一个小公司)辞职后,来广州的一些面试遭遇吧。
第一场面试
我从上家公司辞职后,回西安放松了半个月,当时在boss直聘上投了20多家公司吧,收到了2家公司的面试邀请,第一家投了简历后,过了大概2天,hr突然给我打电话,当时我在外面,比较吵,然后我找了个稍微安静点的地方,跟hr聊了10多分钟,hr问我的问题有:
- 你为什么从上家公司离职?
答:因为个人原因:上家公司用的技术栈是Jquery,感觉技术遇到了瓶颈,加班挺多的,所以我离职了。
- 上家公司做的业务有哪些?
答: 公司有一个自己的项目,是做的Web端的一个会员营销平台,然后会接一些微信小程序和微信公众号的开发。
- 你在上家公司都做哪些事情?你在其中担任什么角色?
答:公司研发部有12个人,前端算我有两个,其他都是后台开发,我在公司做的事情有:公司的那个会员营销平台项目,客户会经常提一些需求,产品那边整理好需求,ui那边有了设计图,我根据产品的需求和ui的设计图完成新需求的开发以及一些bug的修复,进公司一个多月后,领导说会员营销平台系统要做前后端分离,使用layui进行重构,我和另一个前端合作,花了2个月的时间,对整个系统进行了前后端分离的重构工作,然后独立负责过几个小程序的页面开发以及接口的对接。
- 你们是如何代码管理用的是什么?
答:公司用svn进行代码管理。
- 你的优点是什么?缺点是什么?
答:我的优点是自学能力比较强,比如我刚进公司没有看过小程序开发的相关资料,另一个前端把微信小程序开发的官方文档网址给了我,她给了我7天时间让我看文档,第7天时,她给了我一个小程序的页面让我写,我花了1天的时间,把那个页面写了出来,下班时,她看了我写的页面说:写的还不错,明天开始有一个小程序要弄,期限是一个月,会给你分配一个后端,你和她协作来完成这个小程序的开发,我按时完成了这个小程序的开发,我的缺点是我性格内向一点,不过我在改了。
- 你做过最满意的一件事是什么?
答:最满意的一件事就是我现在掌握的所有知识都是自己自学的。
- 你的职业规划是什么?
答:扎实自己的前端基础,时刻关注前端的新技术,让自己的知识体系庞大起来,可以轻松应对各种业务需求。
hr问完我这些问题后说:行,今天就到这,后面我们如果觉得合适的话,会有其他同事打电话约你来面试。然后过了2天也没回复,我感觉我应该是凉了。
我不是很甘心,她问我的问题,我都回答上来了,于是就在boss直聘给那家公司发消息问明情况,那家公司的招聘者是个技术部门的领导,他说应该是没有过,不过我们还有一个通道:你可以看看我们github的招聘说明,为我们的开源组件提一个pr,可以额外获得一次面试机会,然后发了他们团队的GitHub链接给我。
我拿到链接后,不是很懂他说的pr是啥意思,然后我就去求助我的朋友们,他们告诉我pr是problem,他的意思应该是让你给他们找bug。然后我觉得应该是这样,然后就百度如何在github上提pr,找到了一篇文章,我跟着文章操作,把他们的开源项目clone到本地,按照readme的内容将项目跑了起来,于是开始找bug,找了一会后,看到了他们的数据表格,看到数据是mock模拟的,我就在想如果接口返回的数据过多,他这个表格会不会出问题,于是我就找了个mock的平台,模拟了一些数据,写了11条数据上去,把他们表格的接口改成了我的mock服务,运行后发现,表格里显示了11条数据,但是表格底部显示的总条数是10,我的想法是对的,于是对他的数据表格的那段代码,在渲染时做了数据截取,如果接口返回的数据大于当前每页显示的条数,我就把多余的数据进行截取,顺利的修复了这个bug。
修复bug后,我根据文章上讲的内容,为他的开源项目提了一个pr上去,做完这些操作后,时间已经到了凌晨2点,我是从晚上8点开始折腾的,我在boss直聘上发消息说我弄好了,提了pr上去,你看一下。发完消息后,我放下手机,睡觉去了。
第二天醒来后,他回我消息了。内容是:
搞到那么晚啊
5分钟后...
不管怎么说,我欣赏你这种态度和精神。
你明天戴上电脑,过来面试吧。
发了地址给我
我醒来已经10点多了,看到这些消息后,明天让我面试?我现在还在西安,考虑了一会后,还是觉得时间太紧迫了,就发了以下信息:
我明天不能去面试,我现在还在西安
可以改个时间吗?
等了1小时,消息状态还是未读状态
我心里开始纠结起来了,我要是不去的话,算不算放人家鸽子
越想越烦,于是就出去散心了。
到了晚上,消息状态还是未读。我就开始在boss直聘上给他打语音电话,打了5、6个吧,消息还是未读状态
算了,又一个面试机会与我擦肩而过了。
此时我开始焦虑起来了,陷入了沉思,突然有一家公司回复我了,问我什么时候方便面试,我看到消息后,心想不能在错过这个机会了,然后就说下周一(5月13号)可以去面试,当时是2019年5月8日周三,我查了下机票,发现10号的机票的挺便宜的(410块),然后就买了10号的机票,飞广州。
5月10号,我到广州后,我提pr的那家公司,在boss直聘上给我发消息了内容是:
不好意思,这几天项目比较忙,没看到你发我的消息
那你看你什么时候时间方便过来面试呢?
我把时间约到了14号(我13号约了已经约了一家公司的面试了)
行,那我们14号见。
5月11号和5月12号刚好是周末,在女朋友的陪同下在这边租了房子。
时间来到5月13号,到了第一家公司约我面试的时间,他那个公司在白云区一个较偏僻的地方,他们公司所在的那栋楼看着挺破旧的,我有点慌了,这不会是传销吧,经过一系列的斗争后,还是决定去了,他们公司在6楼,是个小公司,hr问我要了简历后,过了5分钟左右,出来了一个人,把我带进了一个小房间里,问了我以下问题:
- vue的双向绑定你了解过吗?
答:emmm,了解过是v-model
- 你刚才说了v-model,请描述以下它的底层是如何实现的
答: emmmm,思考了10多秒,然后说:这个我没了解过。。。。
- 那你说一下vue的生命周期有哪些?
答:emmmm,思考了10多秒后,然后说:这个我也没了解过,我平常都是cdn引入使用的。
- 行吧,你不符合我们的岗位要求,我们要熟练vue的,一进来就能做事的。
答:谢谢,我对vue不太熟练,我技术栈主要是jquery,然后起身离开了那家公司。
人生中的第一次面试(上家公司是朋友亲戚的,没有进行面试)就这样结束了,我遭受到了打击,我在上家公司时,用业余时间引个vue的cdn,看了下vue的简单的语法,写了几个demo,我就觉得vue好简单,觉得自己的技术很强了,走出舒适区后,才发现自己原来是个井底之蛙。
回到我租的房子后,我就在百度上开始找今天面试官问我的问题,开始了死记硬背模式,然后开始准备下一场面试。
在一棵树上吊死
时间来到5月14号,我来到了我约的第二家公司楼下,这家公司在广州东站那边,我看到公司办公的那栋大楼后,惊讶了,这是个大公司啊,办公楼高端大气上档次,去了这家公司所在的楼层后,进了公司后,里面特别大,大概有100多人,前台给了我一份笔试题让我做,写完后,前台小姐姐拿走了我的笔试题,过了10分钟,过来了一个人拿着我做的笔试题,让我去里面,对我进行了技术面,他问我的问题大概如下:
- 先进行下自我介绍
我叫xx,我都会哪些东西,在上家公司主要做哪些些东西,负责什么业务。
- 我看你简历,你才19岁?
对,19岁
- 你没读大学吗?
我跟面试官说了我经历的所有事情,这也是我第一次向外人提及我以前的那段伤心事。面试官听完我讲的那些事情后,有那么一点点同情我的遭遇吧。
- 他拿着我做错的题开始问我
- 我答应了面试官,不能透露他们的笔试题,所以此处就直接跳过面试吧
- 我回答完他对笔试题给我的提问后(总共15道题我就写对了4道),他说行吧,你的知识体系有点弱,那我问点你简单的问题吧。
- 你常用的css布局有哪些?
答:浮动和定位
- 你知道flex布局吗?就弹性布局
答:我学的时候有看过这部分内容,不过不是很了解,没在实际中用过。
- 那我看你简历上写了你有小程序的开发经验,然后他打开了我的做的小程序,然后问你这个布局如果不用flex,你是怎么实现的?
答:这个最外层是个宽度为百分百的div套起来,里面是两个小div,宽度各位50%,然后我让他float:left。
- 那如果我现在要在里面的两个小盒子价格2px的border,你要怎么实现?
答:左边的div为50%,右边的div置为49%。
- 哦,你这样实现啊,那这两个盒子不就不想等了?
答:emmm,好像是。
- 如果你用flex布局实现的话,这需求就很容易实现了,你回去可以了解下这方面的知识。
- 你说一下,get请求和post请求的区别
答:get请求不安全,post请求安全性高。
- 你这个安全性怎么说?
答:get请求的参数全在地址栏,别人很容易窃取到这些信息,如果是post请求的话,地址栏就没参数,所以比较安全,
- 哦,你是这样理解的啊,你回去后好好查一下下这俩的区别吧
- 行,我对你的问题了解完了,然后他去找他们老大回报情况去了。
- 过了一会后,他出来了,说:很抱歉,我刚进去商量了下,你的基础有点太弱了,我们如果招你进来的话,需要对你进行很长时间的培训,你回去再准备准备,如果对我们公司还感兴趣的话,下次可以再来试试,我走的时候带走了笔试题,然后他送我到了电梯口,等电梯时,他说你能走到今天这一步也挺厉害了,一路自学过来,坚持了下来,没有放弃自己,以你的能力在广州找个实习的岗位还是很容易的。
我跟他道别后,整个人心情都低落了,人家面试官已经对我放宽到这个地步了,我都没有回答出来他的问题,我好菜啊,在地铁上,我整个人像丢了魂一样站在地铁上发呆,坐过站了3次。我租的房子在6号线,我今天面试的这家公司在3号线,需要在燕塘换线,我当时心情特别低落,打不起精神。
最后强迫自己不去想刚才面试的场景,我还有机会,我再准备两周吧,两周后我再来试试,然后在boss直聘上发了消息,说我再准备两周,两周后我再来面试,他答应我了,回我说:行,你准备好。
我回家后,正式开始了闭关修炼,我跟我的朋友说了我今天的面试情况,我朋友说,我劝你还是不要在一棵树上吊死比较好,还是准备下一家面试吧,我没有听我们朋友的劝告,因为我觉得面试官答应了我,两周后再让我试一次,就一定会让我试试,不会食言的。
我围绕者笔试题的内容和面试官问我的问题,开始百度找解决方案,恶补自己缺的那部分知识点,那两周我每天的作息时间都是:早上9点到凌晨1点。
经过两周时间的努力,我把笔试题上的内容已经彻底掌握了,然后还用vue cli仿了个SegmentFault的首页出来,当我再次联系面试官时,他告诉我,很抱歉,我们这个部门暂时不招人了,你看下我们公司的其他部门还要人不,我当时崩溃了,这是踢皮球的节奏啊,我准备了这么久,居然放我鸽子,我当时委屈的哭了,有点后悔当时没听我朋友的劝告,真的在一棵树上吊死了。
开始霸面
在一棵树上吊死之后,我重新振作了起来,把头发剪的特别短,打算从头开始。我在boss直聘上投了1天,基本上把林和西、体育西,那边的公司全投完了,没有收到一个答复,我心里开始急了,这样下去不是办法,于是我做了迫不得已的决定:霸面
我开始在boss直聘上统计了一些公司招聘信息,写了地点,将距离比较进的公司都放到一起,然后集中去面试,一天面4家公司,早上2家下午2家,大部分公司都给了我机会,有3家公司拒绝了我,他们说需要在boss直聘上投简历,然后他们那边筛选通过了,才约我过来面试。
面试多了以后,就发现了他们来来回回问的问题就那么几个,我都记住了,后面的面试都挺顺利的。有几家技术面通过了,在hr手上栽了,嫌弃我没学历。
接下来,我将我霸面时,面试官提问我的问题,跟大家分享下:
-
vue的双向绑定原理
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。 我们已经知道实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令(如v-model,v-on)对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图.
-
谈谈你对mvvm的理解
MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。 我对于双向绑定的理解,就是用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。
-
在vue中,如果不允许你使用v-model,你要怎么做到数据的双向绑定?
如果是输入框元素,我会使用使用@input来实现,它会监听用户的输入,我对他进行拦截,然后手动更新用户输入的值到data中。
-
说一下vue的生命周期有哪些,以及他们的作用。
beforeCreate 页面创建前
created 页面创建完毕
beforeMount 页面挂载前
mounted 页面挂载后
beforeUpdate 页面更新前
updated 页面更新后
beforeDestroy 页面销毁前
destroyed 页面销毁后
-
请说一下你对闭包的理解
闭包是javascript语言的一个难点,但也是它的特色,很多高级功能都需要闭包来实现
理解闭包前需要先理解js变量作用域,变量作用域分为:局部变量和全局变量。js语言的特殊之处,在于可以在函数内部可以直接读取全局变量,正常情况下,局部变量是不能被外部访问到的,只能通过变道方法来实现。
闭包的概念: 闭包就是能够读取其他函数内部变量的函数,所以本质上闭包就是函数内部连接函数外部的一个桥梁
闭包的用途: 闭包可以用在许多地方,它的最大用处有2个,一个是可以读取函数内部的变量,另一个是让这些变量的值始终保存在内存中
-
请说一下js作用域
在 Javascript 中,作用域分为 全局作用域 和 函数作用域
全局作用域:代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。
函数作用域在固定的代码片段才能被访问
-
你是怎么解决css高度塌陷的?
高度塌陷的产生原因: 在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。
解决方案1: 加一个空div标签清除浮动(缺点:不利于优化,优点:兼容性强)
解决方案2: overflow+zoom(优点:兼容性强。缺点:对margin属性有影响,不能设负值,设负值无效。负值绝对定位也不可以。)
解决方案3: after+zoom (最好用的,最推荐的,兼容性也很好)
-
请说一下什么是盒子模型
在一个文档中,每个元素都被表示为一个矩形的盒子。确定这些盒子的尺寸, 属性 --- 像它的颜色,背景,边框方面 --- 和位置是渲染引擎的目标。 在CSS中,使用标准盒模型描述这些矩形盒子中的每一个。这个模型描述了元素所占空间的内容。每个盒子有四个边:外边距边, 边框边, 内填充边与内容边。
-
es6中let、const、var分别是什么?
let块级变量,声明前不可使用,会报错
var声明的变量会造成变量提升,声明前使用改变量,变量值是undefind
const用于声明一个常量,一旦声明,常量的值就不能改变
-
什么是webpack,他的作用是什么?
webpack是一款打包工具,它的作用:分析当前项目结构,找到js模块以及浏览器不能直接运行的扩展语言,并将其打包成浏览器可以识别的形式,以供浏览器识别运行
-
vue模块化开发,都要部署哪些环境?
需要部署node、webpack、切换包管理工具源为国内源
-
jquery常用的选择器有哪些?
id选择器、class选择器、eq选择器、选择父元素、选择子元素、选择所有父元素
-
在ES6的新特性中,你在平常学习使用和项目开发中,哪些特性是你最常用的,这些特性相比之前的版本都为你的开发带来了什么好处?
cost和let,相比之前的var来说,提高了代码的可阅读性,语法会更严谨
模板字符串,可以在字符串中使用变量,相比之前的字符串拼接来说,提高了代码的美观度,减少了错误的发生
箭头函数,不需要function关键字来创建函数,可以省略return关键字,继承当前上下文的this关键字
-
什么是vuex?为什么要使用它?它有哪些核心属性
Vuex是一个专为Vue.js应用程序开发的状态管理模式。
当我们遇到多个组件共享状态时,多层组件的传值非常繁琐,不利于维护,因此我们把组件的共享状态抽取出来,以一个单例模式管理,在这种模式下,不管在哪个组件都可以获取状态或触发行为
state,getter,mutation,action,module
成功入职
由于前面的面试积累了足够的经验,在一番霸面后,最终通过了一家公司的面试,由于我当时还没毕业,6月5日以实习的身份办理了入职。
前端开发组组长
入职这家公司后,他们是用jsp封装了一套自己的框架,用的技术栈是jquery,后端是Java,由于我jquery已经用的非常熟练了,公司的项目没有前后端分离,我Java基础也还不错,所以很快上手了公司业务开发。
组长离职
进入这家公司两个月后,我已经熟练上手了公司自己的框架,组长以及其他组员经常会来问我一些他们解决不了的js问题,过了大概1周左右,组长离职了,他离职前招了4个实习生进来,他走了那4个人也就没人带了,到9月份时,经理找我,跟我谈转正的事情,顺便说了上个组长离职了,现在前端组需要有人带,你是他们中实力最强的,你愿意当这个组长吗?因为我一直干着复制粘贴的事情,当组长就能轻松很多了,解决一些其他人无法解决的问题,对自己也是个提升,而且业余时间会多一点,我可以做我自己的事情。于是我就接下了组长这个活。
任职组长
我以为经理让我当组长就是她一句话的事,结果还是有很多考核,她结合公司内部的框架给我出了一份题让我做,最终我的成绩还不错,然后她说,现在前端组有4个人由于上任组长离职,没人带,他们太差了,无法完成公司的正常业务开发,我给你两周时间,你把他们实力提上去,2周后会有一场考试,我会给他们出题,他们成绩必须在80分以上,他们的成绩与你的薪资有直接关系,我要给你压力,不然你没动力。我把自己对公司框架的理解整理成笔记,然后让他们去看去理解,2周后他们的考核成绩都达标了,我的薪资也保住了。
写在最后
至此,本文分享的内容就结束了,希望大家看了我的故事后,能振作起来,以一个好的心态来迎接未来。