资讯详情

40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

  • 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进阶 - 集合框架

:Java 集合框架应用广泛,需要深入了解其整体框架用法和源代码。

  • Collection 类关系图

:对核心的Collection类解释源码。

  • Collection - ArrayList 源码解析
  • Collection - LinkedList源码解析
  • Collection - Stack & Queue 源码解析
  • Collection - PriorityQueue源码解析

:对核心的Map & Set 类解释源码。

  • Map - HashSet & HashMap 源码解析
  • Map - LinkedHashSet&Map源码解析
  • Map - TreeSet & TreeMap 源码解析
  • Map - WeakHashMap源码解析

Java进阶 - 并发框架

:首先全局了解并发知识体系,同时了解并发理论基础和线程基础,并发关键词等。Java并发框架的基础。

  • Java 并发 - 知识体系
  • Java 并发 - 理论基础
  • Java 并发 - 线程基础
  • 关键字: synchronized详解
  • 关键字: volatile详解
  • 关键字: final详解

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

  • JUC - 类别总结和学习指南
    • JUC框架包含多少部分?
    • 每个部分的核心类别是什么?
    • 核心类有哪些?

:从最核心的CAS, Unsafe和原子类开始分析。

  • JUC原子类: CAS, Unsafe和原子类详解
    • 实现线程安全的方法有哪些?
    • 什么是CAS?
    • CAS使用示例,结合AtomicInteger给出示例?
    • CAS会有哪些问题?
    • 针对这些问题,Java提供了哪些解决方案?
    • AtomicInteger底层实现? CAS volatile
    • 请阐述你对Unsafe类的理解?
    • 说说你对Java理解原子类 包括13个,4组分类,谈功能和使用场景。
    • AtomicStampedReference是什么?
    • AtomicStampedReference是怎么解决ABA的? 内部使用Pair存储元素值及其版本号
    • java还有哪些类别可以解决ABA的问题? AtomicMarkableReference

:然后分析JUC中锁。

  • JUC说: LockSupport详解
  • JUC锁: 锁核心类AQS详解
  • JUC锁: ReentrantLock详解
  • JUC锁: ReentrantReadWriteLock详解

:再理解JUC支持并发集合的重要支持。

  • JUC集合: ConcurrentHashMap详解
  • JUC集合: CopyOnWriteArrayList详解
  • JUC集合: ConcurrentLinkedQueue详解
  • JUC集合: BlockingQueue详解

:再者分析JUC中非常常用的线程池等。

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

:最后来看下JUC线程隔离有哪些工具?ThreadLocal。

  • JUC工具类: CountDownLatch详解
  • JUC工具类: CyclicBarrier详解
  • JUC工具类: Semaphore详解
  • JUC工具类: Phaser详解
  • JUC工具类: Exchanger详解
  • Java 并发 - ThreadLocal详解

:最后,从更高的角度看其本质(合作、分工和相互排斥),总结上述知识点使用的模式。

  • TODO:Java 并发 - 并发的本质:合作、分工、互斥
  • TODO:Java 并发 - 并发模式梳理

Java进阶 - IO框架

A. Java进阶 - IO框架知识体系:首先了解Java IO框架包含什么,建议如何学习IO框架。

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

:其次对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常见类的使用,包括:磁盘操作,字节操作,字符操作,对象操作和网络操作

:然后再对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

:最后再对常用的开源框架进行分析和详解。

  • 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相关

学习思路

:首先按照上述学习思路,理解总体知识点在全局上与知识体系之间的对应关系。

  • JVM 相关知识体系

:然后理解类字节码和类的加载机制。

  • JVM基础 - 类字节码详解
    • 源代码通过编译器编译为字节码,再通过类加载子系统进行加载到JVM中运行
  • JVM基础 - Java 类加载机制
    • 这篇文章将带你深入理解Java 类加载机制

:因为类字节码是加载到JVM内存结构中的,所以紧接着理解JVM内存结构。

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

:然后通过理解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 内存模型的设计,及其与处理器内存模型和顺序一致性内存模型的关系

:再者理解下Java GC机制,如何回收内存等。

  • JVM基础 - Java 垃圾收集
    • 垃圾收集主要是针对堆和方法区进行

