目录

  • 稚嫩的大学生与坎坷的大学生活

    • 外包与创业

    • 一阵反思

  • 简短的研究生生活与再次创业

    • 无法安放的心

    • 图雀伊始

  • 阿里梦,梦未圆

    • 开始准备面试

    • 与阿里的邂逅

    • 第一次梦的破碎

  • 终究与腾讯擦肩而过

    • 很激动第一次进大厂

    • 理想与现实差距太大

    • 再战再面,拿下 IVWeb

  • 天道酬勤,终进字节

    • 偶然的相遇

    • 突然其来的加面

    • 入职新体验

    • 友好的 Landing

    • 持续成长

    • Always Day 1

  • 未完待续

生活是一个圆,你在开始的时候可能已经可以预见终局,但生活有时候又是一条蜿蜒的道路,在这其中充满了很多的机遇与期待。

而关于我的生活,以及如何从校园走向职场的,我很想与你分享一下。

稚嫩的大学生与坎坷的大学生活

本科那几年,过程比较坎坷,尤记得大一在上海还为了名为 “插班生” 的考核而努力,四年间跌跌宕宕的,从一开始的物理专业转到了计算机专业,并认定计算机就是我这辈子的归宿了。转到计算机之后的头一年还是在忙于从复杂的专业课中寻找一丝喘息之气,直到偶然的一次课程设计,以及偶然的一次课上,我打开了慕课网,开始进入 Web 开发的神奇世界。

后面的生活就是如图中开始 “放荡”:

确实,进入 Web 开发世界,或者说是进入了程序员的世界改变了我以前单调乏味的伏案学习的姿态,释放了我的双手和大脑,可以开始不局限于书本而自由的探索,自那以后,我先后学习了 HTML、CSS、JavaScript,然后顺着视频教学中的一些技巧,开始探索 Git、Linux/Shell、了解 Github,还 “差点” 踏入 PHP 的坑,为了完成课程设计 -- 一个简单的全栈电商系统,我又 “被迫” 探索了 Node.js 和 Express,探索学习的路简单而快乐~

但生活不总是活在想象中,它是各种因素组成的复杂共同体,在学习了 “全栈” 开发技能之后,已经能轻松胜任学校课程设计了,并可能是经常在 QQ 空间发一些学习技术的 “说说”,俨然成了同学们口中的 “大神”,所以当学校有一些外包任务或外校过来找创业伙伴时,自然就成为了头几号人选,再加上从小就有一颗创业成才的心,所以经常与这些事情一拍即合。

外包与创业

在做外包和搞创业的过程中,才发现自己平时探索的那些内容只能算是基础,近乎于 “玩具”,比如在为学校的开发一个实时答题系统时,没有各种需求分析、文档设计,也没有考虑网络延迟、性能等方面的因素,当把功能开发完并在自己的机器上进行了 “手工” 功能测试之后,以为已经完备可运行,但实际放到真实环境下运行时,却漏洞百出。比如当时使用这个答题网页的环境是在一个封闭的大会议室里,可容纳 300 多人,网络环境极其恶劣,而为了满足实时性的目标,我使用了 Socket.io 这个库,在网络环境很差的情况下,Socket.io 也会经常遇到掉线的问题,而我没有考虑掉线、重连的场景,就会导致整个数据会全部乱掉;而 300 多人以及大量的 Socket 链接直接击垮了我的 “学生机” 服务器,导致在整个答题活动中现场不停的重启服务器,修复破损的数据,虽然通过这种 “抢灾式” 的维救工作保证顺利度过了答题活动,但同时让我深刻认识到真实复杂场景下,自己能力的严重不足,并寻求之后更加深入的探索以弥补自己的不足。

说完外包生活,再来谈谈创业。正如之前提到的,因为平时喜欢冒尖,所以在外校过来找创业合作伙伴时,我就成了首选合作伙伴之一,在当时还有一个和我同年级计算机专业的伙伴也加入到阵营中来,我后来叫他啊哲。创业相比给学校做外包来说难度等级又更上了一层,我们当时期望做一个 “文体教育 O2O” 解决方案,并期望开发移动端 App,类似饿了么 + 快手模式,一行 7 人筹钱在学校边上租了一个小房子开始了创业旅程,当时时值寒假,有充足的时间进行创业。我主要负责前端工作,啊哲负责服务端开发工作,同行的还有一位了解设计的同学和三位跑市场的,因为没有客户端同学,而我们又要做 App,一度焦头烂额。所幸有一位市场同学之前有过找外包的经验,于是带我们去了解了一些大型的外包团队,去拜访他们,进行学习取经。

