面试了十几家公司,我拿到了18.5k的offer_性能优化

作者:子树

入职新公司好几天了,给大家分享下面试的经历。

希望能对找工作的同学有帮助。

1 为什么辞职?

马老板说了,离职无非两个原因,「一个是受委屈了,一个是钱少了」

我确实觉得钱少了,因为去年又买了一套房,两套房贷压着,并且也有了可以涨薪的能力。但更重要的是觉得发展受限,我上家公司是家外包,18年10月份入职的,20年8月份离职。程序员如果深感技术受限,会非常焦虑的,也容易否定自我。

2年时间在项目中技术并没有明显的提升,一些新的知识点或者新的尝试也不会让你做,因为所有的任务都是上面分配下来的。所以对于大多数新的技能都是通过下班后自己的个人项目进行尝试的。

身边很多同事都是30多岁了,这个年纪跳出外包的机会比较小了,或者意味今后他们的程序员生涯都会在外包待着。

这不是我想要的生活,18年有面了自研公司,而且工资比外包高,由于种种原因,还是选择了外包,当初走错了一条路,导致现在又要退回去走另外一条。我希望在30岁前能真正理解前端这个行业,像一位老者回顾人生,能读透。如果可能的话,我大概会在30岁前成为真正的高级前端工程师,这两天我也对自己做了新的规划,希望真2023年能对现在的自己说,感谢曾经的你,我来接棒。

「当你想离职了,你要相信,你这个想法大概率是个正确决定」,这个时候不要犹豫,说明你已经意识到你不适合这里了,抓紧走,越快越好。

自己今年有做了2个小项目,基础功能做好了,还有很多问题,又时间再改。

简秘网: 简秘网:在线编辑简历的网站 

手赚网 响应式的网站

手赚网后台 后端用的是node+express+mongodb

2 面试经历


换工作的想法是今年6月份就有了,有看掘金上面很多知识点的总结和相关面经,说实话,「这些面经大多用的上。」


我面试的公司有10几家,有外包的,自研的,电话的,视频的,现场的都有,外包是他们打过来的。给出的offer最高的是18.5k,最低16k,我工作经验4年,这个工资基本是行情价。当然那些比较牛逼或是985,211的同学拿的工资会高很多,但是毕竟少数,这里不做讨论。

我是在职的时候就去面试了,因为担心疫情原因,招聘需求会减少。实际面试过程中,前端的需求还是较多的(可能也跟我最近2年没有去面试,对前两年的需求没有感知有关)


有一些规律可以给大家说一下,「大公司会把80%的时间花在问项目上,小公司或者外包会把80%时间问一些技术点上面」。


3 面试会问什么

3.1 具体题型

为了保证招聘公司能招聘到合适的员工,以下所有面试题都不会指出具体的公司。以下问题分为「必问题」,和「大概率问题」,「小概率问题」

这个概率值是通过对面试的这10几个公司,做了全面的统计得出来的(「不具有普适性」)

有些问题大家都会,我就不贴答案了

必问题 必问题 必问题

1. vue响应式原理?详细说一下过程。

可以看一下 这篇文章 或者掘金相关文章。 

真是必问题,无论外包还是自研,还是电话,都会问这个题。

什么?你不要?好的niubi同学

2.vue的生命周期
  • 必问题,大概说一下每个周期的特点

  • 为什么会有生命周期

  • 项目中有用到哪几个钩子函数

  • ssr有哪几个钩子函数

vue相关面试总结,第3条

3.HTML5或者css3的新特性

这个问题虽然不是100%问到,但是绝大多数公司都问了,我就放入这个分类吧,你不会有意见吧(有意见我也不会听啊)

  • 你有用到哪些新标签

  • 新特性主要包括哪几大块?你项目中有用到哪些?

  • canvas有用过吗

4.作用域,闭包,原型链
  • 说一下三者的概念参考第3条 第4条 第6条

  • 原型链有什么用处参考第6条

  • 怎么实现原型链继承参考第12.1条

  • 你项目中什么地方用到了闭包?为什么要用闭包?闭包的原理是什么?

好吧,这3个问题,从我入行起就一直被问。

5.es6
  • 项目中有用到哪些es6的特性 (他重点想让你说出箭头函数和promise,毫无疑问他还准备了this相关的问题)

  • 说下es5和es6箭头函数中this的指向

  • 有哪些办法可以改变this参考第5条

  • promise怎么使用?它解决了什么问题?

  • 怎么中断promise?(可以返回一个空的promise,既无resolve也没有reject) 参考第13条,建议把整条都过一遍

6.性能优化
  • 上个项目的性能优化是怎么做的

  • 代码层面怎么做性能优化

  • webpack怎么做性能优化

参考文章

大概率题 大概率题

大概率题是基本50%以上会被问到

1. flex

一些做移动端开发的大概率会问,尤其是做ui-app的

  • 有用过flex吗

  • 说下flex有哪些属性

  • 使用flex实现垂直居中

  • 使用flex实现九宫格布局

参考1-10

2. 响应式布局
  • 你知道哪几种响应式布局的方式

  • 说下rem,em,px的区别

  • 说下rem的实现

3. 块元素有哪些
  • 说下块元素和行内元素的区别和特点

  • 知道哪些空元素 (类似于img这样的单标签元素)

4. css中有哪些属性是可以继承的
5. 了解css的动画吗?说下transform
6. vuex
  • 项目中有用到vuex吗

  • 如果不用vuex有什么其它的替代方案 (可以说下其它的组件通信方式)

  • vuex有哪些优势和缺点 (功能强大,但相比eventBus会更重一点)

  • vuex有哪些属性 (5大属性)

  • 说一下vuex的action和mutation的区别

  • 有看过vuex的源码吗 (老哥,现在是你的表演时间了)

