赞
踩
40000 +字长文总结。
面向对象与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)
最短路径有着广泛的应用,比如地图两点间距离计算,公交查询系统,路由选择等
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。