- 博客(22)
- 收藏
- 关注
原创 QT的环境配置
操作命令添加所有改动git add .提交到本地git commit -m "说明"推送到远程git push拉取更新git pull查看状态git status查看历史切换分支git checkout <分支名>修改 →git add .→git commit -m "说明"→git push,三步完成日常提交。分支管理和撤销操作按需使用即可。
2026-08-15 17:50:17
172
原创 Redis详解
什么是Redis?全称:Remote Dictionary Server,远程字典服务。定义:是一个开源、基于键值对(Key-Value)的、NoSOL型数据库。背景:由C语言编写,2009年发布。特点:数据存储在内存中,读写速度极快,支持持久化落盘,数据断电不丢失。场景:可做数据缓存,会话保存,限流计数,消息队列,超时控制等。比喻:普通MySQL数据存在硬盘,就如图纸质档案柜,CRUD很慢;Redis数据放在内存条里,好比把常用资料摊在桌面随手拿,速度快几百上千倍。
2026-08-03 11:27:28
159
原创 基于C++20的Epoll嵌套协程异步网络
本文件提供三件基础能力:全局Epoll事件循环、网络异步等待器。基于底层Task封装两层业务协程,拆分IO操作与业务计算逻辑。、通用可嵌套Task协程模板。
2026-07-30 19:29:53
201
原创 实现可分步恢复且支持返回值的任务协程
明确了是协程的状态与数据核心,承担返回值存储、挂起策略定义的核心作用co_await实现协程主动挂起,resume()实现外部唤醒,完成分段执行逻辑co_return配合方法,可安全实现协程返回值传递自定义 Task 封装协程句柄,通过移动语义和自动销毁机制,实现了安全的协程生命周期管理该demo是C++20协程的基础核心模型,可在此基础上扩展异步IO、线程调度、超时控制等高级功能,是异步编程、协程框架开发的基础。
2026-07-29 21:20:09
352
原创 基于 gRPC 框架和 Protocol Buffers (Protobuf) 的通讯录管理项目(C++)
基于 gRPC 框架和 Protocol Buffers (Protobuf) 的通讯录管理项目(C++)
2026-07-21 21:49:40
170
原创 协程 + epoll 网络框架
采用两层解耦架构,实现用户态的高效并发管理。协程的状态流转路径如下:就绪 (Ready)➔ 运行 (Running)➔ 挂起 (Suspend)➔ 恢复 (Resume)➔ 死亡 (Dead)协程 + epoll。
2026-04-01 17:49:01
393
原创 Protocol Buffer (Protobuf) 核心笔记
序列化:把对象转为字节序列。反序列化:把字节序列恢复为对象。原理:序列化后数据不含字段名,仅含编号,极大压缩体积,需配合.proto文件解析。定义:描述不同程序间如何通信的说明,是一个通用的协议模板,让不同语言编写的程序能够互通。使用:通信双方共用一份.proto文件,编译生成各自语言的代码,实现跨语言通信。场景跨语言、跨平台需求。同一项目内部解耦(如前后端分离)。现实应用:Protocol Buffer 就是 IDL 这一概念的典型实现。
2026-03-26 10:28:29
394
原创 关于Linux环境下使用proto生成文件路径问题
现在有ProtoBuf目录,下有src、proto、build三个文件夹proto下有person.proro文件,现在要用proto生成cpp文件。
2026-03-25 16:59:12
46
原创 spdlog知识点
内存屏障是一种底层同步机制,防止编译器和CPU对指令进行优化,重新排序,扰乱多线程逻辑,并保证内存可见性。互斥锁,延迟初始化。第一次检查避免每次调用都加锁,提高性能,第二次检查确保加锁后实例仍未创建。通过编译优化(模板和内联函数),只有真正需要日志才会执行,不会浪费性能。程序启动时单线程初始化,非延迟初始化,存在静态初始化顺序风险。1.C++11中,静态局部变量和初始化是线程安全的,无需加锁。对象不提前创建,而是第一次使用时才创建,节省资源,更安全。3.双重检查锁定,先检测是否创建,加锁时再创建一次。
2026-03-25 12:33:42
329
原创 关于PIE到底基地址随机化引起的问题和解决方案
问题:在检测内存泄露时,我们需要记录调用函数和行号,而这些符号信息通常由地址去解析,由于PIE的存在,我们无法定位,导致解析失败,报:?解决方案1:在编译时加入命令:-fno-pie -no-pie。通过这条命令就可以关闭PIE,定义:PIE是Ubuntu下GCC编译器的默认选项,每次运行程序会让基地址随机化。在解析地址之前,先用函数处理一下,就可以成功解析了。解决方案2:创建一个函数,手动删掉随机基地址。
2026-03-17 10:28:12
38
原创 手写Linux死锁检测器:基于有向图环实现检测与总结
死锁的本质是产生资源依赖环,我们只需检测是否有环产生便可以检测出死锁。我们可以用有向图对资源进行建模:节点:线程节点、锁节点。边:请求边-线程请求锁-即线程-->锁。持有边-线程持有锁-即锁-->线程。图:使用邻接表,邻接数组,数组的每个索引上挂一个链表。
2026-03-15 20:13:44
51
原创 将线程和锁构建图(后续通过检测环路以检测死锁)
该代码实现了一个线程死锁检测系统,通过劫持pthread_mutex_lock/unlock函数来监控锁操作。系统维护线程和锁的ID映射数组,构建有向图表示线程与锁的关系(持有或请求状态)。当检测到锁冲突时,会记录状态转换。
2026-03-13 11:00:03
48
原创 最新版IDEA2024怎么配置部署运行JavaWeb项目和关于运行JavaWeb时出错怎么解决
由于新版IDEA的功能与旧版出入比较大,导致学习JavaWeb的过程中与视频有很大不同,导致运行过程中出现很多错误无法解决,下面介绍一下新版IDEA配置JavaWeb的过程 前提准备:JDK、Maven、Tomcat。确定环境变量配置好(JAVA_HOME、path等) 我自己用的是JDK17、Maven3.9,Tomcat8.5,其他版本也可以,命令行里用startup测试一下能否运行Tomcat,如果不行,就要换版本了注意不要直接创建Maven项目,要创建Java项目选择Maven系统点击设置,打开项目
2024-05-14 19:16:49
3478
2
原创 MySQL连接 :045 - Access denied for user ‘root‘@‘localhost‘ (using password: YES)
输入services.msc,找到mysql服务重启。输入 mysql -u root -p 并输入新密码测试是否能进入。在其中添加:skip-grant-tables。如果上述代码不行,则输入。
2023-07-26 09:30:06
284
1
原创 Servlet报500的问题--HITP Status 500 - Error instantiating servlet class servlet.HelloServlet
Servlet报500的问题--HITP Status 500 - Error instantiating servlet class servlet.HelloServlet
2022-09-17 08:32:38
911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