:最后围绕着调试和排错,分析理解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的技巧。

:重点介绍一些企业常见的面试及答案解析

  • Java 虚拟机(JVM)面试题(2022最新版)

学习思路

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

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

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

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

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

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树本身是一种有限状态自动机,还有很多变体。什么模式匹配、正则表达式,都与这有关。

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

  • 数据结构 - Overview

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

  • 线性表 - 数组和矩阵
    • 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变
  • 线性表 - 链表
    • n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来
  • 线性表(散列) - 哈希表
    • 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。@pdai
  • 线性表 - 栈和队列
    • 数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用

:然后理解数据结构中逻辑结构之树:二叉搜索树(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,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

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

  • 图 - 基础和Overview
    • 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。
  • 图 - 遍历(BFS & DFS)
    • 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似; 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索"
  • 图 - 最小生成树(Prim & Kruskal)
    • Kruskal算法是从最小权重边着手,将森林里的树逐渐合并;prim算法是从顶点出发,在根结点的基础上建起一棵树
  • 图 - 最短路径(Dijkstra & Frolyd)
    • 最短路径有着广泛的应用,比如地图两点间距离计算,公交查询系统,路由选择等
  • 图 - 拓扑排序(Topological sort)
    • 拓扑排序主要用来解决有向图中的依赖解析(dependency resolution)问题
  • 图 - AOE & 关键路径
    • 关键路径在项目管理计算工期等方面有广泛等应用,提升工期就是所见缩减所有关键路径上的工期,并且在实现时需要应用到之前拓扑排序的算法(前提: 有向无环图,有依赖关系)

排序算法详解

:重点理解几个排序之间的对比,时间和空间复杂度,以及应用。PS:越简单越要提高认知效率,做到战略上藐视战术上重视。

  • 排序 - Overview

:具体分析各种排序及其复杂度,查漏补缺;在综合复杂度及稳定性情况下,通常希尔, 快排和 归并需要重点掌握。

  • 排序 - 冒泡排序(Bubble Sort)
    • 它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾!采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止
  • 排序 - 快速排序(Quick Sort)
    • 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
  • 排序 - 插入排序(Insertion Sort)
    • 直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
  • 排序 - Shell排序(Shell Sort)
    • 希尔排序实质上是一种分组插入方法。它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。
  • 排序 - 选择排序(Selection sort)
    • 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
  • 排序 - 堆排序(Heap Sort)
    • 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
  • 排序 - 归并排序(Merge Sort)
    • 将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。
  • 排序 - 桶排序(Bucket Sort)
    • 桶排序(Bucket Sort)的原理很简单,将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)
  • 排序 - 基数排序(Radix Sort)
    • 它的基本思想是: 将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列

算法思想详解

:紧接着我们通过理解算法背后常用的算法思想,进行归纳总结,并通过leetcode练习来辅助理解和提升。

  • 算法思想 - 分治算法
    • 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解
  • 算法思想 - 动态规划算法
    • 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解
  • 算法思想 - 贪心算法
    • 本文主要介绍算法中贪心算法的思想: 保证每次操作都是局部最优的,并且最后得到的结果是全局最优的
  • 算法思想 - 二分法
    • 本文主要介绍算法思想中分治算法重要的二分法,比如二分查找;二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
  • 算法思想 - 搜索算法
    • 本文主要介绍算法中搜索算法的思想,主要包含BFS,DFS
  • 算法思想 - 回溯算法
    • Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法

领域算法详解

:在了解基础算法之后,我们还要学习和了解在不同专业领域有哪些特有的算法。这里不一定要求复杂度,而是要有知识面以及解决问题的思路。

  • 一些领域算法 - Overview

:主要包括摘要算法和加密算法两大类。

  • 安全算法 - 摘要算法
    • 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。
  • 安全算法 - 加密算法
    • 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程
  • 安全算法 - 国密算法
    • 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4,SM7, SM9。

