学习前端九个月拿下大厂offer,我干了些啥

5,309 阅读18分钟

个人情况: 某211菜鸡,大二转专业到计算机,大三下学期末也就是2020年12月份接触前端。大三寒假今年1月份开始正式学习前端。

秋招情况:

  • 腾讯秋招提前批一面挂了,后面一直不捞;
  • 阿里一面过,二面没面(面试官说简历不行挂了);
  • 拼多多三面挂;
  • 快手三面挂;
  • 美团两轮技术面,已意向书;
  • 百度三轮技术面走完,已意向书;
  • shopee面试结束,等意向书;
  • 字节三轮技术面过,已意向书;

最近陆陆续续各大厂开奖,自己总算暂告快一年的快节奏生活。在此回顾一下自己的学习心路历程,算是给自己交的一份答卷,也希望能帮到需要的同学。

结识前端

大一就读地理科学专业,因为是调剂的专业,而且自己对地理很不感冒,因此下定决心转专业,最后误打误撞来到了计算机。大二是自己最痛苦的一年,从0开始上着大二的专业课,同时补修着大一缺的专业课,很长一段时间怀疑自己为什么要转专业。期间想过做出一些改变,参加了学校的acm(坚持了一个星期),学习数学建模(学了一学期放弃了),加入了一个老师的学习小组(被分到了数据库小组,最后组员都保研或者考研了解散了),但在铺天盖地的课程面前,最终都没有坚持下来(课程多是借口,主要还是懒=c=)。

在大三的上学期,深感自己在大学什么都没学到,因此我主动找上了班主任,希望这个学期可以跟着老师后面学习。我的首要目标便是做项目参加比赛,借此机会我同原专业一起转过来的两个室友(三个室友都保研了,只有我这个菜鸡去打工了)组建了一个小队伍开始了比赛之旅。题目最终定为:隐私安全的人脸识别系统

为了完成课题,整个项目拆分为两个部分:首先是人脸识别部分,其次是加密部分。为了学习人脸识别,我第一次开始阅读文档,接触github。因为不熟悉编程语言,为了跑起来一个人脸识别的项目,需要彻夜折腾配置环境。虽然当时每一步进行的都很艰难,但当深夜看到他人的代码在自己的电脑上运行起来,正确的识别人脸的时候,内心是十分激动得,好像自己真的可以去学点什么,去做点什么。回想起来,从那时开始慢慢熟练玩起了github

image.png

也就在这时,软件工程基础实践课上认识了一群有意思的人,和他们一起组队的过程中我学习了前端三件套html、css、js,阅读了vue文档,勉勉强强写出了一个算是网页的东西,这也标志着我的前端路线正式开始。

迈出第一步

学期末我在朋友的鼓动下带着自己三脚猫的功夫去投一些简历,不奢望能通过但是要知道自己差在哪,需要在哪里努力,很可惜投了很多的公司,最终连简历都没过。一家公司的前端总工程师给我发的话我至今记忆犹新。图在下面,有多打击自行体会。

在这里插入图片描述

如果说大三开始的自己是什么都不会、什么都不知道,经历了一学期的折腾和这次简历投递事件的打击,到了寒假的我知道自己有很多东西需要去学习。我十分后悔自己在转专业来的一年里拘泥于自己认为的大学生活中:平时的学习只是当成一门任务,最主要考考试周去突击复习知识点,考试能考个八九十就不算虚度大学生活了。这种学习方式让我什么都学不到,该有的基本素养自己也没有去有意识的培养,我下定决心这个寒假一定要好好利用这个50天的寒假

自己本身什么都不会,想到自己上个学期通过做项目学习了一些前端,便认真学好手上这点零碎的知识。前端上,html、css自己上freecodecamp上又重温一遍,js开始啃红宝书,并看了一些视频;vue则是向老爸申请了一些学习投资在慕课网上买了一些课程进行学习。

一切都在有条不稳的进行着,白天学习前端,下午为比赛项目做准备,晚上做一些前端的实战项目。寒假的第一个小转折是字节跳动的训练营的笔试,五道编程题我只有两题的通过率过了50%,毫无疑问我被刷了,看着身边的朋友都通过了笔试,我十分沮丧。祸不单行,人生中的第一次参加的面试被告知还需要继续学习。训练营笔试的失败和第一次面试的失败让我觉得自己大三上学期的学习和半个寒假的努力都白费了。

