当前位置:   article > 正文

Java 全栈知识体系_java全栈知识体系

java全栈知识体系

40000 +字长文总结。

 

 

 

全栈知识体系总览

 

 

Java入门与进阶

面向对象与Java基础

 

  • Java 基础 - 面向对象

  • Java 基础 - 知识点

  • Java 基础 - 图谱 & Q/A

基础知识点复习完了以后,我们需要深入的理解Java中的一些基础机制:

  • Java 基础 - 泛型机制详解

    • Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。

  • Java 基础 - 注解机制详解

    • 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它是框架学习和设计者必须掌握的基础。

  • Java 基础 - 异常机制详解

    • Java异常是Java提供的一种识别及响应错误的一致性机制,ava异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。

  • Java 基础 - 反射机制详解

    • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。

  • Java常用机制 - SPI机制

    • SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。

Java进阶 - 集合框架

 

A. Java进阶 - Java 集合框:Java 集合框架应用是极其广泛的,对于其总体框架用法及源码都必要深刻理解。

  • Collection 类关系图

B. Java进阶 - Java 集合框之 Collection源码解读:对核心的Collection类进行源码解读。

  • Collection - ArrayList 源码解析

  • Collection - LinkedList源码解析

  • Collection - Stack & Queue 源码解析

  • Collection - PriorityQueue源码解析

C. Java进阶 - Java 集合框之 Map & Set 源码解读:对核心的Map & Set 类进行源码解读。

  • Map - HashSet & HashMap 源码解析

  • Map - LinkedHashSet&Map源码解析

  • Map - TreeSet & TreeMap 源码解析

  • Map - WeakHashMap源码解析

Java进阶 - 并发框架

 

A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解并发理论基础和线程基础,并发关键字等,这些是你理解Java并发框架的基础。

  • Java 并发 - 知识体系

  • Java 并发 - 理论基础

  • Java 并发 - 线程基础

  • 关键字: synchronized详解

  • 关键字: volatile详解

  • 关键字: final详解

B. Java进阶 - Java 并发之J.U.C框架:然后需要对J.U.C框架五大类详细解读,包括:Lock框架,并发集合, 原子类, 线程池和工具类。

  • JUC - 类汇总和学习指南

    • JUC框架包含几个部分?

    • 每个部分有哪些核心的类?

    • 最最核心的类有哪些?

B.1 Java进阶 - Java 并发之J.U.C框架【1/5】:CAS及原子类:从最核心的CAS, Unsafe和原子类开始分析。

  • JUC原子类: CAS, Unsafe和原子类详解

    • 线程安全的实现方法有哪些?

    • 什么是CAS?

    • CAS使用示例,结合AtomicInteger给出示例?

    • CAS会有哪些问题?

    • 针对这这些问题,Java提供了哪几个解决的?

    • AtomicInteger底层实现? CAS+volatile

    • 请阐述你对Unsafe类的理解?

    • 说说你对Java原子类的理解? 包含13个,4组分类,说说作用和使用场景。

    • AtomicStampedReference是什么?

    • AtomicStampedReference是怎么解决ABA的? 内部使用Pair来存储元素值及其版本号

    • java中还有哪些类可以解决ABA的问题? AtomicMarkableReference

B.2 Java进阶 - Java 并发之J.U.C框架【2/5】:锁:然后分析JUC中锁。

  • JUC锁: LockSupport详解

  • JUC锁: 锁核心类AQS详解

  • JUC锁: ReentrantLock详解

  • JUC锁: ReentrantReadWriteLock详解

B.3 Java进阶 - Java 并发之J.U.C框架【3/5】:集合:再理解JUC中重要的支持并发的集合。

  • JUC集合: ConcurrentHashMap详解

  • JUC集合: CopyOnWriteArrayList详解

  • JUC集合: ConcurrentLinkedQueue详解

  • JUC集合: BlockingQueue详解

B.4 Java进阶 - Java 并发之J.U.C框架【4/5】:线程池:再者分析JUC中非常常用的线程池等。

  • JUC线程池: FutureTask详解

  • JUC线程池: ThreadPoolExecutor详解

  • JUC线程池: ScheduledThreadPool详解

  • JUC线程池: Fork/Join框架详解

B.5 Java进阶 - Java 并发之J.U.C框架【5/5】:工具类:最后来看下JUC中有哪些工具类,以及线程隔离术ThreadLocal。

  • JUC工具类: CountDownLatch详解

  • JUC工具类: CyclicBarrier详解

  • JUC工具类: Semaphore详解

  • JUC工具类: Phaser详解

  • JUC工具类: Exchanger详解

  • Java 并发 - ThreadLocal详解

C. Java进阶 - Java 并发之 本质与模式:最后站在更高的角度看其本质(协作,分工和互斥),同时总结上述知识点所使用的模式。

  • TODO:Java 并发 - 并发的本质:协作,分工和互斥

  • TODO:Java 并发 - 并发的模式梳理

Java进阶 - IO框架

 

