一位普通Javaer的成长之路
前言
此文章用于记录自己作为Java开发者的成长历程
永远置顶于我的博客
为什么要做Java
其实本来是想学C#做桌面应用程序的,奈何Java的火热和易上手,加上好找工作些,所以入行了Java
当然,也不影响我现在偶尔会学学C#,做windows下的桌面应用程序
以《斗破苍穹》的斗气段位来代表计算机专业的学习的阶段,更有趣也更直观一些
这是以后端Java程序员走软件工程方向举例,毕竟计算机专业不止软件工程,也可以是做物联网,大数据方向等
- 斗之气,大学入门课程C语言学习阶段
- 斗者,C语言大作业能自己完成
- 斗师,大学Java课程学习阶段
- 大斗师,学完了Java基础,能够完成Java大作业
- 斗灵,学习JavaWeb,数据库相关知识,学习使用Linux
- 斗王,能够利用JavaWeb和数据库,做一个相对能看的管理端系统
- 斗皇,学Spring全家桶,会使用SpringBoot,ORM框架(MyBatis一般都是),此时的水平已经能去找工作了
- 斗宗,开始学习微服务,Nginx,Redis,消息中间件,搜索引擎,日志分析追踪,Jenkins流水线等相关组件,提高自己的系统性能和可用可维护性
- 斗尊,进阶学习斗宗阶段的内容,理解源码,融会贯通
- 半圣,开始研究架构相关,分布式数据库,超高并发,深入浅出JVM,编译原理等
- 斗圣,一名真正的强大的架构师,什么都懂什么都会,K8s?
- 斗帝,???
2024-02-19 目前工作三年,处于斗宗阶段
Java基础
入门级别,学完了也仅限于刚刚入门能看懂代码,自我编写的能力有限
有C语言基础的情况下,很快就能学会
从零开始重学Java 第0天
JavaWeb
Java强大的地方在于做Web服务,访问密集,计算相对较少
Java基础学习结束,能做到的系统仅仅局限于普通的命令行程序,想要做一个大众能看能用的系统,就需要JavaWeb了
熟悉又陌生的JavaWeb 第0天
Spring与ORM
虽然已经可以用JavaWeb开发网页,但仅限简单网页,如果网页数量较多,项目整体的开发和管理是很痛苦的
特别是涉及到与外部系统交互,很明显仅仅靠网页是不够的,于是有了前后端分离,前端负责页面展示交互,后端负责数据逻辑,以约定好的(JSON)数据格式交互
Spring
SpringBoot
一键启动,约定大于配置,Java框架的里程碑,Java不再需要繁杂的xml配置
ORM
数据库与Java直接交互的封装,再也不需要自己new Statement啦,框架帮你处理
日志分析追踪
假如没有日志,系统出现了问题,都无从排查,记录日志是一个好习惯
利用好切面等统一处理的方式来记录通用日志,重点代码处单独记录日志
日志记录
不想每次都去拉取log文件排查,那就异步记录到数据库里吧
日志追踪
涉及到微服务多模块调用,如何确定是同一笔请求,就需要利用TraceId在模块间传递
单体系统出现性能瓶颈
单体系统,已经用了加内存,加线程数量,仍不足以解决当前业务并发量,需要想新的办法
Nginx
单体模块性能有些不够用,我们部署2台,靠Nginx反代均衡负载
新老系统并行,利用Nginx分发请求到不同系统
搜索引擎
大文本数据的搜索,多种类型数据的聚合搜索,仍然傻傻的用 like '%xx%',数据量访问量日趋增大,数据库不堪重负
于是引入搜索引擎,方便客户端快速检索到需要的数据
微服务,Duboo或者SpringCloud
多种业务代码全部写在一个模块里总是不好的,不利于优化代码,也不利于分工协作,启动也越来越慢,一些公用代码也难以改动
我们可以把每个模块都独立出去,各自管理自己分内的事情
Redis
单模块下,缓存可以用本地Map来处理,业务加锁也只需要关注自身
微服务多模块,就不能再使用单模块方案,于是有了Redis来解决这种情况
消息中间件
单模块下,多任务可以本地使用线程池来解决
微服务多模块,注重解耦,两处代码不在一个模块里,需要通知另一处代码协作处理
Jenkins流水线
模块太多啦,每次版本发布升级都需要处理很多台服务器,容易出错
重复的操作都可以被程序替代,Jenkins为你解忧