- 博客(49)
- 资源 (4)
- 收藏
- 关注
原创 网络编程接口bind学习
下面2个问题你会怎么回答呢?1、bind如果绑定0号端口,可以工作么,如果能正常工作,绑定的什么端口2、客户端可以调用bind么。
2025-08-01 16:46:56
378
原创 网络编程接口htonl学习
如果有人问这3个问题,你会怎么回答呢?,建议读者可以自己先想1分钟。1、htonl作用是什么2、客户端/服务端通信一定要用 htonl 么3、自己编码实现下htonl。
2025-07-28 17:45:40
334
原创 vs调试C++,无法显示长字符串所有内容
调试C++程序时,有时会遇到长字符串无法显示完全。举例如下:变量p在Text Visuallizer中显示不完全。如何才能看到字符串全部内容呢?
2025-07-24 16:58:54
282
原创 std::map一点学习
因为map底层使用红黑树结构,默认使用<比较运算符确定键的顺序和唯一性。新插入的键通过<比较运算符与已有的键比较相等,若不相等,则认为是不同的键。本例中"host"和"Host"由于大小写敏感,被认为是2个键。学习链接:https://github.com/0voice。对于任何俩个键lhs和rhs,如果满足下面条件,则认为相等。同时不满足rhs < lhs。不满足lhs < rhs。
2025-07-16 18:07:27
197
原创 PIMPL学习
PIMPL模式通过将类的私有成员变量和实现细节封装到一个单独的类中,主类中只保留一个指向该类的指针。实际工作中或github上都会看到此类代码。好处:1、主类的头文件中不暴露实现细节,将实现细节隐藏了2、修改实现不会影响使用头文件的其他代码,减少重新编译。
2025-07-16 15:59:16
115
原创 http协议学习-1
请求 = 请求行 + 请求头 + 包体请求行 = METHOD + 请求的path + http版本号,格式如下:请求行\r\nheader名:header值\r\nheader名:header值\r\nheader名:header值\r\n\r\n包体用nc命令启动server处于监听状态,用postman发送一个http请求。服务端收到的请求:a=1&b=2。
2025-07-16 14:44:20
257
原创 cgdb调试
cgdb是基于gdb的调试器,提供了直观的界面简化调试过程。相当于提供了gdb调试能力,也提供了可视化界面。,本文只讲述一些cgdb的一些操作。最好安装最新版本,否则可能有快捷键不兼容。
2025-07-08 18:37:09
150
原创 error MSB8041: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。
vs2022编译报错,缺少MFC库
2025-07-04 11:18:03
386
原创 vs编译报错“Windows SDK version 10.0.17134.0 was not found“
1、在实际工作中编译某个工程报错,缺少 windows sdk 10.0.17134.0。打开控制面板->卸载程序,按大小排序下,就能看见本地安装SDK的版本了。b、修改vs工程配置文件,选择本地已经安装的版本。a、下载安装对应的SDK版本:10.0.17134.0。右键工程属性,查看确实依赖10.0.17134.0。2、查看电脑中安装了哪些版本的SDK。4、windows SDK下载链接。
2025-06-26 15:17:24
291
原创 mysql学习-事务隔离级别
用户定义的一些列操作,将多个sql语句视为一个整体去执行,这些语句要么全部执行成功了,要么全部不执行。事务对于保证数据的一致性和完整性至关重要,尤其在多个用户对数据库进行并发操作。如果只有一个客户端连接操作mysql,就没必要讨论事务了。
2025-04-01 18:15:33
940
原创 mysql学习-索引规则
索引是一种数据结构,为了提升搜索效率。索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引。非空唯一索引,一个表只有一个主键索引;在innodb中,主键索引的B+树包含表数据信息不可以出现相同的值,可以有NULL值允许出现相同的索引内容;对表上的多个列进行索引将存储在数据库当中的整本书和整篇文章中的任意内容信息查找出来的技术;关键词FULLTEXT;在短字符串中用LIKE %;在全文索引中用match和against;
2025-03-25 18:23:52
922
原创 mysql学习-如何执行一条select语句
词法语法分析,生成语法树,如果sql语句有错误,会在这个阶段报错。学习链接:https://github.com/0voice。根据执行计划,与存储引擎交互,获取数据并返回给客户端。制定执行计划,选择查询成本最小的计划。接收连接,管理连接,校验用户信息。
2025-03-25 14:59:02
112
原创 std::map、unordered_map的key是自定义对象,需要做什么
map内部使用红黑树,需要对键进行排序。默认使用 < 运算符来比较键;因此,如果键是自定义对象,则需要为该对象定义比较函数或重载<运算符。
2025-03-25 11:00:59
293
原创 mysql学习-B+树相关问题
由于非叶子节点不存储实际的数据记录,它们可以存储更多的键值和子节点指针。这增加了每个节点的分支度,从而减少了树的高度。较低的树高度意味着从根节点到叶子节点的路径更短,对于减少磁盘I/O操作次数特别重要,因为每次访问磁盘的成本相对较高。B+树是一种多路搜索树,它允许每个节点有多个子节点,这意味着树的高度可以保持相对较低。B+树通过减少树的高度,从而减少了查询时需要进行的磁盘I/O操作次数。:更高的分支度意味着可以在较少的磁盘I/O操作中访问到所需的叶子节点。便于范围查询,避免中序遍历回溯去查找下一个节点。
2025-03-20 18:26:20
308
原创 mysql学习-删除数据(drop、truncate、delete)
drop、truncate、delete都可以删除mysql中的数据,但它们的作用范围和操作方式有很大的不同。
2025-03-14 18:39:29
228
原创 面试:类模版中函数声明在.h,定义在.cpp中,其他cpp引用引入这个头文件,会有什么错误?
当编译器编译一个源文件时,会根据文件中函数的调用去查找函数声明,如果找到了匹配的声明,编译器就认为这个函数存在,并生成一个对外部符号的引用。
2025-01-10 18:46:07
553
原创 面试:C++类成员初始化顺序
在这个例子中,Derived类的构造函数首先调用base的构造函数,然后按照成员变量声明的顺序(即a,然后b,最后c)来初始化,即便在构造函数初始化列表中的顺序是不同的。3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造函数在子类的构造函数之前被调用。1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。2、静态数据成员:在main函数启动之前,并且只初始化一次。4、常量成员和引用成员:必须在初始化列表中初始化。
2025-01-10 14:43:10
411
原创 redis学习-事务、同步异步连接
Pileline是redis提供的一种批处理通信协议的能力,目的是节约网络传输时间。通过一次发送多次请求命令,从而减少网络传输的时间,Pipeline不具备事务性。原理如图:测试代码如下:(注意看输出结果,就明白了)
2025-01-08 17:36:12
642
原创 linux下绑host
1、屏蔽某软件升级,软件界面没有关闭升级开关,可以采用绑host方法,避免某软件升级。2、产品研发阶段,客户端可通过绑host,访问测试服务器或线上服务器接口。学习链接:https://github.com/0voice。前提条件:先与技术支持联系,获取升级域名地址。
2025-01-07 18:12:23
427
原创 redis学习-value数据结构
通常是组合使用的方式,实现业务需求,比如:hash + list组合等方式。学习链接:https://github.com/0voice。
2025-01-07 17:51:34
1276
原创 C++拷贝构造函数与赋值操作符的区别
拷贝构造函数是特殊的构造函数,通过另一个对象来初始化。比如:ClassA obj1 = obj2;或 ClassA obj1(obj2);赋值操作符将一个对象的内容赋值给另一个。比如:obj1 = obj2;
2025-01-03 17:59:55
397
原创 C++17中nodiscard学习
[nodiscard]]是C++17引入的特性,用于修饰函数,指示函数的返回值不应该被忽略。当在函数声明或定义前使用[[nodiscard]]属性时,如果该函数的返回值没有被处理,则在编译期间,编译器会报警告。这个关键字的好处:能够提醒程序员处理函数的返回值,增强程序的稳定性,尤其函数返回一个错误码或重要结果时。
2025-01-03 10:48:13
502
原创 std::shared_mutex学习
std::shared_mutex是C++17引入的互斥锁,允许多个读线程持有锁(共享所有权),或者允许单个写线程独占锁(独占所有权)。适合于多个线程并发的读取资源,但当有线程需要写入时,则不允许其他任何线程(包括读和写)访问资源。使用std::shared_mutex通常与俩个锁原语一起使用:1、std::shared_lock:提供对std::shared_mutex的共享所有权。// 读锁2、std::unique_lock:提供对std::shared_mutex的独占所有权// 写锁。
2025-01-02 11:52:05
707
原创 protobuf学习使用
protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构,然后可以使用各种支持的语言来生成代码,以轻松地读写这些结构到一个二进制流中,如网络传输或文件,Protobuf支持多种编程语言,包括但不限于C++、Java、Python、Go、Ruby、JavaScript、C#等。
2024-12-26 17:39:06
1121
原创 Linux查找文件 locate
locate命令是快速查找文件工具,它通过预先构建的数据库来搜索文件名。这个数据库由updatedb命令更新,使用locate可以快速查找到文件,因为它不需要遍历整个文件系统。
2024-12-25 17:24:27
353
原创 查询端口被哪个程序占用、文件被哪个程序占用
netstat -tulpn | grep 端口比如:查询2000端口被哪个程序占用-t:表示显示tcp端口-u:表示显示udp端口-l:表示仅显示监听的端口-p:表示显示哪个程序或进程id(pid)在使用这些连接-n:表示显示数字形式的地址和端口号,而不是尝试解析主机名和服务名-a:表示显示所有连接和监听端口-o:表示显示每个连接的计时器信息。
2024-12-25 16:59:23
318
原创 spdlog日志库使用
spdlog是一个开源日志库,支持跨平台,支持同步和异步日志,提供多种日志级别,允许用户将日志输出到控制台、文件、其他用户自定义接收器等。使用时仅需要包含头文件即可(header-only )。多线程环境,spdlog提供了线程安全的日志接口,确保日志的正确性。支持自定义格式化日志,底层使用了fmt。官方example:spdlog\example\example.cpp(这里面有非常详细的使用例子)
2024-12-24 17:30:17
833
原创 4个线程安全的单例模式
单例模式是程序生命周期内,该类只有一个实例,并提供一个该实例访问点,适用于全局配置类、资源管理类等场景。单实例模式特点:1、构造函数私有2、拷贝构造和赋值构造函数为私有3、类有一个静态方法获取实例。
2024-12-24 14:40:37
512
原创 gdb调试一个递归问题(malloc、printf)
从此现象得出一个结论,程序第一次调用printf,printf内部会调用malloc(1024)申请一个缓冲区。学习链接:https://github.com/0voice。
2024-12-19 17:44:07
202
原创 内存泄漏检测-编码学习(memleak)
问题1:工作中遇到内存泄漏如何排查的?问题2:什么是内存泄漏?问题3:内存泄漏,泄漏的什么内存?问题4:如何判断是否有内存泄漏?问题5:在哪里泄漏的内存?对应代码位置是哪里?问题6:线上遇到内存泄漏怎么办?本文带着这几个问题学习和编码实现,思路为在malloc时并创建文件,free时删除文件,当程序结束时若有文件存在,则有内存泄漏,然后分析文件内容,查找泄露的代码行号。在malloc时创建文件,确实会降低程序性能;可以做一个开关,需要时打开开关,默认不打开。
2024-12-19 16:41:56
685
原创 future、promise
std::future和std::promise是C++11标准库引入的用于处理异步编程模板类,适合线程之间只有1次交互数据的场景。
2024-12-17 18:14:00
447
原创 map的key是结构体
C++中map的key可以是任何类型,包括结构体(struct),但需要确保该类型的对象能够进行比较,map使用<操作符比较俩个元素。比如:a < b 和 b < a 都返回false,则认为a和b是相等的。当使用基础类型(int、string)为key时,是没有任何问题的。当使用结构体或类为key时,需要重载<操作符,否则编译会报错。map、set、multimap、multiset当key为结构体,都需要重载<操作符。
2024-12-16 18:25:32
432
原创 gdb调试动态库,查看变量值
1、使用gdb查看某个模块,一定要使用-g参数编译对应模块2、使用命令frame i(例:frame 1)切换堆栈中的函数3、使用p命令查看对应变量的值。
2024-12-16 16:50:33
511
nginx的windows编译,用vs2017编译nginx,带vs工程配置文件,可直接调试 有想学习nginx源码或http相关流程,可下载在windows上用vs调试学习学习
2025-07-26
使用Windows API和WTL技术,实现在屏幕上创建透明的、置顶的、鼠标穿透的窗口,并在该窗口上绘制一个中空矩形(源码)
2025-07-23
breakpad源码(有windows工程配置文件,可以直接用vs2010打开编译)
2018-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人