27届 两进字节!!从计算机小白开始的打怪升级之路!!
继大二上拿到字节跳动的 飞书 offer 后,前段时间又拿到了字节 TikTok 的 offer,一直有人私信问我学习路线什么的,但是这段时间一直都在考试,没有时间整理,现在考完了,于是把我的“打怪升级之路”分享给大家!!!!!
希望各位牛友点点赞,送送花,创作不易。
第一关:选择一把合适的“武器”
想当时我刚上大学的时候,对编程几乎没有任何概念,看着学校的那些课程一点都没感觉。但是正好开学的时候有一个工作室招新的活动,学校里面有很多的工作室,每个工作室有很多的方向,针对每个方向各个工作室会出一些题,然后我们可以通过这些题的引导去学习某个方向。就是这个时候我接触到了后端开发方向,而且我看那些题觉得还挺有意思,所以就决定试一试。这个时候就面临一个选择:Java or Go?
先说答案,我选的Java,为什么,哈哈哈哈哈哈哈,因为没怎么听过Go,当时选择的原因就是很简单。
但是现在要让我来选的话,我会考虑很多,但是大概率还是会选Java,为什么?
- Java 的生态比 GO 好太多了,选择Java开始学习,你可以很轻松的找到很多资源,然后很容易的见识到整个后端体系是怎么样的。
- Java 面向对象的思想对于开发工作还是比较重要,通过学习Java你可以很轻松的学习到这种思想。
- Java 的岗位比 GO 要多很多,而且比较多 GO 的岗位接受 Java 转码。
那Java这么多优点,那是不是就不选 GO 了呢,这时候肯定很多 golanger 要站出来骂我了,先别骂,当然不是!!Go 还是有很多的好处的
- GO 的学习比 Java 轻松,GO 非常简单,非常轻量,相比 Java 那些繁冗的配置,GO 真的要清爽很多
- GO 的天然支持高并发的设计,让 golanger 应对高并发场景更加得心应手。
- 很多大厂都在使用 GO,面试这些岗位或许你会有一些优势
那我建议什么样的人去选择 GO呢?如果你觉得你有很好的挖掘信息,寻找资料的能力,还有比较强的自主学习能力,那么我非常建议你选择 GO 语言,然后还有对于很多高学历的同学,我也比较建议你们尝试一下 GO 语言,因为一般来说你们的创新能力和学习能力都非常强。
最后说一下,其实语言都不重要,不要太纠结选什么语言,后端开发需要的是你的思想,而不是哪个语言。比如我学的Java,现在写 GO 却比较多。
第二关:熟练使用你的“武器”
选择好了你喜欢的语言之后,那么就需要你去熟悉他,那么熟悉他的最好方法就是多用,我提供两种比较好办法:
- 写LeetCode,这样你既学习了算法,又记住了很多的API,一举两得,何乐而不为
- 自行实现常见的数据结构,比如链表,二叉树,多叉树,甚至是哈希表,虽然很多数据结构在你的语言中都已经封装的非常好了,但是我还是非常建议你自行去实现一遍,这样对你的编码能力会有很大的提升,包括你Debug的能力,手动狗头。
我们进入工作室之前除了做题还是需要面试的嘛,我准备面试的时候就刷了很多的leetcode,但是都是简单题,因为难的做不来,哈哈哈哈哈哈,还有对于很多数据结构都自己去写过,然后信心满满的去面试,结果挂了,。然后后面好好复习了一下,第二次面试我现在的工作室的时候才面试成功。
不得不说,我们学校这个工作室办的还是挺不错的,可以在开学的时候就push你去学习一些东西,找到你感兴趣的方向。
第三关:打怪、刷经验、升级!
个人觉得这个阶段比较重要,这是你正式接触到后端开发的一个阶段,所以可以好好去研究一些东西(如果你时间比较充裕的话)。
这里你培养两个比较好的习惯:
- 学会在网上搜索资料,不管是 gitHub,CSDN,StackOverFlow,都可以是你查找信息的好地方
- 学会使用AI,这非常重要!!!!使用好AI可以让你的学习效率提高至少1倍
我直接分享我的学习路线了:
- Java Web
- MySQL
- SpringBoot
- 苍穹外卖
- SpringCloud
- 黑马点评
- 黑马头条
这里说一下,我其实看黑马的视频不多,我看的更多的是另一个博主:
*****************************************************************
然后我在学完JavaWeb之后自己写了一个图书管理系统,哈哈哈哈哈,很老套吧,但是我当时并没有使用SpringBoot,完全靠Servlet手搓的,以至于我学了SpringBoot之后感叹之前都是吃的什么苦。
然后我觉得苍穹外卖其实做的真的挺不错的,现在我回来看仍然觉得这项目值得做,可以让你了解到一个项目的基础架构是怎么样的,还有一些优化的点,比如说Redis缓存等等。
黑马点评可以让你深入学习Redis,我觉得算讲的非常不错得Redis实战课了,其中的分布式锁讲解的非常详细。
至于黑马头条,那就是让你对微服务有一个大致的认识,里面有一些亮点其实可以拿到面试中去讲的,比如使用Redis+MySQL去实现延时任务。
对于 MQ 我没有系统的学习过,更多的是看技术文章和实践中去学习的,不得不说,实战就是做好的学习方式。
好是好,但是我仍然不建议把这三个项目放在简历上,就算要放一定要好好包装一下,如果有时间还是去换一个项目做。如何选项目可以看我的另一篇文章:
https://www.nowcoder.com/discuss/757298966588383232?sourceSSR=users
Q:那每个点需要学的特别深入吗?
A:不需要!!
学知识是一个迭代的过程,不是说这个东西我学了,我之后就不看了,你之后还会反复的来看这些东西,所以最开始你可以学习一点浅显的知识,比如MySQL,会写SQL就行,苍穹外卖我能跟着敲下来,能够自己debug,我觉得就合格了。你可以之后再来针对某个点深入的学习,比如MySQL的MVCC,索引机制。
Q:我需要学完一个再学习下一个吗?
A:不需要!!
学习不是线性的,是发散的,你完全可以结合起来学习,但是我觉得你同一时间并行的任务不要太多,可以使用“池化技术”,调度着学,并行太多学习效率并不高。
这些做完了就到了你自主学习的阶段了,可以去看看大厂的技术博客,也可以看看极客时间的一些文章,比如MySQL45讲这些,我觉得收获的地方都很多。我列举几种方式
- 看源码,尤其是 JUC 中的设计,你如果看过,你绝对会被其精妙的设计震惊的无法说话,其中的思想,非常值得我们借鉴
- 看技术博客,我觉得美团和阿里的技术分享做的真不不错,我感觉他们是有很用心的在做分享
- 逛技术论坛,你甚至可以把这个当作抖音来刷,不要当作任务,你看帖子的一些评论或者一些内容可以打破你的信息壁垒,会让你知道自己与大佬的差距有多大。
第四关:挑战Boss
如果你已经准备好了,那就到了找实习的阶段了,那么怎么找一个好的实习呢,分为三个部分:
- 简历准备+改进
- 八股文+LeetCode准备
- 项目准备+拓展
其实每一部分都有很多可以说的地方,我这里简单说一下,后续我会出一篇文章专门说如何准备面试。
首先简历一定是一个不断改进的过程,不要嫌麻烦,一定要多去看看好的简历去改进自己的简历,尤其是项目的那个部分,什么该写,什么不该写,一定要好好斟酌。
然后就是八股+leetcode了,对于一些大厂来说八股还稍微好一点,你算法挂了,那就基本挂了,所以这两个我建议是一起准备,尽力每天都去刷一两道题保持这种感觉。
对于自己的项目,一定要熟悉,特别是写在简历上的点,如果问到你,你支支吾吾,那我有理由怀疑这不是你自己做的。然后就是拓展点,我觉得你的核心功能需要准备A、B两种实现方式,可以给面试官体现你自己的选型能力和思考过程。这应该会比较加分。
最后就是海投了,要相信自己,坚持下来,如果没有面试就好好沉淀自己,抓住每一次机会,对每一次面试及时复盘,这样你提升会非常快。
我的分享差不多就到这里,有不对地方希望牛友不吝赐教。