这里十分感谢自己的一个学长,在他备战考研前,他是我们开源协会的会长,考研期间我一直没去打扰他,当初我便是在他的引领下认识的前端。再次经历了失败,我又去找到了他,告诉了他自己对找工作这条路的不自信。在后面的交谈中我被学长“认真做好每一件事情”的态度感染,哪里倒下就从哪里爬起来。我认识到自己应该感谢自己一路上遇到的所有打击,正是它们我才认识到了自己的不足。我开始开始认识到了自己不应该局限于前端这一单一的模块,身为一个科班生我应该更注重自己的计算机素养,数据结构、计算机组成、操作系统、计算机网络都是我要去学习的东西,在寒假剩下的一半时间里继续保持自己之前的计划基础上,再先着手去复习一些数据结构和算法。

小小的成功亦是学习的开始

就这样,在一次又一次的打击下,我不断的调整自己的学习计划。剩下的寒假里在leetcode上刷了四十多题,前端js和vue的学习也在继续,项目上主要的算法工作我也使用js和python完成了,这时候的我能明显感觉自己对一门编程语言的理解和原来有所不同,我对帮助我的学长说我好像变得比原来更强了。新运女神也关顾了我,字节又开始了新一轮的训练营,与此同时之前投简历的人人公司也来邀请我去面试。我带上自己一个寒假的准备去面对他们,好消息也一个一个的到来。

2月22日,我接受到了字节跳动训练营的邀请,虽然这次笔试题目我只做出来了一半,但是还是侥幸通过了笔试的筛选

在这里插入图片描述

2月25日,我收到了人人公司HR的邀请

在这里插入图片描述

虽然过了这个训练营的笔试算不上什么,面试的难度也远不及那些大厂,但是对于学习三个月的路程上没有任何成功的我来说是一次巨大的鼓舞。但我也深知我还差的还很多,还有很多需要去学习。因为身边的同学都在准备考研,在本科生身份的压力下,我给自己定下了新的目标:继续精进自己的前端技术,秋招拿到大厂offer。于是从三月份开始,每天日程如下:

  • 七点钟起床
  • 七点二十后骑二十分钟去公交站
  • 在公交站等待的时间和公交车上的一小时通勤时间开始一天的学习,读文档、看视频
  • 八点半到下午六点,在完成公司的任务中学习查缺补漏
  • 晚上八点前两小时回寝通勤 + 晚饭
  • 晚八到十二点回到宿舍继续比赛项目和自己的项目

在这里插入图片描述

三月份也是春招的季节,除了公司的实习和比赛项目的推进,我投递了很多简历,不指望能过,但是希望在这个过程中为秋招积攒经验,同时也给自己一个学习的压力,能够完成每天高强度的学习。

前前后后我面试了腾讯、阿里、百度、字节、美团等公司

在腾讯和阿里的前两次面试中,一问三不知,都终止于一面。自己的前端知识不成体系,基础知识不牢固,这两次面试也打醒了我,重新想起了自己科班生的身份。当时阅读了月影大佬16年的博客,这篇五年前的博客却点醒了我,文章中提到的想法和我前两次面试得出来的结论一样。科班生要求有扎实的计算机基础和对技术的热爱。大二转专业以来自己可能并不是真的喜欢计算机,但是从接触了前端以后才体会到了计算机的魅力,不同于C语言的黑洞洞的窗口,前端五彩斑斓的世界激发了我的创造欲。我在追求创造的过程中,学习了html,css,js,vue等,但却也在身边追求工作的狂热中慢慢失去了热爱的初心,单纯的追求技术去学习,貌似失去了最初对问题刨根问底的精神。做了很多项目,解决了问题就不再深究,似乎没有最初的干劲和解决bug的成就感。在此警醒自己一次,无论如何不要在浮华喧噪的世界中失去了本心。

前端是一个庞大的体系,我花了两个星期的时间,辅助其他博客将自己目前掌握的前端知识总结成一个属于自己的体系,之后便可以宏观的看到自己知识体系中缺陷的部分,后面的过程便是搭积木,不断的在自己搭建的体系上不断学习、完善

高强度的学习持续了一个月,期间没有休息一天,可能给自己的压力太大,始终无法放下心来去休息。期间百度二面挂了,心态爆炸,失眠。向自己的偶像(三元大佬)传递了我的负面情绪,当时意识到一直高强度的学习不是一个很好的选择,因此给自己一天的休息的时间和朋友去吃了顿大餐,在电影院看了阿凡达,赞叹多年前的电源现在看来依旧震撼的同时,也清楚的认识到自己还是个学生,有无线的可能既然决定了自己的目标就要不顾一切的坚持下去,过程中的得失才是自己所追求的,对结果的患得患失、畏手畏脚会成为自己前进的绊脚石。也在这个过程中感受到了偶像的力量,在他的鼓励之下继续坚持,也坚定了自己在前端路线上追赶他的决心