A. Java进阶 - IO框架之知识体系:首先了解下Java IO框架包含什么,同时推荐下如何学习IO框架。

  • Java IO/NIO/AIO - Overview

    • 本文主要梳理Java IO/NIO/AIO的知识体系

B. Java进阶 - IO框架之基础IO:其次对Java基础IO框架进行梳理,包括其分类,使用和源码详解。

  • Java IO - 分类(传输,操作)

    • 本文主要从传输方式数据操作两个方面分析Java IO的分类

  • Java IO - 设计模式(装饰者模式)

    • Java I/O 使用了装饰者模式来实现

  • Java IO - 源码: InputStream

    • 本文主要从JDK源码角度分析InputStream

  • Java IO - 源码: OutputStream

    • 本文主要从JDK源码角度分析 OutputStream

  • Java IO - 常见类使用

    • 本文主要介绍Java IO常见类的使用,包括:磁盘操作,字节操作,字符操作,对象操作和网络操作

C. Java进阶 - IO框架之NIO/AIO等:然后再对Unix IO模型学习,引入到Java BIO/NIO/AIO相关知识详解。

  • IO 模型 - Unix IO 模型

    • 本文主要简要介绍 Unix I/O 5种模型,并对5大模型比较,并重点为后续章节解释IO多路复用做铺垫

  • Java IO - BIO 详解

    • BIO就是: blocking IO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态

  • Java NIO - 基础详解

    • 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O

  • Java NIO - IO多路复用详解

    • 本文主要对IO多路复用,Ractor模型以及Java NIO对其的支持

  • Java AIO - 异步IO详解

    • 本文主要对异步IO和Java中对AIO的支持详解。@pdai

D. Java进阶 - IO框架之开源框架:最后再对常用的开源框架进行分析和详解。

  • Java NIO - 零拷贝实现这里转一篇Java NIO 零拷贝的实现文章,在此之前建议先理解什么是Linux中零拷贝,可以先看这篇文章。本文从源码着手分析了 Java NIO 对零拷贝的实现,主要包括基于内存映射(mmap)方式的 MappedByteBuffer 以及基于 sendfile 方式的 FileChannel。最后在篇末简单的阐述了一下 Netty 中的零拷贝机制,以及 RocketMQ 和 Kafka 两种消息队列在零拷贝实现方式上的区别。

  • Java N(A)IO - 框架: Netty

    • Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等

Java进阶 - JVM相关

 

学习思路

 

A. Java进阶 - JVM相关 知识体系:首先按照上述学习思路,理解总体知识点在全局上与知识体系之间的对应关系。

  • JVM 相关知识体系

B. Java进阶 - JVM相关 类加载:然后理解类字节码和类的加载机制。

  • JVM基础 - 类字节码详解

    • 源代码通过编译器编译为字节码,再通过类加载子系统进行加载到JVM中运行

  • JVM基础 - Java 类加载机制

    • 这篇文章将带你深入理解Java 类加载机制

C. Java进阶 - JVM相关 内存结构:因为类字节码是加载到JVM内存结构中的,所以紧接着理解JVM内存结构。

  • JVM基础 - JVM内存结构

    • 本文主要对JVM 内存结构进行讲解,注意不要和Java内存模型混淆了

D. Java进阶 - JVM相关 JMM:然后通过理解JVM与硬件之间的联系,理解Java 通过其内存模型保证数据线程安全等,这是JVM在并发上底层的支持。

  • JVM基础 - Java 内存模型引入

    • 很多人都Java内存模型和JVM内存结构,以及Java内存模型与物理内存之间的关系。本文从堆栈角度引入JMM,然后介绍JMM和物理内存之间的关系, 为后面JMM详解JVM 内存结构详解Java 对象模型详解等铺垫。

  • JVM基础 - Java 内存模型详解

    • 本文主要转载自 Info 上深入理解Java内存模型 (opens new window), 作者程晓明。这篇文章对JMM讲的很清楚了,大致分三部分:重排序与顺序一致性;三个同步原语(lock,volatile,final)的内存语义,重排序规则及在处理器中的实现;java 内存模型的设计,及其与处理器内存模型和顺序一致性内存模型的关系

E. Java进阶 - JVM相关 GC:再者理解下Java GC机制,如何回收内存等。

  • JVM基础 - Java 垃圾收集

    • 垃圾收集主要是针对堆和方法区进行

