自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发内存池【项目】

用C++设计并实现了一个高并发内存池,旨在提高多线程应用中内存分配的效率和性能。通过研究TCMalloc(来自Google的开源项目,并被应用于Golang内存分配器)的原理和结构,对比malloc/free,实现了一个针对高并发情境优化的内存分配器。

2024-03-10 19:37:56 1704

原创 索引【MySQL】

索引是一种数据结构,用于快速查找和访问数据库表中的数据。索引的主要目的是提高查询效率,减少数据库的搜索时间。可以把它想象成一本书的目录:不需要逐页浏览整本书来找到特定的内容,而是直接查看目录,快速定位到所需的部分。数据库按记录为单位存储数据,如果不使用索引而采取遍历查询数据,其时间复杂度是ONO(N)ON。索引是数据的目录。在 MySQL 中,索引也叫做 Key。索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。

2024-04-22 23:24:43 983 1

原创 视图【MySQL】

MySQL 中的视图(View)是一个虚拟表,其内容由查询定义。视图本身不包含数据,这些数据是从一个或多个实际表中派生出来的,通过执行视图定义中的 SQL 查询来动态呈现。

2024-03-10 19:12:12 733

原创 C语言连接【MySQL】

安装 MySQL 库连接 MySQLMYSQL 类创建 MySQL 对象连接数据库关闭数据库连接示例发送命令设置编码格式插入、删除或修改记录查询记录示例参考资料

2024-03-10 19:04:12 957

原创 事务【MySQL】

事务(Transaction)是数据库管理系统中执行的一个操作序列单元(由一个或多个 SQL 语句组成),这些操作作为一个整体一起执行,==要么全部成功,要么全部失败==。事务是数据库维护数据一致性的重要机制,尤其是在并发操作环境下。它们遵循 ACID 属性,以确保数据库的完整性和可靠性。

2024-03-10 19:03:01 975

原创 用户管理【MySQL】

查看用户信息创建用户修改密码删除用户授予权限收回权限

2024-03-10 19:01:05 702

原创 表的连接【MySQL】

数据库的连接是指在数据库系统中,两个或多个数据表之间建立的关联关系,使它们可以进行数据的交互和操作。连接通常基于某种共同的字段或条件,用于将相关数据组合在一起。连接操作的对象是表,可以认为是对若干表的笛卡尔积的筛选操作。内连接(Inner Join):内连接返回两个数据表中满足连接条件的交集部分。只有当连接条件在两个表中都存在匹配时,才会返回结果。外连接(Outer Join):外连接返回连接条件满足的结果,以及其中一个表中未匹配到的行。

2024-03-10 18:53:58 1155

原创 复合查询【MySQL】

需要注意的是,多表查询实际上是从若干表的笛卡尔积中操作的。多表的笛卡尔积指的是用其中一张表的一条记录去和剩余的整张表组合,以此类推。因此笛卡尔积保存了这些表记录的所有可能的集合,但是集合中的组合并不全是有意义的,而且不同表中也可能有相同的列属性(例如雇员表和工资表都有部门号),所以在合并多表时,需要要筛选符合逻辑的组合,并且合并相同的列属性。这两个操作符存在的意义是,有时需要查询的属性可能来自不同的表,但是不同的表之间没有很强的关联性,所以需要硬凑,不过硬凑也需要符合逻辑。

2024-03-10 18:48:56 1062

原创 内置函数【MySQL】

MySQL常用的日期和时间函数,字符串函数,数学函数,信息函数

2023-11-28 15:17:59 258

原创 表内容的操作(增删查改)【MySQL】

本文介绍了MySQL的增删查改的各种常用操作。

2023-11-20 23:16:15 715

原创 第3章:搜索与图论【AcWing】

(5w字)本文是图论算法的入门,介绍了图论的基础概念和两种存储方式,以及图论算法的几种经典算法:DFS、BFS、有向无环图的拓扑序列、最短路问题、最小生成树和二分图问题。