后面的一个月中,先后面了腾讯、美团、字节跳动,很可惜自己学习的时间太短,没能拿到自己最想去的字节跳动的offer(因为偶像在那),但是还是侥幸通过了腾讯云智(武汉)和美团的面试。腾讯接到hr的通知时,自己都是不敢相信的,除了一些激动外更多的还是希望自己不忘初心,不带任何包袱的继续学习下去。

在这里插入图片描述

美团的通过也是意料之外,具体不说了(手动笑哭)。

在这里插入图片描述

暑期实习

从5月14日来到腾讯电子签的团队,到九月份,实习了快四个月。在这个过程中学到了很多,想从个人的成长上来谈谈自己整个学习的过程。

技术栈上的拓展。  5月份申请提前实习的想法就是希望能学习到更多的东西,学习到我在学校里学习不到的东西。事实上在腾讯这个大环境里,只要你肯学会有学习不完的东西。技术栈上接触了uniapp、小程序、云函数、react这些没有接触过的知识,学习了很多vue高级的语法,让我看到了前端世界的丰富多彩,也让我意识到了前端的慢慢长路才刚刚开始。我现在所需要的就是打好自身的基础,在工作中不断的积累经验,坚持学习的习惯,让自己在未来新技术潮流的的冲击下顶住压力前行。

专业的事情交给专业的人去做。  技术上的成长不仅意味着技术栈的拓展,来到电子签团队后,见证了大公司软件产品的生产流程,我的技术视野拓宽了。对一个产品的感知不再是自己在学校里和几个同学折腾的小项目,企业级项目的开发不是几个人就可以完成的。它是一个复杂精密的过程,每一环都至关重要,且需要有专业的人去完成。最开始的需求分析,需要产品经理通过数据分析、客户反馈等各种渠道来制定合适的需求,产品经理就是腾讯电子签的万千使用者和幕后开发者沟通的桥梁;正式进入研发流程后也会经历视觉交互、重构、前后端开发、测试、上线、后期维护等过程,整个项目的开发大家需要互相配合,发挥各自所长,才能将一款产品做好;产品做好不代表就成功了,还需要靠专业的人士去推广,收集意见,接受反馈后再去迭代、优化。

我们是一个team。  我们看到了想要完成一个庞大的项目,需要一支充满干劲的team。很明显,我们的电子签就是这样一个扛得住压力、战斗力极强的team。在学校里的比赛我也担任过几只队伍的队长,深感很难调动起来大家,所以一直认为自己不是这块料。在和组长聊天的过程中,team的功劳不是因为他,而是因为我们,正因为大家都是是一样可爱的人,拥有同样的目标,才能团结在一起具有强大的战斗力。组长对我说,所有能力都不是与生俱来,需要不断的去尝试锻炼才能拥有。我想在后面的人生中,不要害怕去尝试,也不要因为一次两次没做好就放弃。

天高任鸟飞,海阔任鱼游。  在这里还有我个人的成长,和大家相处以后学到了很多为人的道理。感悟挺多的,因此在最后也送给自己几句话。要一直保持着一颗谦虚的心的学习,自己认定的目标就不要轻言放弃,哪怕失败了也要继续坚持下去。

秋招准备

可以看我的github有我所有的准备

九月份之前准备面试,主要是针对自己的简历进行复习:

  • 基础部分:需要牢固掌握的

    • html、css、js
    • 浏览器相关
    • 计算机网络
    • 操作系统
    • 数据库
    • 数据结构以及常见算法题目
  • 框架&项目:经常使用,但是没有系统总结过的内容

    • vue相关的基础知识、原理以及项目
    • react相关的基础知识、原理以及项目
    • uniapp开发微信小程序
  • 实习

    • 做了什么?
    • 学到了什么?
  • 加分项:之前接触过,但没有经常使用以及深入了解,后期有时间去了解一下

    • node.js,express框架,koa框架,egg.js框架
    • webpack的的核心概念以及性能优化
    • 项目优化部分

九月份以后开始陆续投递简历:

  • 边学边投简历,多看面经查缺补漏
  • 坚持刷题
  • 找可靠的人,确定有hc的人进行内推
  • 积极准备面试

面试

