自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 事务 简单介绍

本文Redis事务特性是与MySQL相对而言的:弱化的原⼦性: redis 没有 “回滚机制”. 只能做到这些操作 “批量执⾏”. 不能做到 “⼀个失败就恢复到初始状态”.不保证⼀致性: 不涉及 “约束”. 也没有回滚. MySQL 的⼀致性体现的是运⾏事务前和运⾏后 , 结果都是合理有效的, 不会出现中间⾮法状态.不需要隔离性: 也没有隔离级别, 因为不会并发执⾏事务 (redis 单线程处理请求) .

2024-04-21 23:38:45 217

原创 Redis 持久化

Redis 持久化机制主要有RDB和AOF两种。

2024-04-21 00:12:55 854

原创 Redis 数据类型

概览:中value的类型内部编码: 实际在底层用来存储value的结构设计优点:① 解耦,用户可根据需求再开发内部编码方式② 实现空间或效率优化, 多种内部编码实现可以在不同场景下发挥各⾃的优势,例如 ziplist ⽐较节省内存,但是在列表元素⽐较多的情况下,性能会下降,这时候 Redis 会根据配置选项将列表类型的内部实现转换为linkedlist,整个过程⽤⼾同样⽆感知。

2024-04-20 21:37:42 1233

原创 MySQL 基础语法(3)

其中,table_name是要插入数据的表名,column1、column2等是要插入数据的列名,SELECT子句用于查询要插入的数据,WHERE子句用于筛选要插入的数据。对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死。例子:将employees表中age大于等于30的记录的salary列增加10%ASC表示升序排序,DESC表示降序排序。如果不指定排序方式,默认为升序排序。假设有一个名为employees的表, 有salary、age列属性。

2024-04-20 18:03:34 585

原创 MySQL 表的约束

约束的概念MySQL 表的约束是指对表中数据的一种规则或限制,用于确保数据的完整性、一致性和有效性。这些约束规定了对表中列的值所允许的条件,以及对表之间关系的限制。是数据类型本身就是一种约束,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是身份证号,要求是唯一的。

2024-04-20 16:47:52 1122

原创 MySQL 基础语法(2)

作用:修改现有表的结构。CHARACTER SET 字符集:指定表的字符集。COLLATE 校验规则:指定表的校验规则。ENGINE 存储引擎:指定表的存储引擎。tablename:要修改的表的名称。tablename:要修改的表的名称。tablename:要修改的表的名称。table_name:新表的名称。column:要添加的新列的名称。datatype:新列的数据类型。column:要修改的列的名称。datatype:新的数据类型。column:要删除的列的名称。值的数量要与表的列属性数量一致。

2024-04-20 16:46:47 463

原创 MySQL 基础语法(1)

DML 用于查询、插入、更新和删除数据库中的数据,以及执行数据的各种操作。DDL 包括创建、修改和删除数据库对象的命令,如表、视图、索引等。DCL 包括授权和回收访问权限的命令,以及管理数据库对象的权限。-p:这个选项告诉 MySQL 提示输入与提供的用户名相关联的密码。数据库备份存储的文件路径:指定要存储数据库备份的文件路径和文件名(以.sql后缀结尾)。在这个例子中,是 root。-p:指定连接数据库的端口号, MySQL 的默认端口是 3306。密码:这里应该替换为你的 MySQL 用户的密码。

2024-04-20 16:46:27 661

原创 MySQL 索引的存储原理

例如,InnoDB存储引擎适合处理大量的写操作和事务处理,而MyISAM存储引擎在处理大量的读操作时性能较好。根据应用程序的读写比例和性能需求,选择合适的存储引擎可以提高数据库的性能。唯一索引:唯一索引是一种索引类型,它确保索引列中的值是唯一的,即不允许有重复的值。聚簇索引与非聚簇索引的区别是B+树底层存储的数据是value还是指向value的指针(前面图展示的为聚簇索引)。索引类型:不同的存储引擎支持的索引类型和限制也有所不同。空间占用:不同的存储引擎在存储数据时占用的空间也有所不同。

2024-04-09 20:40:24 809

原创 C++ 多线程