2023-11-14 23:28:35 1996

原创 表的约束【MySQL】

在数据库中,约束(constraint)指的是对表中数据的限制条件。数据是由数据库的操作人员(一般是程序员)插入到表中的,因此对表的数据做约束,确实也是一种对程序员的规范,要求他们在编写代码时遵循一定的逻辑和规则,以保证数据的质量和一致性。提高数据的安全性提高数据的可读性提高查询数据的效率因此约束不仅是对程序员的限制,也是对数据的保护和优化。通常在创建表时,会对列属性添加约束。

2023-10-27 19:40:27 458

原创 数据类型【MySQL】

本文介绍了MySQL 中常用的数据类型以及使用它们的注意事项。

2023-10-24 00:10:12 320

原创 表结构的操作【MySQL】

一般来说,对表的操作可以分为对表结构和对表内容的操作。本文介绍对表结构的操作,在学习 MySQL 的数据类型、表的约束以后,再学习表内容的增删查改。

2023-10-22 20:02:46 716

原创 库的操作【MySQL】

本文介绍了MySQL数据库的增删查改,阐述了字符集和校验规则的概念,演示了数据库的备份和恢复。

2023-10-22 01:11:07 591

原创 数据库基础(二)【MySQL】

本文介绍了MySQL的本质是一个网络服务器,以及MySQL的体系架构。

2023-10-22 01:06:14 174

原创 数据库基础(一)【MySQL】

本文介绍了数据库的安装和使用,以及从文件角度理解数据库的作用。

2023-10-22 00:57:07 411

原创 Reactor 模式网络服务器【I/O多路复用】(C++实现)

既然你开始了解 Reactor(反应器) 模式,说明你知道在实现服务端时,多线程只能处理少量的客户端请求,一旦数量增多,维护线程的成本会急剧上升,导致服务端性能下降。而 Reactor 模型就是为解决这个问题而诞生的。Reactor 模式是一种基于事件驱动的设计模式,它是 I/O 多路复用在设计模式层面上的体现。**将 I/O 事件的处理分为两个阶段:**事件分发阶段(Dispatcher)和事件处理阶段(Handler)。

2023-10-08 00:43:29 761

原创 I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)

I/O 多路复用(也叫多路转接)是一种解决方案,它可以让一个进程或线程同时监控多个文件描述符(通常是网络套接字),并在其中一个或多个文件描述符准备好进行 I/O 操作时(至少一个),通知应用程序进行相应的读写操作。这样,应用程序可以在等待数据的过程中执行其他任务,而不会被阻塞,从而提高了程序的性能和响应速度。I/O 多路复用的实现方式有多种,比如 select,poll,epoll 等,它们各有优缺点,具体的选择要根据应用场景和需求来决定。

2023-10-08 00:31:52 608 1

原创 高级 I/O【Linux】

下面以“流”(stream)和冯诺依曼体系架构的视角来简单回顾一下什么是 I/O:I/O可以理解为数据在计算机内部和外部之间的流动。在冯诺依曼体系架构中,程序和数据都是以二进制编码的形式存储在存储器中,CPU可以直接访问存储器中的任何位置,也可以通过输入设备和输出设备与外部世界进行数据交换。因此,I/O就是数据在存储器和输入输出设备之间的传输,或者说是数据在CPU和外部世界(即外设)之间的交换。

2023-10-07 23:50:57 235

原创 TCP 协议【传输层协议】

与 UDP 不同,TCP(Transmission Control Protocol)则“人如其名”,可以说是对“传输、发送、通信”进行“控制”的“协议”。TCP 与 UDP 的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。

2023-07-26 01:16:55 882

原创 UDP 协议【传输层协议】

本文介绍了UDP协议的特点及其报文格式,并且引入了缓冲区,为学习TCP协议打好基础。

2023-07-03 22:27:18 777 1

原创 HTTP 和 HTTPS 协议原理【网络基础】

