Java开发的系统化知识概要
持续更新中...
知识系统化 有多重要?这关系到 一个人在某个领域的发展能否进入 高级、顶尖行列。
知识系统化 是需要付出努力的,持之以恒的努力。
首先,吸收知识(输入),其次,定期总结、整理,最后,输出知识&再优化。
第2、3步是最困难的,这也是拉开 普通人、研究者、专家、大师 的区别。如切如磋,如琢如磨。道阻且长。
Java开发的系统化知识 是怎样的呢?有那么多知识点、那么多源码,那么,其中哪些是构成的关键呢?
常用的20%的知识点就是其关键?非也。既然是系统化知识,肯定包含更多内容。来自博客园
本文介绍(整理)自己对 Java开发的系统化知识 的理解(基于Java 8),其中有些是自己用过的,有些是自己研究过的,还有一些当然只是听过的(水平有限)。
熟练掌握 Java开发的系统化知识(理论学习+实践),可以更有效地完成Java开发的学习。
系统化知识 就相当于 一个路线图,有了路线图,要达到某个地点(知识点)就有了目标了,有了目标,时间就会花的很有意义。
什么是意义?内心的喜悦。
目录
Java创始:美国 Sun公司,詹姆斯·高斯林 (James Gosling,Java之父)
1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。
2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。来自博客园
从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改。
2009年,甲骨文公司(Oracle)宣布收购Sun。
2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。
2014年,甲骨文公司发布了Java8正式版。(2014年才出Java 8?)来自博客园
最新版本 Java 17(September 2021)。
官方文档:Java Language and Virtual Machine Specifications
官方文档分为两部分:Java编程语言规范、Java虚拟机规范
再加上JDK源码,以上全部构成了 Java开发的系统化知识 的根源。
- JDK安装
Windows、Linux、容器(Docker)
- IDE安装
Eclipse(开源免费)、IntelliJ IDEA
- 命令
java、javac命令
jar命令
jps、jmap、jstat、jstack命令
- Java基础
基本类型、数组、基本运算、条件执行、循环、函数、栈
整数、小数的二进制表示
字符及字符串的编码
类、接口
java文件、class文件
- 关键字
package import
static final
public private protected
class interface enum abstract
synchronized instanceof volitale
native new
……更多……来自博客园
- 面向对象
封装、继承、多态
类、接口、抽象类、枚举、内部类(静态、成员、方法、匿名)
对象
方法重载、重写
- 异常
Throwable 类
java.lang.Exception 类
IOException 类和 RuntimeException 类
Error 类
非检查性异常、检查性异常
非运行时异常、运行时异常
try/catch/finally/throw/throws
- 常用基础类
Scanner、System、Runtime
包装器类
Math类
String、StringBuilder、StringBuffer
Date、SimpleDateFormat、Calendar
java.util.regex包:Pattern 类、Matcher 类、PatternSyntaxException,,正则表达式
File、InputStream/OutputStream、Reader/Writer
工具类:Objects、Arrays、Collections、Properties、Random、UUID
线程:Thread、Runnable、ThreadLocal<T>、TimeUnit、ThreadLocalRandom
线程池:ThreadPoolExecutor、ExecutorService接口、Executors工具类、ForkJoinPool
……还有很多……
- 泛型
泛型的本质是参数化类型
泛型方法、泛型类
有界的类型参数:extends、super
类型通配符:?,下限 super
<? extends T>和<? super T>来自博客园
- 容器
列表、队列、Map、Set、堆(优先级队列)
ArrayList, LinkedList, ArrayDeque
HashMap/Set, TreeMap/Set, LinkedHashMap/Set, EnumMap/Set
PriorityQueue
排序二叉树、平衡的排序二叉树、红黑树
接口:Collection, List, Set, Queue, Deque, Map
抽象类:AbstractCollection等
Collections、Arrays工具类
迭代器:Iterator,Iterable
比较器:Comparator,Comparable
增删改查 + 遍历 + 排序
Vector, Stack, BitSet, Hashtable, Dictionary
- 线程及线程池
java.lang.Thread类、Runnable接口
线程状态、daemon线程(守护线程)
共享内存、竞态条件(race condition)、内存可见性
synchronized关键字、死锁问题、线程协作、wait/notify/notifyAll
接口Future、实现类FutureTask
Executor、ExecutorService,工厂方法类Executors
线程中断
线程:单独的执行流,自己的执行计数器,自己的栈,但共享内存
- 并发及并发容器
并发工具包、java.util.concurrent(JUC)
AtomicXXX:原子变量、sun.misc.Unsafe类、compareAndSet(CAS)、ABA问题
来自博客园
CAS是JUC的基础:高效、乐观、非阻塞式数据结构和算法
显式锁:Lock接口(ReentrantLock类)、ReadWriteLock接口(ReentrantReentrantLock实现类),LockSupport,抽象类AbstractQueuedSynchronizer(AQS)
显式条件:Condition
CopyOnWriteXXX:写时复制,CopyOnWriteArrayList,CopyOnWriteArraySet
ConcurrentXXX:ConcurrentHashMap类(ConcurrentMap接口、分段锁,弱一致性-弱一致性),ConcurrentSkipListMap/Set(跳表,可排序),并发队列(ConcurrentLinkedQueue/Deque,普通阻塞队列、PriorityBlockingQueue、DelayQueue、SynchronousQueue、LinkedTransferQueue)
异步任务执行服务:线程池,分离 任务的提交 和 任务的执行,Runnable VS Callable,Future等,CompletionService, CompletableFuture
同步和协作工具类:ReentrantReadWriteLock, Semaphore, CountDownLatch, CyclicBarrier, ThreadLocal, Exchanger, Phaser, StampedLock
- 注解
@interface
元注解:@Target @Retention @Documented @Inherited
JDK内置注解:@Overrice, @Deprecated, @SuppressWarnings, @SafeVarargs(Java 7+), @FunctionalInterface(Java 8+), @Repeatable(Java 8+)
框架和库的注解,比如,Spring中的注解
声明式编程风格
@Target-ElementType、@Retention-RetentionPolicy
- IO-文件
java.io包
背景{文件分类:文本文件、二进制文件,,文件系统-Windows、Linux,,绝对路径、相对路径,,内存映射文件}
File类,流,,InputStream、OutputStream,,FileInputStream、FileOutputStream,,装饰器设计模式——装饰类,基类:FilterInputStream、FilterOutputStream
{Buffered、Data、GZIP、ZIP、ByteArray} + {InputStream、OutputStream},,PrintStream
基类:Reader、Writer,,{File、Buffered、CharArray、String} + {Reader、Writer}
转换类:InputStreamReader、OutputStreamWriter
RandomAccessFile类
二进制文件和字节流,,文本文件和字符流
标准流:System.in, System.out, System.err
缓冲!
注,java.nio包中还有一些文件相关操作。
- IO-网络编程
java.io包、java.net包
TCP、UDP,Socket编程,URL处理
TCP:Socket、ServerSocket,,socket——输入流&输出流、双向
InetAddress 类:互联网协议(IP)地址
UDP:DatagramSocket类、DatagramPacket类
同步vs异步、阻塞vs非阻塞
URL类、openConnection()、URLConnection抽象类及其子类、URLEncoder和URLDecoder
- NIO
java.nio包,,一种不同的看待IO的方式,它有 缓冲区和通道 的概念。来自博客园
Channels
java.nio.file包:Files类、Path和Paths类和PathMatcher接口、FileSystem和FileSystems类
FileChannel抽象类:MappedByteBuffer
网络编程:Selector、SelectionKey、SelectableChannel、SocketChannel、ServerSocketChannel、DatagramChannel
- 反射
动态获取类型信息,创建对象,访问/修改成员、调用方法
Class类:Object的getClass()方法,泛型类
Field类、Method类、Constructor类、Annotation、Type接口及其子接口
- 动态代理
VS 静态代理,AOP的基础
两种实现方式:Java SDK、第三方库(如cglib)
Java SDK动代:InvocationHandler, Proxy.newProxyInstance,只能为 接口 创建代理——面向接口
cglib动代:Enhancer类,setCallback,通过继承实现——重写父类的所有public非final方法
- 类加载机制
ClassLoader:负责将字节码文件加载到内存
使用场景:热部署、应用的模块化和相互隔离、从不同地方灵活加载 等
Class.forName方法
类路径 classpath
三个CL:Bootstrap、Extension、Application,,父子委派关系,双亲委派(一般模型)
Java 9,模块:删除了Extension CL,增加了平台类加载器(Platform CL)
- 函数式编程
Lambda表达式
函数式接口:预定义的函数式接口(java.util.function包)
方法引用
Stream接口:java.util.stream包、为容器、parallelStream()-并行流、of静态方法,,操作:Intermediate和Terminal,,NumericStream(Int、Double、Long),,Collector接口和Collectors工具类,,Spliterator接口和Spliterators抽象类
- JVM(Java Virtual Machine,Java虚拟机)
Java 8移除了 PermGen,用Metaspace取代(参考文档8)。来自博客园
本地方法栈、程序计数器、虚拟机栈,
堆{新生代Young{Eden、S0、S1}、老年代Old},
元数据区{常量池、方法元信息、类元信息},
CodeCache——JIT产物
JIT:Just In Time Compiler、服务器预热
HotSpot虚拟机、其它虚拟机
OpenJDK
License
- JVM调优
-Xms、-Xmx、-Xmn、-XX:MetaspaceSize、-XX:MaxMetaspaceSize
-XX:+HeapDumpOnOutOfMemoryError、-XX:HeapDumpPath=/home/hadoop/dump/
dump文件分析
full GC次数、Stop-The-World问题
jps、jstat、jmap、jstack等命令
- Linux
- Maven
- Gradle
- Git
- Spring Framework/Boot/Cloud
- 微服务
- DDD(Domain Driven Design,领域驱动设计)
- MySQL
- 缓存-Redis
- 缓存-Memcached
- MQ-RabbitMQ
- MQ-Kafka
- MQ-RocketMQ
- MQ-Pulsar
- MongoDB
- 搜索-ElasticSearch
- 搜索-ClickHouse
- 大数据-Hadoop
- 大数据-Spark
- 大数据-Storm
- 大数据-Flink
- DevOps-Docker
- DevOps-Jenkins
- DevOps-Kubernetes(K8S)
版本:
版本 | 完成时间 |
v1.0 | 211011 22:32 |
v1.0.1 | 211014 09:39 |
1、书《Java编程的逻辑》by 马俊昌
3、Google's Guava:Guava工程包含了若干被Google的 Java项目广泛依赖
5、Jackson
6、JVM调优
7、书《深入理解Java虚拟机:JVM高级特性与最佳实践》by 周志明
9、JDK有哪些
10、