全栈知识体系总览
Java入门与进阶
面向对象与Java基础
基础知识点复习完了以后,我们需要深入的理解Java中的一些基础机制:
Java进阶 - 集合框架
A. Java进阶 - Java 集合框:Java 集合框架应用是极其广泛的,对于其总体框架用法及源码都必要深刻理解。
- Collection 类关系图
B. Java进阶 - Java 集合框之 Collection源码解读:对核心的Collection类进行源码解读。
C. Java进阶 - Java 集合框之 Map & Set 源码解读:对核心的Map & Set 类进行源码解读。
Java进阶 - 并发框架
A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解并发理论基础和线程基础,并发关键字等,这些是你理解Java并发框架的基础。
B. Java进阶 - Java 并发之J.U.C框架:然后需要对J.U.C框架五大类详细解读,包括:Lock框架,并发集合, 原子类, 线程池和工具类。
B.1 Java进阶 - Java 并发之J.U.C框架【1/5】:CAS及原子类:从最核心的CAS, Unsafe和原子类开始分析。
B.2 Java进阶 - Java 并发之J.U.C框架【2/5】:锁:然后分析JUC中锁。
B.3 Java进阶 - Java 并发之J.U.C框架【3/5】:集合:再理解JUC中重要的支持并发的集合。
B.4 Java进阶 - Java 并发之J.U.C框架【4/5】:线程池:再者分析JUC中非常常用的线程池等。
B.5 Java进阶 - Java 并发之J.U.C框架【5/5】:工具类:最后来看下JUC中有哪些工具类,以及线程隔离术ThreadLocal。
C. Java进阶 - Java 并发之 本质与模式:最后站在更高的角度看其本质(协作,分工和互斥),同时总结上述知识点所使用的模式。
Java进阶 - IO框架
A. Java进阶 - IO框架之知识体系:首先了解下Java IO框架包含什么,同时推荐下如何学习IO框架。
B. Java进阶 - IO框架之基础IO:其次对Java基础IO框架进行梳理,包括其分类,使用和源码详解。
C. Java进阶 - IO框架之NIO/AIO等:然后再对Unix IO模型学习,引入到Java BIO/NIO/AIO相关知识详解。
D. Java进阶 - IO框架之开源框架:最后再对常用的开源框架进行分析和详解。
Java进阶 - JVM相关
学习思路
A. Java进阶 - JVM相关 知识体系:首先按照上述学习思路
,理解总体知识点在全局上与知识体系之间的对应关系。
- JVM 相关知识体系
B. Java进阶 - JVM相关 类加载:然后理解类字节码和类的加载机制。
C. Java进阶 - JVM相关 内存结构:因为类字节码是加载到JVM内存结构中的,所以紧接着理解JVM内存结构。
D. Java进阶 - JVM相关 JMM:然后通过理解JVM与硬件之间的联系,理解Java 通过其内存模型保证数据线程安全等,这是JVM在并发上底层的支持。
E. Java进阶 - JVM相关 GC:再者理解下Java GC机制,如何回收内存等。
F. Java进阶 - JVM相关 排错调优:最后围绕着调试和排错,分析理解JVM调优参数,动态字节码技术及动态在线调试的原理;学会使用常用的调工具和在线动态调试工具等。
G. Java进阶 - JVM 企业面试题精选:重点介绍一些企业常见的面试及答案解析
- Java 虚拟机(JVM)面试题(2021最新版)
更多关于Java技术栈的技术文章、技术资源(文档、视频)、以及各咱企业面试题,可以关注民工哥技术之路公众号,回复关键字 1024 获取全部分享的技术资源。
数据结构与算法
数据结构基础
学习思路
避免孤立的学习知识点,要关联学习。比如实际应用当中,我们经常使用的是查找
和排序
操作,这在我们的各种管理系统、数据库系统、操作系统等当中,十分常用,我们通过这个线索将知识点串联起来:
数组
的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查找,二分查找要求数组的构造一定有序,二分法查找解决了普通数组查找复杂度过高的问题。任和一种数组无法解决的问题就是插入、删除操作比较复杂,因此,在一个增删查改比较频繁的数据结构中,数组不会被优先考虑
普通链表
由于它的结构特点被证明根本不适合进行查找
哈希表
是数组和链表的折中,同时它的设计依赖散列函数的设计,数组不能无限长、链表也不适合查找,所以也适合大规模的查找
二叉查找树
因为可能退化成链表,同样不适合进行查找
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树本身是一种有限状态自动机,还有很多变体。什么模式匹配、正则