B+Tree

数据库系统浅出

六月ゝ 毕业季﹏ 提交于 2020-08-04 21:58:51
世界上只有两种开发人员,一种使用数据库系统的,一种开发数据库系统的。 数据是系统最重要的信息。大部分系统都是对数据的管理。应用系统通过数据模型来构建现实世界,通过算法操作对象或数据结构,来改变数据模型的状态。数据被组织在操作系统文件中,我们通过数据系统来组织,查询,搜索,处理数据。 本文将从数据库的发展、数据库的分类、常见数据库架构,数据库常见概念和技术等方面探讨这个我们接触最多的底层系统,并通过穿插不同数据库的实现原理,来了解数据库的具体实现。 本文分为五个大章节。 探古溯源 ,从数据库的诞生,发展,现状和展望来了解数据库存在的意义,以及数据库设计的历史与现实原因。 百家争鸣 ,本节从不同分类方式,讲解一些不同的数据库系统实现,有助于拓展我们的视野,在技术选型时可以作为参考( 底层数据库系统的选型对整个系统的架构实在太重要了 )。 承上启下 ,本节是整篇文章的中间章节,前两章以兴趣点,纯理论展开,在本节中将对前两章做一个总结,有了前两章知识,我们已经可以去选择适合项目需求的数据库系统,对那些想更深入了解底层存储的同学也可以选择自己感兴趣的数据库类型和方案找到相应的实现,从而进入下一步学习。下面两章将讲解更多具体的技术点。 知行合一 ,这一章节将讲解数据库的实现,分析一些数据库架构,分布式问题和解决方案,透析具体的数据库常见的技术点。 针对不同兴趣,大家可以按需取之,跳过不感兴趣的

我在广州面试的那些事

风格不统一 提交于 2020-08-04 10:17:28
背景   这次的疫情让原本看似有序的但是浮躁的社会彻底打乱了,不少劳动者在多年稳定的节奏也随之而变,而我在于其中放慢了步调,从5月份放弃了一份工作同时拒绝了两份offer后回家休息加造人。休息期间接了些技术顾问的工作,看了几本书增加自己的知识量,写了几篇博客做了些之前工作的总结,也打了王者荣耀尝试冲荣耀王者。   那么从2019年12月开始至今,我在广州面试了不少公司,基本都是应聘系统架构师和部门负责人的岗位,中间有不少的故事,有体验极好的也有体验极差的,我都将在下文分享给大家,体验极差的我就不直接点名了。 PS:此文非引战,如有评论,请理性沟通 壹物壹码   先说一个体验及其好的,这也是我遇到为数不多非常尊重人的,黄埔区区的安居宝科技园里的 壹物壹码公司,从面试官的交谈得知公司做的范围比较的广,主要以前期接项目后期看潜力转产品的这样的一个模式,业务比较稳定,以上市为目标,主要在BOSS直聘发布招聘消息。   我当时是投了高级软件工程师的,但是薪资范围挺高的所以我当时心里觉得没那么简单,HR联系我的时候说CEO想直接面我,我人在老家因此邀请了做一个视频面试,面试官也爽快的答应了。一面是产品总监面,说实话很给面子,完全不问我技术,他说看了我的博客、开源项目和简历,理念跟他的很像很会从软件工程的角度给团队提高生产力,所以不担心我的技术。另外,他们这次想招的是技术总监或者系统架构师

我在广州面试的那些事

若如初见. 提交于 2020-08-04 09:39:11
背景   这次的疫情让原本看似有序的但是浮躁的社会彻底打乱了,不少劳动者在多年稳定的节奏也随之而变,而我在于其中放慢了步调,从5月份放弃了一份工作同时拒绝了两份offer后回家休息加造人。休息期间接了些技术顾问的工作,看了几本书增加自己的知识量,写了几篇博客做了些之前工作的总结,也打了王者荣耀尝试冲荣耀王者。   那么从2019年12月开始至今,我在广州面试了不少公司,基本都是应聘系统架构师和部门负责人的岗位,中间有不少的故事,有体验极好的也有体验极差的,我都将在下文分享给大家,体验极差的我就不直接点名了。 PS:此文非引战,如有评论,请理性沟通 壹物壹码   先说一个体验及其好的,这也是我遇到为数不多非常尊重人的,黄埔区区的安居宝科技园里的 壹物壹码公司,从面试官的交谈得知公司做的范围比较的广,主要以前期接项目后期看潜力转产品的这样的一个模式,业务比较稳定,以上市为目标,主要在BOSS直聘发布招聘消息。   我当时是投了高级软件工程师的,但是薪资范围挺高的所以我当时心里觉得没那么简单,HR联系我的时候说CEO想直接面我,我人在老家因此邀请了做一个视频面试,面试官也爽快的答应了。一面是产品总监面,说实话很给面子,完全不问我技术,他说看了我的博客、开源项目和简历,理念跟他的很像很会从软件工程的角度给团队提高生产力,所以不担心我的技术。另外,他们这次想招的是技术总监或者系统架构师

我在广州面试的那些事

