自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能技术之SPDK和DPDK(一)

DPDK(Data Plane Development Kit)和SPDK(Storage Performance Development Kit)都是由英特尔开源的项目,它们都旨在提高特定领域的性能,但是它们的关注点和应用场景有所不同。总的来说,DPDK和SPDK的核心思想大致相同,都涉及到用户空间的直接资源访问和减少操作系统内核的介入,但是DPDK主要针对网络性能,而SPDK主要针对存储性能。SPDK则专注于存储性能的提升,特别是针对NVMe SSD等新一代存储介质的优化。

2024-05-21 13:31:42 221

原创 分布式存储(一)

在整个流程中,GFS主节点(Master)起到了协调作用,负责管理文件元数据,包括文件的位置信息等。客户端通过与GFS主节点的交互,获取文件的位置信息,并直接与存储文件块副本的存储节点通信进行文件读取操作。在整个流程中,GFS主节点(Master)负责管理文件元数据,包括文件的位置信息等。客户端通过与GFS主节点的交互,获取文件的位置信息,并将文件块发送给存储节点进行写入操作。在GFS中,文件被划分成固定大小的块(chunk),并在多个存储节点上进行复制,以提供高可靠性和高性能的数据访问。

2024-05-18 23:50:20 727

原创 一些数学概念

在数学中,是由变量(比如x)和系数(通常是整数或有理数)组成的表达式。一个多项式可以看作是一系列的项的和,其中每个项由一个系数和一个变量的幂组成。例如,就是一个多项式,其中35和7是系数,x是变量,而x^2x和1(通常省略)是x的幂。是一个数学结构,它由所有以某个变量为未知数的多项式组成,并且在这个集合上定义了加法和乘法两种运算,满足环的数学性质。在密码学中,经常使用的是模q的多项式环,记作R_q或Z_q[X],其中q是一个正整数。

2024-05-17 12:33:53 367

原创 Docker(一)

Docker 通过容器化技术,确保了应用及其依赖可以在任何支持 Docker 的环境中一致地运行,提高了环境的一致性和可移植性。开发者可以将应用及其依赖打包成 Docker 镜像,然后在任何安装有 Docker 的平台上运行这个镜像,实现应用的快速部署和扩展。Docker 利用容器对应用进行隔离,每个容器都有自己的文件系统、网络配置、进程空间等,保证了应用之间的隔离性。:相比传统的虚拟机技术,Docker 容器启动速度快、资源消耗少,因为它不需要启动完整的操作系统,而是共享宿主机的操作系统内核。

2024-05-16 10:01:44 242

原创 格密码学(一)

基于格的密码学是涉及格的密码原语构造的通用术语,无论是在构造本身还是在安全证明中。基于格的结构支持后量子密码学的重要标准。[1] 与更广泛使用和已知的公钥方案(例如RSA、Diffie-Hellman或椭圆曲线密码系统)不同(理论上可以在量子计算机上使用Shor 算法来击败这些方案),一些基于格的结构似乎是抵抗经典计算机和量子计算机的攻击。此外,在某些经过充分研究的计算格问题无法有效解决的 假设下,许多基于格的构造被认为是安全的。

2024-05-12 08:50:21 464

原创 不可重复读,幻读和脏读

幻读一般在读未提交,读已提交,可重复读出现,原因是第一个事务执行时,第二个事务完成了提交,在第一个事务读取的数据中间插入或删除了一些数据,进而造成的第一个事务第二次读取时数据中间多了或者少了一部分数据。而脏读只能在读未提交的隔离级别下发生,事务1修改了一些数据,但是在他提交之前,另外一个事务读取了事务1修改的数据,但是事务1产生了回滚,那么就发生了脏读。不可重复读一般在读未提交,读已提交这两种隔离级别出现,第一次读和第二次读的数据不一致。mysql的四种隔离级别。

2024-04-27 15:59:27 213

原创 undo log和redo log区分

Redo Log(重做日志)和 Undo Log(撤销日志)是数据库系统中用于确保数据完整性和事务一致性的两种不同类型的日志。它们在处理事务、尤其是事务回滚和系统恢复时起着关键作用。

2024-04-27 15:31:11 220

原创 Redis淘汰策略,持久化和集群

Redis 的OBJECT命令提供了多个子命令,用于检查有关键的内部详细信息。:返回用于存储与键关联的值的内部表示类型。FREQ <key>:返回键的访问频率索引。返回的整数与键的最近访问频率的对数成比例。您可以使用这些子命令来深入了解 Redis 如何存储和管理键,包括它们的编码、访问频率、空闲时间和引用计数。例如,您可以使用来检查特定键的编码。类似地,您可以使用相应的子命令来检索特定键的访问频率、空闲时间和引用计数。如果您有特定的键想要查询,可以在使用这些子命令时将<key>

