zoukankan      html  css  js  c++  java
  • 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、

  • 相关阅读:
    Hadoop 集群安装(从节点安装配置)
    Hadoop 集群安装(主节点安装)
    少儿编程(2):简单的数学计算
    少儿编程(1):计算思维
    Web测试入门:Selenium+Chrome+Python+Mac OS
    我为什么建议:在软工实践作业中增加性能测试分析的任务?
    基于码云开展程序设计教学的自动判分方法和代码框架?
    数值计算 的bug:(理论)数学上等价,实际运行未必等价
    【Alpha】Daily Scrum Meeting总结
    【Alpha】Daily Scrum Meeting第十次
  • 原文地址:https://www.cnblogs.com/luo630/p/15392359.html
Copyright © 2011-2022 走看看