本文介绍了HTTPS中是如何实现加密通信的。同时介绍了对称加密、非对称加密和混合加密三种加密机制,就SSL/TLS加密的思想进行了阐述。

2023-06-11 16:20:49 1356

原创 HTTP协议【网络基础/应用层】

本文介绍了TCP/IP基础、URL/URI的作用、HTTP协议的基础部分:方法、状态码、Header以及重要的会话管理。通过C++代码实现了一个简单的HTTP服务器,并使用浏览器作为客户端实验,这算是我目前觉得最神奇的一次实验了。

2023-06-10 15:21:27 1154

原创 认识协议【网络基础】

本文通过实现网络版的计算器,理解“协议”在网络传输的作用,并且对“守护进程”和“Json”进行了阐述。分别实现了守护进程版本和Json版本的网络计算器。

2023-06-04 17:41:46 1169

原创 守护进程【Linux】

每个进程组都有一个唯一的进程组ID,它等于该进程组中第一个进程的进程ID(PGID),以标识该进程组。值得注意的是,每一个shell都是不同的会话,在这里单独在一个shell运行进程,另一个用来打印信息,而作业运行的进程在同一个shell中运行才会使作业编号依次增加,也就是说,每一个shell窗口都对应着不同的作业。在这个窗口中创建的进程都是这个shell进程的子进程。这会确保父进程的父进程(即守护进程的祖父进程)在其子进程结束时会退出,保证了守护进程的父进程不再继续运行,而且守护进程不是首进程。

2023-06-03 21:11:03 1049

原创 第2章:数据结构【AcWing】

AcWing算法基础课第二章:数据结构。数组实现的链表、栈和队列、单调队列(滑动窗口)、KMP算法、字典树、并查集、堆和哈希表

2023-05-31 22:31:12 872

原创 网络编程:TCP socket

本文基于TCP协议实现了简单的回声服务器,并在此基础上应用线程,接入线程池(基于生产消费模型)实现了简单英译汉服务器。

2023-05-15 16:26:40 819 2

原创 网络编程:UDP socket

本文基于UDP协议实现了简单的回声服务器,并在此基础上应用线程实现了简单的群聊功能。

2023-05-02 17:17:52 2147

原创 网络基础:socket套接字

1. 前导知识1.1 源MAC地址和目的MAC地址1.2 源IP地址和目的IP地址1.3 MAC地址和IP地址的配合1.4 源端口号和目的端口号1.5 Socket1.6 UCP协议和TCP协议1.7 网络字节序高低位高低地址大端和小端网络字节序常用转换函数2. socket 网络编程2.1 socket 常见接口创建套接字绑定监听套接字接收请求建立连接2.2 常见套接字域间套接字原始套接字网络套接字2.3 sockaddr 结构体

2023-04-29 16:35:51 2571

原创 线程池【Linux】

1. 引入2. 应用3. 实现封装线程封装线程池线程函数生产消费逻辑互斥锁条件变量线程函数主线程测试14. 优化5. 日志日志的重要性实现日志级别提取参数stdarg.h 头文件日志文件懒汉实现单例模式什么是懒汉模式什么是单例模式实现

2023-04-26 22:47:25 875

原创 网络基础入门

1. 计算机网络的发展背景1.1 局域网(LAN)1.2 以太网的由来2. 认识网络协议2.1 什么是协议2.2 什么是网络协议2.3 如何管理协议协议栈3. 了解网络协议3.1 协议分层3.2 分层的作用模块化标准化3.3 分层对用户的影响3.4 常见的分层模型4. OSI 七层模型4.1 功能概述5. TCP/IP 四层/五层结构5.1 功能概述6. 网络传输基本流程6.1 同局域网通信6.2 通信的通路6.3 报头与有效载荷报头有效载荷6.4 传输的基

2023-04-26 00:27:49 1549 2

原创 信号量【Linux】