F. Java进阶 - JVM相关 排错调优:最后围绕着调试和排错,分析理解JVM调优参数,动态字节码技术及动态在线调试的原理;学会使用常用的调工具和在线动态调试工具等。

 

  • 调试排错 - JVM 调优参数

    • 本文对JVM涉及的常见的调优参数和垃圾回收参数进行阐述

  • 调试排错 - Java OOM 分析

    • 本文以两个简单的例子(堆内存溢出MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程

  • 调试排错 - Java问题排查:Linux命令

    • Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查

  • 调试排错 - Java问题排查:工具单

    • Java 在线问题排查主要分两篇:本文是第二篇,通过java调试/排查工具进行问题定位

  • 调试排错 - 9种常见的CMS GC问题分析与解决

    • 本文整理自美团技术团队 (opens new window), 这篇文章将可以帮助你构建CMS GC相关问题解决的知识体系,分享给你。

  • 调试排错 - Java动态调试技术原理

    • 本文转载自 美团技术团队胡健的Java 动态调试技术原理及实践 (opens new window), 通过学习java agent方式进行动态调试了解目前很多大厂开源的一些基于此的调试工具。

  • 调试排错 - Java应用在线调试Arthas

    • 本文主要介绍Alibaba开源的Java诊断工具

    • 这个类从哪个 jar 包加载的? 为什么会报各种类相关的 Exception?

    • 我改的代码为什么没有执行到? 难道是我没 commit? 分支搞错了?

    • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

    • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

    • 是否有一个全局视角来查看系统的运行状况?

    • 有什么办法可以监控到JVM的实时运行状态?

  • 调试排错 - 使用IDEA本地调试和远程调试

    • Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化;并且在实际的排错过程中,还会用到Remote Debug。IDEA 相比 Eclipse/STS效率更高,本文主要介绍基于IDEA的Debug和Remote Debug的技巧。

数据结构与算法

数据结构基础

 

学习思路

避免孤立的学习知识点,要关联学习。比如实际应用当中,我们经常使用的是查找排序操作,这在我们的各种管理系统、数据库系统、操作系统等当中,十分常用,我们通过这个线索将知识点串联起来:

数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查找,二分查找要求数组的构造一定有序,二分法查找解决了普通数组查找复杂度过高的问题。任和一种数组无法解决的问题就是插入、删除操作比较复杂,因此,在一个增删查改比较频繁的数据结构中,数组不会被优先考虑

普通链表由于它的结构特点被证明根本不适合进行查找

哈希表是数组和链表的折中,同时它的设计依赖散列函数的设计,数组不能无限长、链表也不适合查找,所以也适合大规模的查找

二叉查找树因为可能退化成链表,同样不适合进行查找

AVL树是为了解决可能退化成链表问题,但是AVL树的旋转过程非常麻烦,因此插入和删除很慢,也就是构建AVL树比较麻烦

红黑树是平衡二叉树和AVL树的折中,因此是比较合适的。集合类中的Map、关联数组具有较高的查询效率,它们的底层实现就是红黑树。

多路查找树 是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。

B树与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。它的应用是文件系统及部分非关系型数据库索引。

B+树在B树基础上,为叶子结点增加链表指针(B树+叶子有序链表),所有关键字都在叶子结点 中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中。通常用于关系型数据库(如Mysql)和操作系统的文件系统中。

B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针, 在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3。

R树是用来做空间数据存储的树状数据结构。例如给地理位置,矩形和多边形这类多维数据建立索引。

Trie树是自然语言处理中最常用的数据结构,很多字符串处理任务都会用到。Trie树本身是一种有限状态自动机,还有很多变体。什么模式匹配、正则表达式,都与这有关。

A. 数据结构 知识点:数据结构是基础中的基础,任何进阶都逃不开这些知识点。

  • 数据结构 - Overview

B. 数据结构之 线性结构:首先理解数据结构中线性结构及其延伸:数组和矩阵,链表,栈和队列等。

  • 线性表 - 数组和矩阵

    • 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变

  • 线性表 - 链表

    • n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来

  • 线性表(散列) - 哈希表

    • 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。@pdai

  • 线性表 - 栈和队列

    • 数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用

C. 数据结构之 逻辑结构:树:然后理解数据结构中逻辑结构之树:二叉搜索树(BST),平衡二叉树(AVL),红黑树(R-B Tree),哈夫曼树,前缀树(Trie)等。

  • 树 - 基础和Overview

    • 树在数据结构中至关重要,这里展示树的整体知识体系结构和几种常见树类型

  • 树 - 二叉搜索树(BST)

    • 本文主要介绍 二叉树中最基本的二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

  • 树 - 平衡二叉树(AVL)

    • 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

  • 树 - 红黑树(R-B Tree)

    • 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组,是平衡二叉树和AVL树的折中。

  • 树 - 哈夫曼树

    • 哈夫曼又称最优二叉树, 是一种带权路径长度最短的二叉树。

  • 树 - 前缀树(Trie)

    • Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

D. 数据结构之 逻辑结构:图:最后理解数据结构中逻辑结构之图:图基础,图的遍历,最小生成树(Prim & Kruskal),最短路径(Dijkstra & Frolyd),拓扑排序(Topological sort),AOE & 关键路径等。

  • 图 - 基础和Overview

    • 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。

  • 图 - 遍历(BFS & DFS)

    • 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似; 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索"

  • 图 - 最小生成树(Prim & Kruskal)

    • Kruskal算法是从最小权重边着手,将森林里的树逐渐合并;prim算法是从顶点出发,在根结点的基础上建起一棵树

  • 图 - 最短路径(Dijkstra & Frolyd)

    • 最短路径有着广泛的应用,比如地图两点间距离计算,公交查询系统,路由选择等

    • </
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/535703
推荐阅读
相关标签
  

闽ICP备14008679号