自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(268)
  • 收藏
  • 关注

原创 面试经典 222. 完全二叉树的节点个数

二叉树我最近刷的特别多,差不多快刷完了,但是有一种题型差点给我忽略了,那就是完全二叉树,这也是一个很重要的题型,今天刚好有一道题目可以来复习一下完全二叉树的特性。当 右子树的深度 不如 左子树的深度 的时候,说明 左子树不是一个满的二叉树,但是右子树单独看是一个满的二叉树,所以可以通过 2的h次方求右子树的节点个数。当 左子树的深度 和 右子树的深度 一致的时候,说明 左子树是满的二叉树 可以通过 2的h次方求的左子树的节点个数。除了最后的叶子节点,其他层级节点都是满的。

2024-08-02 17:38:41 400

原创 面试经典 114. 二叉树展开为链表

今天这个题目没刷过,我思考了半天才只能用暴力,后来苦思冥想才想出来简单的方法,废话不多说,上链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/?这是一个数据结构,是一种常见的树状数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点,如上图。ok,运行倒是成功了,但是这个效率可太难了,面试的时候,遇到这个题,只用这种做法肯定不成,怎么办呢?通过我聪明的脑瓜子,转了又转,我想到了。

2024-07-25 16:50:12 529

原创 面试经典 106. 从中序与后序遍历序列构造二叉树

从上面例子入手,后序遍历是 9,15,7,20,3,我们知道后序遍历的顺序是 左,右,根,所以左右一个元素肯定是根节点,这棵树的根节点就是 3。分治就是一种问题解决策略,它将一个大问题划分为多个相同或类似的子问题,然后递归地解决这些子问题,最后将子问题的解合并起来得到大问题的解。这是一个数据结构,是一种常见的树状数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点,如上图。所以这里我们可以将找出的 左子树 当作一个新的树,继续上述的操作,直到只剩一个节点为止,就如上述的 9 节点。

2024-07-08 11:09:24 348

原创 Mysql 学习(十七)事务隔离级别和MVCC

【代码】Mysql 学习(十七)事务隔离级别和MVCC。

2024-03-13 17:01:36 949

原创 Mysql 学习(十六)undo 日志

然后记住一个信息,这个表的table id 是 138insert操作对应的undo日志insert 操作可能会因为种种情况引发诸多修改,但是究其结果就是将这条记录放到一个数据页中,如果希望回滚这个插入操作,那么就把这个数据删除就好了下面就是插入对应的undo日志结构:如果记录中的主键只包含一个列,那么在类型为TRX_UNDO_INSERT_REC的undo日志中只需要把该列占用的存储空间大小和真实值记录下来,如果记录中的主键包含多个列,那么每个列占用的存储空间大小和对应的真实值都需要记录下来

2024-03-13 14:28:19 930

原创 Mysql 学习(十五)redo 日志

