对java知识体系的整理,把知识从点到线 面的 ,学习地图
知识体系总结
基础
英语
了解一手资料,官方文档,github资料
书籍📚《程序员英语》
linux / 计算机基础、原理
linux常用命令,问题定位需要知道
计算机原理这里,基于冯诺伊曼模型建造的计算机分为4个子系统:存储器、算术逻辑单元、控制单元、和输入/输出单元
书籍📚《linux鸟哥私房菜》、《计算机原理》、《深入理解计算机原理》、《程序是怎么跑起来的》《Linux内核》
网络编程 tcp/ip协议 http
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据,IP想像成一种高速公路,TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,HTTP协议即超文本传送协议(Hypertext Transfer Protocol )
书籍📚《http权威指南》、《tcp/ip详解》、《图解http》、《网络是怎么链接的》
数据结构和算法
数据结构和算法,常见的排序类型,知道时间复杂度,空间复杂度等概念,==实现方面可以看jdk的集合类==
书籍📚 《算法》
数据库MySQL
关系型数据库,事务隔离级别、对应解决的问题,懂的索引(b+ tree 以及相关优化)、锁(MVCC实现相关、 间隙锁),调优,定位问题
书籍📚 《高性能MySQL》
mysql分析。—-》https://mp.weixin.qq.com/s/213sPk-0RtWwwX6YotN6eQ
原因
1.硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
2.没有索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引的树结构就不完整了。所以互联网公司的数据做的是假删除.一是为了做数据分析,二是为了不破坏索引 )
3.数据过多(分库分表)
4.服务器调优及各个参数设置(调整my.cnf
切入点
1.先观察,开启慢查询日志,设置相应的阈值(比如超过3秒就是慢SQL),在生产环境跑上个一天过后,看看哪些SQL比较慢。
2.Explain和慢SQL分析。比如SQL语句写的烂,索引没有或失效,关联查询太多(有时候是设计缺陷或者不得以的需求)等等。
3.Show Profile是比Explain更近一步的执行细节,可以查询到执行每一个SQL都干了什么事,这些事分别花了多少秒。
4.找DBA或者运维对MySQL进行服务器的参数调优。
Java SE(Java Standard Edition)
Java语言/语法基础
对象:封装性、派生性、多态性
切面: Java动态代理 字节码提升
元编程 :泛型、 反射、 注解
函数编程:函数式编程、Stream API设计
书籍📚 《Thinking in java》 《core Java》 《SCJP考试指南》《java8函数式编程》
文档 官方指导文档:https://docs.oracle.com/javase/tutorial/index.html
集合框架
Java Collections Framework Java Collections主要包括以下三部分:接口(Interface)、实现(Implemention)和算法(Algorithm)
Java IO/网络
文件流、 java网络编程 、阻塞IO、非阻塞IO
书籍📚《NIO与Socket》、《Netty权威指南》、《Netty实战》
可以沿着这个路线深入学习,socket -> Netty -> dubbo
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket 只是个接口不是协议
netty资料:==待整理==
https://mp.weixin.qq.com/s/nVqjSbocs4kFFz2pJqovhQ
https://mp.weixin.qq.com/s/WBV4Tm-I5VNWXqjxMgw0yw
https://www.jianshu.com/p/cde27461c226
https://mp.weixin.qq.com/s/zf_LY0MSD4S4p0wXKOyhZg
多线程
==J.U.C== ,多线程的整个体系基于volatile 、cas ->aqs,通常需要了解的 JMM内存模型、锁、线程池、工具类
书籍📚《Java并发编程艺术》 、《并发编程实践》 翻译不太好,建议看英文版、《Concurrent_Programming_in_Java》并发框架的作者DougLea写的
JVM
调优,问题定位,常用的工具,jstack 等,字节码、编译过程、垃圾收集器、即时编译等、虚拟机规范
书籍📚《深入理解 Java 虚拟机》
版本特征 ==待整理==
JDK发展史:从几个角度看 jvm特性、并发工具、语言特性 ,例如
JDK1.0版本:JAVA 虚拟机、AWT
JDK1.1版本:JAR文件格式、JDBC、JavaBeans、RMI、Java语法:内部类(Inner Class)和反射(Reflection)
JDK1.2版本:Java技术体系拆分为3个方向(面向桌面应用开发J2SE/面向企业级开发的J2EE/面向手机等移动端开发的J2ME)
代表性技术:EJB、Java plugin-in、JavaIDL、Swing
虚拟机中内置了JIT(JUST IN TIME)编译器、3个虚拟机并存(Classic VM /HotSpot VM/Exact VM)
语言和API级别上:添加了strictfp关键字与Collections集合类
JDK1.3版本:一些类库(数学运算和新的Timer API)/JNDI服务作为平台级服务提供、使用CORBA IIOP来实现RMI通信/添加了JavaSound类库
JDK1.4版本:正则表达式、异常链、NIO、日志类、XML解析器、XSLT转换器
JDK1.5版本:语法:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)jmx 元数据(注解); 引入Instrumentation(Agent,jvm级别的AOP)
虚拟机和API:改进了Java的内存模型、提供了Java.util.concurrent并发包
JDK1.6版本:终结了J2ME/J2SE/J2EE的命名方式,启用Java SE6/Java EE6/Java ME6的命名方式
提供动态语言支持(通过内置的Mozilla javaScript Rhion引擎实现)
提供编译API和微型HTTP服务器API,增强Instrumentation,虚拟机启动后的
虚拟机改进:锁与同步、垃圾收集、类加载
JDK1.7版本:nio2 try resource autocloseable JVM新增了一套叫做invokedynamic的指令为为支持动态类型化程序语言的实现;并发API新增了轻量级的分支/合并(Fork/Join)框架
Java开源
提供新的G1收集器(G1在发布时依然处于Experimental状态)
加强对非Java语言的调用支持(JSR-292到目前没有完全实现定型)、升级类加载架构
JDK1.8版本:Lambda表达式、Coin
JDK1.9版本:flow reative 模块化
JDK10版本:var 垃圾收集改进
JDK11版本:httpclient 垃圾收集改进 Epsilon 垃圾收集器被称为“no-op”收集器,将处理内存分配而不实施任何实际的内存回收机制
其他
classLoder
双亲委派,以及怎么破坏双亲委派,在spring和tomcat中的体现
java官方订阅
获取了解最新变化情况
文档:mail.openjdk.java.net Mailing Lists
Java EE(Enterprise Edition)
常用的技术栈spring + springmvc + mybatis(或者其他的orm框架) ,这里建议学习j2ee的常用规范
Spring /Spring boot
==注意关注版本特征==
spring 实现了大部分的j2ee规范,本身主要是DI(管理对象之间的关系)和AOP(切面编程) ,深度学习源码和理解它的优秀思想(简单,开放),springmvc
SpringBoot的简化配置,部署,自动装配。
书籍📚《spring实战》、《spring技术内幕》、《spring源码剖析》、《Expert One-on-One J2EE Design and Development》《Expert One-on-One J2EE Development without EJB》 spring作者写的书
文档:spring 动态代理 https://mp.weixin.qq.com/s/vCZP8sPrtnXWvg6IlcHQOg
特性 https://mp.weixin.qq.com/s/09lMCJKvACOU_umkzu2StQ
其他
web Framework框架性能
关注常用框架性能
文档 https://www.techempower.com/benchmarks/#section=data-r17
重视规范
JVM规范
Java语言规范、Java虚拟机规范、Java内存模型规范
书籍📚/文档:官方文档 ==待补充==
JSR规范
Servlet、REST、JDBC、JNDI、JPA、JTA、Bean Validation、JMS等
书籍📚/文档:JSR https://jcp.org/en/jsr/platform
Servlet : servlet规范 -> springMVC -> servelt容器 tomcat jetty
JNDI: Java Naming and Directory Interface,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。 SPI https://www.zhihu.com/question/49667892/answer/404097870 / https://blog.hhui.top/hexblog/2017/05/26/SPI%E6%A1%86%E6%9E%B6%E5%AE%9E%E7%8E%B0%E4%B9%8B%E6%97%85%E4%B8%80%EF%BC%9A%E8%83%8C%E6%99%AF%E4%BB%8B%E7%BB%8D/#%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%EF%BC%9A-Z-blog
restful风格 —–》〉 https://mp.weixin.qq.com/s/_CeSX_lSoyg9zPxs52twRA
IETF规范
URL/URI、HTTP、REST、WebSockets等
书籍📚/文档:RFC 2616 新标准
消息规范
AMQP、MQTT
书籍📚/文档:官方文档 ==待补充==
关系型数据库规范
SQL99、SQL03等
书籍📚/文档:官方文档 ==待补充==
Reactive 规范
Reactive Manifesto、Reactive Streams
书籍📚/文档:官方文档 ==待补充==
高效/优雅
多看,多写模仿,例如spring中的设计模式,tomcat中的设计模式
常用工具Git、Maven 、Nginx
书籍📚/文档 :《Maven实战》、《Effective Java》、《重构》、《Head First设计模式》、《测试驱动开发 by Example》、《程序员修炼之道》翻译不太好
框架/中间件
关注常用框架,以及生命周期Attic—–> https://attic.apache.org/,注意主流框架的版本特征 / 使用了什么设计模式
Web栈
Struts、 Spring
关系型数据库
MyBatis、Hiberante、JPA
NoSQL
Redis 、Mongo、 ELasticSearch、Hbase
RPC
CXF(WebServices)、Spring Cloud Feign(REST)、Dubbo (多协议)
任务调度
Java Timer/ScheduleExecutorService、 Spring @Scheduled
消息服务
ActiveMQ(JMS)、RabbitMQ(AMQP)、Kafka
客户端
HttpClient(HTTP) 、Spring RestTemplate ( REST )
Web容器
Tomcat、Jetty
书籍📚/资料
《大型网络架构与中间件》、《Tomcat架构解析》
tomcat设计模式 https://www.cnblogs.com/coldridgeValley/p/6606271.html
微服务演变
SOA向微服务的演变,衍生了许多技术,CAP 、BASE理论
服务调用
如何高并发、高可用
分布式配置
Nacos、Spring Cloud Feign
服务注册/发现
zk、Eureka Consul。对比,使用场景。 cp、ap
书籍📚:《proxys到zookeeper一致性协议》
路由/负载均衡
Netflix Ribbon
熔断/限流
Spring Cloud Hystrix
相关技术:
限流 -》RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类.
网关
Spring Cloud Zuul
其他
分布式锁
分布式事务 https://mp.weixin.qq.com/s/oKOzvN49zOhl8cwliy3SEg
XA两阶段提交的不足 XA三阶段
解决一致性问题,raft、Gossip (redis)、Paxos(zk)
Spring Cloud (侵入式)
可以看看springCloud都做了些什么实现
Compare with k8s https://en.wikipedia.org/wiki/Kubernetes#Comparison_to_Spring_Cloud
相关文档/书籍📚:《领域驱动》、《SpringCloud微服务实践》
Service Mesh (非侵入式)
kubernetes 为基础,docker为容器(https://zhuanlan.zhihu.com/p/54512286?utm_source=wechat_session&utm_medium=social&utm_oi=557574927448846336)
相关技术:CI/CD 持续集成
相关文档/书籍📚:《Docker进阶与实战》
大数据生态
Kafka zookeeper flume
实时 sparker
离线 hive
其他
开阔视野
正所谓站的高看得远,多关注业界发展。
https://mp.weixin.qq.com/s/CPUaB60pue0Zf3fUL9xqvw
http://www.iocoder.cn/chinese-comment-repository/?xing
性能/压力测试/调优
懂常用性能指标,以及如何预估性能
相关资料:
https://mp.weixin.qq.com/s/w0TxuFQZAIED879JRax8vg
https://mp.weixin.qq.com/s/Lz4cEt0LY_Fvqz2zAgOafw
前端基础
除了html、css、javascript 相关、 一些前端框架也需要了解Vue、React
前后端分离/单页面应用—》〉https://blog.csdn.net/Nicorui/article/details/74945839
书籍📚《Javascript DOM编程艺术》
态度
保持自我驱动和热情/不满足于完成预期
学习方法
是什么 :官方、wiki、同类技术对比、组成部分、版本特性
为什么 : 解决了什么问题、没有出现之前怎么做、 自己实现的话会怎么做
怎么做 :官方示例/文档 、相关学习视频、写Demo、带着问题看源码、实践
输出 :写blog、分享
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 951488791@qq.com