:字符串匹配(String Matchiing)也称字符串搜索(String Searching)是字符串算法中重要的一种,是指从一个大字符串或文本中找到模式串出现的位置。

  • 朴素的字符串匹配算法(Naive String Matching Algorithm)
    • 朴素的字符串匹配算法又称为(Brute Force Algorithm),最为简单的字符串匹配算法
  • Knuth-Morris-Pratt 字符串匹配算法(即 KMP 算法)
    • Knuth-Morris-Pratt算法(简称KMP)是最常用的字符串匹配算法之一
  • Boyer-Moore 字符串匹配算法
    • 各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法,效率非常高
  • 字符串匹配 - 文本预处理:后缀树(Suffix Tree)
    • 上述字符串匹配算法(朴素的字符串匹配算法, KMP 算法, Boyer-Moore算法)均是通过对的方式来加快搜索速度。对 Pattern 进行预处理的最优复杂度为 O(m),其中 m 为 Pattern 字符串的长度。那么,有没有对文本(Text)进行预处理的算法呢?本文即将介绍一种的字符串匹配算法:后缀树(Suffix Tree)

:这里其实想让大家理解的是大数据处理的常用思路,而不是算法本身。

  • 大数据处理 - Overview
    • 本文主要介绍大数据处理的一些思路
  • 大数据处理 - 分治/hash/排序
    • 就是先映射,而后统计,最后排序:
    • 分而治之/hash映射: 针对数据太大,内存受限,只能是: 把大文件化成(取模映射)小文件,即16字方针: 大而化小,各个击破,缩小规模,逐个解决
    • hash_map统计: 当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。
    • 堆/快速排序: 统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。
  • 大数据处理 - Bitmap & Bloom Filter
    • 布隆过滤器有着广泛的应用,对于大量数据的“存不存在”的问题在空间上有明显优势,但是在判断存不存在是有一定的错误率(false positive),也就是说,有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)
  • 大数据处理 - 双层桶划分
    • 其实本质上还是分而治之的思想,重在“分”的技巧上!适用范围: 第k大,中位数,不重复或重复的数字;基本原理及要点: 因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。
  • 大数据处理 - Trie树/数据库/倒排索引
    • 适用范围: 数据量大,重复多,但是数据种类小可以放入内存;基本原理及要点: 实现方式,节点孩子的表示方式;扩展: 压缩实现
  • 大数据处理 - 外排序
    • 适用范围: 大数据的排序,去重;基本原理及要点: 外排序的归并方法,置换选择败者树原理,最优归并树
  • 大数据处理 - Map & Reduce
    • MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。但如果你要我再通俗点介绍,那么,说白了,Mapreduce的原理就是一个归并排序

:接着向大家介绍分布式算法,包括一致性Hash算法,经典的Paxos算法,Raft算法,ZAB算法等;顺便也介绍了经典用于全局ID生成的Snowflake算法。

  • 分布式算法 - Overview
    • 本文总结下常见的分布式算法
  • 分布式算法 - 一致性Hash算法
    • 一致性Hash算法是个经典算法,Hash环的引入是为解决单调性(Monotonicity)的问题;虚拟节点的引入是为了解决平衡性(Balance)问题
  • 分布式算法 - Paxos算法
    • Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性, 很多分布式一致性算法都由Paxos演变而来
  • 分布式算法 - Raft算法
    • Paxos是出了名的难懂,而Raft正是为了探索一种更易于理解的一致性算法而产生的。它的首要设计目的就是易于理解,所以在选主的冲突处理等方式上它都选择了非常简单明了的解决方案
  • 分布式算法 - ZAB算法
    • ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议), 它应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为他是为 Zookeeper 设计的分布式一致性协议!
  • 分布式算法 - Snowflake算法
    • Snowflake,雪花算法是由Twitter开源的分布式ID生成算法,以划分命名空间的方式将 64-bit位分割成多个部分,每个部分代表不同的含义。这种就是将64位划分为不同的段,每段代表不同的涵义,基本就是时间戳、机器ID和序列数。为什么如此重要?因为它提供了一种ID生成及生成的思路,当然这种方案就是需要考虑时钟回拨的问题以及做一些 buffer的缓冲设计提高性能。