文章目录学习C++提供的线程库的原因线程相关的类线程初始化线程获取自身线程ID线程让出自身时间片互斥锁的基本使用条件变量的基本使用学习C++提供的线程库的原因Linux 提供的 pthread_create等线程相关函数无法在windows上使用, C++提供的线程相关函数可以跨平台使用C++使用了面向对象的思想进行了封装,相关线程方法更容易使用 。线程相关的类// 调用常用方法的类// thread对象、mutex对象均不允许拷贝,但允许移动赋值/构造。std::threadstd::

2024-03-30 20:36:48 503 1

原创 Redis 单线程

Redis的单线程架构的效果为:Redis的单线程是对于服务端而言的,Redis允许多个Redis用户端同时在线操作,但同时只有一个用户端在和服务端交互。通常来讲,单线程处理能⼒要⽐多线程差,那么为什么 Redis 使⽤单线程模型会达到每秒万级别的处理能⼒呢?Redis 使⽤ epoll 作为 I/O 多路复⽤技术的实现,再加上 Redis ⾃⾝的事件。Redis 将所有数据放在内存中,内存的响应时⻓⼤约为 100 纳秒,这是 Redis 达。③ 单线程避免了线程切换和竞态产⽣的消耗。

2024-02-08 20:42:27 668

原创 Redis Centos7 安装到启动

①修改为0.0.0.0 (默认的是本机循环端口号)④在Linux中创建易于查找的工作目录。4 针对配置文件设置符号链接。并在配置文件中修改默认工作目录。②将保护模式改为no。③设置为守护进程模式。

2024-02-08 20:41:15 1118

原创 Redis 基本认识

的形式构建储数据,Redis有五种基础的数据结构,它们分别为:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet ) , 并在这些基础的数据结构之上演变出了其他类型。Redis本身是一个网络服务,程序/程序员在Redis增删查改数据是通过客户端来实现的,这点和MySQL相似。同大小的内存与外存,内存更贵,Redis数据存储在内存中,故Redis不适合存放冷数据的应用场景。④提供了简单的事务功能,能在⼀定程度上保证事务特性。

2024-02-08 20:40:15 945

原创 C语言 volatile关键字

volatile 是一个关键字,用于修饰变量,表示该变量是易变的,即可能在任何时候被意外地改变。在多线程编程中,当多个线程同时访问同一个变量时,由于线程之间的交互和优化,可能会导致变量的值不一致或出现意外的行为。使用 volatile 关键字可以告诉编译器和处理器,在访问该变量时需要遵循一定的规则,以确保变量的可见性和一致性。具体来说,volatile 关键字有以下几个作用:①。②防止编译器对该变量进行重排序优化,保证指令执行的顺序与程序中的顺序一致。

2023-12-29 22:50:06 565 2

原创 Linux 线程安全 (2)

通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。为了实现这种同步与通信,可以使用互斥锁(mutex)来保护缓冲区的访问,以及条件变量(condition variable)来实现生产者和消费者之间的等待和通知机制。条件变量是一种线程同步的高级机制,它可以实现线程的等待和唤醒操作。条件变量通常与互斥锁一起使用,当某个条件不满足时,线程可以调用条件变量的等待操作进入。线程同步:线程同步是指在多线程编程中,为了保证临界资源的正确访问和避免竞态条件,需要协调和控制线程之间的执行顺序和互斥访问。

2023-12-29 21:32:19 949

原创 Linux 线程安全 (1)

现阶段可以粗浅的理解为,执行流决定执行哪个线程或进程的代码(或者说执行流决定了CPU资源的分配),执行流执行代码的顺序逻辑即为程序员编写代码时的顺序逻辑。一台主机上会有多个进程或线程时,实际上不是一个进程或线程分配到一个执行流(执行流的数量取决于CPU的核心数量), 而是执行流不挺的根据预先设置好的执行流调度算法(即CPU资源分配算法)在各个进程或线程之间切换,由于切换的速度很快、CPU的计算速度很快(对人来说)以及CPU调度算法的作用,用户往往干受不到这个过程。它决定了程序中的指令按照何种顺序被执行。

