自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发内存池(四):Page Cache结构设计

本质就是将这一大块空间使用span管理起来。然后将span挂到对应的位置上即可。

2025-05-14 11:03:53 822 12

原创 高并发内存池(三):TLS无锁访问以及Central Cache结构设计

在上篇文章中,我们完成了thread chche整体结构的设计。以及项目的整体框架也已经有所了解了。对于该项目,高并发内存池:主要分为三层结构,thread cache,Central Cache以及Page Cache。对于 thread cache,每个线程独享一个thread cache,申请资源时,优先找对应的thread cache,其中涉及到内存对齐规则的映射。TLS线程局部存储,单例模式,慢开始反馈调节算法。

2025-05-12 18:07:22 1377 32

原创 【Linux网络编程】HTTPS协议原理

加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文,经过一系列的变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间数据,来辅助这一过程的完成,这样的数据称作密钥。2,为什么需要加密?如果使用HTTP协议,不对传输的数据进行加密,由于我们通过网络传输的数据都会经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改了。

2025-05-12 08:00:09 801 27

原创 高并发内存池(二):项目的整体框架以及Thread_Cache的结构设计

现代很多的开发环境都是多核多线程,在申请内存的场景下,必然存在激烈的锁竞争问题。前面也已经提到过,malloc本身就是一种内存池,malloc申请内存资源的方式已经很优秀了。而这个项目的原型tcmalloc就是在高并发场景下更胜一筹。所以我们的项目主要处理的是在多线程下申请内存资源,我们的线程池需要考虑几个问题:性能问题多线程环境下,锁竞争问题。内存碎片问题而malloc也是一个内存池,它解决的问题就是1和3,他不考虑在多线程环境下锁的竞争问题。

2025-05-09 15:35:51 1092 33

原创 高并发内存池(一):项目简介+定长内存池的实现

这个项目是实现一个高并发的内存池。它的原型是google的一个开源醒目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的线程内存管理,用于替代系统的相关内存分配函数(malloc,free)。这个项目是对tcmalloc的一个简化版,是对tcmalloc的学习,实现一个我们自己的高并发内存池。在该项目中涉及到的C++知识包括数据结构(链表,哈希桶),操作系统内存管理,单例模式,多线程 以及互斥锁等等。

2025-05-07 23:29:07 1052 26

原创 【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session

GET方法:获取静态资源或者网页提交参数,以uri形式提交GET提交参数一般不建议太长,因为uri长度是有限的GET传参,参数是会显示出来的。POST方法:提交参数,以正文部分参数参数不会回显,相对私密不管是GET还是POST,都是明文传送,可以抓取,是不安全的。要做到真正的安全,必须要把报文进行加密,就要用到https协议。是用来负责会话管理与会话保持的。是HTTP的附加功能,不严格属于HTTP。

2025-05-02 16:25:42 1064 36

原创 【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)

虽然说,应用层协议是需要我们程序猿自己定的。但是实际上,已经有大佬们定义了一些现成的,非常好用的应用层协议,供我们直接使用。HTTP(超文本传输协议 )就是其中之一。在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或传输超文本(如HTML)。

2025-04-25 20:22:20 1505 37

原创 美团2024年春招第一场笔试 C++

如果我们开始将所有节点都初始化好,那么就会超出内存限制,那么就和使用vector一样了,甚至占用的内存比vector还要大,所以我们不能一次性就初始还所有节点。但是对于op=1删除朋友关系操作,比较困难,因为并查集擅于进行 添加关系操作的,不好处理删除节点关系。这也就是map不会超出内存限制而vector会超出内存限制的原因。统计元字符中 有多少个M和T,再加上最多可以修改 多少个即可。所以在删除朋友关系这里出现了问题。

2025-04-21 20:35:29 1060 32

原创 贪心算法学习C++

题目连接:45. 跳跃游戏 II - 力扣(LeetCode)【题目描述】在给定的一个nums数组中,nums[i]表示从当前i位置最多可以向后跳跃nums[i]个位置。问跳跃到最后 数组最后一个元素的最少跳跃次数???【贪心】nums=[2,3,1,1,4,2,6,7,1]。还是以这个数组为例。第一次的起跳位置是数组下标为0的位置。经过一次跳跃之后,可以到达3或者1,此时的位置是第二次起跳位置,也就是说第二次起跳的位置是3或者1。同理,假设3为第二次起跳的位置 ,那么可以到达【1,1,4】,假设1为第二次

