首页 > Java > Java 学习之路

Java 学习之路

2018年12月31日 发表评论 阅读评论

前几天刷微博,看到博主 @Java大本营 发了一个图片,总结 Java 一些常见的知识点,感觉挺好,整理成文字版,发在我的个人博客,作为一个大家学习复习的文档,也欢迎有人在评论中留下各种参考资料,一下是正文。

一、基础篇
1. JVM
①. JVM 内存结构
堆、栈、方法区、直接内存、堆和栈的区别

②. Java 内存模型
内存可见性、重排序、顺序一致性、volatile、锁、final

③. 垃圾回收
内存分配策略、垃圾收集器(G1)、GC 算法、GC 参数、对象存活的判定

④. JVM 参数及调优

⑤. Java 对象模型
oop-klass、对象头

⑥. HotSpot
即时编译器、编译优化

⑦. 类加载机制
ClassLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss、modules、osgl、jigsaw)

⑧. 虚拟机性能监控与故障处理工具
jps、jstack、jmap、jstat、jconsole、jinfo、jhat、javap、btrace、tprofiler

2. 编译与反编译

javac、javap、jad、CRF

3. Java 基础知识

①. 阅读源代码
String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、HashMap & LinkedHashMap & TreeMap & ConcurrentHashMap、HashSet & LinkedHashSet & TreeSet

②. Java 中各种变量的类型

③. 熟悉 Java String 的使用,熟悉 String 的各种函数
JDK 6 和 JDK 7 中 substring 的原理及区别、replaceFirst、replaceAll、replace 的区别、String 对 “+” 的重载、String.valueOf 和 Integer.toString 的区别、字符串的不可变性

④. 自动拆装箱
Integer 的缓存机制

⑤. 熟悉 Java 中各种关键字
transient、instanceof、volatile、synchronized、final、static、const 原理及用法

⑥. 集合类
常用集合类的使用,ArrayList 和 LinkedList 和 Vector 的区别、SynchronizedList 和 Vector 的区别、HashMap 和 HashTable 和 ConcurrentHashMap 区别,Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本 JDK 中 HashMap 的实现的区别及原因

⑦. 枚举
枚举的用法、枚举与单例、Enum 类

⑧. Java IO & Java NIO,并学会使用
bio、nio 和 aio 的区别、三种 io 的用法与原理、netty

⑨. Java 反射与 javassist
反射与工厂模式、java.lang.reflect.*

⑩. Java 序列化
什么是序列化与反序列化、为什么要序列化
序列化底层原理
序列化与单例模式
protobuf
为什么说序列化并不安全

⑪注解
元注解、自定义注解、Java 中常用注解使用、注解与反注解结合

⑫JMS
什么事 Java 消息服务、JMS 消息传递模型

⑬JMX
java.lang.management.*

⑭泛型
泛型与继承、类型擦除、泛型中的 K T V E、Object 等的含义、泛型各种用法

⑮单元测试
junit、mock、mockito、内存数据库(h2)

⑯正则表达式
java.lang.utl.regex.*

⑰常用的 Java 工具库
commons.lang、guava、netty

⑱什么是 API & SPI

⑲异常
异常类型、正确处理异常、自定义异常

⑳时间处理
时区、时令、Java 中的时间 API

编码方式
解决乱码问题、常用编码方式

语法糖
Java 中语法糖原理、解语法糖

3. Java 并发编程

①. 什么是线程,与进程的区别

②. 阅读源代码,并学会使用 Thread、Runnable、Callable、ReentrantLock、TeentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、Executors

③. 线程池
自己设计线程池、submit() 和 execute()

④. 线程安全
死锁、死锁如何排查、Java 线程调度、线程安全和内存模型的关系

⑤. 锁
CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁

⑥. volatile
happents-before、编译器指令重排和 CPU 指令重排

⑦. synchronized
synchronized 是如何实现的、synchronized 和 lock 之间的关系、不使用 synchronized 如何实现一个线程安全的单例

⑧. sleep 和 wait、wait 和 notify、notify 和 notifyAll

⑨. ThreadLocal

