自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (4)
  • 收藏
  • 关注

原创 mysql学习-事务隔离级别

用户定义的一些列操作,将多个sql语句视为一个整体去执行,这些语句要么全部执行成功了,要么全部不执行。事务对于保证数据的一致性和完整性至关重要,尤其在多个用户对数据库进行并发操作。如果只有一个客户端连接操作mysql,就没必要讨论事务了。

2025-04-01 18:15:33 862

原创 mysql学习-索引规则

索引是一种数据结构,为了提升搜索效率。索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引。非空唯一索引,一个表只有一个主键索引;在innodb中,主键索引的B+树包含表数据信息不可以出现相同的值,可以有NULL值允许出现相同的索引内容;对表上的多个列进行索引将存储在数据库当中的整本书和整篇文章中的任意内容信息查找出来的技术;关键词FULLTEXT;在短字符串中用LIKE %;在全文索引中用match和against;

2025-03-25 18:23:52 867

原创 mysql学习-如何执行一条select语句

词法语法分析,生成语法树,如果sql语句有错误,会在这个阶段报错。学习链接:https://github.com/0voice。根据执行计划,与存储引擎交互,获取数据并返回给客户端。制定执行计划,选择查询成本最小的计划。接收连接,管理连接,校验用户信息。

2025-03-25 14:59:02 81

原创 std::map、unordered_map的key是自定义对象,需要做什么

map内部使用红黑树,需要对键进行排序。默认使用 < 运算符来比较键;因此,如果键是自定义对象,则需要为该对象定义比较函数或重载<运算符。

2025-03-25 11:00:59 211

原创 mysql学习-安装mysql环境

ubuntu安装mysql,并实现远程登录操作(使用Navicat Premium能远程连接操作)。

2025-03-21 16:38:24 139

原创 mysql学习-B+树相关问题

由于非叶子节点不存储实际的数据记录,它们可以存储更多的键值和子节点指针。这增加了每个节点的分支度,从而减少了树的高度。较低的树高度意味着从根节点到叶子节点的路径更短,对于减少磁盘I/O操作次数特别重要,因为每次访问磁盘的成本相对较高。B+树是一种多路搜索树,它允许每个节点有多个子节点,这意味着树的高度可以保持相对较低。B+树通过减少树的高度,从而减少了查询时需要进行的磁盘I/O操作次数。:更高的分支度意味着可以在较少的磁盘I/O操作中访问到所需的叶子节点。便于范围查询,避免中序遍历回溯去查找下一个节点。

2025-03-20 18:26:20 281

原创 mysql学习-删除数据(drop、truncate、delete)

drop、truncate、delete都可以删除mysql中的数据,但它们的作用范围和操作方式有很大的不同。

2025-03-14 18:39:29 195

原创 mysql学习-常用sql语句

mysql常用sql语句

2025-03-14 16:49:01 560

原创 面试:类模版中函数声明在.h,定义在.cpp中,其他cpp引用引入这个头文件,会有什么错误?

当编译器编译一个源文件时,会根据文件中函数的调用去查找函数声明,如果找到了匹配的声明,编译器就认为这个函数存在,并生成一个对外部符号的引用。

2025-01-10 18:46:07 528

原创 面试:C++类成员初始化顺序

在这个例子中,Derived类的构造函数首先调用base的构造函数,然后按照成员变量声明的顺序(即a,然后b,最后c)来初始化,即便在构造函数初始化列表中的顺序是不同的。3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造函数在子类的构造函数之前被调用。1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。2、静态数据成员:在main函数启动之前,并且只初始化一次。4、常量成员和引用成员:必须在初始化列表中初始化。

2025-01-10 14:43:10 328

原创 redis学习-事务、同步异步连接

Pileline是redis提供的一种批处理通信协议的能力,目的是节约网络传输时间。通过一次发送多次请求命令,从而减少网络传输的时间,Pipeline不具备事务性。原理如图:测试代码如下:(注意看输出结果,就明白了)

