一个底层前端开发在2022年的求职经历

649 阅读16分钟

前言:

2022年9月,我工作了三年的公司倒闭了,不得不出来找工作。前公司主要是做低代码开发平台的,17年成立,5年时间,依然没能做出一个推出市场的产品,是在撑不住了,倒闭了。

历时一个月,我也终于找到工作了,感慨颇多。在网上也看到了很多牛人找工作的经历,面的都是一众知名企业,我当然比不了,但是也想着记录下一些关于自己人生中的经历。在这次面试中,也发现自己缺少一些积累总结,所以就从这篇文章开始,开始新的人生,加油!

个人经历:

我是1990年3月生,今年32岁,不想说自己是高龄程序员,但是的确不年轻了。学历也只是大专而已,甚至专业也和计算机毫无关系,没有什么让人眼前一亮的经历,所以才有了标题中的底层前端一说。我13年入行,做过Java Web后端,写过Java Swing,搞过微信公众号,用React Native做混合开发,当过前端负责人,有过管理经验,现在主职是前端开发,也用Nodejs写一些服务,总的来说,经验比较杂。哦,对了,我还在慕课网上写过关于React Native的实战课程,关于这件事,大家如果有兴趣,我会单独写一篇文章,讲讲当时的故事。

面试经历:

从9月15号开始正式投简历到10月14号拿到一个offer,差不多一个月时间,相比2019年8月份找工作,确实不好找。19年前同事刚从上海来武汉找工作时,一天能面4家,3天就找到工作了。

今年我在BOSS上沟通过865家,简历只投出去了86份,拿到面试/笔试机会的只有10个(其中有一家后来取消了面试,实际只有9家),最终只拿到了一个offer,薪资也降低了几k,从一开始找工作时的信心满满,到最后的怀疑自己。最后能找到工作,我已经很满意了,在这个寒冬,活下去就是胜利。

在这次找工作的过程中,我发现在中级前端岗位中,前端三大框架Vue、React、Angular占比大概是66%、29%、5%(目测,没有数据支撑,勿打脸),高级前端岗位中,React的占比有所提升,另外关于WebGIS相关岗位也挺多的。坐标武汉。

接下来,我会大概记录一下面试/笔试的9家公司的经过,公司名就不写了,不比那些大公司,说了大家也不知道。

9月27日,第一家公司,地址在融科天域:

面试官两人,公司负责人和技术主管。因为这家公司也是做低代码开发平台的,所以对我的经历比较感兴趣,主要给面试官讲解了一下我在前公司做低代码开发平台的一些功能,然后问我对于设计模式和算法掌握的怎么样,我说我了解的不深。不出所料,面试挂了。后来我总结我在实际工作中还是用到了不少关于设计模式和算法的,比如说订阅发布模式、命令模式、策略模式等,算法主要集中在对树结构数据的处理上,都是可以讲的。太可惜了,没有表达好。

面试题:

  1. 你对算法有什么了解吗?
  2. 你对设计模式掌握的怎么样?
  3. 你听说过DDD吗?
  4. 你用过动态规划吗?

面试结果:未通过

小结:这次面试,暴露了我是一个没有急智的人,平时对工作中遇到的问题也没有很好的去总结。这也是我打算开始多写一些文章的原因,既然没有天赋,那么平时就需要多下功夫了。后来我也和面试官沟通过了,他也很诚恳的说了,他们想招一个对设计模式和算法有深入了解的人。

9月28日,第二家公司,地址在光谷软件园:

这家公司是让我最受打击的一次面试,好像我每次找工作,都会遇到这样打击我的公司,当然,不是说这家公司面试官喜欢打击人,是我自己掌握的知识不够牢固的原因。

还记得19年,也面过一家公司,问我关于前拷贝和深拷贝的区别,我那时候对于这个概念是错误的,我理解的浅拷贝是只拷贝对象一层属性,深拷贝是拷贝对象所有属性,且将属性为对象的属性也都拷贝一份。然后面试官就让我走人了,挺丢脸。

