Java开发的系统化知识概要

持续更新中...

 

知识系统化 有多重要?这关系到 一个人在某个领域的发展能否进入 高级、顶尖行列。

知识系统化 是需要付出努力的,持之以恒的努力。

首先,吸收知识(输入),其次,定期总结、整理,最后,输出知识&再优化。

第2、3步是最困难的,这也是拉开 普通人、研究者、专家、大师 的区别。如切如磋,如琢如磨。道阻且长。

 

Java开发的系统化知识 是怎样的呢?有那么多知识点、那么多源码,那么,其中哪些是构成的关键呢?

常用的20%的知识点就是其关键?非也。既然是系统化知识,肯定包含更多内容。来自博客园

本文介绍(整理)自己对 Java开发的系统化知识 的理解(基于Java 8),其中有些是自己用过的,有些是自己研究过的,还有一些当然只是听过的(水平有限)。

熟练掌握 Java开发的系统化知识(理论学习+实践),可以更有效地完成Java开发的学习。

系统化知识 就相当于 一个路线图,有了路线图,要达到某个地点(知识点)就有了目标了,有了目标,时间就会花的很有意义。

什么是意义?内心的喜悦。

 

目录

一、序章

二、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开发的系统化知识 的根源。

 

二、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等命令

 

三、Java开发生态的知识点

  • 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 马俊昌

2、菜鸟:Java 教程

3、Google's Guava:Guava工程包含了若干被Google的 Java项目广泛依赖

4、Java 注解(Annotation)

5、Jackson

6、JVM调优

7、书《深入理解Java虚拟机:JVM高级特性与最佳实践》by 周志明

8、Java内存区域(运行时数据区域)和内存模型(JMM)

9、JDK有哪些

10、

 

posted @ 2021-10-11 22:36  快乐的凡人721  阅读(102)  评论(0编辑  收藏  举报