脚本宝典收集整理的这篇文章主要介绍了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开发的系统化知识 的根源。
二、Java开发的系统化知识
Windows、Linux、容器(docker)
Eclipse(开源免费)、IntelliJ IDEA
java、javac命令
jar命令
jps、jmap、jstat、jstack命令
基本类型、数组、基本运算、条件执行、循环、函数、栈
整数、小数的二进制表示
字符及字符串的编码
类、接口
java文件、class文件
package import
static final
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
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包中还有一些文件相关操作。
java.io包、java.net包
TCP、UDP,Socket编程,URL处理
TCP:Socket、ServerSocket,,socket——输入流&输出流、双向
UDP:DatagramSocket类、DatagramPacket类
同步vs异步、阻塞vs非阻塞
URL类、openConnection()、URLConnection抽象类及其子类、URLEncoder和URLDecoder
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抽象类
Java 8移除了 PermGen,用Metaspace取代(参考文档8)。来自博客园
本地方法栈、程序计数器、虚拟机栈,
堆{新生代Young{Eden、S0、S1}、老年代Old},
元数据区{常量池、方法元信息、类元信息},
CodeCache——JIT产物
JIT:Just In Time Compiler、服务器预热
HotSpot虚拟机、其它虚拟机
OpenJDK
License
-XMs、-Xmx、-Xmn、-XX:MetaspaceSize、-XX:MaxMetaspaceSize
-XX:+HeapDumpOnOutOfMemoryError、-XX:HeapDumpPath=/home/hadoop/dump/
dump文件分析
full GC次数、Stop-the-World问题
jps、jstat、jmap、jstack等命令
版本:
版本 | 完成时间 |
v1.0 | 211011 22:32 |
参考文档
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、
以上是脚本宝典为你收集整理的Java开发的系统化知识概要全部内容,希望文章能够帮你解决Java开发的系统化知识概要所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。