2023-12-29 16:43:09 926

原创 Linux 线程概念

① 函数的具体说明被放在补充与说明部分② 只说些基础概念和函数使用。

2023-12-28 17:07:11 1165

原创 Linux 进程信号

信号由软件或硬件产生发送给进程,进程对其做相应处理。信号是进程之间事件异步通知的一种方式,属于软中断。Linux下的全部信号由指令查询Linux 下指令的说明使用指令 查询中断组合按键产生信号:如果前台有进程正在运行用可通过 或 的按键组合来向再在运行的前台进程发送信号,达到终止这个前台进程的目的。Ctrl+C:对应的信号是SIGINT(中断信号),Ctrl+\:对应的信号是SIGQUIT(退出信号),两者的区别是 SIGQUIT 信号会产生用于调试的核心转储文件(Core Dump),用于调

2023-12-18 19:26:55 850 1

原创 Linux 进程通信

补充说明部分为相关函数和不太重要的概念介绍使用方法一:使用函数介绍:简单的父子进程通过管道通信范例:使用方法二:使用管道操作符 。Linux命令行中的管道操作符本质上就是创建了一个匿名管道,将前一个进程的结果发送给下一个进程。上述代码中,利用管道进行进程间通信,虽然是利用文件描述符的形式进行读写,但实际上并没有创建实际的文件,并没有实际消耗磁盘空间。 实际上匿名管道是一个内核缓冲区,存储在内存之上。管道自动销毁的机制,是读写两端,也就是父子进程都关闭了文件描述符,操作系统为了避免资源浪费,自动的

2023-12-16 18:58:07 91

原创 Linux 动态库和静态库

动静态库的创建和使用部分更多的是意在说明动态库和静态库在Linux操作系统中的具体存在,在此基础之上才能解说原理,分析优缺点。位置无关代码(Position-Independent Code,PIC)是一种计算机程序代码的编译方式,它可以在内存中的任何位置执行,而不依赖于代码在内存中的具体位置。这种编译方式主要用于动态链接库(DLL)和可执行文件等需要在不同的内存地址空间中加载和执行的程序。

2023-12-13 20:50:06 80

原创 Linux 基础IO

要知道每个函数/接口的全部参数和返回值建议去官网或者直接在Linux的man手册中查,这不是复制粘贴函数用法的文章。IO是Input/Output的缩写,它是计算机领域中常用的术语,用来描述计算机系统与外部设备之间的数据交换过程。输入(Input)是指将外部数据或指令传输到计算机系统中,而输出(Output)则是指将计算机系统处理后的数据或结果传输到外部设备中。例如,键盘、鼠标、显示器、打印机等都属于外部设备,它们与计算机之间的数据交换过程就是通过输入和输出来实现的。

2023-12-10 13:05:31 627 1

原创 C语言 文件操作

主要需要看的是概念部分、以及FILE结构体、文件指针部分。其余函数使用,知道其功能存在即可,实际在使用到这些函数时去官方文档查的话,不管是介绍还是示例都更齐全。

2023-12-09 18:10:54 85

原创 Linux 文件系统

网络答案:Linux文件系统是Linux操作系统中用于组织和管理文件和目录的一种文件系统。它负责在硬盘上存储和检索文件,并为用户提供对文件的访问和管理功能。个人理解:依然是从硬件说起,先说磁盘本身的物理结构从,磁盘的结构如下图所示,一个磁盘内有多个盘片,每个盘片有两个盘面,盘面上有多个同心圆环被称为磁道,磁道又被均匀划分为一个个扇区,每个扇区可存储512 字节数据(二进制数据)(无论该扇区离圆心远近都是512KB)。面对如此多的数据块,操作系统需要对其进行先描述再组织。

2023-12-08 22:14:15 919 5

原创 Linux 进程控制

WIFEXITED 宏会对 status 进行解析,并返回一个非零值(true)表示子进程是正常退出的,返回零值(false)表示子进程不是正常退出的。需要注意的是,核心转储文件可能会非常大,因此在生产环境中可能需要限制核心转储文件的大小,以避免磁盘空间被耗尽。(status) 宏来获取子进程的退出状态码。WEXITSTATUS(status) 会返回子进程的退出状态码,该状态码通常是在子进程调用 exit 或返回 main 函数时传递的值。wait()函数的返回值是子进程的进程ID,如果出错则返回-1。