2025-04-16 18:37:16 1406 34

原创 【Linux网络编程】TCP Echo Server的实现

这次的echo server代码的编写,我遇到的问题是客户端代码运行到connect就停止了,也就是创建完套接字就阻塞住了,没有执行 建立连接以及后序的代码。找了半天才发现是服务器端的端口号初始化时出现了问题,裂开!!!

2025-04-14 21:00:20 1097 35

原创 【Linux网络编程】UDP Echo Server的实现

IP地址+端口号。

2025-04-10 12:52:45 1577 31

原创 单调栈学习C++

单调递增或者递减。

2025-04-06 23:59:15 1051 16

原创 【Rust学习】Rust数据类型,函数,条件语句,循环

println!("x 的值为 : {}", x);println!("y 的值为 : {}", y);

2025-04-05 14:01:04 1178 7

原创 【Rust学习】Rust环境搭建和Rust基础语法

rustup-init.exe 是 Rust 的安装和管理工具,默认情况下,它会同时安装这些工具:rustc,rust-std,cargo,rust-docs,rustfmt,clippy。其中,rustc 是 Rust 的编译工具,cargo 是 Rust 的包管理工具。使用这两个函数打印信息的时候,第一个参数是格式字符串,后面一串是可变参数,在C语言printf中"%+字母"表示占位符,而在Rust中,使用'{ }'可以使用相同名字声明新的变量,新的变量就会隐藏(shadow)之前的同名变量。

2025-04-05 11:06:28 1266 26

原创 【Linux系统编程】进程概念,进程状态

以scanf为例,当执行scanf从键盘读取数据时,未输入数据时,操作系统会将当前进程的task_struct从调度队列中移除,放入设备的阻塞队列中,此时,该进程就处于阻塞状态。每个进程可能会存在不同的状态,有的进程正在运行,有的进程正在被调度,有的进程处于挂起等等。CPU要执行这些进程,这些进程的task_struct中会保存指向代码和数据的指针。系统调用在使用上,功能比较基础,对用户的要求相对较高,所以,有心的开发者会对部分系统调用做封装,从而形成库,有了库,就很方便上层用户和开发者进行二次开发。

2025-04-04 17:21:56 1162 18

原创 动态规划学习——回文子串系列问题【C++】

题目链接:LCR 020. 回文子串 - 力扣(LeetCode) 【问题描述】求一个字符串中有多少个回文子串,其中一个字符也算是一个回文子串。【解法】动态规划求一个字符串中回文子串的个数,我么可以找到每个回文子串,然后统计个数即可。初始化dp表时,根据状态表示的定义,我们只会用到dp表主对角线的右上部分,左下部分不会用到,对于状态转移dp[i][j]=dp[i+1][j-1],我们不需要考虑越界的问题,因为前两种情况已经做了判断。 最后,只需统计dp表中dp[i][j]==true的数量即可。【代码】

2025-04-02 21:12:37 1394 25

原创 动态规划学习——背包问题

题目链接:P1060 [NOIP 2006 普及组] 开心的金明 - 洛谷 本题是一道经典的01背包问题,状态表示和状态定义可以仿照01背包的来。dp[i][j]表示从前i个物品中选,总价值不超过n,并且使得每件物品的价格与重要度的乘积的总和最大。【代码】二,金明的预算方案题目链接:P1064 [NOIP 2006 提高组] 金明的预算方案 - 洛谷本题在上题的基础上,增加了一个限制,选择一个物品,这个物品可能是某个物品的附属品,在选该物品时,必须先买主件。且每个主件最多包含两个附件。然后继续按照

2025-03-31 22:04:31 1517 9

原创 【MySQL篇】事务管理,事务的特性及深入理解隔离级别

先思考一个场景,在一个火车票购票系统中,西安到郑州的火车票只剩下一张,两个用户进行买票,可以想象成这两个用户对表中数据进行CURD,而如果这些CURD不加控制,会不会出现问题?当客户端A检查到还有一张票时,将票卖掉,还没有 执行更新数据库的语句时,客户端B检查了票数,发现大于0,于是又买了一次票。然后 A将票数更新回数据库。这就出现了同一张票被买了2次的问题。为了解决上述的问题,就需要CURD操作满足 如下的属性:1,买票的过程需要是原子的2,买票之间不能互相影响。