生活就是不断学习的过程,一行取经路还是有很大的收获的,至少我们了解到可以使用 React Native 这种技术来实现我们的目标,即用前端技术编写移动端 App,一份代码产出 iOS 和 Android 两端。人齐了,技术方向有了,接下来就是对接需求、产出设计稿、开始开发了。但事情远远没有想的那么美好,故事里经常描述一群人在车库里鼓捣事情,然后产品一经面世,轰动世人,从此水涨船高,走向人生巅峰,成为下一个传奇。其实创业是由一连串看似琐碎的决策、抉择所组成的,在每个阶段需要用不同的眼光看问题,比如在初期人手不足、经验不足,就不应该好高骛远,事事精益求精,在设计上能够画出来的东西,在开发上可能非常难以实现,第一阶段花费的时间太长就非常容易消磨团队成员的耐心,特别是在时间本就不充裕的情况下(寒假也就也一个月,寒假过后还要读书),对需求的不合理判断和规划以及在其他方向没有实质性进展就压垮了团队成员的信心,寒假过后,团队解散,项目随之流产,留下的只是无尽美好的想象和满满的经验。

经过这一段自学、外包、创业的旅程,让我深刻认识到自身的技术实力、各方面软技能与真实世界的差距,感觉各方面都学了一点,但是各方面都不精通,感觉很挫败。而时间又过了一年,站在考研升学、工作、创业的十字路口,难以抉择。看着网上的面经,对比自身的知识深度、广度,发现差距太大,所以都没有踏出去找工作的那一步,选择畏缩在原学校里,凭借还算不错的绩点,保研到本校,选择了一条不需要过多思考的路。

一阵反思

在当时的情景下,我觉得字节、腾讯、阿里离我太过遥远,进入一家小公司又心有不甘,就连步入社会都带有一种条件反射般的恐惧心理,选择保研可能是一种喜乐参半的决定,但我知道,我心有不甘,我的热情还未磨灭,但时机尚未成熟,有待潜心韬光养晦,梦想终究会实现的。

简短的研究生生活与再次创业

我的研究生生活可以用一个比较揶揄的段子来说明:

“花了 2 个多小时等待游玩一个项目,结果 5 分钟就结束了”

在本科生活的末尾,即将毕业的时间里,甩开其他的各种烦恼,我对我的研究生生活充满着期待,我细数着心中的规划:专研深入 Web 开发,了解性能优化、网络、操作系统等底层知识,拥有能够开发大型复杂项目的工程能力等等,接下来一定要花时间好好潜心专研,不再忙于琐碎的事情而没空学习... 对对,还要好好准备简历,最好能抽空出去面试、实习,然后进入大厂认真学习更加专业的知识!

无法安放的心

但实际和我想的大相径庭,研一进去安分了2个月,就开始投入到一个 “微校” 的小程序创业项目中,使用 Taro 开发,依然在自己熟悉的 React 生态里寻找舒适的解决方案,微校专注于通过圈子将校园生活打通,并通过引入 “学校” 这个概念,将各个学校的生活打通,最终组成一个打通中国所有校园的小程序平台,使得各个学校能够共享信息和交换价值,听起来和 “超级课程表”、“微信圈子”、“知乎圈子” 有点像对吧?

“微校” 的创业持续了近一学期,一整个学期我几乎都在撰写各种业务逻辑,包含登录注册、负责服务端数据库设计、消息推送、文章列表、还有聊天列表等,实现了一个现代网站、App 应有的各种逻辑,借助 LeanCloud 的 BaaS 服务,一个人可以抗下所有,前端即全栈。虽然微校开发出来了,投入了使用,并收获了近 100 个用户多次访问,但是需要耗费大量的精力做原始内容的积累以及运营推广,再加上服务器带来的资金压力,最终因人手不足(只有我一个人)导致项目流产。

这让我深刻反思一个道理,创业其实是一群人的事情,平时需要多交朋友,找到互补型的人才,然后创业之前应该做大量的市场调研、走访了解用户需求,然后通过小规模、低成本试错来不断的迭代产品。同时对技术世界抱有了更加大的期待,Serverless 技术的兴起,Node.js 的繁荣,为创业带来的新的机会,更少的人可以做更多的事情。

本来以为接下来的时间可以歇一会,然后安安心心的工作了。

图雀伊始

刚做完微校的那个学期末,偶然的一天,室友啊哲和我聊起了之前在做的 “图雀” 项目,以加速技术的传播为使命的一个偏技术类的项目,主要基于一个 Git 项目,然后提供一个写作工具,可以渲染 Git 提交步骤的每个步骤,并展示 Diff 文件,并为每个 Diff 文件提供上下两个可供撰写解释的编辑框,通过为每个步骤的每个文件撰写解释即可成为一篇文章。之前做了一个半成品,很多还不完善,这次想着要不努力一把直接搞出一个成品出来并投入市场验证验证,想想还是有点激动的,于是乎,始终无法按捺躁动的心,说干就干。