:最后概要性的了解常见的其它算法:负载均衡算法,推荐算法,数据挖掘或机器学习算法。因为有其专业性,一般总体上了解就够了。

  • 负载均衡算法 - 汇总
    • 本文主要介绍常用的负载均衡算法和Nginx中支持的负载均衡算法:轮询法(Round Robin),加权轮询法(Weight Round Robin),平滑加权轮询法(Smooth Weight Round Robin),随机法(Random),加权随机法(Weight Random),源地址哈希法(Hash),最小连接数法(Least Connections)
  • 推荐算法 - 汇总
    • 本文主要对推荐算法整体知识点做汇总,做到总体的理解;深入理解需要再看专业的材料
  • 数据挖掘 - 10大算法汇总
    • 国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法: C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART

数据库基础与理论

:在学习数据库之前,不要一上来就是SQL语句;这里建议从数据结构开始切入到数据库,然后再理解数据库是如何工作的,紧接着理解数据库系统的原理知识点和相关知识体系。

  • SQL DB - 资料汇总
  • SQL DB - 关系型数据库是如何工作的
    • 很多人在学习数据时都是孤立的学习知识点,这样是很难将所有知识点串起来深入理解;强烈推荐你学习两篇文章:Architecture of a Database System (opens new window)以及How does a relational database work (opens new window);本文主要在第二篇基础上翻译并梳理,如果你英文不好的话,你可以通过本文帮助你构筑数据库体系的基础
  • SQL DB - 关系型数据库设计理论
    • 在上文了解数据库如何工作后,本节介绍如何将一个(基于表的数据模型)合理的转化为,以及确定的。这便是数据库设计理论基础,包括术语,函数依赖,范式等理论基础
  • SQL DB - 关系型数据库设计流程
    • 在上文知道如何设计表和健后,让我们再看看整个的吧,主要包括需求分析, 概念结构设计, 逻辑结构设计 , 物理设计, 实施阶段和运行和维护阶段这6个阶段
  • SQL DB - 数据库系统核心知识点
    • 基于上篇数据库如何工作的基础之上,我们再来梳理下数据库系统中有哪些重要的知识点,包括:事务,并发一致性,封锁,隔离级别,多版本并发控制等

SQL语言基础和进阶

:在了解数据库基础之后,如下章节将重点阐述SQL语言相关的知识;主要顺序是:SQL语法->SQL语句练习->SQL题目进阶->SQL语句优化建议等。

  • SQL语言 - SQL语法基础
    • 本文包含了所有SQL语言的基础语法,并用例子的方式向你展示
  • SQL语言 - SQL语句练习
    • 在上文学习了SQL的基本语法以后,本文将通过最经典的“教师-学生-成绩”表来帮助你练习SQL。@pdai
  • SQL语言 - SQL题目进阶
    • 接下来,通过Leetcode上的SQL题目进行进阶吧
  • SQL语言 - SQL语句优化
    • 最后,再总结一些SQL语句的优化建议

SQL DB - MySQL数据库

:在理解了SQL语言后,开始进阶MySQL相关的知识点吧(在开始前,建议你完整看一本MySQl相关的书,作为你的知识体系基础);这里不会讲如何安装MySQL或者如何使用,因为这是容易的,而是会关注一些有助于我们构建MySQL相关知识体系的知识点等。

  • MySQL - 数据类型
    • 本文主要整理MySQL中数据字段类型。
  • MySQL - 存储引擎
    • 本文主要介绍MySQL中的存储引擎。
  • MySQL - 索引(B+树)
  • MySQL - 性能优化
  • MySQL - 分表分库
  • MySQL - 主从复制与读写分离
  • MySQL - 一条 SQL 的执行过程详解
    • 一条 SQL 的执行过程详解。

NoSQL DB - Redis详解

:在理解了关系型数据库后,开始进阶最为常用的KV库Redis,一些大厂都在使用,面试也必问。

首先,我们通过学习Redis的概念基础,了解它适用的场景。

  • Redis入门 - Redis概念和基础
    • Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