⑩. 写一个死锁的程序

⑪写代码解决生产者消费者问题

⑫守护线程
守护线程和非守护线程的区别以及用法

二、进阶篇

1. Java 底层知识

①. 字节码、class 文件格式

②. CPU 缓存、L1,L2,L3 和伪共享

③. 尾递归

④. 位运算
用位运算实现加减乘除取余

2. 设计模式

①. 了解 23 种设计模式

②. 会使用常见设计模式
单例、策略、工厂、适配器、责任链

③. 实现 AOP

④. 实现 IOC

⑤. 不用 synchronized 和 lock,实现线程安全的单例模式

⑥. nio 和 reactor 设计模式

3. 网络编程

①. tcp、udp、http、https 等常用协议
三次握手与四次挥手、流量控制和拥塞控制、OSI 七层模型、tcp 沾包与拆包

②. http/1.0、http/1.1、http/2 的区别

③. Java RMI、socket、HttpCliect

④. cookie 与 session
cookie 被禁用如何实现 session

⑤. 用 Java 写一个简单的静态文件的 http 服务器
实现客户端缓存功能,支持返回 304,实现可并发下载一个文件,使用线程池处理客户端请求,使用 nio 处理客户端请求,支持简单的 rewrite 规则,上述功能在实现的时候需要满足“开闭原则”

⑥. 了解 nginx 和 apache 服务器的特性并搭建一个对应的服务器

⑦. 用 Java 实现 FTP、SMTP 协议

⑧. 进程间通讯的方式

⑨. 什么是 CDN,如何实现

⑩. 什么是 DNS

⑪反向代理

4. 框架知识

①. servlet 线程安全问题

②. servlet 中的 filter 和 listener

③. hibernate 的缓存机制

④. hibernate 的懒加载

⑤. Spring bean 的初始化

⑥. Spring 的 AOP 原理

⑦. 自己实现 Spring 的 IOC

⑧. Spring MVC

⑨. Spring boot2.0
Spring boot 的 starter 原理,自己实现一个 starter

⑩. Spring security

5. 应用服务器

①. JBoss

②. tomcat

③. jetty

6. 工具

①. git & svn

②. maven 和 gradle

三、高级篇

1. 新技术

①. java 8
lambda 表达式、stream api

②. Java 9
Jigsaw、Jshell、reactive streams

③. Java 10
局部变量类型推断、G1 的并行 Full GC、ThreadLocal 握手机制

④. Spring 5
响应式编程

⑤. Spring boot 2.0

2. 性能优化

使用单例、使用 Future 模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存

3. 线上问题分析

①. dump 获取
线程 dump、内存 dump、GC 情况

②. dump 分析
分析死锁、分析内存泄露

③. 自己编写各种 outofmemory、stackoverflow 程序
HeapOutOfMemory、Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、stack OutOfMemory、stack overflow

④. 常见问题解决思路
内存溢出、线程死锁、类加载冲突

⑤. 使用工具尝试解决以下问题,并写下总结
当一个 Java 程序相应很慢时如何查找问题?
当一个 Java 程序频繁 Full GC 时如何解决问题?
如何查看垃圾回收日志
当一个 Java 应用发生 OutOfMemory 时该如何解决?
如何判断是否出现死锁?
如何判断是否存在内存泄露?

4. 编译原理知识

①. 编译与反编译

②. Java 代码的编译与反编译

③. Java 的反编译工具

④. 词法分析、语法分析(LL 算法,递归下降算法,LR 算法)、语义分析、运行时环境、中间代码、代码生成、代码优化

5. 操作系统知识

①. Linux 的常用命令

②. 进程同步

③. 缓冲区溢出

④. 分段与分页

⑤. 虚拟内存与主存

6. 数据库知识

①. MySQL 执行引擎

②. MySQL 执行计划
如何查看执行计划、如何根据执行计划进行 SQL 优化

③. SQL 优化

④. 事务
事务的隔离级别、事务能不能实现锁的功能

⑤. 数据库锁
行锁、表锁、使用数据库锁实现乐观锁

⑥. 数据库主备搭建