2025-01-08 17:36:12 580

原创 linux下绑host

1、屏蔽某软件升级,软件界面没有关闭升级开关,可以采用绑host方法,避免某软件升级。2、产品研发阶段,客户端可通过绑host,访问测试服务器或线上服务器接口。学习链接:https://github.com/0voice。前提条件:先与技术支持联系,获取升级域名地址。

2025-01-07 18:12:23 369

原创 redis学习-value数据结构

通常是组合使用的方式,实现业务需求,比如:hash + list组合等方式。学习链接:https://github.com/0voice。

2025-01-07 17:51:34 1224

原创 C++拷贝构造函数与赋值操作符的区别

拷贝构造函数是特殊的构造函数,通过另一个对象来初始化。比如:ClassA obj1 = obj2;或 ClassA obj1(obj2);赋值操作符将一个对象的内容赋值给另一个。比如:obj1 = obj2;

2025-01-03 17:59:55 332

原创 C++17中nodiscard学习

[nodiscard]]是C++17引入的特性,用于修饰函数,指示函数的返回值不应该被忽略。当在函数声明或定义前使用[[nodiscard]]属性时,如果该函数的返回值没有被处理,则在编译期间,编译器会报警告。这个关键字的好处:能够提醒程序员处理函数的返回值,增强程序的稳定性,尤其函数返回一个错误码或重要结果时。

2025-01-03 10:48:13 171

原创 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 570

原创 protobuf学习使用

protobuf是Google开发的一种语言中立、平台无关、可扩展的序列化结构数据格式。允许定义一次数据结构,然后可以使用各种支持的语言来生成代码,以轻松地读写这些结构到一个二进制流中,如网络传输或文件,Protobuf支持多种编程语言,包括但不限于C++、Java、Python、Go、Ruby、JavaScript、C#等。

2024-12-26 17:39:06 946

原创 Linux查找文件 locate

locate命令是快速查找文件工具,它通过预先构建的数据库来搜索文件名。这个数据库由updatedb命令更新,使用locate可以快速查找到文件,因为它不需要遍历整个文件系统。

2024-12-25 17:24:27 328

原创 查询端口被哪个程序占用、文件被哪个程序占用

netstat -tulpn | grep 端口比如:查询2000端口被哪个程序占用-t:表示显示tcp端口-u:表示显示udp端口-l:表示仅显示监听的端口-p:表示显示哪个程序或进程id(pid)在使用这些连接-n:表示显示数字形式的地址和端口号,而不是尝试解析主机名和服务名-a:表示显示所有连接和监听端口-o:表示显示每个连接的计时器信息。

2024-12-25 16:59:23 284

原创 spdlog日志库使用

spdlog是一个开源日志库,支持跨平台,支持同步和异步日志,提供多种日志级别,允许用户将日志输出到控制台、文件、其他用户自定义接收器等。使用时仅需要包含头文件即可(header-only )。多线程环境,spdlog提供了线程安全的日志接口,确保日志的正确性。支持自定义格式化日志,底层使用了fmt。官方example:spdlog\example\example.cpp(这里面有非常详细的使用例子)

2024-12-24 17:30:17 732

原创 4个线程安全的单例模式

单例模式是程序生命周期内,该类只有一个实例,并提供一个该实例访问点,适用于全局配置类、资源管理类等场景。单实例模式特点:1、构造函数私有2、拷贝构造和赋值构造函数为私有3、类有一个静态方法获取实例。

2024-12-24 14:40:37 481

原创 gdb调试一个递归问题(malloc、printf)

从此现象得出一个结论,程序第一次调用printf,printf内部会调用malloc(1024)申请一个缓冲区。学习链接:https://github.com/0voice。

2024-12-19 17:44:07 165

原创 内存泄漏检测-编码学习(memleak)