其次,这些适用场景都是基于Redis支持的数据类型的,所以我们需要学习它支持的数据类型;同时在redis优化中还需要对底层数据结构了解,所以也需要了解一些底层数据结构的设计和实现。

  • Redis入门 - 数据类型:5种基础数据类型详解
    • Redis所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash
  • Redis入门 - 数据类型:3种特殊类型详解
    • Redis除了上文中5种基础数据类型,还有三种特殊的数据类型,分别是 HyperLogLogs(基数统计), Bitmaps (位图) 和 geospatial (地理位置)
  • Redis入门 - 数据类型:Stream详解
    • Redis5.0 中还增加了一个数据结构Stream,它借鉴了Kafka的设计,是一个新的强大的支持多播的可持久化的消息队列。
  • Redis进阶 - 底层数据结构:对象机制详解
    • 我们在前文已经阐述了Redis 5种基础数据类型详解,分别是字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset),以及5.0版本中Redis Stream结构详解;那么这些基础类型的底层是如何实现的呢?Redis的每种对象其实都由 与 组合而成, 本文主要介绍 部分。。
  • Redis进阶 - 底层数据结构:底层数据结构详解
    • 前文是第一部分底层设计:对象机制详解, 本文主要介绍底层数据结构 部分。
  • Redis进阶 - 底层数据结构:redis对象与编码(底层结构)对应关系详解
    • 在学习完底层数据结构之后,我们终于可以结合前文内容阐述redis对象及编码之间的关系了。

再者,需要学习Redis支持的核心功能,包括持久化,消息,事务,高可用;高可用方面包括,主从,哨兵等;高可拓展方面,比如 分片机制等。

  • Redis进阶 - 持久化:RDB和AOF机制详解
    • 为了防止数据丢失以及服务重启时能够恢复数据,Redis支持数据的持久化,主要分为两种方式,分别是RDB和AOF; 当然实际场景下还会使用这两种的混合模式。
  • Redis进阶 - 消息传递:发布订阅模式详解
    • Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
  • Redis进阶 - 事件:Redis事件机制详解
    • Redis 采用事件驱动机制来处理大量的网络IO。它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event。
  • Redis进阶 - 事务:Redis事务详解
    • Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。
  • Redis进阶 - 高可用:主从复制详解
    • 我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。本文主要阐述Redis的主从复制。
  • Redis进阶 - 高可用:哨兵机制(Redis Sentinel)详解
    • 在上文主从复制的基础上,如果注节点出现故障该怎么办呢?在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的问题。
  • Redis进阶 - 高可拓展:分片技术(Redis Cluster)详解
    • 前面两篇文章,主从复制和哨兵机制保障了高可用,就读写分离而言虽然slave节点来扩展主从的读并发能力,但是写能力和存储能力是无法进行扩展的,就只能是master节点能够承载的上限。如果面对海量数据那么必然需要构建master(主节点分片)之间的集群,同时必然需要吸收高可用(主从复制和哨兵机制)能力,即每个master分片节点还需要有slave节点,这是分布式系统中典型的纵向扩展(集群的分片技术)的体现;所以在Redis 3.0版本中对应的设计就是Redis Cluster。

最后,就是具体的实践以及实践中遇到的问题和解决方法了:在不同版本中有不同特性,所以还需要了解版本;以及性能优化,大厂实践等。

  • Redis进阶 - 缓存问题:一致性, 穿击, 穿透, 雪崩, 污染等
    • Redis最常用的一个场景就是作为缓存,本文主要探讨作为缓存,在实践中可能会有哪些问题?比如一致性, 穿击, 穿透, 雪崩, 污染等
  • Redis进阶 - 版本特性: Redis4.0、5.0、6.0特性整理
    • 在学习Redis知识体系时,我们难免会需要查看版本实现之间的差异,本文主要整理Redis较为新的版本的特性。
  • Redis进阶 - 运维监控:Redis的监控详解
    • Redis实战中包含开发,集群 和 运维,Redis用的好不好,如何让它更好,这是运维要做的;本文主要在 ,以及等方面帮助你构建对redis运维/监控体系的认知,它是性能优化的前提。
  • Redis进阶 - 性能调优:Redis性能调优详解
    • Redis 的性能问题,涉及到的知识点非常广,几乎涵盖了 CPU、内存、网络、甚至磁盘的方方面面;同时还需要对上文中一些基础或底层有详细的了解。针对Redis的性能调优,这里整理分享一篇水滴与银弹(公众号)的文章,这篇文章可以帮助你构筑Redis性能调优的知识体系。
  • Redis大厂经验 - 微博:万亿级日访问量下,Redis在微博的9年优化历程
    • 再分享一篇微博使用redis的经验的文章,因为Redis在微博内部分布在各个应用场景,比如像现在春晚必争的“红包飞”活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到Redis;我们可以通过大厂使用redis的经验来强化对redis使用上的认知。

