在做管理的时候,我发现了很多同事职业发展的问题。很多同事都是积极好学,自己看了很多书, 网上买了很多视频,但是发现自己的技术始终在某个瓶颈徘徊,始终没法达到一个很高的位置。
为什么呢?这里我援引大量同事给我的反馈: 我是看了很多书,很多视频。 但是我学到的,仅仅是一些理论知识, 写一些HelloWorld,仅仅明白了一些技术的原理。然后学到的所谓"项目",其实都是十几个小时,或者几十个小时,充其量就几千行代码的小Demo,跟大公司里复杂生产环境下的大型项目,简直相差了十万八千里。
我还是不知道复杂大型系统在线上几百台甚至上千台服务器的环境下,如何开发、测试、部署、回滚、监控和报警。也根本不知道在一个业务极度复杂的系统中,缓存到底该怎么用? MQ到底该怎么用?怎么分库分表?怎么读写分离?不同的机器用什么样的配置可以抗住多高的并发量?
虚,心里很虚!
上面就是很多我的老同事给我的真实反馈,在这个过了40岁码农就很难混的年代,每个人内心都充满”了焦虑。很多人告诉我,他们去外面面试,自己也通过看书,学习视频课程准备了不少东西,但是一去面试就傻眼了。
因为出去后才发现,人家要的是你有过真实复杂大型项目的经验,且这个项目最好是能支撑大量用户访问的高并发、高可用、分布式大型复杂系统。而你准备的,仅仅是大量的理论知识,远远不足以让你拿到所谓的架构师等高阶的职位。
于是互联网行业内出现了这样的一个阶层固化:很多学历在大专~普通本科,常年在中小型公司工作的人,一直重复做着CRUD等技术含量很低的工作。公司就是没什么用户量,就是没什么技术挑战,你又能做出什么花样来呢?
然后这些有上进心,不满足于现状的同学,自己平时看书、 看博客,却发现学习到的始终还是各种理论知识、Demo 项目。出去面试,始终迈不过高并发、高可用、分布式大型系统架构经验这几座大山。
我见过大量这样的同事,可能工作5年, 8年,甚至10来年的都有,但是技术能力就停留在高级Java工程师的水准,薪资也是在20多k到30k之间徘徊。虽然不是说每个普通出身的同学都会这样,也有人出身普通,但是凭借着 自己的努力做的非常好,但是大量普通出身的学员都是上面这个进退两难的情况。
然而很多大公司的同学,都是211、985名校硕士背景出身,毕业就去各大互联网公司拿15k甚至20k (这两年校招薪资猛涨)的offer。 接着工作2年,带着支撑过几千万用户量的项目经验跳槽,就是另外一个大公司的高级Java工程师,薪资20多k。
接着再干两三年,带着支撑过上亿用户量的大型系统的经验再跳槽一下, 就可以出去带个团队,拿着技术专家的title,薪资达到30多k。
然后再干个两三年,带着团队管理经验+几亿用户量的大型系统经验,出去跳个槽,也许就是某小公司的技术经理、技术总监的级别,薪资四五十k,甚至五六十k,手握创业公司的大量期权,买房买车,人生大赢家。虽然不是说每个名校硕士出身的人都可以这样一帆风顺,但是确实这样的人我身边很多,比比皆是。
这就是所谓的 IT行业内的阶层固化 ,因为我其实一直都是第二种情况出身,所以在自己整理资料以前,根本不太了解第一种同学的情况,但是这几年的线上授课经验以及与大量同事的沟通交流,我深刻了解了这些中小型公司的同事在职业发展道路上的困难和瓶颈。
在了解大量同事的职业发展困难,以及行业现状之后,我对每个同事都指出了一个至关重要的实现人生逆袭的要点:看书、看视频只是一个辅助作用,起不了决定性因素。你们真正需要的,是能够在一个大型、真实而且业务极度复杂的系统中,经历一遍从0到1,从1到10,从10到100的全过程。
这次分享的也是我自己这么久经验整理出来的Java核心框架指导手册,手册分为三个部分:
第一部分:解读MyBatis框架中关于接口层和配置文件解析过程;
第二部分微服务Dubbo通信架构高扩展性架构设计原理,深度剖析Netty通信方式、Mina通信方式、Grizzly通信方式等;
第三部分将会解读RocketMQ架构原理、消息投递原理、消息消费原理、Broker服务注册与发现、消息存储原理和事务消息原理。
由于文章篇幅有限,楼主下面只能为大家展示主要内容和部分内容截图!
数据层主流框架——MyBatis框架篇
接口层
主要内容:
- SqISession接口
- SqISessionFactoryBuilder类
- SqISessionFactony接口
- DefaultSqlSessionFactory类
- DefaultSqlSession类
-
SqISessionManager
配置解析
主要内容:
- MyBatis初始化
- SqISessionFactoryBuilder
- BaseBuilder
- XMLConfigBuilder
- XMLMapperBuilder
- XMLStatementBuilder
- 绑定Mapper接口
-
处理incomplete*的节点
微服务
Dubbo通信解密篇
Netty通信方式解密
主要内容:
- 功能设计
- 服务端设计
-
客户端设计
Mina通信方式解密
主要内容:
- 功能设计
- 服务端设计
-
客户端设计
Grizly通信方式解密
主要内容:
- 功能设计
- 服务端设计
-
客户端设计
RocketMQ代码探索实践
RocketMQ架构原理
主要内容:
- 为什么要使用消息中间件
- 要使用哪个消息中间件
- RocketMQ基本认识
- RocketMQ应用场景
- 消息发送模型
- 消息消费模型
-
RocketMQ组件原理
消息投递原理详解
主要内容:
- 消息投递模型
- 消息投递流程
- 消息路由
- 消息负裁均衡
- 顺序消息
- 延迟消息
- 容错策略
-
发送失败重试
消息消费原理详解
主要内容:
- 消息接收模型
- 消息接收流程
- 消费者Rebalance
- 消息失败重试
-
消息重新投递
Broker服务注册与发现
主要内容:
- NameServer介绍
- 为什么要使用NameServer
- 如何保证数据的最终一致
-
NameServer选择策略
消息存储原理
主要内容:
- RocketMQ存储整体架构
- Mmap与PageCache
- RocketMQ存储优化技术
- 存储模型与封装类
- 刷盘的主要过程
-
Broker消息处理
事务消息原理
主要内容:
- RocketMQ事务消息
- 如何使用事务消息
- 事务消息发送详情
-
事务消息回查
总结
自己也即将加入新的团队,开始新的工作生活。希望自己可以不忘初心踏实成长。
也祝你找到心仪的工作~