- 博客(131)
- 收藏
- 关注
原创 手撕线程池
因为编译器解析函数声明时是从左到右的,获取返回值的类型std::future<std::invoke_result_t<F, Args...>> 但F Args..的类型必须等参数传入后,才能确认。1.实现要解决 传入的函数F的返回值类型是什么。和单队列不同的地方是,Pop()工作线程获取任务时 如果没有任务,不会阻塞在Pop()而是会进行Swap()交换队列(生产者队列有数据或者非阻塞)循环处理队列中的任务,通过Pop()获取任务 输出型参数task带回任务,没有任务就回阻塞在Pop()函数中。
2025-06-24 19:54:25
811
原创 C++ Json-Rpc框架 项目逻辑设计
对内提供好rpc服务的路由关系管理map<method,服务描述对象>,以及rpc请求消息的分发处理函数。给Dispatcher提供onRpcRequest rpc请求的回调函数,根据请求中的method(),从map中找到对应的服务描述对象 进行参数检查,无误调用函数处理 最后向服务端返回应答。
2025-06-15 17:09:52
951
原创 三.Gitee远程操作&&标签操作
我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢?
2025-06-11 14:01:34
1139
1
原创 二.Gitee分支管理
这样master分支上就不会触发合并冲突。下面我们实际操作一下:1.先切到dev1 新增file文件内容表示 正在开发codeing...2.这时候发现Bug 需要新建并切换到新分支上 处理Bug,但我们新开发的内容并不想提交怎么办?
2025-06-10 18:04:20
1064
1
原创 14.MySQL用C语言连接
为后续连接数据库做准备。nullptrNULLMYSQL你也可以传一个已存在的MYSQL*指针,但这较少用,主要用于多连接复用。返回值:成功:返回一个初始化后的MYSQL*指针(你之后要用这个指针连接、操作数据库)。nullptr相当于文件描述符*FILE。
2025-06-09 09:15:00
1061
原创 13.MySQL用户管理
在mysql库中的user表中所有用户信息保存在系统库mysql.user表中。host:表示用户可以从哪些主机登录(如表示只能从本机登录)。user:用户名。:加密后的密码。*_priv:各项权限字段。
2025-06-08 09:00:00
1385
原创 11.MySQL事务管理
事务(Transaction)是指一组具有逻辑关联的操作集合,这些操作要么全部成功,要么全部失败,视为一个不可分割的整体。转账时的“扣款 + 入账”就构成了一个事务,不可能说只完成扣款 而没有进行入账,这种情况是不合理的。在 MySQL 中,一个事务通常由多条 DML(增删改)语句组成,只有使用 InnoDB 存储引擎的表才支持事务机制事务具有ACID原子性(Atomicity):不可分割,要么全部执行成功,要么全部不执行。一致性(Consistency):事务执行前后,数据库处于一致状态。
2025-06-06 14:22:19
801
原创 十.MySQL索引特性
从上面的Page内数据记录可以看出,数据是有序且彼此关联的。当我们想访问id=1000的行数据时,必须要按照链表的顺序遍历找到找到id=1000的行。但这样效率太低了。
2025-06-05 09:54:00
579
原创 九.表的内外连接
内连接是最常见的连接方式,返回的是两表中“匹配”的记录,即满足连接条件的部分。可以看到员工表中部门只有3种 而部门表有4种,说明一个部门中一个人也没有。本质是从两表的笛卡尔积中筛选出符合 ON 或 WHERE 条件的记录。外连接用于保留主表中所有记录,即使在连接表中没有匹配的记录。下面有两张表,1.EMP员工表 2.部门表DEPT。eg.查询所有部门的员工,没有员工的部门也显示出来。左外连接 = 左表全部 + 匹配部分。右外连接 = 右表全部 + 匹配部分。外连接分为左外连接和右外连接。
2025-06-04 10:00:00
413
原创 八.MySQL复合查询
count(*)sum(sal)avg(sal)max(sal)min(sal)1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J2.按照部门号升序而雇员的工资降序排序3.使用年薪进行降序排序年薪=sal*12+comm comm有的为NULL,任何值加上NULL都为NULL 但我们运算时遇到NULL要把他视为0select ename,sal*12+ifnull(comm,0) 年薪 from emp order by 年薪 desc;
2025-06-03 14:59:34
870
原创 七.MySQL内置函数
向下取整 [0,1)=0 [1,2)=1 ... [99,100)=99 [100,101)=100。ceiling(rand()*100)rand()生成[0,1)之间是随机数,想生成其它范围的数字呢?1.substring 把首字母 和 其它字母分开。6.conv(值,原进制,目标进制)2.ceiling()向上取整。能出现[0,100]的数字,md5()把里面字符串加密成。3.floor()向下取整。4.hex()转16进制。的新字符串,这个新字符串。5.bin()转二进制。1.abs()绝对值。
2025-06-01 15:30:00
1012
原创 五.MySQL表的约束
两个值:null(默认的)和not null(不为空)元素可以分为两类1.not null 不能为空的,这种没有默认default 要手动设定,我们必须插入数据而且不能为NULL。但我们插入数据有两种方式 1.直接输入值 2.不输入用缺省值填入 当然缺省值不能为NULL。2.另一种可以为null 这种default 缺省值默认为NULL. 也就是说不输入也可以自动用缺省值 直接输入值当然NULL也可以。
2025-05-30 08:00:00
620
原创 四.MySQL数据类型
TINYINTSMALLINTMEDIUMINTINTBIGINTnum字段 数据类型为tinyint 范围-128~127。
2025-05-29 11:30:00
1865
原创 二.MySQL库的操作
utf8可以存储包括中文在内的多种语言字符,gbk更适合中文字符环境。utf8latin1utf8utf8mb4不同的校验规则可能决定是否。:ci 表示utf8mb4_bin:bin 表示使用。
2025-05-27 11:30:00
843
原创 手撕string类
1.string类的成员变量 1指针指向申请的空间 2.size字符串长度 3.capacity字符串容量 注意 申请的空间=capacity容量+1 1是留给 \0 2.STL中的string 字符串长度<=15 在栈上申请空间 >15才会在堆上申请空间。但我们统一在堆上申请空间。3.要实现的函数 1.构造函数: 1.默认构造 2.带参构造 (有两种 1.C风格字符串构造 带\0结尾 2.二进制字符串构造 不带\0传入size大小 划定界限) 3.拷
2025-05-25 12:00:00
791
原创 性能测试工具JMeter
符号含义匹配示例\d匹配任意一个数字(0–9)\d→ 匹配0到9中任一位\D匹配任意一个非数字字符Ab等都能匹配\s匹配任意一个空白字符(空格、制表符、换行)\t\n等\S匹配任意一个非空白字符所有除了空格/换行/制表符的字符\w匹配字母、数字、下划线(等价于abc123_\W匹配非字母、数字、下划线比如空格匹配任意一个字符(除了换行)如a.c→abcaxc指标名称关注重点异常表现可能原因优化建议🔹响应时间单请求耗时、平均响应趋势- 响应时间长- 抖动大- 超过SLA。
2025-05-24 15:02:34
1132
原创 性能测试简单概念
类型主要目标关键指标或场景基准测试获取单用户下系统性能基线响应时间、资源占用等并发测试验证并发下的响应与稳定性响应时间、锁、内存问题负载测试找出性能达标下的最大负载能力最大用户数、TPS/QPS等压力测试找到系统性能极限或拐点崩溃点、错误率、超时稳定性测试检测长时间运行下的可靠性是否资源泄漏、服务挂掉测试类型通俗解释举个例子基准测试看看系统在轻松状态下的表现,打个“基础分”。就像测一个人静息状态下的心跳和血压,为以后运动测试做准备。并发测试。
2025-05-23 12:30:00
333
原创 对Web界面进行简单自动化测试Selenium
一个文件夹存储图片 为了分区哪天运行的,一天创建一个文件夹直接命名为当地时间,截图命名要明确 哪个函数 什么时候创建的,函数名+当地时间。此时还要上次输入的关键词,先clear清除 再进行输入。1.先正常登录 找到元素.send_keys填写关键词 .click点击登录 assert判断有没有登录成功。因为要在登录完成后的界面,继续进行操作 先back()后退到上一个登录界面。先获取公共的dirver,get传入url打开网页,进行测试。测试完登录界面后面继续测试首页(登录状态),怎么搞?
2025-05-22 20:40:54
432
原创 二叉树遍历--(前 中 后 层序)
前序遍历顺序 先访问根节点再左子树 最后右子树根->左->右1.先定义一个栈,栈是先进后出。每新进一个节点,先输出值 再把它的左右孩子压入到栈中。先压入哪个孩子?先压右孩子 再压左孩子。这样出栈时先出左孩子 符合根->左->右顺序。
2025-05-20 15:00:00
430
原创 测试--测试分类 (白盒 黑盒 单元 集成)
可以设计更有针对性的用例,如模拟接口调用、Mock 数据。不需要深入所有源代码,但会参考接口文档、中间模块结构。✅ 不考虑程序内部实现,重点在于输入与输出是否。较全面,适用于复杂系统间数据流/状态流的验证。无法覆盖具体逻辑路径,可能遗漏内部缺陷。能提高代码质量,及时发现隐藏逻辑问题。进行测试,关注“怎么实现的”。(冒烟测活着没,回归测改坏没)能从用户角度检验功能是否正常。不需要读代码,只需理解需求。关注每条路径是否被测试到。✅ 结合黑盒和白盒测试,:验证核心功能是否正常;:确保修改不引入新Bug。
2025-05-18 16:10:09
840
原创 测试--测试用例(设计测试⽤例的⽅法 http格式)
编号方法名核心思想最适合的场景记忆口诀1等价类划分有效 + 无效数据代表全体表单输入、接口参数验证(输入值可分类的场景)一类选一个,代表全体2边界值分析边界最容易出错年龄/金额/数量/长度/时间等上下限敏感的输入字段边界有坑,必测上下3正交法参数组合最小化测试多配置、多参数组合(如浏览器×操作系统×网络等)组合太多,用表挑对4判定表法条件+动作=逻辑关系矩阵复杂业务规则判断(如发券、权限、价格计算、审批)逻辑复杂,全表搞定5场景法按用户行为路径设计步骤链。
2025-05-16 16:44:48
1092
原创 测试--开发模型 测试模型
Scrum 是敏捷开发(Agile)的核心实践之一,是一种迭代式增量软件开发模型,强调小步快跑、快速反馈、持续改进。Scrum 的三大核心角色角色职责Product Owner(产品负责人)管理产品需求,撰写并维护用户故事(User Story);进行价值排序,制定产品发布计划。Scrum Master(敏捷教练/项目协调员)组织会议,消除障碍,保障 Scrum 流程有效执行,为团队服务。开发团队(Team)跨职能团队,通常由 5~9 人组成,负责具体的开发、测试、设计等任务,完成每个迭代目标。
2025-05-14 15:55:14
695
原创 一.Gitee基本操作
git diff 是 Git 中用于查看代码变更内容的命令,帮你对比不同版本、文件或状态的具体修改细节(逐行对比)。因为已经commit提交到版本库了,log已经记录当前版本ID HEAD指向当前版本,撤销就是要回到上一个版本。带上 --hard就是连带工作区的代码也进行修改 但不能但只对一个文件进行操作,会把所有文件进行修改。git reset +要回退到的版本的提交ID (默认选项--mixed 版本库+暂存库都会回退)git reset 回退版本(会更改提交历史) 用于本地撤回提交、修改。
2025-05-12 21:49:17
1783
1
原创 C++ 基于多设计模式下的同步&异步⽇志系统-2项目实现
模块功能Logger类日志器,统一管理日志级别、格式化器、输出目的地Formatter类日志消息格式化(支持自定义格式)Sink类日志落地(支持stdout/file等多种输出)Builder模式统一构建日志器(配置LoggerName、LoggerType、Formatter、Sink等)LoggerManager(单例)全局日志器管理中心,负责创建、查找日志器实例异步模块(AsyncLogger)实现缓冲区管理、异步push和write,减少主线程I/O阻塞。
2025-04-27 19:38:22
1190
原创 C++ 基于多设计模式下的同步&异步⽇志系统-1准备工作
2.C⻛格不定参函数3.C++⻛格不定参函数四.设计模式1.六大设计原则应用: 只负责组织和发起日志输出。 专注于格式化日志内容。 专注于日志“落地”(文件/控制台等输出方式)。 专注于日志数据结构封装。🔓 2. 开闭原则(OCP)应用:增加新的日志输出格式、日志落地方式(如新增 TCP 日志输出)→ 新增类即可,无需改动原逻辑。格式化模块通过解析 等 pattern 字符串,支持灵活扩展。🔁 3. 里氏替换原则(LSP)应用:所有日志输出
2025-04-19 20:12:59
1112
1
原创 C++ Json-Rpc框架-4项目回顾总结
输出标准日志,标明日志级别 + 时间戳 + 文件名 + 行号为了让框架具备高可扩展性、低耦合性和良好的抽象能力抽象了连接行为BaseBuffer抽象了缓冲区读取行为抽象了协议消息对象①统一连接行为接口 解耦底层实现,提高可替换性我们的网络层底层使用了 Muduo,但我们不希望业务逻辑与具体网络库绑定。所以用抽象连接操作,上层只关注 send()/shutdown() 等接口,而不关心底层是 TCP 还是 WebSocket、是 Muduo 还是 Boost.Asio。
2025-04-18 11:36:10
849
原创 C++ Json-Rpc框架-3项目实现(2)
我们用哈希表来管理客户端连接池时:我们知道在哈希表中是通过key值找到对应的val值的,但并不是直接用我们传过去的数当key,需要进行哈希值计算。(1.int size_t bool直接强转 2.char* string// 类似 BKDR hash)而库中实现了string、int、float 等基本类型的哈希值计算,但这个Address pair<string,int>是个自定义类型,需要我们自己重载哈希值计算。
2025-04-14 11:09:01
1118
原创 C++ Json-Rpc框架-3项目实现(1)(1.其它函数实现2.消息类型字段定义3.消息Message/通信Muduo抽象具象实现)
2.Json序列化和反序列化工具序列化反序列化二.项⽬消息类型字段信息定义三.消息/通信抽象实现2.缓冲区抽象类协议抽象类连接抽象类服务端抽象类6.客户端抽象类四.消息/通信具象层实现1.BaseMessage消息具体实现JsonRequest基类Response类型实现JsonResponse基类:消息对象的生产工厂
2025-03-24 16:34:21
777
原创 C++ Json-Rpc框架-2框架(服务端模块 客户端模块 框架设计)
本质上来讲,我们要实现的rpc(远端调⽤)思想上并不复杂,甚⾄可以说是简单,其实就是客⼾端想要完成某个任务的处理,但是这个处理的过程并不⾃⼰来完成,⽽是,将请求发送到服务器上,让服务器来帮其完成处理过程,并返回结果,客⼾端拿到结果后返回。然⽽上图的模型中,是⼀种多对⼀或⼀对⼀的关系,,且其服务端的负载也会较⾼,因此在rpc实现中,我们不仅要实现其基本功能,还要再进⼀步,分布式架构:简单理解就是由,这些节点通常指的是服务器,,通过协同⼯作解决⾼并发的问题,提⾼系统扩展性和可⽤性。
2025-03-21 15:52:37
1138
原创 C++ Json-Rpc框架-1准备工作(JsonCpp Muduo 异步操作)
Json 是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。如: 我们想表⽰⼀个同学的学⽣信息• C 代码表⽰• Json 表⽰"姓名" : "xx","年龄" : 18,"成绩" : [88.5, 99, 58],"爱好" :{"书籍" : "西游记","运动" : "打篮球"Json 的数据类型包括对象,数组,字符串,数字等。• 对象:使⽤花括号 {} 括起来的表⽰⼀个对象• 数组:使⽤中括号 [] 括起来的表⽰⼀个数组。
2025-03-20 17:44:34
1047
原创 多路转接 select/poll epoll
poll 解决了 select 的 FD 数量限制问题,但仍然存在 O(N) 遍历的问题。 epoll 通过事件驱动机制,避免遍历所有 FD,提高了 epoll_wait() 的效率,适用于高并发。epoll 采用 ET 模式,可以减少 epoll_wait() 调用次数,提高吞吐量,但需要开发者正确处理 recv() / send()。
2025-03-18 15:57:53
723
原创 TCP 全连接队列 内核层理解socket
参数表示。那什么是全连接队列呢?accept()accept()accept()也就是说我们访问服务器会由内核自动进行3次握手,,服务端再。而listen的,如果服务器来不及调用accept()处理连接,连接会堆积在超过最大连接长度,再进行连接就会三次握手失败。所以全连接队列本质就是一种backlog不能太长也不能太短。1.太短,可能丢失大量连接(客户端需要重试,增加网络负担)。2.太长,一方面会让用户,另一方面会。
2025-03-14 12:30:00
1235
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人