前言

提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系。为此我撰写了这篇文章,试图让这些底层架构相关知识更加直观易懂:

  • 尽量以图文的方式描述技术原理;
  • 涉及到关键的技术,附加官网或者技术书籍来源,方便大家进一步扩展学习;
  • 涉及到的背景知识尽可能做一个交代,比如讨论到log buffer的刷盘方式,延伸一下IO写磁盘相关知识点。

好了,MySQL从不会到精通系列马上就要开始了(看完之后还是不会的话…请忽略这句话)。

二叉树

定义

二叉树n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

图解

二叉树特点

由二叉树定义以及图示分析得出二叉树有以下特点:

  1. 每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
  2. 左子树和右子树是有顺序的,次序不能任意颠倒。
  3. 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

二叉树性质

由二叉树定义以及图示分析得出二叉树有以下性质:

  1. 若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

  • 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;
  • 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
  • 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。

斜树

定义

斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。

满二叉树

图解

定义

满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。

满二叉树的特点

满二叉树的特点有:

  1. 叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
  2. 非叶子结点的度一定是2。
  3. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。

完全二叉树

图解

定义

完全二叉树:对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

完全二叉树特点

特点

  1. 叶子结点只能出现在最下层和次下层。
  2. 最下层的叶子结点集中在树的左部。
  3. 倒数第二层若存在叶子结点,一定在右部连续位置。
  4. 如果结点度为1,则该结点只有左孩子,即没有右子树。
  5. 同样结点数目的二叉树,完全二叉树深度最小。
  6. :满二叉树一定是完全二叉树,但反过来不一定成立。

二叉树的存储结构

定义

二叉树的顺序存储结构就是使用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引。

图解

如图一棵完全二叉树按照顺序存储:

二叉树遍历

定义

二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

访问次序

二叉树的访问次序可以分为四种:

  1. 前序遍历 根结点 > 左子树 > 右子树
  2. 中序遍历 左子树> 根结点 > 右子树
  3. 后序遍历 左子树 > 右子树 > 根结点
  4. 层序遍历 仅仅需按层次遍历就可以

图解

前序遍历

定义

前序遍历通俗的说就是从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。

遍历流程
1、从根结点出发,则第一次到达结点A,故输出A;
2、继续向左访问,第一次访问结点B,故输出B;
3、按照同样规则,输出D,输出H;
4、当到达叶子结点H,返回到D,此时已经是第二次到达D,故不在输出D,进而向D右子树访问,D右子树不为空,则访问至I,第一次到达I,则输出I;
5、I为叶子结点,则返回到D,D左右子树已经访问完毕,则返回到B,进而到B右子树,第一次到达E,故输出E;
6、向E左子树,故输出J;
7、按照同样的访问规则,继续输出C、F、G;
遍历结果

前序遍历输出为:ABDHIEJCFG

中序遍历

定义

中序遍历就是从二叉树的根结点出发,当第二次到达结点时就输出结点数据,按照先向左在向右的方向访问。

遍历流程
1、从根结点出发,则第一次到达结点A,不输出A,继续向左访问,第一次访问结点B,不输出B;继续到达D,H;
2、到达H,H左子树为空,则返回到H,此时第二次访问H,故输出H;
3、H右子树为空,则返回至D,此时第二次到达D,故输出D;
4、由D返回至B,第二次到达B,故输出B;
5、按照同样规则继续访问,输出J、E、A、F、C、G;
遍历结果

中序遍历输出为:HDIBJEAFCG

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

想获取个人高清面试题的可以戳这里免费领取及个人也准备了很多面试题含答案的资料供你刷!

  • Java核心知识整理

Java核心知识

  • Spring全家桶(实战系列)

  • 其他电子书资料

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

8)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-XPLaaDjV-1621572158399)]

