自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-03-10 19:37:56 1940

原创 【C++笔试强训】day05

由递归进行的子问题分析可以知道:忽略环形链表的下标,可以认为它的任意一个节点都是起点和终点的交界处。对于第i个人,认为它上一个人的编号是链表的起点,那么上一个人的编号+报数,就是第i个人的编号。经典的约瑟夫问题可以通过递归或迭代的方式来解决,并且时间复杂度为 O(n),空间复杂度为 O(1)。每个腐烂的苹果每分钟会将相邻的苹果腐烂,类似于层层扩散的波浪,因此 BFS 是非常适合的。由于填充DP数组是一个根据上一个结果来推出现在的结果的过程,而旧状态只被使用一次,所以我们不需要用数组保留原先的旧状态。

2024-07-26 18:24:46 1077

原创 【C++笔试强训】day04

如果要优化的话,可以用二分找到第一个不小于 n 的元素的位置,比较 n 与这个元素及其前一个元素的差值,找到最小的差值。由于第i个数只依赖前两个数,所以只需要3个变量就可以迭代地计算,打一个斐波那契数的表,然后再查表。注意要遍历棋盘的每一个单元格作为起始点。

2024-07-26 18:22:11 396

原创 【C++笔试强训】day03

用sum维护窗口中的元素之和,i枚举左区间,j枚举右区间,j遍历过的元素都累加到sum中(加入到窗口),i遍历过的元素都从sum中剔除(移出窗口);用len维护一个满足窗口内元素之和大于等于x的最小区间的长度,一旦发现有更小的窗口长度,那就将窗口区间的下标保存在l和r中,最后打印。每轮取出最大的偶数,然后将其减半后的值从sum减去,如果它也是偶数,那么继续加到堆中,直到堆中没有元素或者k等于0时,打印sum。遍历字符串s的同时,如果遇到了空格,就把空格后面的字符(转大写)加到t中。

2024-07-26 18:20:19 366

原创 【C++笔试强训】day02

爬楼梯问题是一个典型的具有重叠子问题的模型,自上而下地思考,将大问题转化为规模更小的子问题,对于任意第i阶,它可能是从i-1爬上来的,也可能是从i-2爬上来的,由于本题是要求总的最低花费,所以选择花费最小的那个。用数组统计并保存str1和str2在strs中出现的下标x和y。然后枚举所有可能的x和y的组合,得到一个最小差值。起步价20,注意超出的费用要向上取整,最后再根据是否加急外付5元。将记忆化搜索翻译成递推。

2024-07-26 18:18:52 316

原创 【C++笔试强训】day01

首先将两个数组去重,然后把第一个数组的元素加到哈希表中。遍历第二个数组,如果在哈希表中已经存在,那就加到返回值中。用%10取出个位的数字,用/10迭代。

2024-07-26 18:17:09 449

原创 索引【MySQL】

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

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

原创 视图【MySQL】

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

2024-03-10 19:12:12 810

原创 C语言连接【MySQL】

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

2024-03-10 19:04:12 1095

原创 事务【MySQL】

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

2024-03-10 19:03:01 1066

原创 用户管理【MySQL】

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

2024-03-10 19:01:05 727

原创 表的连接【MySQL】

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

2024-03-10 18:53:58 1767

原创 复合查询【MySQL】

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

2024-03-10 18:48:56 1087

原创 内置函数【MySQL】

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

2023-11-28 15:17:59 309

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

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

2023-11-20 23:16:15 748

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

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

2023-11-14 23:28:35 2109

原创 表的约束【MySQL】

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

2023-10-27 19:40:27 517

原创 数据类型【MySQL】

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

2023-10-24 00:10:12 471

原创 表结构的操作【MySQL】

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

2023-10-22 20:02:46 761

原创 库的操作【MySQL】

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

2023-10-22 01:11:07 801

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

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

2023-10-22 01:06:14 206

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

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

2023-10-22 00:57:07 498

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

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

2023-10-08 00:43:29 1175

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

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

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

原创 高级 I/O【Linux】

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

2023-10-07 23:50:57 313

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

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

2023-07-26 01:16:55 1545

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

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

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

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

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

2023-06-11 16:20:49 1472

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

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

2023-06-10 15:21:27 1211

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

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

2023-06-04 17:41:46 1338

原创 守护进程【Linux】

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

2023-06-03 21:11:03 1170

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

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

2023-05-31 22:31:12 942

原创 网络编程:TCP socket

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

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

原创 网络编程:UDP socket

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

2023-05-02 17:17:52 2605

原创 网络基础: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 3153

原创 线程池【Linux】

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

2023-04-26 22:47:25 1033

原创 网络基础入门

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 1673 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 606

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

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

2023-04-22 20:24:05 1309

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

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

2023-04-17 00:50:47 1422

空空如也

空空如也

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

TA关注的人

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