- 博客(58)
- 资源 (4)
- 收藏
- 关注
原创 string::erase
erase:用于从字符串中删除一部分字符串,返回修改后的字符串引用。pos:起始位置,从哪里开始删除。npos:要删除字符串的数量。下面代码会输出什么?
2025-08-27 11:09:12
56
原创 epoll模型网络编程知识要领
创建监听socket调用bind函数绑定ip地址、port端口号调用listen函数监听调用epoll_create函数创建epollfd调用epoll_ctrl函数将listenfd绑定到epollfd上,监测listenfd的读事件在一个无限循环中,调用epoll_wait函数等待事件发生。
2025-08-21 18:07:07
238
原创 epoll发数据学习
发数据流程如下,下面问题你会怎么回答?1、第一次为什么不是先注册可写事件,等可写事件触发后再发数据,而是直接发送数据?2、如何表明当前数据一次性没有发完?3、剩下的数据应该缓存到哪里?4、如果当前已经有部分数据发不出去,业务层又来新的数据了,这些新数据应该缓存在哪里?5、如果可写事件一直不触发,怎么办?有这种情况么?
2025-08-15 18:39:45
354
原创 epoll边缘模式收数据学习
下面问题你会怎么回答?1、epoll边缘模式收数据,如何表明数据收完了?收完的标志是什么?2、epoll边缘模式收数据代码怎么写。
2025-08-15 16:52:29
226
原创 epoll模型的两类fd
只处理读事件,写事件没有意义。如果有读事件发生,说明有新的连接,需要调用accept接收连接,产生一个clientfd,并将clientfd设置为非阻塞的,继续挂载到epollfd上,挂载时通常只需要处理clientfd的读事件。读事件触发时,说明clientfd上有新数据或对端关闭了连接,需要调用recv/read收取数据,recv函数返回值等于0,说明对端关闭了连接。recv函数返回值大于0,说明收到了数据。recv函数返回值小于0,如果错误码不是。
2025-08-14 17:54:41
113
原创 网络编程接口bind学习
下面2个问题你会怎么回答呢?1、bind如果绑定0号端口,可以工作么,如果能正常工作,绑定的什么端口2、客户端可以调用bind么。
2025-08-01 16:46:56
401
原创 网络编程接口htonl学习
如果有人问这3个问题,你会怎么回答呢?,建议读者可以自己先想1分钟。1、htonl作用是什么2、客户端/服务端通信一定要用 htonl 么3、自己编码实现下htonl。
2025-07-28 17:45:40
352
原创 vs调试C++,无法显示长字符串所有内容
调试C++程序时,有时会遇到长字符串无法显示完全。举例如下:变量p在Text Visuallizer中显示不完全。如何才能看到字符串全部内容呢?
2025-07-24 16:58:54
297
原创 std::map一点学习
因为map底层使用红黑树结构,默认使用<比较运算符确定键的顺序和唯一性。新插入的键通过<比较运算符与已有的键比较相等,若不相等,则认为是不同的键。本例中"host"和"Host"由于大小写敏感,被认为是2个键。学习链接:https://github.com/0voice。对于任何俩个键lhs和rhs,如果满足下面条件,则认为相等。同时不满足rhs < lhs。不满足lhs < rhs。
2025-07-16 18:07:27
216
原创 PIMPL学习
PIMPL模式通过将类的私有成员变量和实现细节封装到一个单独的类中,主类中只保留一个指向该类的指针。实际工作中或github上都会看到此类代码。好处:1、主类的头文件中不暴露实现细节,将实现细节隐藏了2、修改实现不会影响使用头文件的其他代码,减少重新编译。
2025-07-16 15:59:16
121
原创 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
264
原创 cgdb调试
cgdb是基于gdb的调试器,提供了直观的界面简化调试过程。相当于提供了gdb调试能力,也提供了可视化界面。,本文只讲述一些cgdb的一些操作。最好安装最新版本,否则可能有快捷键不兼容。
2025-07-08 18:37:09
160
原创 error MSB8041: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。
vs2022编译报错,缺少MFC库
2025-07-04 11:18:03
443
原创 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
332
原创 mysql学习-事务隔离级别
用户定义的一些列操作,将多个sql语句视为一个整体去执行,这些语句要么全部执行成功了,要么全部不执行。事务对于保证数据的一致性和完整性至关重要,尤其在多个用户对数据库进行并发操作。如果只有一个客户端连接操作mysql,就没必要讨论事务了。
2025-04-01 18:15:33
948
原创 mysql学习-索引规则
索引是一种数据结构,为了提升搜索效率。索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引。非空唯一索引,一个表只有一个主键索引;在innodb中,主键索引的B+树包含表数据信息不可以出现相同的值,可以有NULL值允许出现相同的索引内容;对表上的多个列进行索引将存储在数据库当中的整本书和整篇文章中的任意内容信息查找出来的技术;关键词FULLTEXT;在短字符串中用LIKE %;在全文索引中用match和against;
2025-03-25 18:23:52
932
原创 mysql学习-如何执行一条select语句
词法语法分析,生成语法树,如果sql语句有错误,会在这个阶段报错。学习链接:https://github.com/0voice。根据执行计划,与存储引擎交互,获取数据并返回给客户端。制定执行计划,选择查询成本最小的计划。接收连接,管理连接,校验用户信息。
2025-03-25 14:59:02
120
原创 std::map、unordered_map的key是自定义对象,需要做什么
map内部使用红黑树,需要对键进行排序。默认使用 < 运算符来比较键;因此,如果键是自定义对象,则需要为该对象定义比较函数或重载<运算符。
2025-03-25 11:00:59
301
原创 mysql学习-B+树相关问题
由于非叶子节点不存储实际的数据记录,它们可以存储更多的键值和子节点指针。这增加了每个节点的分支度,从而减少了树的高度。较低的树高度意味着从根节点到叶子节点的路径更短,对于减少磁盘I/O操作次数特别重要,因为每次访问磁盘的成本相对较高。B+树是一种多路搜索树,它允许每个节点有多个子节点,这意味着树的高度可以保持相对较低。B+树通过减少树的高度,从而减少了查询时需要进行的磁盘I/O操作次数。:更高的分支度意味着可以在较少的磁盘I/O操作中访问到所需的叶子节点。便于范围查询,避免中序遍历回溯去查找下一个节点。
2025-03-20 18:26:20
315
原创 mysql学习-删除数据(drop、truncate、delete)
drop、truncate、delete都可以删除mysql中的数据,但它们的作用范围和操作方式有很大的不同。
2025-03-14 18:39:29
241
原创 面试:类模版中函数声明在.h,定义在.cpp中,其他cpp引用引入这个头文件,会有什么错误?
当编译器编译一个源文件时,会根据文件中函数的调用去查找函数声明,如果找到了匹配的声明,编译器就认为这个函数存在,并生成一个对外部符号的引用。
2025-01-10 18:46:07
555
原创 面试:C++类成员初始化顺序
在这个例子中,Derived类的构造函数首先调用base的构造函数,然后按照成员变量声明的顺序(即a,然后b,最后c)来初始化,即便在构造函数初始化列表中的顺序是不同的。3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造函数在子类的构造函数之前被调用。1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。2、静态数据成员:在main函数启动之前,并且只初始化一次。4、常量成员和引用成员:必须在初始化列表中初始化。
2025-01-10 14:43:10
427
原创 redis学习-事务、同步异步连接
Pileline是redis提供的一种批处理通信协议的能力,目的是节约网络传输时间。通过一次发送多次请求命令,从而减少网络传输的时间,Pipeline不具备事务性。原理如图:测试代码如下:(注意看输出结果,就明白了)
2025-01-08 17:36:12
660
原创 linux下绑host
1、屏蔽某软件升级,软件界面没有关闭升级开关,可以采用绑host方法,避免某软件升级。2、产品研发阶段,客户端可通过绑host,访问测试服务器或线上服务器接口。学习链接:https://github.com/0voice。前提条件:先与技术支持联系,获取升级域名地址。
2025-01-07 18:12:23
438
原创 redis学习-value数据结构
通常是组合使用的方式,实现业务需求,比如:hash + list组合等方式。学习链接:https://github.com/0voice。
2025-01-07 17:51:34
1290
原创 C++拷贝构造函数与赋值操作符的区别
拷贝构造函数是特殊的构造函数,通过另一个对象来初始化。比如:ClassA obj1 = obj2;或 ClassA obj1(obj2);赋值操作符将一个对象的内容赋值给另一个。比如:obj1 = obj2;
2025-01-03 17:59:55
409
原创 C++17中nodiscard学习
[nodiscard]]是C++17引入的特性,用于修饰函数,指示函数的返回值不应该被忽略。当在函数声明或定义前使用[[nodiscard]]属性时,如果该函数的返回值没有被处理,则在编译期间,编译器会报警告。这个关键字的好处:能够提醒程序员处理函数的返回值,增强程序的稳定性,尤其函数返回一个错误码或重要结果时。
2025-01-03 10:48:13
762
原创 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
730
原创 protobuf学习使用
protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构,然后可以使用各种支持的语言来生成代码,以轻松地读写这些结构到一个二进制流中,如网络传输或文件,Protobuf支持多种编程语言,包括但不限于C++、Java、Python、Go、Ruby、JavaScript、C#等。
2024-12-26 17:39:06
1171
原创 Linux查找文件 locate
locate命令是快速查找文件工具,它通过预先构建的数据库来搜索文件名。这个数据库由updatedb命令更新,使用locate可以快速查找到文件,因为它不需要遍历整个文件系统。
2024-12-25 17:24:27
356
原创 查询端口被哪个程序占用、文件被哪个程序占用
netstat -tulpn | grep 端口比如:查询2000端口被哪个程序占用-t:表示显示tcp端口-u:表示显示udp端口-l:表示仅显示监听的端口-p:表示显示哪个程序或进程id(pid)在使用这些连接-n:表示显示数字形式的地址和端口号,而不是尝试解析主机名和服务名-a:表示显示所有连接和监听端口-o:表示显示每个连接的计时器信息。
2024-12-25 16:59:23
328
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关注的人