2023-12-07 21:15:55 131

原创 Linux 进程地址空间

程序从磁盘中加载到内存,程序的执行需要硬件资源,所以每个程序启动时会创建至少一条进程,进程作为组织资源的数据结构,记录了本进程各方面硬件资源的占用情况,其中就包括内存的占用情况。物理结构上不是连续的,是随机的,所以CPU在内存中读取的时候,目标数据附近的数据不一定是下一个目标的数据,需要多次重新读取内存中的目标数据,操作损害高,会导致性能下降。页表的结构: 一个键值对形式的表,类似于一些数据库那样的KEY=VALUE结构的表,一遍记录进程地址空间的地址,另一边记录与该地址实际对应的物理内存空间。

2023-12-06 23:03:03 1089

原创 Linux 环境变量

在Linux中,environ是一个指向环境变量的指针数组。它是一个全局变量,存储了当前进程的环境变量信息(环境表,见补充说明部分)。环境变量是一些在操作系统中设置的键值对,用于存储各种配置信息和运行时参数。数组的最后一个元素是一个空指针,用于表示数组的结束。通过遍历environ数组,可以获取当前进程的所有环境变量及其对应的值。个人理解:Linux下一切皆文件,在Linux中所用的指令其实都是一个个可执行文件,例如。前面的环境变量设置方法,在重启xshell以后会失效,将环境变量添加到。

2023-12-05 22:05:41 164

原创 Linux 进程

大多数的说法:进程是计算机中正在运行的程序的实例。它是操作系统对程序的一种抽象,用于管理和调度程序的执行。个人理解: 从OS(操作系统)开始说起,OS是一个管理所有硬件资源为程序提供运行环境(管理所有硬件资源)的软件。操作系统如何管理计算机硬件呢?宏观来看是先描述再组织,描述指的是用结构体记录某个硬件的信息/状态等,组织是指用数据结构聚合这些结构体。程序是软件,软件的执行需要硬件资源,进程就是担当分配系统硬件资源(CPU时间,内存)的实体。

2023-12-04 22:19:15 366

原创 Linux 权限

上述情况可以发生,为了防止这种现象发生,可以设置粘滞位,粘滞位(Sticky Bit)是一种特殊的权限位,用于设置目录的权限。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能够删除或重命名目录中的文件’所属组(group)是指文件或目录所属的组,组内的用户拥有与所属组相关的一些权限。具有对该文件的读取和写入权限。可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。概述:可以防止其他用户删除粘滞位目录内用户的文件,如果其他用户具有对文件的写权限,

2023-12-03 23:18:24 896

原创 Linux 基础认识

建议只看概述。

2023-12-02 21:37:33 176

原创 C/C++ 内存管理(2)

堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。可以重载全局的operator new和operator delete函数,但是不能重载new和delete运算符,注意“operator new”是一个函数的名称,而不是对new进行了重载的意思;内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

2023-12-02 16:59:34 465

原创 C语言 柔性数组

C语言中的柔性数组(Flexible Array)是一种特殊的数组类型,它的长度可以在运行时动态确定。柔性数组通常用于结构体的最后一个成员,用于表示可变长度的数据。int length;int data[];// 柔性数组结构中的柔性数组成员前面必须至少一个其他成员。sizeof 返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

2023-12-02 12:10:58 365

原创 C/C++ 内存管理(1)

静态变量在函数调用结束后仍然保持其值,不会被销毁。

2023-12-02 00:04:54 227 2

原创 C/C++11 语法/概念易错总结(1)

个人学习

2023-12-01 21:33:50 170

原创 Linux Ubuntu protobuf 安装方法

如果 make check 执行后出现以下情况,则证明成功,继续执行sudo make install 指令即可。(wget 后的地址是你所指定的protobuf版本的安装包地址)7. 进入protobuf-21.11目录后,依次执行命令。解压完成后会生成 protobuf-21.11目录。(如果安装很慢就在不同的时间断多试几次,慢慢等)如果结果为以下形式,则证明安装成功,可以使用。