NoSQL DB - MongoDB详解

:在理解了Redis后,让我们认识NoSQL数据库中最为常用的MongoDB;它在后期版本中更换了证书,使用时需要注意下;但是不妨碍我们学习。

MongoDB生态

:首先了解NoSQL基本的概念以及MongoDB基础概念,进而引入MongoDB的生态。

  • Mongo入门 - MongoDB基础概念
    • 在学习MongoDB之前先简单了解相关概念。
  • Mongo入门 - MongoDB整体生态
    • 很多人在学习Mongo时仅仅围绕着数据库功能,围绕着CRUD和聚合操作,但是MongoDB其实已经基本形成了它自身的生态了。我们在学习一项技能时一定要跳出使用的本身,要从高一点的格局上了解整个生态,这样会对你构筑知识体系有很大的帮助。。

:开始学习MongoDB安装,使用等。

  • Mongo入门 - 基本使用:安装和CRUD
    • 在理解MongoDB基础概念后,本文将介绍MongoDB的安装和最基本的CURD操作。
  • Mongo入门 - 基本使用:索引和聚合
    • 在了解MongoDB的基本CRUD操作后,常用的其它操作还有对字段的索引以及对字段的聚合操作。
  • Mongo入门 - 基本使用:效率工具
    • 本文将主要介绍常用的MongoDB的工具,这些工具可以极大程度的提升你的效率。
  • Mongo入门 - 基本使用:Java 低阶API
    • 本文为低优先级,只是向你介绍下MongoDB提供的原生的JavaAPI;而大多数公司使用Spring框架,会使用Spring Data对MongoDB原生API的封装,比如JPA,MongoTemplate等。
  • Mongo入门 - 基本使用:Spring Data + Mongo
    • 本文为主要介绍Spring Data对MongoDB原生API的封装,比如JPA,MongoTemplate等。以及原生API和Spring data系列之间的关系。

:在学习完常用的基础之后,我们再看下MongoDB的原理和WiredTigger存储引擎。

  • Mongo进阶 - MongoDB体系结构
    • 上面章节已经对MongoDB生态中工具以及使用有了基础,后续文章我们将开始理解MongoDB是如何支撑这些功能的。我们将从最基本的MongoDB的体系结构开始介绍,主要包括MongoDB的包结构,MongoDB的数据逻辑结构,MongoDB的数据文件结构。其中围绕着MongoDB的数据文件结构,将为我们后续介绍MongoDB的存储引擎详解打下基础。
  • Mongo进阶 - 原理和WiredTiger引擎
    • 开始初步了解MongoDB实现原理和WiredTiger引擎。
  • Mongo进阶 - WT引擎:数据结构
    • MongoDB的WiredTiger存储引擎背后采用了什么样的数据结构呢?本文将从常见引擎数据结构,典型B-Tree数据结构,磁盘数据结构, 内存数据结构, Page数据结构等方面详解介绍。。
  • Mongo进阶 - WT引擎:Page生命周期
    • 通过前文我们了解到数据以page为单位加载到cache; 有必要系统的分析一页page的生命周期、状态以及相关参数的配置,这对后续MongoDB的性能调优和故障问题的定位和解决有帮助。
  • Mongo进阶 - WT引擎:checkpoint原理
    • Checkpoint主要有两个目的: 一是将内存里面发生修改的数据写到数据文件进行持久化保存,确保数据一致性;二是实现数据库在某个时刻意外发生故障,再次启动时,缩短数据库的恢复时间,WiredTiger存储引擎中的Checkpoint模块就是来实现这个功能的。

:再者我们还学要进一步学习MongoDB的核心知识点。

  • Mongo进阶 - DB核心:索引实现
    • 数据库核心知识点之索引
  • Mongo进阶 - DB核心:复制集
    • 数据库核心知识点之复制集
  • Mongo进阶 - DB核心:分片Sharding
    • 数据库核心知识点之复分片Sharding
  • Mongo进阶 - DB核心:备份恢复
    • 数据库核心知识点之备份恢复