问题1:工作中遇到内存泄漏如何排查的?问题2:什么是内存泄漏?问题3:内存泄漏,泄漏的什么内存?问题4:如何判断是否有内存泄漏?问题5:在哪里泄漏的内存?对应代码位置是哪里?问题6:线上遇到内存泄漏怎么办?本文带着这几个问题学习和编码实现,思路为在malloc时并创建文件,free时删除文件,当程序结束时若有文件存在,则有内存泄漏,然后分析文件内容,查找泄露的代码行号。在malloc时创建文件,确实会降低程序性能;可以做一个开关,需要时打开开关,默认不打开。

2024-12-19 16:41:56 591

原创 C++11 sleep功能

C++11中,可以使用std::this_thread::sleep_for实现sleep功能。

2024-12-17 18:24:42 194

原创 future、promise

std::future和std::promise是C++11标准库引入的用于处理异步编程模板类,适合线程之间只有1次交互数据的场景。

2024-12-17 18:14:00 385

原创 互斥锁(Mutex)与自旋锁(Spinlock)

互斥锁与自旋锁都可以用于多线程环境下保护资源的访问,但是他们的工作原理和适用场景不同。

2024-12-17 16:41:23 236

原创 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 346

原创 gdb调试动态库,查看变量值

1、使用gdb查看某个模块,一定要使用-g参数编译对应模块2、使用命令frame i(例:frame 1)切换堆栈中的函数3、使用p命令查看对应变量的值。

2024-12-16 16:50:33 399

原创 tcp与udp区别

tcp基于字节流的,有连接udp基于数据报的,没有连接。

2024-10-31 10:48:44 211

原创 io_uring、liburing

io_uring是linux内核中高效的异步I/O框架,Linux内核5.1引入,用于提高I/O的性能。liburing是基于io_uring封装的库,提供更简洁的api。

2024-10-30 15:08:27 1692

原创 select、poll、epoll学习

select可以监视多个文件描述符,等待一个或多个文件描述符就绪(可读、可写、异常)或者直到超时。1、监视的文件描述符有限制,通常为10242、每次调用select,都要循环遍历整集,扫描每个文件描述符是否就绪(可读、可写、异常),3、每次调用select,需要把fd_set集合,从用户空间拷贝到内核空间单个进程实现了I/O多路复用poll与select类似,相当于select升级版本,poll没有文件描述符数量的限制。poll的结构体。

2024-10-25 18:21:48 1552

原创 TCP 延迟确认 滑动窗口 慢启动 拥塞控制 滑动窗口

本文只简单描述了相关概念

2024-10-23 18:25:54 402

原创 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 526

原创 DPDK环境搭建

详细dpdk环境搭建

2024-10-18 18:01:49 770

原创 虚拟机桥接、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 292

原创 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 1551

原创 Linux使用tcp实现点对点通信

通常tcp客户端连接服务器,服务器先调用listen处于监听状态,然后客户端调用connect连接服务器,建立连接,对应的3次握手如图:但是如果不调用listen能否完成3次握手,建立连接呢?答案是可以建立连接的,tcp点对点通信就是这个场景。tcp实现点对点通信,俩个tcp客户端直接连接,没有服务器,互发数据。不调用listen,accept函数。

2024-09-27 17:08:49 573 1

chrome68 原生安装包.exe

1、chrome68 原生安装包 2、win7 win10 xp 都可以正常安装

2019-10-31

breakpad源码(有windows工程配置文件,可以直接用vs2010打开编译)

breakpad源码,有windows工程配置文件,可以直接用vs2010打开编译, 不需要用gyp工具在重新生成;

2018-05-31

procexp.exe

比系统自带任务管理器强大很多,可以查看各进程资源,可以查看线程运行情况,很好用

2018-03-06

vs2015 运行时库

vs2015生成的exe运行时所依赖的运行时库,以及运行环境,包含x86,x64

2018-02-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除