参考文章第7条

7. 指令
  • v-model的本质是什么 (语法糖) 参考文章第17条

  • .sync有用过吗?它是怎么用的 (本质还是语法糖,父组件省略v-on事件)

8. vue的diff运算
  • 看过相关源码吗

  • 说下你的理解

  • diff中的key有什么作用

参考文章第11条

9.v-show 和 v-if的区别

参考文章第4条

10.vue路由
  • 路由有哪几种

  • 说下这几种路由的区别

  • history需要后台配置相关的url吗

参考文章第9条

11.i18n
  • 怎么配置的

  • 怎么切换语言

12.看你用了socket,说一下它是怎么通讯的
13.2个页面怎么进行通讯
  • 同域名的2个页面怎么通讯

  • 不同域的2个页面怎么通讯

14.虚拟dom
  • 说下你对虚拟dom的理解

  • 虚拟dom的实现原理

  • 虚拟dom的优缺点

参考文章第12条 13 条

15.为什么data要设置成函数

参考文章第18 条

16.Computed和Watch

参考文章第24 条

17.长列表优化
  • 项目中有用到渲染列表吗

  • 怎么优化这种长列表

  • 如果不做分页呢?在前端有什么办法做优化

这个问题现场面试的时候,被问到了几次,正常的是通过分页优化的,但是如果不分页呢?那我就需要做类似按需加载的方式了。可以参考「云中桥」的文章,写的非常详细了。

参考文章第30 条 以及云中桥的这个系列文章

18.深拷贝与浅拷贝的区别

参考第7条

  • 手写深拷贝 参考第4条

  • 怎么实现浅拷贝 (object.asign)

19.数组
  • 有用过数组的那些方法

  • 怎么实现数组去重

参考第8条

20.回流和重绘
  • 说一下两者的区别

  • 说一下什么场景会触发

参考第3条

21.存储
  • 说一下浏览器的存储方式和区别

  • 说一下强缓存和协商缓存

参考第4条

22.http
  • 说一下常用的http状态码

  • 说一下请求头包含哪些 参考第4-2条

23.浏览器的渲染流程
  • 直接说渲染的流程就行了 参考第6-1条

小概率题

个别公司会问,小于50%

1. 说一下你怎么封装组件的

因为组件是复用的,我们要考虑暴露出属性和事件,供不同的地方引入,组件里面也有动态和静态的内容。

2. 怎么创建一个三角形

4条边框,3条透明,只显示一条

参考1-4

3. 垂直居中

方法较多

参考1-6

4. link标签和import标签的区别

这个只有一家公司在电话面试中问过

参考1-9

5. 事件的执行机制

参考1-15

6. 事件的委托/代理

参考1-18

7. 内存泄露
  • 说一下内存泄漏的场景

参考1-36

8. 网络分层
  • 网络分层分为哪几层

  • 说一下tcp3次握手的用途

9. 跨域
  • 跨域有哪些解决方案

  • vue开发怎么配置代理

  • vue配置的代理属于正向代理还是反向代理

参考1-13

10. 路由的权限控制

主要在路由拦截的通过rrouter.addRoutes去动态添加后台返回的权限表。

11. 说下你对webpack的了解
12. 性能优化

说下你上个项目有做过哪些优化/或者你了解哪些优化

3.2 开放题

1.你今后的规划是什么?

建议没有提前准备,不然你一下说不上来的。还好我年初的时候有做过清晰的规划,算是必问题了。

2.你有什么优缺点

个人不喜欢这样的问题,但还真得说

我当时说 优点:有自我驱动力 缺点:有些焦虑

肯定会追问,有自我驱动力体现在哪里,可以说下班后自学node,ui-app,数据库等等。焦虑体现在行业内很多人掌握的知识点深刻且广泛,并且有自己的一套学习方法(「比如掘金里面这么多大佬,每次看你们的文章我都很焦虑啊」),相比,自己并没有这么出色。

又追问:那你觉得为什么别人说这么出色呢? 

答:因为别人看了相关的知识点会用自己理解再整理输出,这样理解的更加深刻,也有助于复盘,我目前正在这样做。

3.你觉得你来到我们团队能为我们带来什么

这个应该是面试官要考虑的东西。 

这个我当时没答好,会说话的可以多说点。

4.你为什么要离职/为什么要来我们公司

说真话吗,这个可以自己先准备好话术吧,建议说实话。

5.介绍下你上个项目,并且说一下你上个项目用到了哪些技术点

很多人会觉得上个项目没什么可说的,用的技术都是比较大众,如果是这样的话,你就需要对上个项目梳理。我一开始也觉得我们上个项目没什么说的,梳理以后发现有很多自己没有意识到的技术点。

5.你还有什么要问我的吗

  • 可以问下团队成员情况

  • 项目组的技术栈

  • 项目是新开发还是迭代

如果实在没问题了,可以说刚才在人事那里/上一个面试官那里有了大致的了解了。

4 教训

最后说个教训吧,是真教训!大公司会问一些项目的细节,所以你必须对你自己做的项目非常了解,包括各个模块实现的步骤,思路,项目的配置,为什么要这么配置,不要觉得你的项目很简单,当你把所有代码都仔细过一遍,你会发现你的项目有很多值得你深入的地方。

「项目上欠下的技术债,面试大概率会被吊打。」 我这次就深刻的意识到了,所以如果你不急着离职的话,打开你项目一点点把业务梳理一边,一点点的过一遍代码,即使是别人写的。分析里面用到的每个技术点,看一下相关的配置文件,会发现配置也是很有意思的地方。

「祝大家大能找到自己喜欢的工作。」