这一次吸取之前的教训,每次迭代一小部分,然后不断的找用户验证,并基于开发的工具撰写文章,开设各平台账号发布文章,多管齐下。图雀项目前端使用 React、TypeScript、styled-components 等库,服务端使用 Express 等技术,编辑器采用 Slate,然后借用了第三方的 Gif Diff 解析器和参考 Gif Diff Viewer 等源码自己实现了定制的 Viewer,经过多种技术栈的组合,投入两个人力,花费大概 1-2 个月时间,把工具的原型搞出来了,我们还建立了 Github 机构账号,开设 Hexo 博客,鼓励社区进行写作并发布到我们的 Hexo 博客里。

经过小半年的努力,各平台访问、粉丝都开始爆发,掘金到达 LV5、公众号粉丝突破 1W+、知乎也取得了不错的成绩,但是最初的选项有所失误,Slate 极度不稳定,经常卡死,在内容多的情况下具有严重的性能问题,需要开发者做很多的努力优化,而这又属于整个写作工具的核心,没有它就没有写作工具;再加上当时快要到研究生毕业答辩,我们仍然没有找到稳定的变现模式以养活我们 2 人,种种困难叠加在一起,导致思考出现阻塞,频繁变更技术栈,调研一些无关的内容,以及一些伪投资人的忽悠,最终不得不放弃,艰难的放下,很不舍,但现状所迫。

顺便一提,在图雀项目开始的第一个寒假,就遭遇了人类史上空前的灾难 -- 新冠疫情,目睹了这等惨状,再加上自己艰难的遭遇,难免给人一种想要退却的感觉,而新冠的到来让我们在家待了近一年,失去了在充裕时间里线下推广图雀的时机,而研究生生涯又即将结束,命运总是这样,需要为将来能成大事的人提供充分的考验,我心里这样想着。

2 年半的研究生生活,有 2 年都在创业中度过,只留下短短半年准备研究生的毕业事宜,有遗憾,但只能前行。

阿里梦,梦未圆

时间来到了研究生生涯末尾,多次简短的尝试创业都没有结果,别无他法只能开始埋头找工作了。在整个前端学习生涯中,接触到各种各样的技术,虽然不够精湛,但是什么都懂一点,其中前端重度使用 Ant Design 作为开发标配组件库,在状态管理则用过一段时间的 Dvajs,还对 qianqun 微前端框架有所耳闻,同时在做图雀的过程中一直也对语雀(蚂蚁集团推出的文档知识库产品)推崇有佳,所以找工作时的第一个想法就是想进阿里,想进蚂蚁集团,想进体验技术部,能够和偏右、苏千、阮一峰等大牛一起工作,探索体验科技的乐趣,我想这可能是绝大部分前端工程师向往的圣地吧。

所以一开始就以进蚂蚁的体验技术部为目标开始准备面试,由于之前没有任何实习经历以及大厂的面试经历,身边也没有有相似经历的朋友、学长学姐,所以就只能自己去探索如何去准备面试。

开始准备面试

可能和绝大部分同学类似,预计在 7 月进行面试,而在 6 月开始准备时,一般会考虑把前端知识从 0 开始相关的书籍、教程再看一遍,以确保准备没有漏洞,于是就有了下面的看书组合:

除此之外还看了一些前端工程化、CSS 深入、TypeScript 相关的书籍:

当然还有一些比较经典的理解 JavaScript 的书籍:

一股脑整理了上述十几本书籍,准备大刀阔斧的看一轮,好好准备自己的面试,以期查漏补缺。显而易见,刚开始的 10 多天还能坚持下来,但是 10 多天下来发现这样看下去太慢了,虽然我尽可能快和粗略的看了,但也只完整的看完了前端工程化、你不知道的 JavaScript 三件套,其他就是蜻蜓点水,粗略的看了大概,所以基本没有学多少知识,同时时间也临近开始投递简历、面试的节点,再在网上搜罗了一些面经,发现绝大部分都不会,顿时心里就慌了,这个时候我知道需要改变准备策略了。

因为在准备期间经常会有看别人面经的习惯,所以我灵机一动,能否通过收集大量的面经,然后从面经里面提炼共同点,然后总结出一份面试考卷和答案呢?我觉得是可行的,只要面经的数量够大,那么可以覆盖绝大部分面试题目,再加上自己准备过程中的理解和过去的一些经验,应付面试应该够了。

于是我开始了比较疯狂的面经总结和提炼之路:

我大致的流程如下:

  • 搜索关键词:xxx 公司前端 一、二、三、四技术面面经,因为现在离 HR 面还太过遥远,走一步看一步

  • 接下来就是总结出需要面试的主题,经过多轮面经的洗礼,大约总结出如下主题:

    • JavaScript 基础

    • CSS 基础

    • 计算机网络

    • 浏览器相关

    • 性能优化

    • 前端安全

    • 前端算法

    • 前端框架

    • 前端构建与编译

    • 操作系统

    • Git

    • 数据库

    • Node.js

    • 一些开放问题、智力题

    • 手撕代码

  • 接着在每个主题里面整理对应的问题,并根据多个面经里面多次出现的题目标注权重,依次递增,方便之后时间来不及时重点复习,大致如下:

其中 2 代表出现过两次。