干货分享!微信抢红包实战案例相关推荐

  1. Java程序员校招蚂蚁金服,微信抢红包实战案例,纯干货

    开头 对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一.因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统.内存.CPU.编程语言等多方面的基础能力,更为考验一 ...

  2. 疯狂涨知识!「高并发秒杀」微信抢红包实战案例帮你突破瓶颈

    推荐阅读: 阿里二面凉经:设计模式+缓存+Spring+虚拟机+MySQL+中间件+并发等难题,全部迎刃而解 阿里巴巴字节跳动那些大厂必问的HTTP该怎么学?我建议你看看这篇文章! 蚂蚁.字节.PDD ...

  3. java开发微信抢红包挂_「高并发秒杀」微信抢红包实战案例

    推荐阅读: ( i' [9 Q6 ?7 K/ p+ B% ~ 8 L$ _" R- y- v  s1 p. e7 Y( }* M, l6 T+ R 阿里二面凉经:设计模式+缓存+Spring ...

  4. 「高并发秒杀」微信抢红包实战案例

    推荐阅读: 阿里二面凉经:设计模式+缓存+Spring+虚拟机+MySQL+中间件+并发等难题,全部迎刃而解 阿里巴巴字节跳动那些大厂必问的HTTP该怎么学?我建议你看看这篇文章! 蚂蚁.字节.PDD ...

  5. 小白勿进!「高并发秒杀」微信抢红包实战案例

    推荐阅读: 阿里二面凉经:设计模式+缓存+Spring+虚拟机+MySQL+中间件+并发等难题,全部迎刃而解 阿里巴巴字节跳动那些大厂必问的HTTP该怎么学?我建议你看看这篇文章! 蚂蚁.字节.PDD ...

  6. 程序员中年危机:微信抢红包实战案例

    前言 在网络技术中基于浏览器的B/S结构无论在PC端还是手机端都充当着至关重要的角色. PC端自不必说,手机中很多应用虽然是以APP的形式存在,但它采用的还是B/S结构.如今日头条.微信的朋友圈等,这 ...

  7. 一文搞懂JVM架构:微信抢红包实战案例

    微服务架构 第1章 微服务概述 什么是微服务 常见的微服务组件 常用的微服务框架 微服务架构设计模式 如何实施微服务 从微服务的起源和现实业务的角度探讨微服务 第2章 微服务设计原则 设计原则之分层架 ...

  8. 【面试必会】微信抢红包实战案例

    二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不一致.两次读取中间被其他事务修改了 3.幻读 幻读是指事务读取某个范围的数据时,因 ...

  9. 不愧是阿里大佬,微信抢红包实战案例,不可思议!

    开篇闲扯 打工人,打工魂,我们生而人上人.当"资本主义"逐渐禁锢我们人(大)上(韭)人(菜)肉体的时候,那一刻我才明白那个日不落帝国·资本主义收割机·瑞民族之光幸·瑞幸咖啡是多么的 ...

最新文章

  1. 极客新闻——13、美团到餐研发团队资源成本优化实践
  2. Logical Volume Manager in Linux ( Create, Displ...
  3. 《python从入门到精通》——使用位移运算符对密码进行加密
  4. x-lite asterisk 成功实现视频通话
  5. sorl6.0+jetty+mysql搭建solr服务
  6. python line.strip().split()_.strip().split()
  7. 实现等待wx.login完成后在执行其他请求
  8. 【函数计算月报】2018年10月刊
  9. python中正则表达式的用法_详解Python中的正则表达式的用法
  10. 【数码管识别】需要改进的地方
  11. 用计算机刻盘,用电脑可以刻录光盘吗?
  12. 宇枫资本工薪族理财启发
  13. Python3 PDF转图片
  14. 如何使用kodi Mac安装中文插件
  15. 什么是堆,什么是栈,堆栈的区别
  16. Andorid基础 Android系统层次框架结构
  17. kali下apt/dpkg 卸载软件
  18. 编译原理——java 词法分析【有穷自动机实现】
  19. javascript 实现类似超市排队结账算法,求最少时间
  20. Android编程小技巧

热门文章

  1. 怎样在iPhone或iPad上的“查找我”中设置AirTag?
  2. linux下Qt5.9.1编译安装qwtplot3d
  3. 三星台式计算机报价,三星台式机价格与测评介绍【图文详解】
  4. 第10章第17节:使用iSlide的序列化工具设置动画的延迟时间 [PowerPoint精美幻灯片实战教程]
  5. crmeb多商户二开crmeb多商户授权失败
  6. vue + element 自定义表单验证的时候 需要通过请求后端接口验证
  7. Autodesk CAD帮助文档总结四 DXF HEADER
  8. 666,太香了!Python 50 个正则表达式写法,建议收藏
  9. win10固态硬盘还需要分区吗? 不需要
  10. python 期权量化交易_12节精品课,带您用Python做期权量化交易!