:在真正使用中,需要知道如何设计数据模型。

  • Mongo进阶 - 系统设计:数据模型
    • MongoDB使用文档数据模型。
  • Mongo进阶 - 系统设计:模式构建
    • MongoDB使用文档数据模型具有内在的灵活性,允许数据模型支持你的应用程序需求, 灵活性也可能导致模式比它们应有样子的更复杂。这涉及到如何在MongoDB中设计数据库模式(schema),有一个严峻的现实,大多数性能问题都可以追溯到糟糕的模式设计。

:最后基于上述知识点,我们再了解下常见的性能优化的方式。

  • Mongo进阶 - 性能:查询聚合优化
    • 在MongoDB中通过查询聚合语句分析定位慢查询/聚合分析

NoSQL DB - ElasticSearch

:在理解了MongoDB后,让我们再学习下搜索的索引库;日志收集ELK栈是非常常见的,同时在一些离线大数据分析中也经常使用。

首先,我们通过学习ElasticSearch的概念基础,了解Elastic Stack生态和场景方案。

  • ES详解 - 认知:ElasticSearch基础概念
    • 在学习ElasticSearch之前,先简单了解下ES流行度,使用背景,以及相关概念等
  • ES详解 - 认知:Elastic Stack生态和场景方案
    • 在了解ElaticSearch之后,我们还要了解Elastic背后的生态即我们常说的ELK;与此同时,还会给你展示ElasticSearch的案例场景,让你在学习ES前对它有个全局的印象。

然后,搭建ElasticSearch和Kibana,进而从查询和聚合的角度入门学习。

  • ES详解 - 安装:ElasticSearch和Kibana安装
    • 了解完ElasticSearch基础和Elastic Stack生态后,我们便可以开始学习使用ElastiSearch了。所以本文主要介绍ElasticSearch和Kibana的安装。
  • ES详解 - 入门:查询和聚合的基础使用
    • 安装完ElasticSearch 和 Kibana后,为了快速上手,我们通过官网GitHub提供的一个数据进行入门学习,主要包括

入门后,需要从两大方面深入ElasticSearch常用功能:第一方面是管理;第二方面是

  • ES详解 - 索引:索引管理详解
    • 了解基本使用后,我们从索引操作的角度看看如何对索引进行管理。
  • ES详解 - 索引:索引模板(Index Template)详解
    • 前文介绍了索引的一些操作,特别是手动创建索引,但是批量和脚本化必然需要提供一种模板方式快速构建和管理索引,这就是本文要介绍的索引模板(Index Template),它是一种告诉Elasticsearch在创建索引时如何配置索引的方法。为了更好的复用性,在7.8中还引入了组件模板。
  • ES详解 - 查询:DSL查询之复合查询详解
    • 在查询中会有多种条件组合的查询,在ElasticSearch中叫复合查询。它提供了5种复合查询方式:
  • ES详解 - 查询:DSL查询之全文搜索详解
    • DSL查询极为常用的是对文本进行搜索,我们叫全文搜索,本文主要对全文搜索进行详解。
  • ES详解 - 查询:DSL查询之Term详解
    • DSL查询另一种极为常用的是对词项进行搜索,官方文档中叫”term level“查询,本文主要对term level搜索进行详解。
  • ES详解 - 聚合:聚合查询之Bucket聚合详解
    • 除了查询之外,最常用的聚合了,ElasticSearch提供了三种聚合方式: 和 ,本文主要介绍桶聚合(Bucket Aggregration)。
  • ES详解 - 聚合:聚合查询之Metric聚合详解
    • 前文主要讲了 ElasticSearch提供的三种聚合方式之桶聚合(Bucket Aggregration),本文主要讲讲指标聚合(Metric Aggregration)。
  • ES详解 - 聚合:聚合查询之Pipline聚合详解
    • 前文主要讲了 ElasticSearch提供的三种聚合方式之指标聚合(Metric Aggregration),本文主要讲讲管道聚合(Pipeline Aggregration)。

进一步进阶,了解并深入ElasticSearch底层的原理

标签: wt710角位变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台