作者简介:石石臻臻 Kafka Contributor 、 LogiKM PMC、nacos Contributor、华为云 MVP 。 滴滴Kafka技术专家 、开源项目践行者。
哈喽、大家好 我是石臻臻
之前有一些同学问了我一些后端相关的问题,那么我在这篇文章里面偶一个解答。
后端学习路线的话推荐2021CSDN年度博客之星Top2的 哪吒 整理的学习路线了。
这个整理的是相当的全了,当然你也可以去我的公众号:石臻臻的杂货铺 回复:福利,领取相关全套资料
数据结构 就按照学校的教科书学习就足够了
算法是需要刷题练习的, 有机会可以参加 ACM、蓝桥杯啊之类的赛事,一般学校可能都会有相关的训练营,专门的算法老师指导
平时也可以自己刷一刷LeetCode、牛客等等一些可以刷题的网站。
这里我推荐一位CSDN 2021年度博客之星Top1 英雄哪里出来
老哥非常的肝,每天5点起床刷题直播写博客, 你可以跟着英雄老哥一起刷题,还提供专业指导!
那我就简单的讲一下我自己整个目前为止的职业发展、学习路线和学习方法, 希望能够作为一个样本参考一下。
因为我自己本身是对技术有追求的人,可能有的同学从事这一行只是为了一份收入尚可的工作,内心并不喜欢搞技术, 毕竟这一行确实挺累的。但是我其实是比较喜欢研究技术的那类人, 我大学学的专业也是软件工程, 工作接触的越多,发现自己懂的越少, 内心就越渴望学到更多。
加上那个时候(现在也一样)经常有很多人贩卖焦虑:35岁下岗危机
就是这样一种环境下, 那时候的我在意的只有一件事情:那就是学习!
我甚至用便利贴在出租房里面贴满了便签,上面写着:警惕35岁危机!还不去学习!
虽然我这个行为看起来有点滑稽,但这确实是我当时真真实实的行为,也就是说我刚从业这一行就在为了35岁危机而担忧,而做准备。 但我相信不止我一个这么想, 稍微有一点危机意识的同学,应该也在为了自己未来能够更有竞争力而努力奋斗(卷)。
那么,我又是怎么学习的呢,学习路线又是怎么样的呢?
我把它分成以下几个部分
前期: 利用一切时间和精力来学习提升自己 以看书为主
基本上那时候工作日的早上, 还有周末的时间,我都是用来看书的, 为啥没有晚上? 因为晚上一般在改Bug.
每天早上第一个到公司, 拿出自己买的技术书啃起来, 比如 Java核心啊、Jvm虚拟机、Spring技术内幕、Mysql精通、等等之类的。每天基本上早上能看一个小时的书。
看书的话我觉得是这个阶段快速提升自己的一种方式了, 吸收总结作者的的精华。比我们自己去看源码,或者到处去网上找资料学习高效的多(网上找的资料参差不齐,甚至有很多错误)
中期:积累实战项目经验,多思考,学会总结,多写博客记录
在工作中参与的这些项目都是我们宝贵经历,在这个过程中我们可能会写很多的bug,遇到很多的异常情况,有的时候你能够解决,有的时候你束手无策, 可能有的时候一整天都找不到原因解决不了, 这是一个痛苦的过程, 最后这个bug可能你改了,也可能同事帮你解决了, 但是你绝对不能就这么过去了,学会总结,学会记录,会让你不会在一个坑上踩多次。
关于多思考, 这个并不是一句空话,其实我们在写代码的过程中,并不是简简单单的去实现当前的需求,而是要多思考当前的设计是否能够应对未来的发展
比如你实现某个功能是否能够用到某个设计模式、你写的接口是否具备扩展能力,万一以后有需求变更你是否能够快速响应变更、代码是否合理健壮和优雅、还有是否能够应付未来的业务量的增大所带来的压力。
你如果有这样子想就说明什么? 说明你已经有了 架构思维!
那么你思考的这些怎么去落实, 这个就是你的架构能力, 怎么去把你的想法落地,是需要你拥有相应的知识储备的、整个后端体系那一套的技术栈 那么你得会吧。
中后期:读大量开源项目源码,并参与贡献, 尝试自己造轮子
在上面我们已经具备了一定的理论知识和实战经验之后, 我们需要多去读一读开源项目的代码。
因为毕竟你在公司参与的项目比较受限. 所以我们需要去开源社区了解优先的项目甚至参与它!
我自己是读过很多的源码并写过相关的文章的, 比如
Spring、SpringBoot、Nacos、Seata、Kafka 等等
我读源码的时候 ,把这个源码吃透了 我会写相关的源码分析的技术文章,你可以看看我之前写过的博文,都是我读这些源码并分享的痕迹。
读源码跟写出来是两回事, 你写一篇文章需要构思从哪个方向写, 如何写才能够把你想要表达的重点很好的表现出来。 那么就需要你非常的了解他, 哪怕是若干年后你忘记了, 回头来看看自己写过的文章也能迅速的理解。
所以,多读优秀的源码,并写出来吧!
当然了,你读了这么多源码,你肯定对你读过的项目很熟悉了,那么干嘛不参与贡献一下呢?
领取一个issue,尝试的去解决它, 会让自己得到极大的满足感。
我之前一直是写后端的, 但是我并不想只做一个CURD Boy,所以后来我就自己在业务的时候写写组件给其他同事用用,大家用着还不错, 后来我就跟领导说,我要不开发一个XXX组件吧,它能够提升我们的工作效率. 理所当然的 领导就让我着手去干, 所以我就慢慢的一边带着后端研发团队,另一边又在开发组件, 后来就慢慢的直接组建了一个中间件的小团队来服务技术团队。
如果你想造轮子, 那么你就必须对其他的轮子非常了解!
后期:提升技术影响力 多做技术分享
提升自己在团队中的技术影响力, 也提升自己在外部中的技术影响力
内部影响力可以多做一些技术分享,多帮其他同学解决一些问题
外部技术影响力可以通过写写技术文章比如CSDN、或者公众号啊等等。
后端技术栈真的太多了, 但是如果你是刚进入这个领域的话, Java、Spring、SpringBoot、Mybatis、Mysql、Redis、Dubbo、Mq 这些你需要会用, 基本上会用这些 工作上来说没啥问题。
但是如果你想进阶的话, 数据结构、操作系统、设计模式、多线程高并发、Jvm虚拟机、等等等等是你绕不开的
如果你现在还在学校里面,我非常强烈的建议你把 数据结构、操作系统、Java语言 给学好, 因为后面你所用到的大部分框架都是基于这些来构建的。
如果你这些基础打好了,你后面看其他的框架代码就非常轻松了, 否则的话别人的源码你看起来会觉得是一种折磨。
整个后端体系的技术栈是非常的广也非常的深的,我觉得首先一点就是要有对技术的敬畏之心。
还需要对技术要有一定的热爱和钻研精神,搞技术有的时候确实是挺苦的, 选择这条路那么就是选择了与孤单做朋友 (如果你只是满足于curd,那么当我没说)
那么我们如何能够在这条孤独的路上走的更稳、更远呢?
请看问题 3 和 4.
1、要掌握接口测试,可选用工具/脚本辅助进行,比如postman、jmeter工具,也可以用python或者java脚本。最终实现接口自动化
2、要会查看服务报错日志,能精准定位问题,需要对微服务架构有一些简单的了解
我做过的项目很多, 而且项目也不是一句两句就能说的清楚的。
想通过实例学习,建立可以去GitHub上多看看一些优秀的开源项目。
这里我可以提供一个我只前写的一个 Redis延迟队列的小组件。
项目地址:https://gitee.com/songwaimai/redis-delay-queue
对你学习Java多线程、Redis、Java锁等等有有帮助。