说远了,回到这次面试中,面试官一人,面试题如下:

  1. React为什么要设计hooks?
  2. 你觉得React函数组件和类组件的区别是什么?
  3. 如果需要在组件中请求多个请求,怎么渲染组件?

面试结果:未通过

小结:我一道题都没答上来,面试官说很难相信我在前一家公司呆了3年,听了这话,我暗自庆幸带了口罩,别人看不到我通红的脸。我确实没有做任何面试准备。面试和工作确实是两码事,工作更看重解决问题的能力,面试就像是考试,更看重对知识点的掌握情况。

重整行囊,重新出发

整个9月份,就接到了两个面试通知。

回去之后,重新修改简历,精简经理,提取自己的优势,降低薪酬,好好复习面试知识点。

10月8号,第三家公司,线上笔试

笔试题:

  1. 一个页面中,有100个请求,简述你的处理方案

  2. 有1000个dom,需要修改100个dom,怎么做性能最好?

  3. 一道Promise、setTimeout,异步同步打印顺序的题

  4. 算法题:无重复字符的最长子串(leetcode里可以找到)

  5. 说说你对于模块模式的理解

  6. 逻辑题

  7. 逻辑题

  8. 不记得了

笔试结果:未通过。

因为没准备,所以这几个题我几乎都没答上来。

10月9号,第四家公司,地点:小龟山金融文化公园。

一家需要驻场办公的公司,虽然不是外包,但是估计也是半外包了。面试过程也是我用前公司的产品做了一些功能说明,面试官问的技术问题,我已经不记得了,没留下什么印象

面试结果:未通过

10月10号上午,第五家公司,地址在关谷七路未来科技城

面试官两名。一个技术负责人,一个技术经理。这次面试感觉相当糟糕,这家公司招聘的岗位是Vue的,我也是批量投的,技术栈有点不符合,没想到hr直接让我去了。估计这家公司的hr和技术部门完全没有提前看简历。

去了之后,讲了一下前公司的产品,技术负责人也说我的简历很漂亮,直接了当的说他也想不到什么技术问题要问我的,但是他们想招一个懂Vue的。我想着来都来了,也不好就这么走了,总得表现一下自己,不能轻易放弃一次面试机会。便反问他,你觉得一个高级前端最重要的能力是什么,没等他回答,继续说,我觉得最重要的是解决问题的能力,至于vue,我可以学,我相信这对我来说不算难,完全可以给我一个星期的时间,如果不符合贵公司的能力,到时候可以辞退我。技术负责人还是反复说他们想招一个懂Vue的人,技术经理则反问我,你觉得你精通Vue需要多长时间,我说不好一下子说死,就被他抓到了反驳的点,那你怎么保证你一个星期能符合我们的需求。没办法,浪费了一上午的时间。

面试结果:未通过

10月10号下午,第六家公司,地址汉阳永旺梦乐城附近

这家公司是做WebGIS相关的,是他们主动让我去面试的,我很好奇为什么他们会找我去面试,毕竟我没有WebGIS相关的经验。

首先是hr面,互相沟通了一些情况,他们也是想做一个公司内部的产品,看中了我的管理经验。

然后是技术面,有两个面试官,并不太懂React,也并没有问出什么有水平的问题,大部分的问题我已经忘记了,主要是我讲解了一下前公司的产品以及我负责的功能模块。

  1. React路由你用过吗?如果想做一个权限控制,你怎么做?
  2. 不同标签页之间如何通信?

面试结果:因为这家公司经理不在,无法给出答复,后来就不了了之了。

10月11号,第七家公司,地址武汉花山软件新城