1. POSIX信号量1.1 引入1.2 概念1.3 PV原语(原理)1.4 相关接口2. 二进制信号量3. 基于环形队列的生产消费模式3.1 介绍3.2 为什么要使用环形队列3.3 环形队列的作用3.4 实现互斥和同步两个信号量框架生产和消费的逻辑完善环形队列1信号量完善环形队列2测试1

2023-04-24 23:58:37 515

原创 第1章:算法基础【AcWing】

AcWing算法基础课第一章:算法基础。快排、归并、二分、高精度、前缀和与差分、双指针、位运算、离散化

2023-04-22 20:24:05 1256

原创 生产者消费者模式【Linux】

当Blocking Queue已满时,生产者线程将会被阻塞;当Blocking Queue为空时,消费者线程将会被阻塞。图片来源于:https://math.hws.edu/eck/cs124/javanotes7/c12/producer-consumer.pngBlocking Queue 与普通队列的主要区别在于它具有阻塞功能。当管道中没有数据可读时,从管道中读取数据的操作将会被阻塞,直到有新的数据可用;当管道已满时,向管道中写入数据的操作将会被阻塞,直到管道中有空闲位置可用。

2023-04-17 00:50:47 1073

原创 线程同步与互斥【Linux】

本文介绍了同步与异步,互斥与并发,原子性操作,临界资源和临界区,互斥锁,可重入和线程安全,死锁,线程同步,条件变量......

2023-04-15 00:21:16 1154 2

原创 线程概念与控制【Linux】

线程在进程的内部执行,是操作系统调度和执行的基本单位。在 Linux 中线程也被称之为轻量级进程。在 Linux 内核中(注意是Linux),并没有线程的概念,它把所有的线程以统一的方式当做进程实现并管理。因此,Linux 内核中并未给进程单独提供特殊的系统调用,也没有为线程实现特定的内核数据结构,自然也就没有为线程提供单独的调度策略。在 Linux 操作系统中,线程与其他进程共享部分资源。

2023-04-07 07:00:00 344

原创 进程信号【Linux】

我们之所以能理解生活中各种各样的信号,是因为我们知道各种的信号背后蕴含的信息,这些各式各样的信号指导着世界运作。不同信号对应着不同动作的执行。在计算机中,信号是一种进程间通讯的有限制的方式。它们用于在进程之间传递信息或通知进程发生了某个事件的机制。例如在Linux中,信号是一种软件中断,它为Linux提供了一种处理异步事件的方法。例如,当终端用户输入Ctrl+C来中断程序时,它会通过信号机制使进程终止。所有信号都有它的来源,但最终都是被操作系统识别、解释并发送给进程的。

2023-04-02 19:40:19 441 2

原创 进程间通信【Linux】

匿名管道在系统中没有实名,它只是进程的一种资源,会随着进程的结束而被系统清除。它的通信范围是存在父子关系的进程。因为管道没有实体,也就是没有管道文件,只能通过 fork 来复制父进程fd文件描述符,来达到通信的目的。所以,刚才说的父子进程看到的同一份资源,就是管道本身。虽然共享内存是最快的进程间通信的方式,但是它也是有缺点的。临界资源:多个进程(执行流)看到的公共资源就是临界资源;临界区:进程中访问临界资源的代码段。

2023-03-22 23:24:45 1285 1

原创 动静态库【Linux】

在实践中,我们一定会使用别人的库(不限于C、C++的库),在实践中,我们会使用成熟、被广泛使用的第三方库,而不会花费很多时间自己造轮子,为了能更好地使用库,就要在学习阶段了解其本质。.i.s.o.o.exe.out库中有main函数吗?下面会告诉你答案:当有多个不同的源文件中的main函数调用这些功能函数时,每次都要重新对这几个函数重复预处理、编译、汇编操作,各自生成.o文件,然后再和调用功能函数的源文件(一般是main函数)生成的.o,最后才生成可执行程序。

2023-03-15 23:14:28 1005 3

空空如也

空空如也

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

TA关注的人

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