我的未来我决定 提交于 2020-08-04 09:28:23
背景   这次的疫情让原本看似有序的但是浮躁的社会彻底打乱了,不少劳动者在多年稳定的节奏也随之而变,而我在于其中放慢了步调,从5月份放弃了一份工作同时拒绝了两份offer后回家休息加造人。休息期间接了些技术顾问的工作,看了几本书增加自己的知识量,写了几篇博客做了些之前工作的总结,也打了王者荣耀尝试冲荣耀王者。   那么从2019年12月开始至今,我在广州面试了不少公司,基本都是应聘系统架构师和部门负责人的岗位,中间有不少的故事,有体验极好的也有体验极差的,我都将在下文分享给大家,体验极差的我就不直接点名了。 PS:此文非引战,如有评论,请理性沟通 壹物壹码   先说一个体验及其好的,这也是我遇到为数不多非常尊重人的,黄埔区区的安居宝科技园里的 壹物壹码公司,从面试官的交谈得知公司做的范围比较的广,主要以前期接项目后期看潜力转产品的这样的一个模式,业务比较稳定,以上市为目标,主要在BOSS直聘发布招聘消息。   我当时是投了高级软件工程师的,但是薪资范围挺高的所以我当时心里觉得没那么简单,HR联系我的时候说CEO想直接面我,我人在老家因此邀请了做一个视频面试,面试官也爽快的答应了。一面是产品总监面,说实话很给面子,完全不问我技术,他说看了我的博客、开源项目和简历,理念跟他的很像很会从软件工程的角度给团队提高生产力,所以不担心我的技术。另外,他们这次想招的是技术总监或者系统架构师

自己动手写SQL执行引擎

痞子三分冷 提交于 2020-07-28 20:39:51
自己动手写SQL执行引擎 前言 在阅读了大量关于数据库的资料后,笔者情不自禁产生了一个造数据库轮子的想法。来验证一下自己对于数据库底层原理的掌握是否牢靠。在笔者的github中给这个database起名为Freedom。 整体结构 既然造轮子,那当然得从前端的网络协议交互到后端的文件存储全部给撸一遍。下面是Freedom实现的整体结构,里面包含了实现的大致模块: 最终存储结构当然是使用经典的B+树结构。当然在B+树和文件系统block块之间的转换则通过Buffer(Page) Manager来进行。当然了,为了完成事务,还必须要用WAL协议,其通过Log Manager来操作。 Freedom采用的是索引组织表,通过DruidSQL Parse来将sql翻译为对应的索引操作符进而进行对应的语义操作。 MySQL Protocol结构 client/server之间的交互采用的是MySQL协议,这样很容易就可以和mysql client以及jdbc进行交互了。 query packet mysql通过3byte的定长包头去进行分包,进而解决tcp流的读取问题。再通过一个sequenceId来再应用层判断packet是否连续。 result set packet mysql协议部分最复杂的内容是其对于result set的读取,在NIO的方式下加重了复杂性。

MySQL数据库回表与索引

