- 博客(47)
- 收藏
- 关注
原创 Redis终端操作和Redis-plus-plus详解
万字带你快速上手Redis自带客户端终端使用,以及第三方库Redis-plus-plus中的各种常用接口
2026-03-17 19:51:00
原创 详解Redis终端操作和Redis-plus-plus接口使用
万字带你快速上手redis,详细介绍终端中Redis的各种命令操作,以及第三方库Redis-plus-plus中封装的各种接口
2026-03-17 19:03:41
8
原创 Linux线程、线程同步、生产者与消费者模型
(1) 同步:使多个线程按照一定的顺序执行,从而避免线程饥饿的情况发生,比如一个线程到队列中取数据,但队列为空,就只能等待其他线程往其中插入数据。sem_t是信号量的类型,pshare表示用于处理进程间同步(非0)还是线程间同步(0),value是将信号量初始化的值。pthread_detach既可以有主线程调用,也可以有子线程本身调用,但是一个线程如果已经分离出去了,就不能再等待了。因为加锁和解锁都不是原子操作,所以在调用1处的解锁时,可能接触等待的条件已经满足,但是因为这不是原子操作。
2026-02-13 17:30:16
684
原创 Linux中的进程管理
其中,控制器对输入设备和存储器、输出设备、运算器都进行控制输入设备,可以包括磁盘(ROM),键盘,甚至是可触屏;存储器,这里不是指的磁盘,而是内存(RAM),cpu只和内存打交道,不只是cpu,所有设备,都只能和内存直接打交道;输出设备,通常是屏幕等中央处理器(cpu),包括运算器和控制器冯诺依曼体系结构的基本原理,就是存储程序和程序控制。计算机,就是按照指定的指令执行流程完成对程序的控制。
2026-02-07 10:09:00
590
原创 复习C++后,我又挖出了两万字的知识点
C++语法相对还是比较复杂的,现在放假了,正好细细捋一遍这些细碎的语法点和笔试点。本文整理了C++98的各种基础概念,以及类的成员、继承、多态和C++11新特性的知识点,其中对于面试时常考的手撕模拟也进行了整理,基本除了现代C++更新版本的知识,大多都有涉及(当然整理的是我本人复习一遍后觉着自己没掌握或者有价值的点)
2026-02-03 20:28:59
715
原创 ProtoBuf:proto3语法、更新消息、option选项
proto3语法规则,更新消息时的reserved字段,3.5后的未知字段,前后兼容性与option选项
2025-11-30 21:13:14
920
原创 详解mysql命令行操作与语言链接
这个类型比较有意思,他有点类似于C++中的string类型,最大长度是65535,但是还要花费1~3个字节来表示存放数据的大小,采取变长的方式,用多少开辟多少,至于能存放多少个字符,这件事和编码方式相关,比如utf8中一个中文字符为3个字节,但是gbk中一个中文字符为2个字节。除此之外,set在插入时,可以采用类似于linux文件权限的理解方法:即二进制比特位表示是否设置,比如说hobby这个set中,如果我插入3,那么就是插入的coding和walking这两个值(因为3的二进制是11);
2025-11-17 15:32:26
689
原创 Qt6 mainwindow常用组件整理
首先,在我们开发QMainWindow时,Qt会为我们自动创建一个QMenuBar,所以如果我们再直接手动创建一个就会导致原来的QMenuBar从对象树上被替代下来,导致内存泄漏。需要注意的是,在QDockWidget中添加组件不能像QStatusBar一样直接添加,需要先添加一个QWidget作为容器,再在这个容器当中添加我们想要的组件。让用户输入并获取输入信息,可以给用户提供一个列表(QStringList),也可以让用户手动输入。让用户选择文件并获取选择的文件的信息。获取用户选择的字体信息。
2025-11-11 16:26:49
430
原创 https协议原理(加解密、中间人、数据摘要、CA、签名等)
https除了TCP/IP相应结构之外,在应用层,与http不同,还会经过一次加密后再进入传输层。解密加密的概念:明文就是要传输的数据,他进行一系列变换之后形成密文,这就是加密;密文经过一系列变换形成明文,这就是解密而这个过程中需要的一个或多个中间数据,就是密钥。
2025-11-02 12:14:37
853
原创 Qt中的常用组件:QWidget篇
QPixmap用于展示图像,QCursor可以设置光标效果,比如我们可以先用图像文件构建QPixmap对象,需要的话可以使用scaled调整大小,再通过这个QPixmap构造QCursor,将其设置进我们所需要的小组件,比如QPushButton,同时如果需要的话,可以构建一个热点(即实际点击的位置),就能够实现将光标放在某个组件上时将光标替换为我们所需要的光标图像的效果。提供给用户一个日历(精确到年月日),能够让用户选择日期,并通过selectionChanged信号来获取用户选择的日期。
2025-10-30 19:58:42
1026
原创 OSI模型、网络地址、与协议
传输层+网络层都在操作系统内部,数据链路层是驱动程序,应用层是程序执行逻辑,也就是我们的代码,解决日常需求的网络程序。协议就是双方约定好的结构化的数据,读取的数据看成是什么东西:消息、地址等等(创建套接字、内容结构体绑定、收发消息、监听套接字和服务套接字)方案一:长字符串(序列化和反序列化,转化时转化成合法的结构体)方案二:结构体对象可以将结构体对象直接发送,但是可能存在跨平台问题,比如说C/C++/Java/Python这些对于结构体的对齐等等处理不一样导致信息传递存在误差。
2025-10-01 19:40:59
908
原创 CMake简易使用教程
示例是将项目名称设置为hello_world,VERSION是用来指定CMake版本,而下面的LANGUAGE是用来设置项目语言(project一定要在顶级构建目录(最初源文件的目录)中显示调用,否则CMake会报警告,并将语言设置为默认的C和C++,项目名称设置为project)前言:cmake能且仅能识别的cmake文件名称为CMakeLists.txt,有一个字母的错误都会导致cmake无法正常使用,同时,包含CMakeLists和源代码的最初的目录被称作顶级构建目录。
2025-09-07 19:37:16
600
原创 C++哈希进阶-位图
但是第二种方法对内存的要求太高,1G约等于10亿Byte,1G可存10/4个int,40 / (10 / 4)还是使用位图,开两个42亿9000万个比特位的空间,第一个代表2^1,第二个代表2^0。,10代表出现两次及以上,00代表未出现,01代表只出现一次,因此对位图进行封装就。因此大约需要16G,但是因为空间太大,只能将这些数放在硬盘中,而二分查找只能处理内存。3、一个文件中有100亿个整数,1G内存,找到所有出现次数不超过两次的整数。2、两个文件中都有一百亿个整数,找出两者的相同的数。
2025-08-13 21:44:02
558
原创 C++11特性整理(1)
1、右值和左值的核心区别就是能否取地址,英语中将两者叫做lvalue和rvalue,一般认为全称是left value和right value,但在C++中也有一种理解是local value和read value,因为左值能够找到具体的存储位置,而优质是临时对象、常量等无法取地址的所以叫做只读。1、C++98中只能使用{}对数组进行初始化,C++11中所有类型都可以用{}初始化,包括内置类型和自定义类型,自定义类型只需要提供intializer_list<T>类型的构造函数。
2025-08-10 12:39:52
587
原创 Linux机器可直接使用的自动化编译文件
一下文件为个人应用,可以直接cp到相应项目的目录,每条make指令都有相应的中文注释,修改即可实现个性化使用。还在为了Linux机器上一遍遍输入编译指令苦恼吗?你需要make指令以及自己的makefile文件!在makefile中写入自己的个性化指令,让编译速度飞起,支持多文件编译。
2025-08-07 18:20:08
578
原创 C++中哈希的开放定址法和哈希桶
HashMap unordered_map 哈希表——遍历无序HashSet unordered_set 单向迭代器增删查效率O(1)Map 红黑树——中序遍历有序Set 双向迭代器增删查效率O(logN)哈希又称散列(hash),是一种组织数据的方式,本质是通过哈希函数把关键字Key根存储位置建立一个映射关系查找时通过这个哈希函数计算出Key存储的位置,进行快速查找一、开放定址法。
2025-07-31 17:31:34
1313
原创 封装模拟实现的红黑树以实现set和map
难点总结:1、set中一个节点放一个值,而map是Key-Value结构,因此在红黑树内部比较的时候为了能够实现泛型,要用仿函数实现set直接取出节点的值比较,而对于map直接取出Key-Value中的Key进行比较(虽然pair支持比较,但是规则是先比较Key,再比较Value,与我们需求不同)2、迭代器的实现:核心就是改变指针的指向,需要实现的运算符重载有()、* (主要是set在使用)、->(主要是map使用) 、++、!= 、==3、关于是否可以修改,对于set来说,每个节点的值都不可以修改。
2025-07-28 16:46:11
637
原创 C++红黑树
红黑树是一棵二叉搜索树,每个节点上增加一个存储位来表示结点的颜色通过对任何一个从根到叶子结点的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出二倍,因此接近平衡(最长路径不超过最短路径的二倍)
2025-07-27 18:22:17
552
原创 C++map和set
顺序容器中的元素是按照他们在容器中的存储位置来顺序保存和访问的,比如list、string、vector、deque、array。set底层使用红黑树来实现,增删查效率是O(logN),迭代器遍历采用的是中序遍历(双向迭代器)关联式容器也是用来存储数据的,逻辑结构通常是非线性结构,两个位置交换一下存储结构就被破坏了。map一个节点里存两个值,插入的是pair,里面有first和second两个数据。序列式容器逻辑结构为线性序列的数据结构,两个存储的值之间一般没有紧密关联,
2025-07-24 18:18:48
798
原创 贪心算法简介
其实是贪心策略,是解决问题的策略,局部最优->全局最优解释:1、将解决问题的过程分为若干步2、解决每一步的时候,都选择当前看起来最优的解法3、希望得到全局最优解。
2025-07-23 21:23:42
1435
原创 C++二叉搜索树
二叉搜索树是一棵空树,或者是具有以下性质的二叉树:1、若左子树不为空,则左子树上所有节点的值都小于等于根节点的值2、若右子树不为空,则右子树上所有节点的值都大于等于根节点的值3、他的左右子树也分别为二叉搜索树——和堆还不一样,它不区分左右子树,要么都小,要么都大,或者相等二叉搜索树的结构决定了查找一个值时,只要根的值比查找的值大,就往左走;只要根的值比查找的值小,就往右走;直至最后走到空,若还没有找到,就结束,没有这个值。
2025-07-21 16:13:49
656
原创 C++虚函数易错点整理
虚函数只能是成员函数,友元函数不能作为虚函数·重载是在相同作用域中的同名函数,拥有不同的参数(类型或者是数量不同),返回类型可以不同,来进行行为的函数·重写就是覆盖,针对多态,重定义就是隐藏,两者都是要在同一个继承体系当中,但是父类和子类都有自己独立的作用域,因此重写和重定义不是重载;而重写要求三相同(函数名、返回类型、参数),但是协变除外(可以返回基类或子类的指针或者引用),在以上体系中只要不构成覆盖,就构成隐藏。
2025-07-20 21:00:39
466
原创 C++多态知识点真理
多态,通俗来说就是多种形态,分为编译时多态(静态多态)和运行时多态(动态多态)编译时多态主要就是前面讲的函数多态和函数模版,通过参数不同达到多种形态,将它叫做编译时多态,是因为他们的实参传给形参的过程中实现的一般将编译时成为静态,将运行时成为动态运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形态class Apublic:virtual void print() final//final修饰的虚函数无法被重写。
2025-07-20 17:51:42
1109
原创 C++继承与组合
/对父类的成员使用父类的运算符重载。// 1、子类的构造函数必须调用父类的构造函数构造父类的部分,如果父类没有默认构造函数。// ·组合是一种黑箱复用对象的内部细节不可见,要求被组合的对象有定义良好的关系,耦合度更低。// 2、当子类和父类有同名的成员变量时,子类会限制父类对同类成员变量的访问,这叫做隐藏。// (父类的private子类不能访问,因此如果继承的话子类中父类的部分无法被初始化)//迭代器的设计就是封装,有可能是原生指针,有可能是类封装的指针,屏蔽了底层的复杂细节。
2025-07-19 16:27:06
1157
原创 C++中list各种基本接口的模拟实现
在一个就是关于iterator和const_iterator的实现问题,比较简单的方法可以是先实现一个iterator,在复制一份,将其中的解引用和箭头更改为const版本;两种方法在效率上没有区别,但第二种相对更加简洁。因为我们的链表在内存中不是连续存储的,所以不能够使用原生指针作为迭代器,所以需要单独封装一个类,来实现迭代器比如解引用、++、--、->、!三、还有一个可以注意一下的小点是struct默认是公有,class默认是私有,因此迭代器作为非常常用的类可以将它写为struct,访问更加方便。
2025-07-15 17:20:53
475
原创 vector各种接口的模拟实现
其实相比string,vector的接口就要简单许多而且更加规范清晰,但是这里也有我们需要注意的问题,一个是浅拷贝的问题,另一个就是迭代器失效首先是浅拷贝,这里最容易给自己挖坑的就是在reserve()函数的时候,直接用memcpy()去一个字节一个字节的拷贝,一但调用时使用的是自定义类型,就会因为浅拷贝崩溃(例如vector<string>);
2025-07-13 15:59:04
510
原创 C语言易错点(二)
本文整理了C语言编程中的12个关键知识点:1)转义字符用法;2)除法和取模运算规则;3)大小端字节序判断方法;4)printf的参数传递机制;5)位段的使用及跨平台问题;6)枚举类型的特性;7)文件读写操作要点;8)预处理、编译、链接的区别;9)二进制位交换宏实现;10)offsetof宏的实现原理;11)头文件防护机制;12)动态内存常见错误。这些内容涵盖了C语言底层特性、内存管理、编译过程等核心概念,对理解C语言工作机制具有重要参考价值。
2025-07-11 15:00:40
1382
原创 C语言易错点整理(一)
9、变长数组是用整型变量或表达式来定义数组大小,他的大小一定在运行的时候确定,不是在编译的时候,而且一但确定了就不能再改变(注意区分柔性数组)1、对于字符数组而言,只是将这些字符放进我们所开辟的空间里,不能直接用strlen计算,因为没有"\0",会导致出现随机值,例如一下代码。13、对于一个表达式,就是我们已经确定了优先级以及结合性,也不一定能确定计算结果,比如以下代码,在vs和Linux gcc测试结果就不同。14、A中const修饰的是*p表示的是*p不可修改,即p指向的对象不可以被修改;
2025-07-10 17:38:40
544
原创 C和C++内存管理方式
而realloc是为目标对象申请一块指定大小的空间,再将对象直接迁移过去,或者直接在目标对象之后开辟空间,让目标对象空间变为指定大小。在对象数组头上多开的4个字节,其实是为了告诉delete【】我要释放多少空间,并告诉delete第一个对象的前一个空间也要释放。//——new底层调用的是malloc,而new【】调用了10次malloc。//在编译器开多个对象的数组时,会在头上多开四个字节的空间,用于存储数组中对象个数。
2025-07-03 11:10:13
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
7