这次是公司董事长,技术负责人以及hr三个人一起面,体验也很糟糕,我通过上一家公司的产品来展示我的能力,董事长一直从产品的角度反驳我,说这个产品路线不行之类的。技术负责人给我的感觉应该是不太懂前端的后端开发,交流的过程中我计划插不上话,这就很搞人了,完全是这家公司董事长和技术负责人在说话,到最后,我放弃了,不管他说什么,我都说是的,你说的对。涉及到的技术问题很少,我也记不太清了。

面试问题:

  1. 你在工作中用到cookie保存数据了吗?
  2. cookie的跨域问题?localStorage有过期时间限制吗?
  3. 前端图片如何做优化?
  4. 前端需要实时展示大屏数据,如何做?前端轮询的方式有哪些?用过Websocket吗?
  5. 你觉得你来应聘高级前端,你的优势在哪?

面试结果:后来就没下文了。

小结:我感觉这家公司的面试官是比较高傲的,并不太愿意听我讲。这次面试,给我的经验就是在拿项目做演示的时候,一定要记住自己不是在给面试官推销产品,只要结合项目讲清楚自己在项目中负责的功能就可以了,不要跑题。

10月12号,第八家公司,线上面试

这次面试并没有涉及过多的技术问题,都是根据我在简历中写道的经历,问我一些问题。

问题如下:

  1. 你在工作中用到了redux和mobx了吗?他们的区别你觉得是什么?
  2. 如何用redux做跨组件的通信?(我把redux的功能说了一下,面试官自己也说这个问题问的没有水准了)
  3. 在真实项目中,页面很多,项目很大的情况下,redux的状态仓库可能会保存很多的数据,应该如何进行优化?
  4. 后端一次性返回上万条数据,前端如何做优化?
  5. 随着时间的推移,项目越来越大,且项目中的某几个模块也需要能够单独访问,应该如何做?

整个面试氛围都很好,不像是面试,而是和同事讨论一些工作中遇到的问题一样。

2个小时之后,约了二面,面试官主要还是了解了我一些项目经历,没有问什么技术问题。

面试结果:拿到了offer

10月13号,第九家公司,地址杨家湾附近的万科中心

这次面试我一开始并没包太大期望,因为招聘岗位上要求的是Vue,去了以后,给了两页纸,一页是笔试题,大约是3个题,另外一页是面试题,这种面试方式对我这种反应比较慢的人很友好啊,能有时间好好想想应该如何回答。

笔试题:

  1. Javascript的数据类型有哪些?如何判断它们?

  2.  const index = 0;
     const obj = {
         index: 0
     }
     //在此处插入代码,让打印结果为true
     obj.index = 1;
     console.log(index === obj.index)
     
    
  3. Pormise顺序问题

面试题:

  1. 如何将二维数组转换为树?
  2. 异步和同步的区别?
  3. 原型链是什么?
  4. 说说深拷贝要如何做?
  5. 数组去重要怎么做?
  6. 防抖和节流
  7. 如何将一个div拖拽到另一个div中?
  8. 0.1+0.2等于0.3吗,为什么?你是如何处理的?
  9. vue中的计算值和监听有什么区别吗?
  10. 说说react的原理
  11. 用过Proxy吗

面试结果:技术面已经过了,可惜薪资没有谈拢。

小结:这次我是有备而来,大部分的答上来了。我比较喜欢这种面试过程,缺点是过于八股文了。

第8题面试官问我react中有没有计算值和监听的概念,我只说了React的定位是库,而不是框架,有一些功能是需要依托第三方来实现的,就结束了。这里我完全可以继续讲mobx的,计算值和监听mobx都是有的,可惜脑子转的太慢,反应不过来。

面试原定的最后两个题目面试官就没有问我了,说没有必要,临时换了第9和第10题,我没有答上来。

其实第9题可以从React的虚拟DOM,diff算法等吹吹牛的,但是我当时没组织好语言,就说没有深入了解源码。

第10题确实没有积累,没法推脱,笔试题第2题也是想考察关于Proxy的知识,但是其实也可以讲一讲mobx的,可惜了。

如果我是面试官,我会怎么面试?

