- 博客(107)
- 收藏
- 关注
原创 27.C++11并发支持库
同步操作:你调用一个函数后,必须等待它执行完才能继续做其他事(比如打电话,必须等对方说完才能回应)。异步操作:你发起一个任务后,不用等待它完成,可以先去做其他事,之后再获取结果(比如点外卖,下单后可以做别的,外卖到了再处理)主线程创建promise和future,然后启动子线程,把promise传给子线程。子线程开始 “计算”(这里是模拟耗时 + 简单加法),完成后用promise的set_value把结果存进去。主线程调用future的get()阻塞等待子线程的结果,拿到结果后打印。
2025-10-27 16:25:17
866
原创 C++ 从零实现Json-Rpc 框架
Json 是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。例如: 我们想表⽰⼀个同学的学⽣信息C 代码表⽰Json 表示“姓名” :“xx”,“年龄” :18,“成绩” : [88.5, 99, 58],"爱好" :{"书籍" :“西游记”"运动" :“打篮球”Json的数据类型包括对象,数组,字符串,数字等。•对象:使⽤花括号 {}括起来的表⽰⼀个对象•数组:使⽤中括号 []括起来的表⽰⼀个数组•字符串:使⽤常规双引号 ""
2025-10-27 16:24:57
1134
原创 21.事务和锁(重点)
•由于每个事务都持有另⼀个事务所需的锁,导致事务⽆法继续进⾏的情况称为死锁。以下图为例,两个事务都不会主动释放⾃⼰持有的锁,并且都在等待对⽅持有的资源变得可⽤。死锁产⽣的条件•互斥访问:如果线程1获取到了锁A,那么线程2就不能同时得到锁A•不可抢占:获取到锁的线程,只能⾃⼰主动释放锁,别的线程不能从他的⼿中抢占锁•保持与请求:线程1已经获得了锁A,还要在这个基础上再去获了锁B•。
2025-10-25 12:17:48
780
原创 22.MySQL存储过程
条件 1():负责 “正确关联学生和班级”,确保每个学生匹配到自己的班级名称。条件 2():负责 “筛选出你想要查询的那个班级” 的学生。最终,这个游标会获取到 “目标班级(由参数class_id指定)的所有学生姓名及其对应的班级名称”,后续就可以通过游标逐行处理这些数据了(比如插入到新表中)。
2025-10-25 12:17:34
840
原创 20.InnoDB存储引擎(下)(磁盘文件)
独立表空间通过 “单表单文件” 的设计,解决了系统表空间 “共享存储、管理复杂、空间难释放” 的问题,让表的存储更灵活、操作更高效,尤其适合多表、大数据量、高并发的业务场景。这也是 MySQL 默认开启的核心原因独立表空间文件保存在哪⾥?•File-Per-Table 表空间在⽬录下的表空间数据⽂件中创建。.ibd⽂件与表同名。每个表都对应⼀个独⽴表空间吗?•不⼀定•默认每张表都对应⼀个表空间数据⽂件,但也可以通过系统变量{OFF|ON}]
2025-10-24 07:21:33
344
原创 18.InnoDB 存储引擎(存储结构)
• 表空间⽂件是⽤来存储表中数据的⽂件,表空间⽂件的⼤⼩由存储的数据多少决定,不同的表空间⽂件存储数据的种类也有所不同,在MySQL中表空间分为五类,包括:系统表空间、独⽴表空间、通⽤表空间、临时表空间和撤销表空间,这些在上⾯的InnoDB架构图中都有体现。表空间文件与表空间的关系是神么表空间可以理解为MYSQL为了管理数据⽽设计的⼀种数据结构,主要描述的对结构的定义,表空间⽂件是对定义的具体实现,以⽂件的形式存在于磁盘上了解了⾏的基本结构和组织⽅式之后,那么当遍历⻚中的⾏时,从哪⾥开始到哪⾥结束呢?
2025-10-23 10:12:41
958
原创 17.MySQL架构和存储引擎
MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰:MySQL Connectors:为使⽤MySQL服务的编程语⾔平台,提供了访问接⼝,可以根据⾃⼰实际使⽤的编程语⾔到官⽹下载地址下载。MySQL Shell:是⼀个⾼级客⼾端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的类似于mysql。
2025-10-23 10:11:47
1330
原创 16.MySQL 服务器配置与管理
当通过mysqld启动数据库服务器时,可以通过选项⽂件或命令⾏中提供选项,但是,在⼤多数情况下,为确保服务器每次运⾏时都使⽤相同的选项,最好的⽅法是在选项⽂件中指定相应的选项。mysqld从选项⽂件中的[mysqld]和[server]组(节点)中读取选项内容mysqld接受的选项可以通过查看,列表中的有些项⽬是可以在服务器启动时设置的系统变量,系统变量可以在连接MySQL后使⽤语句查看,但有些内容只在--help中存在,使⽤时并没有显⽰,这是因为它们只是选项⽽不是系统变量。
2025-10-22 13:07:34
724
原创 15.HTTPS 协议原理
加密就是把明文要传输的信息进行一系列变换生成密文解密就是把密文再进行一系列变换还原成明文在这个加密和解密的过程中往往需要一个或者多个中间的数据辅助进行这个过程这样的数据称为密钥。•数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数对信息进行运算生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制但可以用来判断数据有没有被篡改。•摘要常见算法:有MD5SHA1SHA256SHA512等,算法把无限的映射成。
2025-10-22 13:06:03
1051
原创 11.Redis 分布式锁
在分布式系统中,多个节点(如多台服务器、多个微服务实例)可能同时操作共享资源(如数据库数据、缓存键、文件),单机锁(如 Java 的、ReentrantLock)只能控制单个节点内的并发,无法跨节点生效。此时需要「分布式锁」—— 一种跨节点、跨进程的锁机制,确保分布式环境中共享资源的互斥访问。互斥性:同一时间只能有一个节点(或线程)持有锁,确保共享资源不会被并发修改。高可用:锁服务本身不能宕机(需集群部署),避免 “锁服务挂了导致整个业务不可用”。防死锁。
2025-10-21 21:45:06
1078
原创 10.Redis 缓存
缓存(cache)核心思路就是把一些常用的数据结构放到触手可及(访问速度更快)的地方,方便随时获取。例如:浏览器通过 http / https 从服务器上(网络)获取到的数据(html,css,js,图片,视频音频......)并进行展示(像这样体积大,又不太爱改变的数据,就可以保存到浏览器本地(浏览器所在主机的硬盘上)后续再打开这个页面,就不必重新从网络获取上述数据了)对于计算机硬件来说, 往往访问速度越快的设备, 成本越⾼, 存储空间越⼩.
2025-10-21 21:44:40
752
原创 9.Redis 集群(重在理解)
Redis 集群(Redis Cluster)是 Redis 官方提供的分布式解决方案,用于解决单节点 Redis 内存限制、并发瓶颈和单点故障问题,支持数据分片存储和自动故障转移,可扩展性强。
2025-10-20 16:00:37
1098
原创 4.客户端(Redis)
之前的各种 redis 的基本操作/命令,都是在 redis 命令行客户端,手动执行的,更多的时候,是使用 redis 的api,来实现定制化的 redis 客户端程序,进一步操作 redis 服务器。为什么我们能编写出一个自定义的redis 客户端??我们能不能编写出一个qq的自定义客户端??不能!!因为他们没有公开自己使用的自定义协议。
2025-10-20 16:00:06
619
原创 8.Redis 哨兵(Sentinel)
1.基本概念Redis 哨兵(Sentinel)机制是 Redis 提供的高可用解决方案,它能够监控主从节点的状态,并在主节点故障时自动将从节点晋升为新的主节点,从而实现故障自动转移,减少人工干预。Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的,于是 Redis 从 2.8 开始提供了 Redis Sentinel(哨兵)加个来解决这个问题。1.基本概念。
2025-09-15 17:23:03
1535
原创 7.Redis 主从复制(重在理解)
Redis 主从复制是 Redis 提供的一种数据备份和读写分离方案,通过该机制可以实现将主节点(Master)的数据同步到从节点(Slave),从而提高系统的可用性和读取性能。在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis 也是如此,它为我们提供了复制的功能,实现了相同数据的多个 Redis 副本。复制功能是⾼可⽤ Redis 的基础,哨兵和集群都是在复制的基础上构建的。
2025-09-15 17:22:52
1146
原创 8.动态规划(随想录)
416. 分割等和子集 (opens new window)是求背包是否正好装满,而本题是求背包最多能装多少。物品就是石头,物品的重量为stones[i],物品的价值也为stones[i]。本题其实是尽量让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。一堆的石头重量是sum,那么我们就尽可能拼成 重量为 sum / 2 的石头堆。这样剩下的石头堆也是 尽可能接近 sum/2 的重量。
2025-09-13 07:27:18
1069
原创 6.Redis 事务
Redis 的事务可以通俗理解为「把一系列操作打包成一个整体执行」,要么全部成功,要么全部失败(或者说按顺序执行,中间出错也不会回滚),避免操作到一半被打断。与MySQL类似,但要注意二者的区别:1.弱化的原子性:redis,只能做到这些操作。不能做到“一个失败就恢复到初始状态”。2.不保证一致性:不涉及“约束”。也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态。3.不需要隔离性: 也没有隔离级别, 因为。
2025-09-13 07:25:30
1310
原创 5.持久化(Redis)
为了保证数据快,数据要存在内存中;但是为了持久,数据又要存在硬盘上。那怎么办?Redis 决定,内存硬盘都要存数据(这两份数据上是完全相同的)Redis 持久化是指将内存中的数据定期或实时保存到磁盘,以防止服务重启、宕机等情况导致数据丢失的核心机制。其核心目标是在和和,此外还支持二者结合的混合持久化模式。
2025-09-12 07:20:11
1329
1
原创 回顾生产消费者模型
对生产者:“不用等消费者,有地方存就行”;对消费者:“不用等生产者,有东西拿就行”;对系统:“稳定应对速度差异和突发流量,降低耦合”。它是从 “简单多线程” 到 “复杂分布式架构” 都绕不开的核心设计思想,理解它就能看懂很多中间件(如 MQ、线程池)的底层逻辑。
2025-09-12 07:19:08
801
原创 3.List,set 与 Zset(Redis数据类型)
本文详细介绍了Redis中的三种核心数据结构:列表(List)、集合(Set)和有序集合(Zset)。列表是有序字符串集合,支持两端操作,可用作栈或队列;集合是无序唯一元素集合,支持交并差等集合运算;有序集合则通过分数(score)实现元素排序,每个元素保持唯一但分数可重复。文章深入解析了各数据结构的特性、内部编码机制、常用命令及典型应用场景,如列表可用于消息队列和微博时间线,集合适合标签系统,有序集合则适用于排行榜等需要排序的场景。通过命令示例和复杂度分析,全面展示了这些数据结构在Redis中的实现原理和
2025-09-11 15:44:22
919
原创 2.string,hash(Redis数据类型)
⼀个分布式 Web 服务将⽤⼾的 Session 信息(例如⽤⼾登录信息)保存在各⾃的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的。可以使⽤负数表⽰倒数。1.哈希类型是稀疏的,⽽关系型数据库是完全结构化的,例如哈希类型每个键可以有不同的 field,⽽关系型数据库⼀旦添加新的列,所有⾏都要为其设置值,即使为 null,
2025-09-11 15:44:03
680
原创 1.初识Redis
Redis是⼀种基于(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis 中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis 可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再中,所以它的读写性能⾮常惊⼈。
2025-09-10 07:06:01
1096
原创 0.服务端高并发分布式结构
1.分布式(Distributed)系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别⼯作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。跨主机之间的模块之间的通信基本要借助⽹络⽀撑完成。2.中间件(Middleware)⼀类提供不同应⽤程序⽤于相互通信的软件,即处于不同技术、⼯具和数据库之间的桥梁。3.可⽤性(Availability)考察单位时间段内,系统可以正常提供服务的概率/期望。
2025-09-10 07:05:02
942
原创 3.数组(C)
p用来打印地址//内存会被划分为一个个的内存单元,一个单元的大小是1字节,每个内存单元都有编号(即为地址以16进制显示)2.&arr 这里取的是整个数组的地址(但实质还是数组中最小元素的地址,即首元素地址)1.sizeof(arr) 表示计算整个数组所占空间的内存大小;7.练习(二分查找)1.1.数组是一堆“相同元素”的集合.3.1.数组下标(方便访问数组中的值)6. 二维数组的创建与使用。哈哈(作者太懒了,没有好招)5.一维数组在内存中的存储。相当于数组中的元素编号。*数组名的本质是地址*
2025-09-09 12:44:28
763
原创 C++ - 高性能内存池
所谓“池化技术”,就是程序先向系统申请过量的资源,然后⾃⼰管理,以备不时之需。之所以要申 请过量的资源,是因为每次申请该资源都有较⼤的开销,不如提前申请好了,这样使⽤时就会变得⾮常快捷,⼤⼤提⾼程序运⾏效率。在计算机中,有很多使⽤“池”这种技术的地⽅,除了内存池,还有连接池、线程池、对象池等。以服务器上的线程池为例,它的主要思想是:先启动若⼲数量的线程,让它们处于睡眠状态,当接收到客⼾端的请求时,唤醒池中某个睡眠的线程,让它来处理客⼾端的请求,当处理完这个请求,线程⼜进⼊睡眠状态。
2025-09-08 08:59:19
1582
原创 12.MySQL视图(了解)
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。它本身不存储数据,而是基于一个或多个实际表(或其他视图)的查询结果动态生成。
2025-09-06 00:27:08
218
原创 11.MySQL事务管理
事务是 MySQL 中保障数据一致性的核心机制,它将一组 SQL 操作封装为一个不可分割的执行单元 —— 要么所有操作全部成功(提交),要么所有操作全部失败(回滚)。事务还规定不同的客户端看到的数据是不相同的。一个 MySQL数据库,可不止你一个事务在运行,同一时刻,甚至有大量的请求被包装成事务,在向 MySQL 服务器发起事务处理请求。在不加保护的情况,就绝对会出现问题。MySQL 事务必须满足ACID 四大特性,这是事务完整性的基石。
2025-09-06 00:26:45
1024
原创 10.索引
索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。索引通过构建类似目录的结构,让数据库无需全表扫描即可快速定位到目标数据。例如在百万级数据中查询特定记录时,使用索引能将查询时间从秒级缩短到毫秒级。当查询包含ORDER BY。
2025-09-05 00:29:40
859
原创 9.表的内连和外连(重要)
数据库设计中,为避免数据冗余,通常会将信息拆分到多个表(如 “学生表” 和 “成绩表”,通过 “学生 ID” 关联)。“连接” 的作用就是通过,将多个表的相关数据合并为一个结果集,方便查询。
2025-09-05 00:29:20
370
原创 8.MySQL复合查询(重要)
1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J2.按照部门号升序而雇员的工资降序排序3.使用年薪进行降序排序4.显示工资最高的员工的名字和工作岗位5.显示工资高于平均工资的员工信息6.显示每个部门的平均工资和最高工资7.显示平均工资低于2000的部门号和它的平均工资having 和 where 的区别8.显示每种岗位的雇员总数,平均工资2.多表查询将数据进行穷举组合 -- 笛卡尔积任何时候,查询出来的临时结构
2025-09-04 07:15:10
1112
原创 6.MySQL基本查询-表的增删查改
更快,但是TRUNCATE在删除数据的时 候,并不经过真正的事物,所以无法回滚。的函数,常用于统计、汇总数据。它的特点是:输入多行数据,输出一个结果。案例:删除表中的的重复复记录,重复的数据只能有一份。2.显示每个部门的每种岗位的平均工资和最低工资。返回查询到的数据的 平均值,不是数字没有意义。返回查询到的数据的 最大值,不是数字没有意义。返回查询到的数据的 最小值,不是数字没有意义。返回查询到的数据的 总和,不是数字没有意义。的关键字,通常和聚合函数(如。返回查询到的数据的 数量。
2025-09-03 06:52:47
833
原创 5.表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
2025-09-03 06:52:04
1141
原创 4.MySQL数据类型
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;数据类型用于存储二进制值,M表示每个值的位数,范围从1到64.。,因为这些选项的每个选项值依次对应如下字:1,2,4,8,16,32,.... 最多64。该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。6.变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择。
2025-09-02 06:51:30
1061
原创 3.表的操作
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。插入新字段后,对原来表中的数据没有影响.6.将name列修改为xingming。表添加一个字段,用于保存图片路径。5.修改表名为employee。4.删除password列。
2025-09-02 06:48:51
319
原创 2.MySQL库的操作
如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。字符集是一个系统支持的所有抽象字符的集合,规定了如何将字符映射到二进制数据,以便在计算机中存储和传输。文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source。》对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。1.如果备份的不是整个数据库,而是其中的一张表,怎么做?对数据库的修改主要指的是修改数据库的字符集,校验规则。
2025-09-01 10:55:18
405
原创 1.MySQL数据库基础
存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个1.文件的安全性问题2.文件不利于数据查询和管理3.文件不利于存储海量数据4.文件在程序中控制不方便数据库存储介质: 磁盘 内存通过:cd /var/lib/mysql 可发现create实际就是linux创建目录。
2025-09-01 10:55:00
658
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