2025-03-29 17:05:42 973 22

原创 买卖股票的最佳时机问题 C++

【题目描述】有一个价格数组prices,表示第i天的股票价格为prices[i],整个过程只能买入股票和卖出股票一次。并且买入股票必须再卖出股票之前。 【思路】贪心我们可以遍历一次数组,遍历到prices[i],表示在第i天卖出股票,为了使利益最大,我们需要在前i-1天中选择股票价格最低的一天买入。可以使用一个变量leftMin来记录前i-1天中,股票最低的价格。那么此时的最大利益就是prices[i]-leftMin。动态规划dp[n][2]:dp[i][0]表示第i天未持有股票的最大利益,dp[i

2025-03-28 21:26:27 904 6

原创 矩阵中对角线的遍历问题【C++】

对角线的遍历(主对角线):对于一个m*n的矩阵。在同一条对角线上的元素,行号i减去列号j是一个定值。k=i-j+n;k的值从1开始到m+n-1。就是主对角线从右上角对角线开始,一直到左下角对角线。遍历对角线时,我们只需求出j的范围即可,i=k+j-n。但需要注意j不能小于0,也不能超出数组的范围。然后就可以对这条对角线进行操作了。

2025-03-26 21:26:16 1278 15

原创 【MySQL篇】索引特性,索引的工作原理以及索引的创建与管理

对于一个page目录,它的大小是16KB,假设忽略掉前后指针,该page只存储一个数据和对应的指针,在64位环境下,16*1024/(4+8)=1365。通过“先描述,再组织”。在单表数据不断被插入 的情况下,MySQL会在容量不足的时候,自动开辟新的page来保存新的数据,然偶通过指针的方式马,将所有page组织起来。但是查询速度的提高,同时是以插入,更新,和删除的速度为代价的,这些写操作,增加了大量的IO。MySQL的CURD操作,都是需要计算的,找到对应的插入位置,找到对应要修改或者查询的数据。

2025-03-22 19:19:36 1153 23

原创 LeetCode.2612最少翻转次数C++

假设下标i经过一次翻转后的下标为j,这个下标j肯定不是一个特定的下标,它代表翻转后的所有可能的下标。i>n-k的情况,当子数组在整个数组的最右边时,L=n-k,R=n-1。翻转后的下标为j=L+R-i=2*n-k-i-1。例如 对于k=4,长度为4的子数组,右端点最小是k-1=3,当i=0,1,2,i不可能是数组的右端点;i<k-1的情况,当子数组在整个数组的最左边时,L=0,R=k-1。i位置经过一次翻转后的下标为j,将i和j看成是用一条边连接,这条边的边权为1,代表翻转次数。也可以右移L-1,R-1。

2025-03-21 13:45:38 981 2

原创 【算法学习】最小公倍数问题

公式推导。处理零的情况如果任一数为零,直接返回 0(因为零和任何数的 LCM 是零)。防止整数溢出将a * b转换为long long类型,避免乘法溢出(例如a = 1e9b = 1e9处理负数使用std::abs保证计算的数值为正,避免符号干扰。2,辗转相减法若a>b,则a=a-b(大的数减去小的数)若a=b,则a或b就是最大公约数如求35和14的两个最小公倍数:35-14=21;21-14=7;此时7小于14,要做一次交换14-7=7;7-7=0;

2025-03-20 12:42:14 981 3

原创 【MySQL篇】复合查询

基于上篇MySQL基本查询,基本上都是对一张表进行查询。【MySQL篇】MySQL基本查询详解-CSDN博客复合查询是处理复杂业务逻辑的核心技能 ,本篇涵盖多表查询,子查询和合并查询等复杂场景。

2025-03-19 16:19:07 921 16

原创 元音辅音字符串计数leetcode3305,3306

暴力解法的思路,我们每次在用两个变量来枚举[i,j]这个子串时,统计完后,i++,j还要再返回i的位置,重新遍历,所以时间复杂度太高, 为O(N^2)。其中可以使用set集合判断子串中是否每个元音字母都出现,用一个变量count来统计辅音字母的出现次数。该思路,只能通过第一题, 第二题的数据范围大,会超时。暴力枚举出所有子字符串 ,统计所有满足。

2025-03-15 16:02:30 550 7

原创 【MySQL篇】MySQL内置函数

插入数据。

2025-03-12 17:49:28 6135 16

原创 【MySQL篇】基本查询实战OJ

distinct去重+order by 排序。group by子句及聚合函数。group by子句+聚合函数。

2025-03-12 15:43:37 326 2

原创 【MySQL篇】MySQL基本查询详解

where chinese>80 and name not like '孙%';

2025-03-11 12:34:32 5833 10

原创 leetcode2070. 每一个查询的最大美丽值

看完本题,可以想到的思路是对于每一个查询queries[j],去遍历items数组,找到所有满足items[i][0]小于queries[j]的部分,再比较求出最大的items[i][1]即可。对于每一次的查询,最坏情况下每次需要遍历items数组一遍,时间复杂度太高,需要优化查询。

2025-03-10 23:58:35 320 2

原创 k倍区间 | 哈希 分巧克力 | 二分 青蛙跳杯子 | BFS

求有多少个连续区间满足,所有数字的和模k=0,也就是k的倍数。

2025-03-09 23:27:44 362 3

原创 可被3整除的最大和 || 贪心,动态规划

初始化时f[0][0]=0,表示没选任何数字,初始化为0,f[0][1]=f[0][2]=INT_MIN,无意义,为了不影响计算。初始化为无穷小。

2025-03-08 10:36:40 495 1

原创 【MySQL篇】表的约束

在MySQL中,表的约束用于强制保证数据的完整性和一致性。在数据库表中,真正约束字段的是数据类型CSDN但是数据类型的约束很单一,所以需要一些额外的约束,来保证数据的完整性和正确性。

2025-03-06 13:32:51 916 15

原创 【动态规划学习】区间dp

区间dp,就是在一段区间上进行动态规划,求解一段区间的最优解。最后合并小区间上的最优解从而得到全局最优解的算法。【问题引入】

2025-03-03 10:51:30 1268 12

原创 【MySQL篇】数据类型

unsigned。

2025-03-01 18:45:15 1612 18

原创 【MySQL篇】表的操作

不同的存储引擎,创建表的文件不一样。

2025-02-26 16:21:00 405 1

原创 【MySQL篇】MySQL操作库

在我们创建一个数据库后,在linux下,就是在var/lib/mysql路径下创建一个目录,在该目录下,有一个文件db.opt,该文件有该数据库采用的字符集和校验规则。时,系统使用默认字符集utf8,校验规则是utf8_general_ci。创建一个数据库,使用utf8_general_ci校验规则不区分大小写。创建一个数据库,使用utf8_bin校验规则不区分大小写。对数据库的修改主要 指的是修改数据库的。创建数据库,在lunix层面就是在。说明:当我们创建数据库没有指明。路径下创建一个目录。

2025-02-25 11:48:51 979 11

原创 【算法与数据结构】Dijkstra算法求单源最短路径问题

Dijkstra算法,是用来算出图中一个顶点到其余各顶点的最短路径。适合于解决带权的有向图中的单源最短路径问题。

2025-02-24 23:06:15 1004 6

原创 【MySQL篇】数据库基础

数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库管理系统(DBMS)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。常见的数据库管理系统有MySQL、SQL Server、Oracle等。存储数据用文件就可以了,为什么还要弄个数据库?一般的文件确实提供了数据的存储功能,但是没有提供非常好的数据管理能力。

2025-02-23 19:23:14 2765 2

原创 【算法与数据结构】单调队列

是一种特殊的队列,队列中的元素按严格递增或者递减排列。这样就可以保证队头元素始终是最大值或者最小值。【问题引入】有一个数组,长度为n,给你一个区间[left,right],求出该区间内的最小值或者最大值。我们如果进行普通的遍历,最坏的情况下时间复杂度是O(N),遍历整个数组。而我们如果用单调队列来维护这段区间,始终保持队列的单调性,就可以在O(1)的时间内找到该区间的最大值或者最小值,就是。【结论】

2025-02-22 16:45:11 1079 16

原创 【算法与数据结构】字典树(Trie)详解

字典树通过。

2025-02-18 20:45:23 1218 14

空空如也

空空如也

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

TA关注的人

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