2024-03-17 13:17:19 1032

原创 数据库和数据仓库

数据仓库和数据库在设计目的、数据处理方式、使用场景等方面有显著的不同:

2024-02-28 15:22:22 669

原创 Redis为什么快?

在迁移过程中,Redis会将新哈希表中的所有键值对插入到原哈希表中对应的位置上,并将原哈希表中被迁移的键值对删除。在渐进式rehash阶段,Redis会创建一个新的哈希表,将新的哈希表的大小设置为原来的两倍,并将原来的键值对逐个地迁移到新的哈希表中。这个阶段中,Redis只会访问新的哈希表,以保证所有的键值对都能够被正确地访问和操作。在渐进式rehash开始时,Redis会创建一个新的哈希表,将新哈希表的大小设置为原来的两倍,并将新哈希表的状态设置为"rehashing",表示正在进行rehash操作。

2024-02-20 10:29:13 4311 4

原创 提升MySQL访问性能

缓解了MySQL的读压力。主从复制原理图如下如果对于读操作有一致性要求,那么读操作去主数据库即可。

2024-02-10 15:58:35 373

原创 MySQL事务原理的分析

脏读:脏读只会在read uncommitted隔离级别下发生。在这个隔离级别下,一个事务可以读取到另一个未提交的事务所修改的数据,因此可能会读取到无效的数据。不可重复读:不可重复读可能在read committed、repeatable read和serializable隔离级别下发生。

2024-02-03 19:48:14 683

原创 MySQL索引的原理和SQL优化策略

在InnoDB存储引擎中,索引分为聚簇索引和辅助索引两种类型。聚簇索引是指基于表的主键构建的索引,它决定了表中数据的物理存储顺序。也就是说,聚簇索引中的键值按照主键的顺序来排序,并且每个叶子节点存储的是整个表行的数据。因此,通过聚簇索引可以快速地定位到特定主键的行数据,而且相邻的行数据在物理上也是相邻存储的。如果表没有主键,则InnoDB会选择一个唯一的非空索引作为聚簇索引,如果没有这样的索引,则会隐式地创建一个隐藏的主键。

2024-02-01 22:24:57 914

原创 实现分布式锁

分布式锁是一种用于协调分布式系统中多个节点之间并发访问共享资源的机制。在分布式系统中,由于存在多个节点同时访问共享资源的可能性,需要使用分布式锁来保证数据的一致性和正确性。今天要实现的是分布式场景中的互斥类型的锁。下面时分布式锁的实现重点。

2024-01-20 17:48:57 789

原创 内存泄漏检测组件的实现

内存泄漏是在没有自动GC的编程语言里面,经常发生的一些问题。

2024-01-19 20:45:14 965

原创 C语言实现读写锁和try...catch逻辑

代码示例创建了多个读者线程和一个写者线程来访问共享资源(这里是一个文件)。在读者线程中,使用了文件I/O函数打开文件、映射文件到内存,并对文件内容进行了读取。在写者线程中,也使用了文件I/O函数打开文件、映射文件到内存,并对文件内容进行了写入。完整代码如下,简洁易懂。

2024-01-13 19:41:02 511 2

原创 锁,原子操作,共享内存,CPU亲缘性总结

锁,原子操作,共享内存mmap,CPU亲缘性总结

2024-01-13 13:11:41 1071

原创 内存池的实现场景分析

本文中所介绍的内存池主要是先判断需要的内存是多大,然后,大于指定的最大值的话,那么需要重新给分配一大块,存储这一大块的结构体所占用的内存是从内存池中分配的,就是便利遍历的池子看是否有满足要求的;然后如果需要的内存小于指定值,那么就是去内存池中,遍历链表,然后找到满足需要内存要求的块,分配内存给他即可。总的来说,个人觉得这个内存池的实现就是使得每次申请者需要的内存不多时,直接去内存池拿,不需要再去进行系统调用。如果实际开发需要的话,也可以去使用一些开源的内存池组件tcmalloc/jemalloc等。

2024-01-09 20:54:14 362

原创 如何打开ubuntu的某个端口