redo 日志的本质是记录了一下事务对数据库做了哪些修改,所以 redo 日志都会有下面这些通用的结构:type:该条redo日志类型MLOG_1BYTE(type字段对应的十进制数字为1):表示在页面的某个偏移量处写入1个字节的redo日志类型。MLOG_2BYTE(type字段对应的十进制数字为2):表示在页面的某个偏移量处写入2个字节的redo日志类型。MLOG_4BYTE(type字段对应的十进制数字为4):表示在页面的某个偏移量处写入4个字节的redo日志类型。MLOG_8BYTE(type字段对

2024-03-07 16:53:18 982

原创 Mysql 学习(十 四)事务简介

标识当前事务是一个读写事务,也就是属于该事务的数据库操作既可以读取数据,也可以修改数据。:标识当前事务是一个只读事务,也就是属于该事务的数据库操作只能读取数据,而不能修改数据。

2024-01-26 16:07:45 975

原创 Kafla 学习(一)初始学习kafla

发布与订阅系统(Publish-Subscribe System)是一种消息传递模型,用于在分布式系统中传递消息。在发布与订阅系统中,消息的发送者(发布者)不会直接将消息发送给接收者(订阅者),而是将消息发送到中间件(消息代理或消息队列),由中间件负责将消息传递给一个或多个感兴趣的接收者。

2023-06-12 11:39:29 969

原创 Mysql 学习(十 三)InnoDB的BufferPool

设计InnoDB的大佬为了缓存磁盘中的页,在MySQL服务器启动的时候就向操作系统申请了一片连续的内存,他们给这片内存起了个名,叫做Buffer Pool(中文名是缓冲池)。

2023-05-25 09:53:10 865

原创 Mysql 学习(十 二)查询优化 Explain

SUBQUERY:如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是不相关子查询,并且查询优化器决定采用将该子查询物化的方案来执行该子查询时,该子查询的第一个SELECT关键字代表的那个查询的select_type就是SUBQUERY。DEPENDENT UNION:在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的select_type的值就是DEPENDENT UNION。

2023-05-17 16:38:21 1513

原创 Mysql 学习(十 一)mysql基于规则的优化

【代码】Mysql 学习(十 一)mysql基于规则的优化。

2023-05-16 15:45:38 413

原创 Mysql 学习(十)基于成本的优化 二

【代码】Mysql 学习(十)基于成本的优化 二。

2023-05-11 14:34:27 440

原创 Mysql 学习(十)基于成本的优化 一

【代码】Mysql 学习(十)基于成本的优化 一。

2023-05-10 11:09:39 514

原创 Mysql 学习(九)多表连接原理

连接的实现是通过嵌套循环连接算法嵌套循环连接算法的实现方式是:对于连接操作中的两个表,先将其中一个表作为外层循环,另一个表作为内层循环,依次遍历外层表和内层表的所有行,将符合连接条件的行组合起来。具体来说,对于每一行在外层表中找到对应的行,在内层表中找到符合连接条件的行,然后将两行合并成一行作为查询结果。由于需要对每行进行遍历,因此嵌套循环连接算法的时间复杂度为 O(mn),其中 m 和 n 分别为两个表的行数。优化连接查询:使用索引。

2023-05-08 15:08:49 892

原创 Mysql 学习(八)单表查询方法二

索引合并的使用场景:当查询条件中包含多个列时,每个列都有单独的索引,但是MySQL无法使用这些索引进行有效的查询优化。这时,MySQL可以将多个索引合并使用,以便提高查询性能。当查询条件中包含多个列时,每个列都有单独的索引,并且MySQL可以使用这些索引进行有效的查询优化。这时,MySQL可以选择使用索引合并来进一步优化查询性能。

2023-05-06 15:54:33 454

原创 Mysql 学习(八)单表查询方法 一

【代码】Mysql 学习(八)单表查询方法 一。

2023-05-05 16:00:36 466

原创 Mysql 学习(七)独立表结构存储 二

段的结构上一节说过表空间分为各个段,每个段里面又是以区为单位,每个区则有64个页。区根据剩余存储空间分为:Free,FREE_FRAG,FULL_FRAG 三种类型,为了方便管理区,给每个区创建XDES Entry结构,然后给这三种类型创建三个对应的XDES Entry结构链表。像每个区都有对应的XDES Entry来记录这个区中的属性一样,设计InnoDB的大佬为每个段都定义了一个INODE Entry结构来记录一下段中的属性,如下图:Segment ID:就是指这个INODE Entry结构对

2023-05-05 14:32:10 498

原创 Mysql 学习(七)独立表结构存储 一

独立表空间结构InnoDB有很多类型表空间,这边主要是介绍独立表空间结构,因为这种会用的比较多讲之前我们先思考一个问题,如果我们以页为单位来分配存储空间的话,那两个页之间的物理距离可能很远,因为这是随机的,而这些数据存储到磁盘上的,从磁盘加载是很消耗性能,而这些加载分为顺序IO和随机IO,顺序IO肯定是更快的,所以我们需要保证数据页尽量在一起,怎么做才能尽量保证数据页尽量在一起呢?这个时候就需要推出区 和 段的概念我们先从宏观的角度初略的介绍 区 和 段区是由64个页组成的,也就是说默认一个区

2023-04-23 15:53:38 240

原创 Mysql 学习(六)Mysql的数据目录

【代码】Mysql 学习(五)Mysql的数据目录。

2023-04-18 11:47:55 208

原创 Mysql 学习(五)InnDB 存储引擎-B+树索引的使用

B+树索引在空间和时间上都有代价,所以创建索引要谨慎B+树索引适用于下面这些情况:全值匹配匹配左边的列匹配范围值精确匹配某一列并范围匹配另外一列用于排序用于分组在使用索引时需要注意下面这些事项:只为用于搜索、排序或分组的列创建索引为列的基数大的列创建索引索引列的类型尽量小可以只对字符串值的前缀建立索引只有索引列在比较表达式中单独出现才可以适用索引为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。

2023-04-17 17:54:09 269

原创 Mysql 学习(四)InnDB 存储引擎-B+树索引

【代码】Mysql 学习(四)InnDB 存储引擎-B+树索引。

2023-04-13 16:09:34 448

原创 Mysql 学习(三)InnDB 存储引擎-页结构

学习InnoDB的相关知识

2023-04-11 16:46:49 664

原创 Mysql 学习(一)基础知识(待更新)

mysql基础知识

2023-04-11 16:45:31 485

原创 Mysql 学习(二)InnDB 存储引擎-记录结构

讲解Innodb引擎的相关信息

2023-04-04 08:54:40 350

原创 网络是怎么连接笔记(二)用电信号传输TCP/IP数据

在了解了HTTP请求是如何产生的,以及网址是如何跳转到我们想要看到的页面,我们需要了解协议栈内部的细节

2023-03-07 14:18:36 400

原创 网络是怎么连接笔记(一)WEB浏览器

计算网络基础知识

2023-02-12 10:17:50 406

原创 哈工大操作系统学习笔记(二)进程与线程

操作系统基础知识笔记

2023-02-02 14:55:41 598

原创 GO WEB 学习笔记(六)安全与加密

12

2022-06-07 09:12:49 304

原创 GO WEB 学习笔记(五)WEB服务

文章目录Socket编程什么是SocketGO的SocketWebSocketGO 语言实现 WebSocketRESTGO 实现 RESTfulRPCSocket编程什么是SocketSocket起源于Unix,所以Socket的模式跟UNIX的模式类似,Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符,Socket也具有类似于打开文件的函数调用: Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现。Socke

2022-05-28 15:04:38 188

原创 GO WEB 学习笔记(五)文本处理

文章目录XML处理JSON处理正则处理模板处理XML处理首先XML作为一种数据交换和信息传递格式在如今得web服务日益广泛的应用,所以xml文本的解析在如今也是至关重要解析XML如何解析XML文件呢,go自带有XML包来解析,其中Unmarshall这个函数可以解析:func Unmarshall(data []byte, v interface{}) errordata接收的是XML数据流v是需要输出的结构XML本质上是一种树形的数据格式,我们可以定义与之匹配的struct类型,

2022-05-24 15:29:48 215

原创 GO WEB 学习笔记(四)Session和数据存储

文章目录Session和CookieGo 语言对Cookie的操作Go 语言如何使用SessionSession和CookieSession和Cookie是如何来的?首先我们想想这样一个场景,你登陆微博个人主页的时候,是不是需要登录,你登陆之后,是不是就可以跳转来到你的个人主页,这个时候还没有问题产生,因为你登陆输入了用户和密码,自然而然就可以跳转到你对应的个人页面,但是问题就来了,你要去其他页面并且保存你登陆的状态怎么验证,因为http请求是没有状态的,他不知道有没有登录,这个时候怎么办呢?所以

2022-05-21 11:12:28 317

原创 GO WEB 学习笔记(三)访问数据库

文章目录database/Sql接口database/Sql接口go语言给开发者定义了一些标准的接口,这样的好处是,以后迁移数据库,就不需要做任何的修改,下面来分析一下sql.Register:这个函数是为了注册数据库驱动的,一般开发数据库驱动时,都会实现 init 函数, init 里面会调用这个 Register 完成本驱动的注册,在 database/sql 内部通过一个 map 来存储用户定义的相应驱动,因此,通过 database/sql 的注册函数可以同时注册多个数据库驱动,只要不重复

2022-05-11 10:51:36 464

原创 GO WEB 学习笔记(二)WEB 表单

文章目录表单处理表单输入验证表单的输入预防跨站脚本处理文件上传表单什么是表单?表单是一个包含表单元素的区域,用户可以往表单里面填写信息,表单也是前端页面的元素处理表单输入我们通过一个例子来看go是如何处理表单输入的客户端递交表单到服务器/login,当用户输入信息点击登录之后,会跳转到服务器的路由login里面,我们首先要判断这个由什么方式传递过来?http包就有个很简单的方式就可以获取,就是 r.Method ,这是个字符串类型的变量下面写个方法来做登录处理逻辑

2022-05-10 08:55:38 321

原创 GO WEB 学习笔记(一)WEB 基础

文章目录WEB 工作方式GO 语言搭建一个web服务器GO语言如何使WEB工作WEB 工作方式我们平时上网一般的都是通过浏览器进行上网的,但是我们上网后面的流程究竟是怎么样的?下面我就来简单的简述一下首先我们将浏览器叫做客户端,客户端输入网站URL,发出访问的请求,(URL是统一资源定位符,描述一个网络上的资源)这个请求会进入到DNS服务器 ,DNS会根据网址URL找出这个网址所在服务器的IP,(DNS域名系统)客户端通过这个IP跟服务器建立TCP连接,然后将HTTP Request请求发过

2022-05-09 09:06:25 320

原创 ClickHouse高级学习(二)Clickhouse数据详解(待更新)

文章目录数据定义数据类型定义数据表数据表的基本操作数据分区得基本操作分布式DDL执行数据的写入数据的删除与修改数据字典内置字典外部扩展字典数据定义数据类型定义数据表数据表的基本操作数据分区得基本操作分布式DDL执行数据的写入数据的删除与修改数据字典内置字典外部扩展字典...

2022-04-20 11:20:26 724

原创 ClickHouse高级学习(四)Clickhouse数据查询(待更新)

文章目录数据查询WITH子句SAMPLE子句ARRAY JOIN子句JOIN 子句LIMIT BY 子句LIMIT查看SQL执行计划数据查询注意事项:在clickhouse里面不要使用select * 这样的语句,这种语句对于列式存储来说很容易消耗内存WITH子句Clickhouse 支持CTE 也就是公共表达式,用于增强查询语句的表达,表现如下:With子句的第一种用法:定义变量,这些变量可以在后续的查询子句中被直接访问With子句的第二种用法:调用函数,可以访问S

2022-04-18 18:30:11 5342

原创 ClickHouse高级学习(一)架构概述(待更新)

文章目录Clickhouse的核心特性列式存储和数据压缩向量化执行引擎关系模型与SQL查询多样化的表引擎多线程与分布式多主架构数据分片与分布式查询Clickhouse架构设计Column与FieldDataTypeBlock与Block流TableParser与Inter preterFunctions与Aggregate FunctionsCluster与ReplicationMergeTree的原理解析数据分区Clickhouse的核心特性列式存储和数据压缩clickhouse是列式存储,列式存

2022-04-13 10:28:32 6265

原创 ClickHouse高级学习(三)Clickhouse引擎详解(待更新)

文章目录MergeTree的原理解析数据分区一级索引二级索引数据存储数据标记整个写入流程整个查询流程总结Merge Tree系列表引擎ReplacingMergeTreeSummingMergeTreeAggregatingMergeTreeCollapsingMergeTreeVersionedCollapsingMergeTree其他常见类型表引擎MergeTree的原理解析先来看看MegreTree数据表语句partition by:分区键,用于表示数据以何种标准进行分区order by

2022-04-13 10:28:07 2371

原创 GO 学习笔记(四)GORM框架

文章目录简洁安装案例演示模型定义连接数据库 (mysql)CRUD 接口关联链式操作错误处理事务原生sql和sql生成器简洁一个对于golang开发人员比较有好的ORM库安装go get -u github.com/jinzhu/gorm案例演示模型定义结构体标签:标签是声明模型时可选的标记标签说明Column指定列的名称Type指定列的类型Size指定列的大小,默认是 255PRIMARY_KEY指定一个列作为主键UNIQUE指定

2022-03-24 11:43:55 1810

原创 GO 学习笔记(一)

文章目录Golang简介Golang的发展方向Golang诞生的原因Golang语言的特点Golang的安装和配置环境Golang语言基础Golang 执行流程分析Golang 转义字符Golang 注释Golang 变量Golang 数据类型Golang 小数类型/浮点型Golang 字符类型Golang 布尔类型Golang string类型Golang 数据类型的相互转换Golang 指针Golang 值类型和引用类型Golang简介Golang的发展方向区块链研发工程师Go服务器端工程师

2022-03-22 11:37:30 1447

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除