avatar
文章
76
标签
19
分类
12
首页
时间轴
标签
分类
留言板
关于
张晓风的博客
首页
时间轴
标签
分类
留言板
关于

张晓风的博客

day-11-线性排序
发表于2024-07-21|数据结构与算法学习笔记| 条评论
一、桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。 桶排序比较适合用在外部排序中。 二、计数排序计数排序只能用在数据范围不大的场景中,如果数据范围 k 比要排序的数据 n 大很多,就不适合用计数排序了。而且,计数排序只能给非负整数排序,如果要排序的数据是其他类型的,要将其在不改变相对大小的情况下,转化为非负整数。 三、基数排序基数排序对要排序的数据是有要求的,需要可以分割出独立的“位”来比较,而且位之间有递进的关系,如果 a 数据的高位比 b 数据大,那剩下的低位就不用比较了。除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序的时间复杂度就无法做到 O(n)...
day-5-索引(下)
发表于2024-07-20|MySQL学习笔记| 条评论
一、覆盖索引回表:回到主键索引树搜索的过程。覆盖索引:在查询里面,如果某个索引覆盖了我们的查询需求,我们称这个索引为覆盖索引。 由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。 二、最左前缀原则B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录。 最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。 在建立联合索引的时候,如何安排索引内的字段顺序?第一原则是,如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。 三、索引下推MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
day-4-索引(上)
发表于2024-07-19|MySQL学习笔记| 条评论
一、索引的常见模型1.1 哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。 哈希表这种结构适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。 1.2 有序数组有序数组在等值查询和范围查询场景中的性能就都非常优秀。如果仅仅看查询效率,有序数组就是最好的数据结构了。但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。 有序数组索引只适用于静态存储引擎。 1.3 二叉搜索树二叉搜索树的特点是:父节点左子树所有结点的值小于父节点的值,右子树所有结点的值大于父节点的值。 二、InnoDB 的索引模型在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。 每一个索引在 InnoDB 里面对应一棵...
day-3-事务隔离
发表于2024-07-18|MySQL学习笔记| 条评论
一、隔离性与隔离级别事务的四大特性:原子性、一致性、隔离性、持久性。 SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。 读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。 读已提交:一个事务提交之后,它做的变更才会被其他事务看到。 可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。 串行化:对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。 二、事务隔离的实现长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就会导致大量占用存储空间。 事务的启动方式: 1.显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语句是 rollback。 2.set...
day-2-日志系统
发表于2024-07-17|MySQL学习笔记| 条评论
一、重做日志:redo log当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。 有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。 二、归档日志:bin logredo log 是 InnoDB 引擎特有的日志,而 Server 层也有自己的日志,称为 binlog(归档日志)。 MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog 日志只能用于归档。而 InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力。 三、两种日志的不同点 redo log 是 InnoDB...
day-1-MySQL的基础架构
发表于2024-07-16|MySQL学习笔记| 条评论
一、 MySQL的基础架构 Server层:连接器、查询缓存、分析器、优化器、执行器等核心服务功能,以及所有的内置函数和跨存储引擎的功能(存储过程、触发器、视图等)。 存储引擎层:负责数据的存储和提取。 二、连接器连接器负责跟客户端建立连接、获取权限、维持和管理连接。 数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。 三、查询缓存MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。 MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。 四、分析器如果没有命中查询缓存,就要开始真正执行语句了。 分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL...
如何在Redis中保存时间序列数据
发表于2024-07-10|Redis学习笔记| 条评论
一、时间序列数据的读写特点时间序列数据通常是持续高并发写入的。时间序列数据的写入特点很简单,就是插入数据快,这就要求我们选择的数据类型,在进行数据插入时,复杂度要低,尽量不要阻塞。 时间序列数据读的特点:查询模式多。即要支持单点查询、范围查询和聚合计算。 Redis提供了保存时间序列数据的两种方案,分别可以基于 Hash 和 Sorted Set实现,以及基于 RedisTimeSeries 模块实现。 二、基于 Hash 和 Sorted Set 保存时间序列数据2.1 为什么保存时间序列数据,要同时使用这两种类型?Hash 类型的特点:可以实现对单键的快速查询,这满足时间序列数据的单键查询需求。但 Hash 类型有个短板:它并不支持对数据进行范围查询。 Sorted Set 支持按时间戳范围查询,因为它能够根据元素的权重分数来排序。 2.1 如何保证写入 Hash 和 Sorted Set 是一个原子性的操作?Redis 用来实现简单事务的命令:MUTIL 命令和 EXEC 命令。 MUTIL 命令:表示一系列原子性操作的开始。收到这个命令后,Redis...
day-10-排序(下)
发表于2024-07-10|数据结构与算法学习笔记| 条评论
一、归并排序的原理归并排序的核心思想:如果要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 归并排序使用的就是分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。 分治是一种解决问题的处理思想,递归是一种编程技巧 二、快速排序的原理快排的思想是这样的:如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点)。 我们遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 pivot...
Java程序设置为开机自启
发表于2024-07-06|开发相关| 条评论
一、Windows使用WinSW工具,下载地址:https://github.com/winsw/winsw/releases 1.1 新建一个文件夹目录,命名随意,这个文件夹下放你的jar包和下载的WinSW.exe 工具将WinSW.exe改名为 myJava-service.exe 1.2 新建一个xml配置文件1234567<service> <id>myJava</id> <name>myJava</name> <description>This service runs myJava continuous integration system.</description> <executable>java</executable> <arguments>-Xrs -Xmx256m -jar...
day-9-排序(上)
发表于2024-07-03|数据结构与算法学习笔记| 条评论
一、如何分析一个“排序算法”1.1 排序算法的执行效率对于排序算法执行效率的分析,一般从以下几个方面来衡量: 最好情况、最坏情况、平均情况时间复杂度 时间复杂度的系数、常数、低阶 比较次数和交换(或移动)次数 1.2 排序算法的内存消耗原地排序算法:特指空间复杂度是 O(1) 的排序算法。 1.3 排序算法的稳定性二、冒泡排序冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。 三、插入排序插入排序也包含两种操作,一种是元素的比较,一种是元素的移动。 四、选择排序选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 五、小结要想分析、评价一个排序算法,需要从执行效率、内存消耗和稳定性三个方面来看。这三种时间复杂度为 O(n2)...
1…345…8
avatar
张晓风
文章
76
标签
19
分类
12
Follow Me
最新文章
计算机网络-第一章笔记2025-03-02
单线复用--家里宽带2025-03-01
计算机网络 - B站学习计划2025-02-12
光猫路由改桥接,同时支持IPTV2025-01-14
Centrifugo安装与使用2025-01-09
分类
  • MySQL学习笔记14
  • Redis学习笔记3
  • java3
  • nginx4
  • spring13
  • 工具5
  • 建站相关2
  • 开发相关7
标签
MySQL logback nginx redis spring docker linux ldap jira 软考 postman network springboot websocket hexo 面试 java 数据结构与算法 git
归档
  • 三月 2025 2
  • 二月 2025 1
  • 一月 2025 4
  • 十一月 2024 1
  • 十月 2024 1
  • 九月 2024 5
  • 八月 2024 5
  • 七月 2024 21
网站信息
文章数目 :
76
本站总字数 :
46.4k
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2024 - 2025 By 张晓风
框架 Hexo 7.1.1|主题 Butterfly 5.3.5
苏ICP备2023046043号