本文为转载文
作者:十一月de嚣张
链接:https://juejin.cn/post/704770...
昨天,是我在字节的最后一天。
去年入职的时候,我就在想,自己会在字节待多久,一年?还是两年?毕竟“字节一年,人间三年”。现在答案揭晓了,一年零两个月。不过还好,超过了七个月的“平均在职时间”。
这一年里,我参加了抖音春节项目,在北京封闭开发了两个多月,负责锦鲤会场的开发,从零上手自研的跨端框架,做了不少性能优化,给用户静态页面般的流畅体验。也认识了很多优秀的同事,就不一一点名了。
这一年里,我参与维护了公司级的 Node.js 框架,重构类型生成,优化 TS 开发体验,提供多个 CLI 命令辅助开发。
这一年里,我参与了互娱前端研发框架的建设,基于前端基建以及后端 Node.js 框架,从零建设了前后端一体化的能力,让前后端可以一起开发、构建、部署,既可以做 Page Server,也可以做服务端渲染,通信上前端可以直接调用后端函数,不再需要注册路由,通过高阶函数和装饰器增强函数功能,通过 TS 天然实现前后端类型安全,提高全栈开发效率,成功支持了抖音 PC 版以及很多内部中后台项目。
这一年其实成长蛮大的,来字节前只做过 PC 端的业务以及 H5,来字节后做了跨端,做了 Node.js。而且字节技术氛围也是很浓厚的,各种讨论群可以学到很多知识。经历的两次绩效评估结果也都不错,可以晋升了,在入职即巅峰的字节也涨薪了,一切似乎都在往好的方向发展。
可我还是要走了,就在有猎头问我看不看机会的时候。对我来说,字节的工作并没有那么好,今年的种种操作让我对字节越来越失望。我也开始反思自己在这份工作里还能得到什么,继续干下去的意义大不大。离职的念头一旦产生,就会生根发芽,挥之不去。会让我停下疯狂加班的脚步,让自己慢下来,回过头会发现自己曾经也挺“卷”的,往前看仿佛又是无尽的黑洞。开始反内卷,开始厌倦下班看不到夕阳的日子,开始游泳健身,也开始了跳槽之旅。
跳槽其实并不顺利,因为我不想去大厂卷,所以瞄准了创业公司或者外企。10月底开始面试,第一家面的一个创业公司周末聊了一个小时,做了笔试题,让我感觉还不错,下周一11月1号就跟 leader 提了离职的想法,其实是想可以少做点事有更多时间准备面试,结果5号也就是周五这家给了我平薪。。下午有家很想去的公司也挂了,因为他们没有前端,想招的是更偏业务的前端,能担任产品以及UI的角色,面试时的感觉也比较难受,所以这周给我打击还挺大的,还好我调节能力还可以,就继续好好准备呗。
周末做了我下家的第一轮 coding test,LeetCode 715 的变形,对于 hard 我一般直接看题解,不过题解其他语言都有特殊的数据结构,js的题解有个思路不错,但很难理解而且也不对,我基于他的思路写了个更好理解的版本,并且补充了各种测试用例。周末晚上也做了下微策略的四轮笔试,感觉最难的是英语部分,平均一分钟要做一道选择题,前面查单词浪费太多时间了,后面就看大体意思直接选了,不过也顺利过了。
第二周从外企铃盛开始,很惭愧铃盛一面就挂了。。一开始问项目问方案设计之后就是一系列的js题目,宏/微任务执行顺序,一段React代码有哪些问题,原型链,Class,纯函数,高阶函数,闭包,设计模式,依赖倒置原则等等,有几个没答对,不过我觉得对我帮助还挺大的,一是这也是一个查漏补缺的过程,能知道哪里还有不足,二是设计模式这块让我回去又看了看solid,感觉其实平时做重构的时候,solid就是很好的一个理论支撑。
回去准备了一下,第二天迎来了微策略的面试。微策略每轮都会有一段英语的自我介绍,提前写好背一下,三轮下来感觉自己已经背的很熟了。第一轮技术面除了正常的各种问题以及手写节流外还有两道算法,第一道没找到原题,大致就是把二叉树右子节点变成左子节点的右子节点,当时写了个后序遍历,第二道是反转链表,都顺利写出来了。
二面就是聊天,三面HR面一开始都说英语,后来词汇量实在不够了,就“Can I speak Chinese?” 不过最后也挂了,HR说我没想好,可能当时说了什么真实想法吧。
周五开始了我下家的两轮面试,第一轮直接就是算法,LeetCode 189 轮转数组,不过 k 可以是负数,这个是后面加的条件,会问你是否有漏掉的case,如果刷过这道题的可能不会想 k 是负数的情况。我没刷过,就写了个比较常规也比较笨的方法,然后就开始问复杂度,问怎么优化,当时我可能也不清醒,都扯到链表上了(挖坑),然后他顺势就问了旋转链表(LeetCode 61)怎么做,这个我也没做过,但我知道是双指针。于是继续回到数组上,继续想优化方法,我想了更高效的api,以及不占额外空间的原地调整顺序,其实都接近答案了,就是没说出最关键的点,时间就到了。
第二轮考系统设计,先是问了问项目,然后说看你对后端也挺了解,那来设计了short url系统吧,打开 drawio 就开始画,把我能想到的都画出来,然后面试官提了一些条件(左上角),怎么实现这些功能,计算需要多大存储,怎么优化系统,怎么做到高可用等等。
晚上又面了下滴滴,有HR联系我就接了,正好是我同事的前部门,据说不是很好,不过也没给我过,虽然我觉得面得还不错,反馈说不合适。
周末简单准备了下迎来了第三周,从我下家的第三轮CTO面开始,不过在美国,所以是早上9:30面的,依旧是先聊项目,然后一道经典题:从输入url到渲染页面都发生了什么,我各个方面都说了遍,然后开始一点点深入了,全球多个节点的话DNS一般怎么做,怎么返回最近的节点,这个我没了解过,他也跟我说了下实现。HTTPS相关,怎么握手,怎么验证证书等。怎么让页面渲染更快,系统地说了下。后端怎么做负载均衡,说了下有哪些算法,rr,p2c等,还问了一个更底层的问题,忘了是啥了。然后问用户信息比如余额等怎么存储,我很懵不知道问啥,就扯微服务的话一般是拆分比如用户中心,交易中心等等,然后他问选择什么样的数据库,SQL还是NoSQL,我说了SQL,查询快啥的,他说是强一致性。最后考一道算法,LeetCode 647 回文子串,先说思路,我一开始说了个O(n^3)的,他问怎么优化,提示了下回文子串的特点,我就懂了,利用对称结构,从中间向两边延伸,复杂度多少?O(n^2)。好,那写吧,写完跑一下case,漏了一种情况,再调整一下,ok。
然后又加面了一轮,说第一轮不是很好,让前端的再面面,周四上午又面了一轮技术,是个快手的前端老哥,正好今年也做了春节项目,他们快手退出了我们字节才顶上了,就聊了聊,然后就是一些js的题目,手写curry,看我写的挺快,就加了道算法,没有原题。。
让我边思考边交流下思路,我说先看看有没有规律,发现没有规律,他问没有规律怎么办,我说暴力求解,他说那你写个暴力的,最后也写出来了,就是 n=100 的 case 一开始没考虑到,花了点时间。最后问了下这个要怎么解,面试官说双指针,其实就是维护两个队列,不断取最小值。
最后就是联合创始人面,早上7点。。一开始她也说英语,说不好意思这么早面试,我又被迫亮出“Can I speak Chinese?”大法,回到“有句话叫早起傻一天,我估计今天就要傻一天了”。然后就是从我上大学聊到现在,感觉把我各种经历都问了个遍,最后问问题,我问了一个如何学英语,她讲了下她们有个耶鲁毕业的engineer靠看剧学了n国语言的故事,然后说有什么问题可以给她发邮件,让我觉得还挺亲切的。
第二周就出offer了,稍稍a了下,还比较满意吧,就接了。后面还有些其他面试,这里就不多说了。这次跳槽之旅感觉最大的进步就是做题,基本上没碰到过刷过的题,但是都能做出来,包括后面有个让我写100以内的数字转罗马数字的:
另外 HTTPS 是个高频题,每次必问。然后就是一定要先找几个面试找找感觉吧,查漏补缺,想面的放到后面。最后就是一定不要裸辞,压力真的很大,尤其是我还背着房贷。实际上我在两周前提离职的时候还没定好下家,只是有人说我骑驴找马,我觉得面的也差不多就提了,不过还好最后结果还可以。
结语!
我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群,加我请备注【思否】
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。