ps:我确实有当过面试官经历的,有时候也会在想,高级前端应该掌握什么知识才能称作高级前端,面试官应该问什么才能让面试者体现出自己的能力?

初级前端面试

我对初级前端的定位是,了解一定的编程知识,但是没有实际工作经验或很少,那么我会主要考察面试者对原生js、css的知识点

  1. 讲讲JavaScript的数据类型,应该使用什么方法来判断数据的类型?

  2. 如何判断一个变量是不是数组?

  3. 讲讲你对于原型链的了解?

  4. 作用域链是什么?

  5.  // 主要是为了考察js中引用数据的知识
     var a = {"x": 1};
     var b = a;
     a.x = 2;
     console.log(b.x);
     
     a = {"x": 3};
     console.log(b.x);
     a.x = 4;
     console.log(b.x);
    
  6. 盒模型是什么?

  7. 如何实现一个元素的水平垂直居中?

  8. 浅拷贝和深拷贝的区别?

  9. 如何更新一个组件的状态?

  10. Promise和setTimeout的执行优先级?

  11. 说说React中常用的几种hooks,它们的作用是什么?

  12. 设计一个React组件,拿到天气数据后,更新数据到页面中?(加分题)

中间前端面试

我对中级前端的定位是,有了一定的工作经验,对于工作中遇到的问题有一定的解决能力,大部分问题应该从简历中写的项目中提问

  1. js中普通的对象和Map有什么区别?
  2. 如何写一个深拷贝的函数?
  3. 如何将一个二维数组转换为树?
  4. 谈谈你对于浏览器的事件循环机制的理解
  5. 说说你对重排和重绘的理解,在实际工作中,你通过什么方式来减少重排和重绘?
  6. BFC是什么?
  7. 你在使用hook时都遇到过哪些坑?
  8. 你在使用React中用到了key吗,除了在列表中使用,还在其他的情况下使用过吗?

高级前端面试

我对于高级前端的定位是,对于在工作中用到技术有一定深入的了解,能更好的解决问题,且对于这些技术有自己的见解,和中级前端一样,也是需要从简历中写的项目中提问,以下问题只要能说的逻辑自洽就算合格

  1. 谈谈你对于JSX的理解
  2. 为什么React中只强制列表使用key,其他的组件可以不使用key?而且不推荐使用index作为key,为什么?
  3. React为什么要设计出hooks,为什么hooks不能在if中使用?以前的类组件的生命周期设计有什么缺陷吗?
  4. React的虚拟DOM提出之前,前端都是如何编写代码的?虚拟DOM真的比原生操作dom快吗?
  5. 如果应用首页加载太慢,你会如何优化?
  6. 你有从零搭建一个项目吗?用到了什么脚手架,遇到过什么问题吗?修改过什么配置?
  7. 谈谈你对于webpack的工作机制?
  8. babel是如何将jsx转换为浏览器可以执行的代码的?
  9. 在项目中有遇到让你觉得很困难的问题或bug吗,最后是怎么解决的?
  10. 你在项目中有用到什么设计模式吗?它们的优点和缺点是什么?
  11. 你在项目中,最常用到的数据结构是什么?你有用到什么算法对它们进行处理吗?

以上都是我个人的见解,可能并不是你心目中最佳的面试题,不喜勿喷!

总结:

这一个月的面试经历告诉我,简历一定要花点时间好好写。另外,在平时的工作中,再忙也要抽出时间来,总结自己的收获。要将自己的知识归纳总结,不要都是一些碎片化的知识,需要讲的时候,很难组织语言。

面试和真正工作需要的能力并不是完全重合的,还是需要花一些时间去复习面试题的。

面试的过程中,遇到打击很正常,有的时候也不是你的问题,而是面试官不够专业。有时间面试也是需要讲究缘分的。

今年的行情确实不好,不建议大家轻易跳槽,如果确实想要换一份工作,也可以请假去面试试水。

最后,祝愿大家都能找到自己满意的工作!