2023-12-01 13:33:49 538 2

原创 高级IO select 多路转接实现思路

FD_ISSET(int fd, fd_set *set):检查指定的文件描述符fd是否在fd_set集合中,并返回相应的状态。在使用fd_set类型时,需要使用一些宏函数进行相关操作,如FD_ZERO、FD_SET、FD_CLR和FD_ISSET。FD_SET(int fd, fd_set *set):将指定的文件描述符fd添加到fd_set集合中。FD_CLR(int fd, fd_set *set):将指定的文件描述符fd从fd_set集合中移除。writefds:用于监视可写事件的文件描述符集合。

2023-11-30 22:54:04 203

原创 高级I/O 基础概念

高级I/O(Advanced I/O)是指在计算机系统中进行输入和输出操作时使用的一种更高级的接口和技术。它提供了比传统的基本I/O操作更丰富和灵活的功能,以满足更复杂的应用需求。高级I/O通常具有以下特点:异步操作:高级I/O支持异步操作,即可以在进行输入/输出操作时不阻塞程序的执行,提高了系统的并发性能。缓冲机制:高级I/O通常会使用缓冲区来存储数据,以减少对底层设备的频繁访问,提高数据传输的效率。多路复用:高级I/O支持多路复用技术,可以同时处理多个输入/输出操作,提高系统的响应能力。

2023-11-30 18:57:31 73

原创 数据结构 B树 B+树 B*树 特性与规则说明 图解

每个节点最多有m个子节点,其中m是一个正整数。根节点除外,其他节点至少有⌈m/2⌉个子节点。每个节点中的键值按照非降序排列。对于节点中的键值k,如果有n个子节点,那么节点中的n-1个键值将把节点分为n个区间,第i个区间的键值小于k,第i+1个区间的键值大于等于k。所有叶子节点位于同一层,且不包含任何键值信息,可以看作是外部存储的块。每个非叶子节点中的键值个数比子节点个数少1。每个节点中的键值个数满足:⌈m/2⌉-1 <= 键值个数 <= m-1。

2023-10-03 01:37:44 1067 3

原创 数据结构 图 并查集 遍历方法 最短路径算法 最小生成树算法 简易代码实现

广度优先遍历深度优先遍历最小生成树算法Kruskal算法Prim算法最短路径算法Dijkstra算法BellmanFord算法FloydWarshall算法

2023-10-01 04:53:51 262 3

原创 AVL树 红黑树 规则简易说明 图解

1.AVL树和红黑树都是通过设计规则对二叉搜索树的缺点进行克服;2.本文只对规则进行说明,不对为什么这样做做解释;3.只说明到如何插入节点的深度。

2023-09-19 19:24:48 76

原创 UDP/TCP协议报头详细分析

UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部). 然而64K在当今的互联网环境下, 是一个非常小的数字. 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;最理想的情况下, 找到一个最小的时间, 保证 “确认应答一定能在这个时间内返回”.但是这个时间的长短, 随着网络环境的不同, 是有差异的.如果超时时间设的太长, 会影响整体的重传效率;如果超时时间设的太短, 有可能会频繁发送重复的包。

2023-09-03 13:05:59 1728 2

原创 对称加密 非对称加密 AC认证 https原理

数据签名是一种用于验证数据完整性和身份认证的技术。它通过使用加密算法和私钥对数据进行加密,生成一个唯一的数字签名。这个数字签名可以用于验证数据的来源和完整性,确保数据在传输过程中没有被篡改或伪造。数据摘要:首先,对要签名的数据应用一个哈希函数,生成一个固定长度的摘要(也称为哈希值)。这个摘要是根据数据内容计算出来的,具有唯一性和不可逆性。私钥加密:使用私钥对摘要进行加密,生成数字签名。私钥只有签名者拥有,用于对数据进行加密和生成签名。数字签名验证:接收方可以使用公钥对数字签名进行解密,得到摘要。

2023-08-30 22:21:42 1455 2

空空如也

空空如也

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

TA关注的人

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