自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux网络编程】数据链路层

如上图,主机A在 向主机B发送数据的时候,是需要将数据进行一层一层的封装,向下交付,到达网络层,需要封装IP报头,其中包含源IP地址和目标主机的IP地址。否则需要对数据包进行分片(fragmentation),这个工作是在网络层完成的,网络层的IP协议中的16位标识,3位标志,13位片偏移可以实现数据包的分片和组装工作。即包含了数据链路层的内容,也包含了一些物理层的内容。但是现在的问题是,当前的两台主机只能知道对方的IP地址,不知道对方的MAC地址,需要进行通信,必须 要先获取到对方的MAC地址。

2025-06-01 20:44:18 1012 29

原创 【Linux网络编程】网络层IP协议

因此, 除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。在复杂的网络结构中,找出一条通往终点的路线;4位首部长度:表名IP协议报头的长度,单位是4字节,所以IP协议报头的最大长度是15*4=60字节。包含在这个范围中的,都称为私有 IP,其余的则称为全局 IP(或公网 IP)。

2025-06-01 15:34:34 1148 7

原创 【Linux网络编程】传输层协议TCP,UDP

客户端调用connect发起三次握手,向服务器发起建立连接的请求。而服务器端通过listen将自己设置为监听状态。本质上,connect是发起三次握手,但是不参与三次握手的。服务器端通过accept获取底层建立好的连接,也不参与三次握手。

2025-05-29 11:27:19 1316 28

原创 【数据库课程设计】网上投票管理系统

开发环境:SQL Server 2022,Qt Creator 4.11.1 (Community)屏幕录制 2025-05-20 183909(1)应用系统背景随着互联网技术的发展,传统线下投票方式(如纸质投票、会议举手表决等)逐渐暴露出效率低、成本高、统计复杂、安全性差等问题。网上投票管理系统旨在通过数字化手段实现投票流程的自动化,支持多场景投票需求(如企业决策、校园活动、社会调研等),提供高效、安全、透明的投票服务。系统目标提高投票效率和准确性,减少人工统计错误;

2025-05-20 19:04:19 1117 39

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

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

2025-05-14 11:03:53 886 19

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

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

2025-05-12 18:07:22 1442 37

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

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

2025-05-12 08:00:09 845 29

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

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

2025-05-09 15:35:51 1128 34

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

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

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

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

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

2025-05-02 16:25:42 1118 37

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

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

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

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

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

2025-04-21 20:35:29 1147 34

原创 贪心算法学习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 1440 34

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

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

2025-04-14 21:00:20 1160 37

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

IP地址+端口号。

2025-04-10 12:52:45 1692 34

原创 单调栈学习C++

单调递增或者递减。

2025-04-06 23:59:15 1072 17

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

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

2025-04-05 14:01:04 1204 9

原创 【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 1387 32

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

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

2025-04-04 17:21:56 1183 20

原创 动态规划学习——回文子串系列问题【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 1432 26

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

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

2025-03-31 22:04:31 1565 11

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

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

2025-03-29 17:05:42 1011 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 977 9

原创 矩阵中对角线的遍历问题【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 1324 15

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

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

2025-03-22 19:19:36 1172 24

原创 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 991 3

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

公式推导。处理零的情况如果任一数为零,直接返回 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 1037 3

原创 【MySQL篇】复合查询

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

2025-03-19 16:19:07 941 17

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

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

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

原创 【MySQL篇】MySQL内置函数

插入数据。

2025-03-12 17:49:28 6156 17

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

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

2025-03-12 15:43:37 335 3

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

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

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

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

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

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

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

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

2025-03-09 23:27:44 373 4

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

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

2025-03-08 10:36:40 509 3

原创 【MySQL篇】表的约束

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

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

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

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

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

原创 【MySQL篇】数据类型

unsigned。

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

原创 【MySQL篇】表的操作

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

2025-02-26 16:21:00 427 2

原创 【MySQL篇】MySQL操作库

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

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

空空如也

空空如也

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

TA关注的人

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