最主要的是形成自己的知识体系,其次面试是一个双向输出的过程,需要自己不断地给面试官暗示,让面试官发掘自身的亮点。

美团

美团一面: 1h

  1. 自我介绍

  2. 聊到原生三件套到框架

  3. 前端工程化的理解

  4. 模块化的理解

  5. 原生操作dom的缺点,vue的虚拟dom,diff算法,patch比较

  6. vue列表渲染key的作用

  7. data为什么是return

  8. http请求过程

  9. http缓存

  10. js的基础类型有哪些

  11. 基础类型和引用类型的区别

  12. es6新特性用过哪些

  13. 块级作用域的理解

  14. let和const的区别

  15. 事件循环机制

  16. 一个看作用域说输出的题目

  17. 找到第一个只出现一次的字符

美团二面: 1h

面试前还挺紧张,因为是秋招面的第一家大厂,但是正式开始面的时候很舒服,面试官很nice。先是聊到了实习期间比较有意思的事情,整个开发的流程规范;然后聊到大学学习的经历,学习前端的契机;然后聊了一下基础知识,写了一道编程题(本来以为会很难,但是几分钟就搞定了);最后反问环节和面试官聊了很多在公司开发遇到的问题和工作内容。面试官对我的感觉还不错,不出意外应该可以过。

美团hr面: 10min

  1. 自我介绍
  2. 大学成绩如何
  3. 实习干了什么
  4. 技术规划

拼多多

面试官要求不能透露聊天内容

百度

百度一面: 45min

  1. 自我介绍
  2. 两段实习经历问了很多
  3. this指向问题,问了很多
  4. http状态码
  5. 浏览器缓存
  6. 编程题,忘了挺简单的

百度二面: 45min

  1. 自我介绍
  2. 腾讯实习里面问了很多
  3. vue数据双向绑定原理讲述
  4. vue实现一个todolist
  5. 两道编程

百度三面: 30min

  1. 自我介绍
  2. 两段实习学到了什么
  3. 前端发展现在的趋势
  4. 以后发展的规划路线
  5. 意向城市、工作内容
  6. offer情况
  7. 反问

虾皮

虾皮一面: 1h

  1. 自我介绍
  2. vue双向绑定
  3. v-model
  4. 事件冒泡
  5. 事件委托
  6. 事件循环机制
  7. 事件循环机制说输出的题目
  8. http缓存
  9. defer和async
  10. 快速排序
  11. 插入排序
  12. 两个排序的对比
  13. 进程和线程的区别
  14. 做过哪些性能上的优化
  15. css垂直居中
  16. flex布局相关问题
  17. xss攻击、csrf攻击
  18. 算法题:大数相加

虾皮二面: 1h

忘了记录

字节跳动

字节一面: 1h

五道编程题目:

  1. 归并排序
  2. 判断基础类型
  3. 深拷贝
  4. (忘了)
  5. 闭包的应用

字节二面: 1h

  1. 解析url
  2. 建立上的项目问了很多
  3. 实习期间问了很多
  4. OSI七层模型
  5. 聊了一下vue
  6. 编程题

字节三面: 1h

  1. 两道编程题,第一道写出来有点小问题,第二题在提示下写出来了

(1)数学题?

image.png

(2)写一个程序计算出Π(3.1415926)的值

  1. 实习期间的问题,讨论到了长列表的优化,还有一些工程化的东西没有答上来
  2. 平时怎么学习的
  3. 技术栈?追问了一下平时vue都使用了什么特性?computed和watcher有什么区别
  4. 微信小程序的开发和普通的web开发有什么区别?
  5. 能提前实习吗?
  6. 反问。给了我一些建议,在腾讯实习的时候没有注意一些整体上的流程如CI/CD,项目如何发版类的关注点。

快手

快手一面: 1h

  1. 自我介绍
  2. 项目问了点东西
  3. 实习问了点
  4. vue的双向绑定
  5. vue的渲染流程
  6. 虚拟dom
  7. js函数传递参数
  8. 数组的一些api使用
  9. setTimeout使用
  10. promise A+规范
  11. 发布订阅

快手二面: 1h

  1. 自我介绍
  2. css隐藏的方式,他们的区别
  3. http缓存
  4. 本地缓存
  5. 项目相关
  6. 实习相关
  7. 算法题(没a出来,讲了思路)
  8. 前端架构上的一些看法
  9. 反问,面试官聊了架构上的看法,受益匪浅。

快手三面: 1h

忘了,没记录

总结

加油!谨以此文,纪念自己丰富多彩的一年大学生活!