
学习记录
文章平均质量分 60
GHL284271090
这个作者很懒,什么都没留下…
展开
-
redis学习-事务、同步异步连接
Pileline是redis提供的一种批处理通信协议的能力,目的是节约网络传输时间。通过一次发送多次请求命令,从而减少网络传输的时间,Pipeline不具备事务性。原理如图:测试代码如下:(注意看输出结果,就明白了)原创 2025-01-08 17:36:12 · 594 阅读 · 0 评论 -
linux下绑host
1、屏蔽某软件升级,软件界面没有关闭升级开关,可以采用绑host方法,避免某软件升级。2、产品研发阶段,客户端可通过绑host,访问测试服务器或线上服务器接口。学习链接:https://github.com/0voice。前提条件:先与技术支持联系,获取升级域名地址。原创 2025-01-07 18:12:23 · 389 阅读 · 0 评论 -
redis学习-value数据结构
通常是组合使用的方式,实现业务需求,比如:hash + list组合等方式。学习链接:https://github.com/0voice。原创 2025-01-07 17:51:34 · 1240 阅读 · 0 评论 -
C++拷贝构造函数与赋值操作符的区别
拷贝构造函数是特殊的构造函数,通过另一个对象来初始化。比如:ClassA obj1 = obj2;或 ClassA obj1(obj2);赋值操作符将一个对象的内容赋值给另一个。比如:obj1 = obj2;原创 2025-01-03 17:59:55 · 347 阅读 · 0 评论 -
C++17中nodiscard学习
[nodiscard]]是C++17引入的特性,用于修饰函数,指示函数的返回值不应该被忽略。当在函数声明或定义前使用[[nodiscard]]属性时,如果该函数的返回值没有被处理,则在编译期间,编译器会报警告。这个关键字的好处:能够提醒程序员处理函数的返回值,增强程序的稳定性,尤其函数返回一个错误码或重要结果时。原创 2025-01-03 10:48:13 · 182 阅读 · 0 评论 -
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 · 603 阅读 · 0 评论 -
protobuf学习使用
protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构,然后可以使用各种支持的语言来生成代码,以轻松地读写这些结构到一个二进制流中,如网络传输或文件,Protobuf支持多种编程语言,包括但不限于C++、Java、Python、Go、Ruby、JavaScript、C#等。原创 2024-12-26 17:39:06 · 983 阅读 · 0 评论 -
Linux查找文件 locate
locate命令是快速查找文件工具,它通过预先构建的数据库来搜索文件名。这个数据库由updatedb命令更新,使用locate可以快速查找到文件,因为它不需要遍历整个文件系统。原创 2024-12-25 17:24:27 · 334 阅读 · 0 评论 -
查询端口被哪个程序占用、文件被哪个程序占用
netstat -tulpn | grep 端口比如:查询2000端口被哪个程序占用-t:表示显示tcp端口-u:表示显示udp端口-l:表示仅显示监听的端口-p:表示显示哪个程序或进程id(pid)在使用这些连接-n:表示显示数字形式的地址和端口号,而不是尝试解析主机名和服务名-a:表示显示所有连接和监听端口-o:表示显示每个连接的计时器信息。原创 2024-12-25 16:59:23 · 290 阅读 · 0 评论 -
spdlog日志库使用
spdlog是一个开源日志库,支持跨平台,支持同步和异步日志,提供多种日志级别,允许用户将日志输出到控制台、文件、其他用户自定义接收器等。使用时仅需要包含头文件即可(header-only )。多线程环境,spdlog提供了线程安全的日志接口,确保日志的正确性。支持自定义格式化日志,底层使用了fmt。官方example:spdlog\example\example.cpp(这里面有非常详细的使用例子)原创 2024-12-24 17:30:17 · 746 阅读 · 0 评论 -
4个线程安全的单例模式
单例模式是程序生命周期内,该类只有一个实例,并提供一个该实例访问点,适用于全局配置类、资源管理类等场景。单实例模式特点:1、构造函数私有2、拷贝构造和赋值构造函数为私有3、类有一个静态方法获取实例。原创 2024-12-24 14:40:37 · 491 阅读 · 0 评论 -
gdb调试一个递归问题(malloc、printf)
从此现象得出一个结论,程序第一次调用printf,printf内部会调用malloc(1024)申请一个缓冲区。学习链接:https://github.com/0voice。原创 2024-12-19 17:44:07 · 181 阅读 · 0 评论 -
内存泄漏检测-编码学习(memleak)
问题1:工作中遇到内存泄漏如何排查的?问题2:什么是内存泄漏?问题3:内存泄漏,泄漏的什么内存?问题4:如何判断是否有内存泄漏?问题5:在哪里泄漏的内存?对应代码位置是哪里?问题6:线上遇到内存泄漏怎么办?本文带着这几个问题学习和编码实现,思路为在malloc时并创建文件,free时删除文件,当程序结束时若有文件存在,则有内存泄漏,然后分析文件内容,查找泄露的代码行号。在malloc时创建文件,确实会降低程序性能;可以做一个开关,需要时打开开关,默认不打开。原创 2024-12-19 16:41:56 · 626 阅读 · 0 评论 -
C++11 sleep功能
C++11中,可以使用std::this_thread::sleep_for实现sleep功能。原创 2024-12-17 18:24:42 · 216 阅读 · 0 评论 -
future、promise
std::future和std::promise是C++11标准库引入的用于处理异步编程模板类,适合线程之间只有1次交互数据的场景。原创 2024-12-17 18:14:00 · 406 阅读 · 0 评论 -
互斥锁(Mutex)与自旋锁(Spinlock)
互斥锁与自旋锁都可以用于多线程环境下保护资源的访问,但是他们的工作原理和适用场景不同。原创 2024-12-17 16:41:23 · 251 阅读 · 0 评论 -
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 · 372 阅读 · 0 评论 -
gdb调试动态库,查看变量值
1、使用gdb查看某个模块,一定要使用-g参数编译对应模块2、使用命令frame i(例:frame 1)切换堆栈中的函数3、使用p命令查看对应变量的值。原创 2024-12-16 16:50:33 · 429 阅读 · 0 评论 -
tcp与udp区别
tcp基于字节流的,有连接udp基于数据报的,没有连接。原创 2024-10-31 10:48:44 · 221 阅读 · 0 评论 -
io_uring、liburing
io_uring是linux内核中高效的异步I/O框架,Linux内核5.1引入,用于提高I/O的性能。liburing是基于io_uring封装的库,提供更简洁的api。原创 2024-10-30 15:08:27 · 1726 阅读 · 0 评论 -
select、poll、epoll学习
select可以监视多个文件描述符,等待一个或多个文件描述符就绪(可读、可写、异常)或者直到超时。1、监视的文件描述符有限制,通常为10242、每次调用select,都要循环遍历整集,扫描每个文件描述符是否就绪(可读、可写、异常),3、每次调用select,需要把fd_set集合,从用户空间拷贝到内核空间单个进程实现了I/O多路复用poll与select类似,相当于select升级版本,poll没有文件描述符数量的限制。poll的结构体。原创 2024-10-25 18:21:48 · 1561 阅读 · 0 评论 -
TCP 延迟确认 滑动窗口 慢启动 拥塞控制 滑动窗口
本文只简单描述了相关概念原创 2024-10-23 18:25:54 · 419 阅读 · 0 评论 -
TCP三次握手
第一次握手:客户端发送syn标志位和seq num像服务器申请建立连接,客户端的状态变为syn_sent第二次握手:服务端发送syn,ack标志位,ack num及seq num,同意建立连接,服务端的状态变为syn_rcvd第三次握手:客户端发送ack标志位,ack num及seq num,客户端的状态变为established服务端收到ack包,状态变为established。原创 2024-10-22 17:45:22 · 533 阅读 · 0 评论 -
DPDK环境搭建
详细dpdk环境搭建原创 2024-10-18 18:01:49 · 815 阅读 · 0 评论 -
虚拟机桥接、NAT、仅主机模式
主机开辟了一个192.168.189.1的虚拟网段,虚拟机的ip地址为:192.168.189.128,比如:主机的ip地址为192.168.0.123,虚拟机的ip地址可能为192.168.0.125。相当于主机开辟一个虚拟网卡,虚拟机作为一个子网,虚拟机和主机不在同一个网段。虚拟机和物理机是平级的,主机和虚拟机在同一个网段,在同一个局域网内。虚拟机只能和主机通信,不能和外部通信,不能ping通百度,不能上网。NAT模式:适合需要访问外部网络,但无需外部设备访问虚拟机。主机模式:适合完全隔离的环境。原创 2024-10-15 16:16:56 · 297 阅读 · 0 评论 -
Segmentation fault (core dumped)分析排查
cat /proc/sys/kernel/core_pattern输出|/usr/share/apport/apport %p %s %c %d %P %E,查了之后发现ubuntu预装了apport错误收集系统,sudo service apport stop之后就可以了,这时发现core文件可以生成了。当然也可以定制core输出目录,比如:echo "/data/procdump/core-%e-%p-%s" > /proc/sys/kernel/core_pattern。原创 2024-10-10 14:28:11 · 1605 阅读 · 0 评论 -
Linux使用tcp实现点对点通信
通常tcp客户端连接服务器,服务器先调用listen处于监听状态,然后客户端调用connect连接服务器,建立连接,对应的3次握手如图:但是如果不调用listen能否完成3次握手,建立连接呢?答案是可以建立连接的,tcp点对点通信就是这个场景。tcp实现点对点通信,俩个tcp客户端直接连接,没有服务器,互发数据。不调用listen,accept函数。原创 2024-09-27 17:08:49 · 594 阅读 · 0 评论