- 博客(24)
- 收藏
- 关注
原创 【Mysql】数据库的操作
备份的原理其实就是它备份的不是数据本身,而是**“重建这个库的所有历史 SQL 语句”**,使用 source 命令引入备份文件,本质是把历史 SQL 重新在服务器跑一遍,实现数据复现。它不是在“拷贝文件”,而是通过 SQL 协议连接数据库,查出所有表结构和数据,然后生成对应的 CREATE TABLE 和 INSERT 语句。注意:大写的 P 是端口(Port),小写的 p 是密码(Password)。优点:在恢复数据时,你不需要手动去 CREATE 一个空库,直接 source 脚本就行。
2025-12-18 22:15:47
608
原创 【C++】脚手架学习笔记 gflags与 gtest
Google GFlags是一个C++命令行参数处理库,通过DEFINE宏定义全局变量式参数,支持类型安全解析和配置文件读取。GTest是Google的C++单元测试框架,提供TEST/TEST_F宏组织测试用例,支持全局测试环境配置。GFlags使用示例展示了参数定义、解析和跨文件访问,GTest演示了基本测试用例和全局测试环境的生命周期管理。两者都是Google开源工具链的重要组成部分,分别用于程序参数配置和单元测试场景。
2025-12-05 17:04:52
692
原创 CMake快速上手
CMake简明指南 CMake是跨平台的C/C++构建工具,相比传统Makefile具有显著优势。本文介绍了CMake的安装、与Makefile的对比,并通过实例演示了基本用法: 安装:Linux系统通常自带CMake,可通过snap install cmake --classic升级版本 对比:CMake支持跨平台、依赖管理更智能,适合中大型项目;Makefile则更适合简单项目 实例:创建main.cpp和CMakeLists.txt后,执行cmake .和make即可完成构建 优势:CMake语法简洁
2025-11-30 20:54:11
399
原创 【C++项目】基于设计模式的同步异步日志系统(前置基础知识)
文章摘要 日志系统是程序开发中不可或缺的基础设施,主要用于调试定位、生产环境回溯、性能监控和安全审计。日志系统分为同步和异步两种实现方式:同步日志简单可靠但性能低,适合小型系统;异步日志通过后台线程批量写入,性能高但可能丢失部分日志。C++中可变参数模板提供了类型安全的日志接口实现方式。设计日志系统时需遵循SOLID设计原则,特别是单一职责和开闭原则,以提高代码可维护性和扩展性。合理的日志系统设计能显著提升软件的可观测性和问题诊断效率。
2025-10-27 17:58:35
720
原创 【项目】高并发内存池---TCMalloc (google-perftools)(一)
这个项目是用来实现一个高并发的内存池,它的原型是Google的一个开源项目tcmalloc—Thread-Caching Malloc(全称),就是线程缓存的malloc,实现了高效的多线程内存管理,这个项目可以替代系统的malloc,free。当然原项目十分复杂,我们只需实现一个mini版本的高性能内存池就行,用于学习与感悟!!!首先我们需要浅浅了解一下池化技术。
2025-09-05 11:42:21
843
1
原创 【算法笔记】双指针
双指针主要是使用数组下标来解决相关问题,我们如果遇到数组划分,分块的问题,就可以尝试使用双指针来解决问题1.题目描述2.解答题目的意思是只要是非零元素都要放在左边,0全部放在右边,且非零元素的相对顺序不能变化,很明显的数组划分,我们可以使用双指针来解决问题。我们可以定义两个数组下标,dest = -1,cur = 0,,然后使用cur来遍历这个数组。最后总结思路:cur从前向后遍历过程中:1.遇到0,cur++2.遇到非0,swap(dest+1,cur);dest++;cur++;详
2025-09-04 19:08:21
318
原创 ProtoBuf基础使用方法
在学习protobuf之前,我们首先要了解序列化这个概念,序列化就是把内存里的对象或数据结构转成一串可存储或传输的字节序列,等需要时再把这串字节还原成原来的对象(这个过程叫反序列化)。其本质就是:对象 ↔ 字节流的编码与解码。概念:让结构化的数据序列化方法,除了ProtoBuf,其实还有很多其他方法,比如JSON,XML等等。特点:1.语言无关、平台⽆关:即 ProtoBuf ⽀持 Java、C++、Python 等多种语⾔,支持多个平台。2.高效:即⽐ XML 更⼩、更快、更为简单。
2025-09-02 11:07:44
587
原创 【C++】二叉搜索树key_value的简单模拟实现
本文介绍了二叉搜索树(BST)的进阶实现——键值对(key-value)版本的BST。文章在单key实现的基础上,通过增加模板参数V来扩展功能,使每个节点包含key和value两个成员。主要内容包括:1)框架搭建,定义BSTnode结构体和BST类;2)构造函数、拷贝构造函数和析构函数的实现;3)插入、查找和删除等核心操作;4)中序遍历方法用于有序打印数据。其中重点展示了如何通过修改模板参数和节点结构来实现key-value存储,同时保留了BST的基本特性。文章还提供了完整的代码实现,可供读者参考和测试使用
2025-05-27 21:09:38
426
1
原创 【C++】map与set的使用
本文介绍了C++中的关联式容器set、multiset、map和multimap。与序列式容器不同,关联式容器具有非线性数据结构,内部元素之间存在紧密关联。文章详细讲解了它们的常用构造方式、增删查接口及特性区别:set自动去重,multiset允许冗余;map不允许重复key,支持[]访问,而multimap允许key冗余且不支持[]。这些容器底层均为红黑树实现,查询效率为O(logN),迭代遍历采用中序遍历保证有序性。通过对比分析,帮助开发者根据场景选择合适的关联容器。
2025-05-27 16:17:36
995
原创 【C++】简单二叉搜索树key的模拟实现
本文介绍了二叉搜索树(BST)的基本概念、性能分析和实现方法。二叉搜索树是一种有序二叉树,具有左子树值小于等于根节点、右子树值大于等于根节点的特性。文章分析了BST的最优和最差时间复杂度,比较了与二分查找的优缺点。详细讲解了BST的插入、查找、删除等核心操作的实现逻辑,重点阐述了删除操作中四种不同情况的处理方式,包括左右子树为空、单子树为空和双子树存在时的替换法删除策略。最后给出了完整的C++实现代码框架,展示了BST节点的结构定义和主要操作函数。
2025-05-25 17:02:03
553
原创 网络的基础概念之揭秘网络协议栈:从OSI到TCP/IP的演进
负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、 帧同步(就是说从网线上检测到什么信号算作新帧的开始)、 冲突检测(如果检测到冲突就自动重发)、 数据差错校验等工作. 有以太网、 令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.需要注意的是其实在网络角度, OSI 定的协议 7 层模型其实非常完善, 但是在实际操作的过程中, 会话层、 表示层是不可能接入到操作系统中的, 所以在工程实践中, 最终落地的是 5 层协议。网络通信的本质特征是主机间的距离扩大。
2025-05-25 10:24:06
689
原创 【C++】继承 学习笔记
继承是面向对象编程中实现代码复用的重要机制。通过继承,可以在保留原有类特性的基础上进行扩展,添加新的成员函数和成员变量。扩展后产生的新类称为子类(或派生类),而被继承的原始类则称为父类(或基类)。假如我们定义了一个类person,在此基础上定义student类进行公有继承继承方式一共有三种继承方式基类private成员在派⽣类中⽆论以什么⽅式继承都是不可⻅的。这⾥的不可⻅是指基类的私有成员还是被继承到了派⽣类对象中,但是语法上限制派⽣类对象不管在类⾥⾯还是类外⾯都不能去访问它。基类private成员在
2025-05-24 16:52:15
1040
原创 Mysql 基本操作之库的增删查改
然而,数据库名、表名和列名的大小写敏感性取决于操作系统的文件系统。在Windows上,这些名称通常不区分大小写,而在Linux和Unix系统上,它们区分大小写。在linux,这些数据库是存在/var/lib/mysql这个目录里面的。创建两个数据库d1,d2,字符集都是utf8,但是校验规则分别是。数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字。在数据库里面创建表,分别插入啊A,a,B,b,C,b.修改数据库主要指的是对修改数据库的字符集和校验规则。注意:不要随意删除数据库,慎重!
2025-05-13 20:38:57
450
原创 【Linux】环境变量剖析
输出结果main函数有三个参数,所以可以肯定的是main函数不是入口函数而start函数才是其中有一个功能就是它会做一个扫描,判断main函数有几个参数。当我们自己导环境变量,子进程会继承吗?所以结论是,确实会被子进程继承继承,那么也可以推演出如果后面创建子进程,子子进程,都可以拿到环境变量所以,环境变量具有全局性;那么问题就来了,本地变量是啥东西?其实,上面我们已经提过这个本地变量,它需要set来进行查看而且,它不会被子进程继承,并且只能在bash内部使用。
2025-04-29 20:17:35
565
原创 类与对象 中
在c++11之前有6个默认成员函数;其中,在类中有4个重要的默认成员函数,分别是1.:主要完成初始化工作;2.:主要完成销毁工作;3.:使用同类对象初始化创建对象;4.:把一个对象赋值给另一个对象;这些函数我们不写,编译器会自动生成,但是编译器自动生成的函数其实并不能满足我们的需求,所以,最后还是得我们自己实现,当我们自己实现这些函数的时候,编译器就不会生成相关的函数了;下面,我们来谈谈构造函数。
2024-11-18 19:48:04
1559
原创 分支与循环
值得注意的是case后面必须有空格,在每个case语句执行完后必须在后面加上break。switch语句中case和default的顺序是没有要求的。需要注意的是,如果if语句中判断表达式结果不成立,则为假。下面来一一解释各种语句的用法------------do while循环是先执行,后面再进行判断;并且,如果代码中有多个if和else,而for和while循环是先判断再执行。在分支与循环中,有这么几种语句。而在c语言中,0为假,非0为真;嵌套语句的使用可以构成多成判断;while语句的基本语法如下。
2024-09-01 17:26:54
472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