结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
我之前还接触过一些比较有意思的项目,所有对外的接口都是加密的,几十个服务会经过网关解密,找到真的路由再去请求。
一层的知识点其实也不少,你往后面学会发现分布式事务,分布式锁,还有很多中间件都离不开zk这一层,我们继续往下看。
服务层:
这一层有点东西了,算是整个框架的核心,如果你跟我帅丙一样以后都是从事后端开发的话,我们基本上整个技术生涯,大部分时间都在跟这一层的技术栈打交道了,各种琳琅满目的中间件,计算机基础知识,Linux操作,算法数据结构,架构框架,研发工具等等。
我想在看这个文章的各位,计算机基础肯定都是学过的吧,如果大学的时候没好好学,我觉得还是有必要再看看的。
为什么我们网页能保证安全可靠的传输,你可能会了解到HTTP,TCP协议,什么三次握手,四次挥手。
还有进程、线程、协程,什么内存屏障,指令乱序,分支预测,CPU亲和性等等,在之后的编程生涯,如果你能掌握这些东西,会让你在遇到很多问题的时候瞬间get到点,而不是像个无头苍蝇一样乱撞(然而丙丙还做得不够)。
了解这些计算机知识后,你就需要接触编程语言了,大学的C语言基础会让你学什么语言入门都会快点,我选择了面向对象的JAVA,但是也不知道为啥现在还没对象。
JAVA的基础也一样重要,面向对象(包括类、对象、方法、继承、封装、抽象、 多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程你都需要了解。
代码会写了,你就要开始学习一些能帮助你把系统变得更加规范的框架,SSM可以会让你的开发更加便捷,结构层次更加分明。
写代码的时候你会发现你大学用的Eclipse在公司看不到了,你跟大家一样去用了IDEA,第一天这是什么玩意,一周后,真香,但是这玩意收费有点贵,那免费的VSCode真的就是不错的选择了。
代码写的时候你会接触代码的仓库管理工具maven、Gradle,提交代码的时候会去写项目版本管理工具Git。
代码提交之后,发布之后你会发现很多东西需要自己去服务器亲自排查,那Linux的知识点就可以在里面灵活运用了,查看进程,查看文件,各种Vim操作等等。
系统的优化很多地方没优化的空间了,你可能会尝试从算法,或者优化数据结构去优化,你看到了HashMap的源码,想去了解红黑树,然后在算法网上看到了二叉树搜索树和各种常见的算法问题,刷多了,你也能总结出精华所在,什么贪心,分治,动态规划等。
这么多个服务,你发现HTTP请求已经开始有点不满足你的需求了,你想开发更便捷,像访问本地服务一样访问远程服务,所以我们去了解了Dubbo,Spring cloud。
了解Dubbo的过程中,你发现了RPC的精华所在,所以你去接触到了高性能的NIO框架,Netty。
代码写好了,服务也能通信了,但是你发现你的代码链路好长,都耦合在一起了,所以你接触了消息队列,这种异步的处理方式,真香。
他还可以帮你在突发流量的时候用队列做缓冲,但是你发现分布式的情况,事务就不好管理了,你就了解到了分布式事务,什么两段式,三段式,TCC,XA,阿里的全局事务服务GTS等等。
分布式事务的时候你会想去了解RocketMQ,因为他自带了分布式事务的解决方案,大数据的场景你又看到了Kafka
我上面提到过zk,像Dubbo、Kafka等中间件都是用它做注册中心的,所以很多技术栈最后都组成了一个知识体系,你先了解了体系中的每一员,你才能把它们联系起来。
服务的交互都从进程内通信变成了远程通信,所以性能必然会受到一些影响。
此外由于很多不确定性的因素,例如网络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,需要许多额外的功能和措施才能保证微服务流畅稳定的工作。
Spring Cloud 中就有 Hystrix 熔断器、Ribbon客户端负载均衡器、Eureka注册中心等等都是用来解决这些问题的微服务组件。
你感觉学习得差不多了,你发现各大论坛博客出现了一些前沿技术,比如容器化,你可能就会去了解容器化的知识,像 Docker,Kubernetes(K8s) 等。
微服务之所以能够快速发展,很重要的一个原因就是:容器化技术的发展和容器管理系统的成熟。
这一层的东西呢其实远远不止这些的,我不过多赘述,写多了像个劝退师一样,但是大家也不用慌,大部分的技术都是慢慢接触了,工作中慢慢去了解,去深入的。
好啦我们继续沿着图往下看,那再往下是啥呢?
数据层:
数据库可能是整个系统中最值钱的部分了,在我码文字的前一天,刚好发生了微盟程序员删库跑路的操作,删库跑路其实是我们在网上最常用的笑话,没想到还是照进了现实。
这里也提一点点吧,36小时的故障,其实在互联网公司应该是个笑话了吧,权限控制没做好类似rm -rf 、fdisk、drop等等这样的高危命令是可以实时拦截掉的,备份,全量备份,增量备份,延迟备份,异地容灾全部都考虑一下应该也不至于这样,一家上市公司还是有点点不应该。
由于本文篇幅较长,如果没有时间继续往下阅读,可以点这里直达 获取文档和学习资料
数据库基本的事务隔离级别,索引,SQL,主被同步,读写分离等都可能是你学的时候要了解到的。
上面我们提到了安全,不要把鸡蛋放一个篮子的道理大家应该都知道,那分库的意义就很明显了,然后你会发现时间久了表的数据大了,就会想到去接触分表,什么TDDL、Sharding-JDBC、DRDS这些插件都会接触到。
你发现流量大的时候,或者热点数据打到数据库还是有点顶不住,压力太大了,那非关系型数据库就进场了,Redis当然是首选,但是MongoDB、memcache也有各自的应用场景。
Redis使用后,真香,真快,但是你会开始担心最开始提到的安全问题,这玩意快是因为在内存中操作,那断点了数据丢了怎么办?你就开始阅读官方文档,了解RDB,AOF这些持久化机制,线上用的时候还会遇到缓存雪崩击穿、穿透等等问题。
单机不满足你就用了,他的集群模式,用了集群可能也担心集群的健康状态,所以就得去了解哨兵,他的主从同步,时间久了Key多了,就得了解内存淘汰机制……
他的大容量存储有问题,你可能需要去了解Pika….
其实远远没完,每个的点我都点到为止,但是其实要深究每个点都要学很久,我们接着往下看。
等你把几种关系型非关系型数据库的知识点,整理清楚后,你会发现数据还是大啊,而且数据的场景越来越多多样化了,那大数据的各种中间件你就得了解了。
你会发现很多场景,不需要实时的数据,比如你查你的支付宝去年的,上个月的账单,这些都是不会变化的数据,没必要实时,那你可能会接触像ODPS这样的中间件去做数据的离线分析。
然后你可能会接触Hadoop系列相关的东西,比如于Hadoop(HDFS)的一个数据仓库工具Hive,是建立在 Hadoop 文件系统之上的分布式面向列的数据库HBase 。
写多的场景,适合做一些简单查询,用他们又有点大材小用,那Cassandra就再合适不过了。
离线的数据分析没办法满足一些实时的常见,类似风控,那Flink你也得略知一二,他的窗口思想还是很有意思。
数据接触完了,计算引擎Spark你是不是也不能放过……
搜索引擎:
传统关系型数据库和NoSQL非关系型数据都没办法解决一些问题,比如我们在百度,淘宝搜索东西的时候,往往都是几个关键字在一起一起搜索东西的,在数据库除非把几次的结果做交集,不然很难去实现。
那全文检索引擎就诞生了,解决了搜索的问题,你得思考怎么把数据库的东西实时同步到ES中去,那你可能会思考到logstash去定时跑脚本同步,又或者去接触伪装成一台MySQL从服务的Canal,他会去订阅MySQL主服务的binlog,然后自己解析了去操作Es中的数据。
这些都搞定了,那可视化的后台查询又怎么解决呢?Kibana,他他是一个可视化的平台,甚至对Es集群的健康管理都做了可视化,很多公司的日志查询系统都是用它做的。
学习路线
看了这么久你是不是发现,只是一直在介绍每个层级的技术栈,并没说到具体的一个路线,那是因为我想让大家先有个认知或者说是扫盲吧,我一样用脑图的方式汇总一下吧
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
点这里直达就可以有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
=======================================================================
================================================================================
======================================================================
-
线程
-
JVM内存区域
-
JVM运行时内存
-
垃圾回收与算法
-
JAVA四中引用类型
-
GC分代收集算法VS分区收集算法
-
GC垃圾收集器
-
JAVA IO/NIO
-
JVM类加载机制
=========================================================================
-
接口继承关系和实现
-
List
Arayist (数组)
Vector (数组实现、线程同步)
Linklist (链表)
- set
HahSet Cah陶)
TreeSet (仁叉树)
LnkHashSet(HashSet+ LinkedHashMap)
- Map
HashMap (数组+链表+红黑树)
ConcurrentHashMap
HashTable (线程安全)
TreeMap (可排序)
LinkHashMap (记录插入顺序)
============================================================================
-
JAVA并发知识库
-
JAVA线程实现/创建方式
-
4种线程池
-
线程生命周期(状态)
-
终止线程4种方式
-
sleep与wait区别
-
start与run区别
-
JAVA后台线程
-
JAVA锁
-
线程基本方法
-
线程上下文切换
-
同步锁与死锁
-
线程池原理
-
JAVA阻塞队列原理
-
CyclicBarrier. CountDownlatch、 Semaphore的用法
-
volatile关键字的作用 (变量可见性、禁止重排序)
-
如何在两个线程之间共享数据
-
ThreadLocal作用(线程本地存储)
-
synchronized和ReentrantLock的区别
-
ConcurrentHashMap并发
-
Java中用到的线程调度
-
进程调度算法
-
什么是CAS (比较并交换-乐观锁机制-锁自旋)
-
什么是AQS (抽象的队列同步器)
=========================================================================
-
JAVA异常分类及处理
-
JAVA反射
-
JAVA注解
-
JAVA内部类
-
JAVA泛型
-
JAVA序列化创建可复用的Java对象
-
JAVA复制
===========================================================================
-
Spring特点
-
Spring核心组件
-
Spring常用模块
-
Spring主要包
-
Spring常用注解
-
Spring第三方结合
-
Spring I0C原理
-
Spring APO原理
-
Spring MVC原理
-
Spring Boot原理
-
JPA原理
-
Mybatis缓存
-
Tomcat架构
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
点这里直达群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
======================================================================
- 服务注册发现
客户端注册(zookeeper)
第三方注册(独立的服务Registrar)
客户端发现
服务端发现
Consul
Eureka
SmartStack
Etcd
- API网关
请求转发
响应合并
协议转换
数据转换.
安全认证
- 配置中心
zookeeper配置中心
配置中心数据分类
-
事件调度(kafka)
-
服务跟踪(starter-sleuth)
Hystrix断路器机制
-
服务熔断(Hystrix)
-
API管理
============================================================================
-
Netty原理
-
Netty高性能
多路复用通讯方式
异步通讯NIO
零拷贝(DIRECT BUFFERS使用堆外直接内存)
内存池(基于内存池的缓冲区重用机制)
- Netty RPC实现
概念
关键技术
核心流程
- RMI实现方式
实现步骤
- Protoclol Buffer
特点
- Thrift
=====================================================================
-
网络7层架构
-
TCP/IP原理.
网络访问层(Network Access Layer)
网络层(Internet Layer)
传输层(Tramsport Layer-TCP/UDP)
应用层(Application Layer)
- TCP三次握手/四次挥手
数据包说明
三次握手
四次挥手
- HTTP原理
传输流程
HTTP状态
HTTPS
- CDN原理
分发服务系统
负裁均衡系统:
管理系统:
=====================================================================
-
SIf4j
-
Log4j
-
LogBack
LogBack优点
- ELK
============================================================================
-
Zookeeper概念
-
Zookeeper角色
-
Zookeeper工作原理(原子广播)
-
Znode有四种形式的目录节点
========================================================================
-
Kafka概念
-
Kafka数据存储设计
-
生产者设计
-
消费者设计
===========================================================================
-
概念
-
RabbitMQ架构
-
Exchange类塑
========================================================================
-
概念
-
列式存储
-
Hbase核心概念
-
Hbase核心架构
-
Hbase的写逻辑
-
HBase vs Cassandra
==========================================================================
-
概念
-
特点
============================================================================
-
概念
-
数据模型
-
Cassandra- 致Hash和虚拟节点)
-
Gossip协议
-
数据复制
-
数据写请求和协调者
-
数据读请求和后台修复
-
数据存储(CommitLog. MemTable、 SSTable)
-
二级索引(对要索引的value 摘要,生成RowKey)
-
数据读写
=======================================================================
-
设计原则
-
厂方法模式
-
抽象工厂模式
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
还有更多面试复习笔记分享如下
有防盗链机制,建议将图片保存下来直接上传(img-jsfKcsxF-1623053259313)(//upload-images.jianshu.io/upload_images/24195226-9e42545fffbcbab4?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]](https://img-blog.csdnimg.cn/20210607161239218.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzA4MzUzNw==,size_16,color_FFFFFF,t_70)
=======================================================================
-
设计原则
-
厂方法模式
-
抽象工厂模式
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
[外链图片转存中…(img-qaCqs0vT-1715713622713)]
还有更多面试复习笔记分享如下
[外链图片转存中…(img-yYRVrOgu-1715713622713)]