检查防火墙工具ufw是否已安装。UFW是Ubuntu上的一个简化的防火墙配置工具,可以轻松管理端口和防火墙规则。如果显示版本信息,则表示ufw已经安装。:如果连接的是腾讯云/阿里云服务器,需要在对应网页上进行安全策略的加入才能真正打开该端口。验证端口是否已经开放。可以执行以下命令来查看ufw的状态和已开放的端口:`如果要放开其他端口,请将80替换为相应的端口号。

2024-01-07 11:28:56 1409

原创 密码学基础

MD5 可以用来生成一个 128 位的消息摘要,它是目前应用比较普遍的散列算法,具体的应用场景你可以自行参阅。虽然,因为算法的缺陷,它的唯一性已经被破解了,但是大部分场景下,这并不会构成安全问题。但是,如果不是长度受限(32 个字符),不推荐继续使用 MD5。密码学是一门深奥的学科,在使用的时候,你要记住下面这些内容:对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密;不需要可逆计算的时候(如存储密码),我们就使用散列算法。

2023-12-23 14:39:44 769

原创 基础组件:手写一个线程池(C语言版)

线程池(消费者)线程池中的线程取出任务,执行任务,线程调度(mutex+condition)队列(任务:任务的上下文,任务执行函数)那么怎样确定线程池中的线程数量?构成:生产者线程(发布任务)

2023-12-04 21:14:30 412

原创 服务端定时器方案(红黑树,时间轮,最小堆)

其中find_nearest_timer()接口是针对于网络事件和定时事件在同一线程中的处理的专用接口,其他接口是都用。1. --》通常用usleep(time) 去触发定时器,time要小于最小时间精度。expire是多长时间后执行此定时事件,进而会回调cb。让用户使用定时器的接口,通常为下面几个。定时任务会在单独的线程中进行检测。2. --》 通常采用时间轮,通常用于大量定时任务的情况。

2023-12-04 17:21:02 388

原创 reactor模式的一些总结

必须使用非阻塞IO,边缘触发的话,在一次事件循环要把readbuffer读空,如果不读空,只有在下次事件触发才能读取剩下的。如果此时readbuffer已经为空了,但是我们使用的是阻塞IO的话,此时程序就会被阻塞。:当某个socket的接收缓冲区有新数据分节到达,然后select 会报告这个socket描述符可读,但是,协议栈检验时,将数据丢弃了,那么此时调用read将无数据可读,如果此时socket设置为阻塞,则会阻塞线程。检测IO就是检测IO的就绪状态,也就是 IO多路复用(检测多个连接的就绪状态)

2023-12-02 20:06:51 927 1

原创 C/C++协程

协程(Coroutine),又称为微线程或者轻量级线程,是一种用户态的、可在单个线程中并发执行的程序组件。协程可以看作是一个更轻量级的线程,由程序员主动控制调度。它们拥有自己的寄存器上下文和栈,可以在多个入口点间自由切换,而不是像传统的函数调用那样在一个入口点开始、另一个入口点结束。协程的概念最早可以追溯到1963年,由Melvin Conway提出。经过多年的发展,协程已经成为了现代编程语言和框架中的一种重要编程范式。

2023-12-01 18:52:20 960 1

原创 百万并发的reactor网络模型

并发量是指系统在同一时间内能够处理的请求数量,它主要关注的是系统能够同时处理多少个请求。而吞吐量则是指在一定时间内,系统能够处理的请求总数,它更关注的是系统整体的处理能力。下面是百万并发reactor网络模型的代码实现,实测连接的并发量可达100W以上,可以基于此模型构建对应的应用。很多朋友在网络编程时,在对代码测试时,分不清并发量和吞吐量的关系。把对网络IO的处理装换为对事件的处理,进行封装。

2023-11-27 10:42:19 366

原创 异步请求池的框架(以DNS请求为例)

0x010x05。

2023-11-27 10:22:25 380

原创 练手:实现一个C++线程池

之前学习了:可变参数;bind等C++11特性,下面用这些重点知识等实现一个C++线程池。这部分代码如果无法理解,可以参考往期的博文。下面是使用该线程池的测试代码。

2023-10-15 16:11:36 51 1

原创 TCP三次握手解读

tcp连接的双方要确保各自的收发消息的能力都是正常的。连接发起方发送最后一个ACK,对方如果没收到会再次发FIN,所以要守着等待一段时间。只有发起连接终止的一方会进入 TIME_WAIT 状态。ACK:响应PSH:有DATA数据传输。TIME_WAIT等待。

2023-10-03 19:59:50 53

原创 C++之function和bind用法

C++11特性function和bind的用法

2023-09-26 15:02:48 909

原创 C++11多线程thread

下面以 std::mutex 为例介绍 C++11 中的互斥量用法。std::mutex 是C++11 中最基本的互斥量,std::mutex 对象提供了独占所有权的特性——即不支持递归地对 std::mutex 对象上锁,而 std::recursive_lock 则可以递归地对互斥量对象上锁。std::mutex 的成员函数构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于unlocked 状态的。lock(),调用线程将锁住该互斥量。

2023-09-25 15:55:56 88 1

原创 C++新特性复习四:STL标准库

STL容器,可将其分为四类:序列容器、有序关联容器、无序关联容器、容器适配器序列容器:** 无序关联容器**容器适配器:序列容器描述了线性的数据结构(也就是说,其中的元素在概念上” 排成一行"), 例如数组、向量和 链表。关联容器描述非线性的容器,它们通常可以快速锁定其中的元素。这种容器可以存储值的集合或 者键-值对。栈和队列都是在序列容器的基础上加以约束条件得到的,因此STL把stack和queue作为容器适配器来实现,这样就可以使程序以一种约束方式来处理线性容器。

2023-09-23 13:53:51 37 1

原创 C++新特性复习三:lambda表达式

如果捕获列表为[&],则表示所有的外部变量都按引用传递给lambda使用;如果捕获列表为[=],则表示所有的外部变量都按值传递给lambda使用;匿名函数构建的时候对于按值传递的捕获列表,会立即将当前可以取到的值拷贝一份作为常数,然后将该常数作为参数传递。

2023-09-20 07:41:51 33 1

原创 C++新特性复习二:右值引用和移动语义

可以从2个角度判断:左值可以取地址、位于等号左边;而右值没法取地址,位于等号右边。int a = 6;a可以通过 & 取地址,位于等号左边,所以a是左值。6位于等号右边,6没法通过 & 取地址,所以6是个右值。int a_;A a = A();同样的,a可以通过 & 取地址,位于等号左边,所以a是左值。A()是个临时值,没法通过 & 取地址,位于等号右边,所以A()是个右值。

2023-09-18 11:50:09 28

原创 C++新特性复习一:智能指针

C++里面3个智能指针:shared_ptr,unique_ptr, weak_ptr 其中后三个是C++11支持几个指针的特点:unique_ptr独占对象的所有权,由于没有引用计数,因此性能较好。shared_ptr共享对象的所有权,但性能略差。weak_ptr配合shared_ptr,解决循环引用的问题。

2023-09-14 10:38:40 73 1

原创 设计模式总结下篇

稳定点:创建同类对象的接口 同类对象有一个相同的职责。保证一个类仅有一个实例,并提供一个该实例的全局访问点。定义一个用于创建对象的接口,让子类决定实例化哪一个类。变化点:如果多个类都是单例,能不能复用代码。稳定点:类只有一个实例,提供全局的访问点。变化点:创建对象的扩展。

2023-09-12 08:48:40 18

原创 设计模式总结上篇

象(Subject)的状态发生改变时,所有依赖于它的对象都得到通。稳定点:一对多的依赖关系(依赖关系是稳定的),一变化则多跟着变化。定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。定义对象间的一种一对多(变化)的依赖关系,以便当一个对。需求:整洁的房间,一只好动的毛,怎么保证环境的整洁?设计模式期望来修改少量的代码,就可以适应需求的变化。接口隔离:依赖注入,一个接口解决两个类的依赖。前提:具体的需求既有稳定点,又有变化点。多态的使用方式(基类指针指向子类的对象)稳定点:客户程序与算法的调用关系。

2023-09-11 10:48:45 22

原创 B/B+树

/ 这是一个B树数据结构的定义。它包含了一个结构体_btree_node,该结构体表示B树的节点,并具有以下属性: // keys:保存节点中的关键字的数组。这里定义为int类型的指针,表示一个动态数组。// childrens:保存子节点的数组。这里定义为指向_btree_node结构体的指针的指针,表示一个动态数组。// num:节点中已存储的关键字数量。// leaf:一个标志位,指示该节点是否为叶子节点。// 另外,还定义了一个结构体_btree表示整个B树,包含一个指向根节点的指针。

2023-08-18 15:14:31 35 1

原创 红黑树学习

红黑树

2023-08-03 16:51:39 65

原创 C/C++后台开发岗位技能知识树

一.语言对象的生命周期,垃圾回收标准库错误与异常处理日志分析,断点调试对面向对象的理解设计模式GDB的使用二.数据结构和算法链表,队列,栈二叉树,红黑树B树,B+树dijistra算法,最小生成树递归排序 希尔,归并,快排,堆排序贪心算法,动态规划跳表,散列表,hash,布隆过滤器三.数据库MySQLMySQL安装配置SQL建表,索引,存储过程存储引擎 MyISAM/Innodb数据库连接池异步数据库请求SQL注入,webshell数据库集群,分库

2023-07-09 17:18:00 153 1

原创 C++ substr用法

在上面的代码中,我们使用substr函数从字符串str中提取从第7个字符开始到末尾的子串,并将其存储在字符串sub中。然后我们输出这个子串,得到"world!它有两个参数:起始位置和子串长度。请注意,如果起始位置或长度超出范围,则会抛出一个异常。

2023-03-09 17:02:11 4006 1

空空如也

空空如也

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

TA关注的人

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