⑦. binlog

⑧. 常用的 NoSQL 数据库
Redis、memcached

⑨. 分布使用数据库锁、NoSQL 实现分布式锁

⑩. 内存数据库
h2

性能优化

7. 数据结构和算法知识

①. 简单的数据结构
栈、队列、链表、数组、哈希表

②. 树
二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、多路树、红黑树

③. 排序算法
各种排序算法和时间复杂度、深度优先和广度优先搜索、全排列、贪心算法、KMP 算法、hash 算法、海量数据处理

8. 大数据知识

①. zookeeper
基本概念、常见用法

②. solr、Lucene、ElasticSearch
在 linux 上部署 solr、solrcloud、ES、新增、删除、查询索引

③. storm 流式计算、了解 spark、S4
在 linux 上部署 storm,使用 zookeeper 做协调,运行 storm hello word、local 和 remote 模式运行调试 storm topology

④. Hadoop 离线计算
HDFS、MapReduce

⑤. 分布式日志收集iflume、kafka、logstash

⑥. 数据挖掘、mahout

8. 网络安全知识

①. 什么是 XSS,如何防御

②. 什么是 CSRF

③. 什么是注入攻击
SQL 注入、XML 注入、CRLF 注入

④. 什么是文件上传漏洞

⑤. 加密与解密
MD5、SHA1、DES、AES、RSA、DSA

⑥. 什么是 DOS 攻击和 DDOS 攻击
memcached 为什么可以导致 DDOS 攻击、什么是反射性 DDOS

⑦. SSL、TLS、HTTPS

⑧. 如何通过 Hash 碰撞进行 DOS 攻击

⑨. 用 openssl 签一个证书部署到 apache 或者 nginx

4. 架构篇

1. 分布式

①. 分布式基础
数据一致性、服务治理、服务降级

②. 分布式事务
2PC、3PC、CAP、BASE、可靠消息最终一致性、最大努力通知、TCC

③. Dubbo
服务注册、服务发现、服务治理

④. 分布式数据库
怎么打造一个分布式数据库、什么时候需要分布式数据库、mycat、canal、otter、HBase

⑤. 分布式文件系统
mfs、fastdfs

⑥. 分布式缓存
缓存一致性、缓存命中率、缓存冗余

2. 微服务
SOA、康威定律、ServiceMesh、Docker & Kubernets、Spring boot、Spring Cloud

3. 高并发
分库分表、CDN 技术、MQ(kafka、ActiveMQ)

4. 监控

①. 监控什么
CPU、内存、磁盘I/O、网络I/O

②. 监控手段
进程监控、语义监控、机器资源监控、数据波动

③. 监控数据采集
日志、埋点

④. Dapper

5. 负载均衡
Tomcat 负载均衡、nginx 负载均衡

6. DNS
DNS原理、DNS 设计

7. CDN
数据一致性

五、扩展篇

1. 云计算
LaaS、SaaS、Pass、虚拟化技术、openstack、Serverlsess

2. 搜索引擎
Solr、Lucene、Nutch、ElasticSearch

3. 权限管理
Shiro

4. 区块链

①.区块链技术
哈希算法、Merkle 树、公钥密码算法、共识算法、Raft 协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证与数字签名

②. 比特币
挖矿、共识机制、闪电网络、侧链、热点问题、分叉

③. 以太坊

④. 超级账本

5. 人工智能

①. 人工智能基础
数学基础、机器学习、人工神经网络、深度学习、应用场景

②. 常用框架
TensorFlow、DeepLearning4J

6. 其他语言
Groovy、Python、Go、NodeJs、Swift、Rust

六、推荐书籍

《深入理解Java虚拟机》

《Effective Java》

《深入分析Java Web技术内幕》

《大型网站技术架构》

《代码整洁之道》

《Head First设计模式》

《maven实战》

《区块链原理、设计与应用》

《Java并发编程实战》

《鸟哥的Linux私房菜》

《从Paxos到Zookeeper》

《架构即未来》

全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。

作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/594
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java 标签: ,
  1. 本文目前尚无任何评论.

请输入正确的验证码