自作多情 提交于 2020-07-28 20:17:03
目录 回表的概念 1.stu_info表案例 2.查看刚刚建立的表结构 3.插入测试数据 4.分析过程 5.执行计划 回表的概念 先得出结论,根据下面的实验。如果我要获得['liu','25']这条记录。需要什么步骤。 1.先通过['liu']记录对应到普通索引 index(name) ,获取到主键id:4. 2.再通过 clustered index ,定位到行记录。也就是上面说的这条['liu','25']记录数据。 因此,上述就是说的 回表查询 ,先定位主键值,再定位行记录。多扫了一遍索引树。 当然,也就多耗费了CPU,IO,内存等。 1.stu_info表案例 create table stu_info ( id int primary key, name varchar(20), age int, index(name) ) 2.查看刚刚建立的表结构 mysql> show create table stu_info\G; *************************** 1. row *************************** Table: stu_info Create Table: CREATE TABLE `stu_info` ( `id` int(11) NOT NULL, `name` varchar(20) COLLATE utf8_bin

2020稳拿offer宝典,阿里天猫、蚂蚁、钉钉 java 面试题汇总(附解析)

五迷三道 提交于 2020-07-28 19:49:08
Java基础 面向对象的特征:继承、封装和多态 int 和 Integer 有什么区别; Integer的值缓存范围 说说反射的用途及实现 Http 请求的 GET 和 POST 方式的区别 MVC设计思想 什么是Java序列化和反序列化; 如何实现Java序列化; 重载和重写的区别 进程和线程 线程和进程的概念 并行和并发的概念 创建线程的方式及实现 进程间通信的方式 说说 CountDownLatch、CyclicBarrier 原理和区别 说说 Semaphore 原理 说说 Exchanger 原理 ThreadLocal 原理分析; ThreadLocal为什么会出现OOM,出现的深层次原理 讲讲线程池的实现原理 线程池的几种实现方式 线程的生命周期;状态是如何转移的 锁机制 什么是线程安全?如何保证线程安全? 重入锁的概念;重入锁为什么可以防止死锁? 产生死锁的四个条件 如何检查死锁 volatile 实现原理 synchronized 实现原理(对象监视器) synchronized 与 lock 的区别 AQS 同步队列 CAS 无锁的概念;乐观锁和悲观锁 常见的原子操作类 什么是 ABA 问题;出现 ABA 问题 JDK 是如何解决的 乐观锁的业务场景及实现方式 Java 8 并发包下常见的并发类 偏向锁、轻量级锁、重量级锁、自旋锁的概念 数据库 DDL、DML

3年程序员不敌刚毕业大学生,Redis面试三连问瞬间破功……

懵懂的女人 提交于 2020-07-24 22:34:30
有个读者是小作坊走出来的小猿,项目经验并不出彩,没有高并发、分布式经验,公司的前端、后台、服务器和数据库都部署在同一台机器上。面试时为了不显得自己太low,不经意间提了提在GitHub上有自己的开源框架,但是面试官似乎并不care。 面试中被问到了著名的redis哲学三连,“是什么?为什么?怎么用?” 不得不把肚子里仅有的关于Redis的知识都搜刮了一遍,仍然没有给出面试官想要的答案。这还不够,被继续追问Redis的数据存储方式、操作方法、读写操作在底层都是如何实现的。 除了低头委屈说不会,此时已经意识到了自身能力的严重缺失。平常只要坦白一点,对方会给个台阶下。这次都快被搞哭了,也没见面试官手下留情…… 接着就是心理防线基本被攻破,追问索引的实现原理,创建一个索引怎么能加快查询效率。 结果也猜到了,只能再一次厚着脸皮主动承认答不出来,走回家已经是浑浑噩噩飘飘忽忽。 大家也知道平时只泛泛读一些技术书籍、技术文章,根本很难抓住技术的本质,干了三五年之后,感觉并没有积累到什么,跟刚毕业的大学生能力差不多。本质原因,是没有辨析清楚自己应该积累究竟是什么样的能力。 以Spring、Redis、Mysql、Redis为例,这些作为互联网面试必备的技术点,其底层原理及源码实现是必须要细过的知识点。 Mybatis相信很多人都会使用

Mysql聚簇索引和非聚簇索引原理(数据库)

时光总嘲笑我的痴心妄想 提交于 2020-05-06 03:35:28
本文链接:https://blog.csdn.net/lisuyibmd/article/details/53004848 一、‘页’和操作系统的关系 ①为什么要有内存管理? 我们知道,一个进程完成他的功能,需要访问磁盘加载数据到内存然后等待进入cpu运算,因为数据量大小远远大于内存大小。因此提出虚拟内存概念。虚拟内存就是将程序用到的数据进行划分,暂时用不到的放到磁盘里,用到的放到内存里,操作系统中总是运行着不止一个进程,各个进程有优先级顺序,所以存在进程调度问题,进程的每次调度都会导致内存和磁盘数据置换,段式内存管理页式内存管理都是基于虚拟内存概念的具体内存管理解决方案。 ②什么是页式内存管理? 虚拟内存位于程序和物理内存之间,程序只能看见虚拟内存,再也不能直接访问物理内存。每个程序都有自己独立的进程地址空间,这样就做到了进程隔离。这里的进程地址空间是指虚拟地址。顾名思义,既然是虚拟地址,也就是虚的,不是现实存在的地址空间。既然我们在程序和物理地址空间之间增加了虚拟地址,那么就要解决怎么从虚拟地址映射到物理地址,因为程序最终肯定是运行在物理内存中的,主要有分段和分页两种技术。 分页机制就是把内存地址空间分为若干个很小的固定大小的页,每一页的大小由内存决定,就像Linux中ext文件系统将磁盘分成若干个Block一样,这样做是分别是为了提高内存和磁盘的利用率。

(1)MySql索引基础

我们两清 提交于 2020-05-05 19:45:18
本文是学习MySQL索引知识后进行得整理,部分图片来源马士兵老师的公开课,仅作笔记使用 一、MySql架构图 二、几种常见的数据结构用于索引结构分析 1、hash表 缺点: 利用Hash存储索引的话,需要将所有的数据文件添加到内存中,比较耗费内存空间。 hash适用于等值查询,但是在实际工作环境下范围查询的操作更多,所以hash就不太适用了。 2、BST(二分查找树)、AVL(平衡二叉树)、红黑树 ①BST、AVL ②红黑树 红黑( Red 一 bIack )树是一种自平衡二叉查找树. 1972 年由 RudOlfBaye 泼明.它与 AvL 树类似,都在插入和删除操作时能通过旋转操作时,保持二叉查找树的平衡,以便能获得高效的查找性能.它可以在 O ( Iogn )时间内做查找,插入和删除等操作。红黑树是 2-3-4树的一种等同,但有些红黑树设定只能左边是红树.这种情况就是 2-3 树的一种等同了。对于 AVL 树来说,红黑树牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说性能要优于 AVL 树。 ①②缺点: 无论是BST、AVL、红黑树,都会因为树的深度过深,而造成磁盘IO次数过多,影响数据的读取效率。 3、B树 B树的特点: 所有的键值分布在整颗树中。 搜索有可能在非叶子节点结束,在关键字全集内做一次查找,性能逼近二分查找。 每个节点最多拥有m个子树。