自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 第一次复习C++,我又挖出了两万字的知识点

C++语法相对还是比较复杂的,现在放假了,正好细细捋一遍这些细碎的语法点和笔试点。本文整理了C++98的各种基础概念,以及类的成员、继承、多态和C++11新特性的知识点,其中对于面试时常考的手撕模拟也进行了整理,基本除了现代C++更新版本的知识,大多都有涉及(当然整理的是我本人复习一遍后觉着自己没掌握或者有价值的点)

2026-02-03 20:28:59 17

原创 二刷C语言后,一万字整理细碎知识点

整理C语言中在笔试、面试中常考,但日常写代码时可能遗忘的基础知识点

2026-01-22 21:12:07 3016 7

原创 git工作原理、个人使用到多人协作开发与git FLOW模型

详细介绍Git——这一在企业中经常使用的版本控制系统的工作原理、使用方法

2025-12-14 00:31:19 663

原创 ProtoBuf:proto3语法、更新消息、option选项

proto3语法规则,更新消息时的reserved字段,3.5后的未知字段,前后兼容性与option选项

2025-11-30 21:13:14 899

原创 html、css、JavaScript基础

基于以下知识,就可以做一些简单的页面设计。

2025-11-27 20:46:50 852

原创 详解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 684

原创 Qt6 mainwindow常用组件整理

首先,在我们开发QMainWindow时,Qt会为我们自动创建一个QMenuBar,所以如果我们再直接手动创建一个就会导致原来的QMenuBar从对象树上被替代下来,导致内存泄漏。需要注意的是,在QDockWidget中添加组件不能像QStatusBar一样直接添加,需要先添加一个QWidget作为容器,再在这个容器当中添加我们想要的组件。让用户输入并获取输入信息,可以给用户提供一个列表(QStringList),也可以让用户手动输入。让用户选择文件并获取选择的文件的信息。获取用户选择的字体信息。

2025-11-11 16:26:49 415

原创 https协议原理(加解密、中间人、数据摘要、CA、签名等)

https除了TCP/IP相应结构之外,在应用层,与http不同,还会经过一次加密后再进入传输层。解密加密的概念:明文就是要传输的数据,他进行一系列变换之后形成密文,这就是加密;密文经过一系列变换形成明文,这就是解密而这个过程中需要的一个或多个中间数据,就是密钥。

2025-11-02 12:14:37 830

原创 Qt中的常用组件:QWidget篇

QPixmap用于展示图像,QCursor可以设置光标效果,比如我们可以先用图像文件构建QPixmap对象,需要的话可以使用scaled调整大小,再通过这个QPixmap构造QCursor,将其设置进我们所需要的小组件,比如QPushButton,同时如果需要的话,可以构建一个热点(即实际点击的位置),就能够实现将光标放在某个组件上时将光标替换为我们所需要的光标图像的效果。提供给用户一个日历(精确到年月日),能够让用户选择日期,并通过selectionChanged信号来获取用户选择的日期。

2025-10-30 19:58:42 1005

原创 OSI模型、网络地址、与协议

传输层+网络层都在操作系统内部,数据链路层是驱动程序,应用层是程序执行逻辑,也就是我们的代码,解决日常需求的网络程序。协议就是双方约定好的结构化的数据,读取的数据看成是什么东西:消息、地址等等(创建套接字、内容结构体绑定、收发消息、监听套接字和服务套接字)方案一:长字符串(序列化和反序列化,转化时转化成合法的结构体)方案二:结构体对象可以将结构体对象直接发送,但是可能存在跨平台问题,比如说C/C++/Java/Python这些对于结构体的对齐等等处理不一样导致信息传递存在误差。

2025-10-01 19:40:59 893

原创 CMake简易使用教程

示例是将项目名称设置为hello_world,VERSION是用来指定CMake版本,而下面的LANGUAGE是用来设置项目语言(project一定要在顶级构建目录(最初源文件的目录)中显示调用,否则CMake会报警告,并将语言设置为默认的C和C++,项目名称设置为project)前言:cmake能且仅能识别的cmake文件名称为CMakeLists.txt,有一个字母的错误都会导致cmake无法正常使用,同时,包含CMakeLists和源代码的最初的目录被称作顶级构建目录。

2025-09-07 19:37:16 589

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

原创 C++菱形虚拟继承

以下程序配合本地编译器的内存窗口使用。

2025-08-12 22:19:44 292

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

原创 Linux机器可直接使用的自动化编译文件

一下文件为个人应用,可以直接cp到相应项目的目录,每条make指令都有相应的中文注释,修改即可实现个性化使用。还在为了Linux机器上一遍遍输入编译指令苦恼吗?你需要make指令以及自己的makefile文件!在makefile中写入自己的个性化指令,让编译速度飞起,支持多文件编译。

2025-08-07 18:20:08 570

原创 C++中哈希的开放定址法和哈希桶

HashMap unordered_map 哈希表——遍历无序HashSet unordered_set 单向迭代器增删查效率O(1)Map 红黑树——中序遍历有序Set 双向迭代器增删查效率O(logN)哈希又称散列(hash),是一种组织数据的方式,本质是通过哈希函数把关键字Key根存储位置建立一个映射关系查找时通过这个哈希函数计算出Key存储的位置,进行快速查找一、开放定址法。

2025-07-31 17:31:34 1298

原创 封装模拟实现的红黑树以实现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 628

原创 C++红黑树

红黑树是一棵二叉搜索树,每个节点上增加一个存储位来表示结点的颜色通过对任何一个从根到叶子结点的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出二倍,因此接近平衡(最长路径不超过最短路径的二倍)

2025-07-27 18:22:17 540

原创 闭上眼睛仔细看,原来是我的复旦大学通知书来啦

2025-07-25 15:09:38 310

原创 C++map和set

顺序容器中的元素是按照他们在容器中的存储位置来顺序保存和访问的,比如list、string、vector、deque、array。set底层使用红黑树来实现,增删查效率是O(logN),迭代器遍历采用的是中序遍历(双向迭代器)关联式容器也是用来存储数据的,逻辑结构通常是非线性结构,两个位置交换一下存储结构就被破坏了。map一个节点里存两个值,插入的是pair,里面有first和second两个数据。序列式容器逻辑结构为线性序列的数据结构,两个存储的值之间一般没有紧密关联,

2025-07-24 18:18:48 790

原创 贪心算法简介

其实是贪心策略,是解决问题的策略,局部最优->全局最优解释:1、将解决问题的过程分为若干步2、解决每一步的时候,都选择当前看起来最优的解法3、希望得到全局最优解。

2025-07-23 21:23:42 1417

原创 C++二叉搜索树

二叉搜索树是一棵空树,或者是具有以下性质的二叉树:1、若左子树不为空,则左子树上所有节点的值都小于等于根节点的值2、若右子树不为空,则右子树上所有节点的值都大于等于根节点的值3、他的左右子树也分别为二叉搜索树——和堆还不一样,它不区分左右子树,要么都小,要么都大,或者相等二叉搜索树的结构决定了查找一个值时,只要根的值比查找的值大,就往左走;只要根的值比查找的值小,就往右走;直至最后走到空,若还没有找到,就结束,没有这个值。

2025-07-21 16:13:49 647

原创 C++虚函数易错点整理

虚函数只能是成员函数,友元函数不能作为虚函数·重载是在相同作用域中的同名函数,拥有不同的参数(类型或者是数量不同),返回类型可以不同,来进行行为的函数·重写就是覆盖,针对多态,重定义就是隐藏,两者都是要在同一个继承体系当中,但是父类和子类都有自己独立的作用域,因此重写和重定义不是重载;而重写要求三相同(函数名、返回类型、参数),但是协变除外(可以返回基类或子类的指针或者引用),在以上体系中只要不构成覆盖,就构成隐藏。

2025-07-20 21:00:39 459

原创 C++多态知识点真理

多态,通俗来说就是多种形态,分为编译时多态(静态多态)和运行时多态(动态多态)编译时多态主要就是前面讲的函数多态和函数模版,通过参数不同达到多种形态,将它叫做编译时多态,是因为他们的实参传给形参的过程中实现的一般将编译时成为静态,将运行时成为动态运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形态class Apublic:virtual void print() final//final修饰的虚函数无法被重写。

2025-07-20 17:51:42 1106

原创 C++继承与组合

/对父类的成员使用父类的运算符重载。// 1、子类的构造函数必须调用父类的构造函数构造父类的部分,如果父类没有默认构造函数。// ·组合是一种黑箱复用对象的内部细节不可见,要求被组合的对象有定义良好的关系,耦合度更低。// 2、当子类和父类有同名的成员变量时,子类会限制父类对同类成员变量的访问,这叫做隐藏。// (父类的private子类不能访问,因此如果继承的话子类中父类的部分无法被初始化)//迭代器的设计就是封装,有可能是原生指针,有可能是类封装的指针,屏蔽了底层的复杂细节。

2025-07-19 16:27:06 1143

原创 C++中list各种基本接口的模拟实现

在一个就是关于iterator和const_iterator的实现问题,比较简单的方法可以是先实现一个iterator,在复制一份,将其中的解引用和箭头更改为const版本;两种方法在效率上没有区别,但第二种相对更加简洁。因为我们的链表在内存中不是连续存储的,所以不能够使用原生指针作为迭代器,所以需要单独封装一个类,来实现迭代器比如解引用、++、--、->、!三、还有一个可以注意一下的小点是struct默认是公有,class默认是私有,因此迭代器作为非常常用的类可以将它写为struct,访问更加方便。

2025-07-15 17:20:53 463

原创 vector各种接口的模拟实现

其实相比string,vector的接口就要简单许多而且更加规范清晰,但是这里也有我们需要注意的问题,一个是浅拷贝的问题,另一个就是迭代器失效首先是浅拷贝,这里最容易给自己挖坑的就是在reserve()函数的时候,直接用memcpy()去一个字节一个字节的拷贝,一但调用时使用的是自定义类型,就会因为浅拷贝崩溃(例如vector<string>);

2025-07-13 15:59:04 500

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

原创 C语言易错点整理(一)

9、变长数组是用整型变量或表达式来定义数组大小,他的大小一定在运行的时候确定,不是在编译的时候,而且一但确定了就不能再改变(注意区分柔性数组)1、对于字符数组而言,只是将这些字符放进我们所开辟的空间里,不能直接用strlen计算,因为没有"\0",会导致出现随机值,例如一下代码。13、对于一个表达式,就是我们已经确定了优先级以及结合性,也不一定能确定计算结果,比如以下代码,在vs和Linux gcc测试结果就不同。14、A中const修饰的是*p表示的是*p不可修改,即p指向的对象不可以被修改;

2025-07-10 17:38:40 529

原创 C和C++内存管理方式

而realloc是为目标对象申请一块指定大小的空间,再将对象直接迁移过去,或者直接在目标对象之后开辟空间,让目标对象空间变为指定大小。在对象数组头上多开的4个字节,其实是为了告诉delete【】我要释放多少空间,并告诉delete第一个对象的前一个空间也要释放。//——new底层调用的是malloc,而new【】调用了10次malloc。//在编译器开多个对象的数组时,会在头上多开四个字节的空间,用于存储数组中对象个数。

2025-07-03 11:10:13 464

原创 C/C++内存分布

—全局数据、静态数据放在数据段(静态区)int num1[10] = {1, 2, 3, 4};*pchar3——常量区。

2025-07-02 19:02:10 513

原创 类和对象3

/ //初始化列表->缺省值(不是在构造函数里写的,是在声明这个地方)->内置类型(不确定是否初始化》/自定义类型(调用对应的默认构造)// 是在一个类里定义的另一个类,是包含它的类的友元,并且受到包含他的类的访问限制(要先访问外面的在访问里面的)// //成员变量的定义放在初始化列表里,每个成员变量都会走初始化列表,初始化列表里不写也会走。//const只有一次复制的机会,只能在定义的地方初始化。// //初始化列表初始化的顺序按照声明里给的顺序,与初始化列表里的顺序无关。

2025-07-02 17:34:11 466

原创 类和对象中2

/ Date& operator= (const Date& d)//这里也可以传值,但最好传引用,可以减少拷贝。// //Date(const Date& d)//这里用别名的话,就不会传参,也就不会形成拷贝构造。// //每次拷贝都要传参,而传参又要调用拷贝构造,最后就会因为没有结束条件而引发无穷递归。// //没有显示定义,编译器会自动生成,重载行为跟默认拷贝构造类似,会完成浅拷贝,// //这里如果传值参的话,就会引发无穷递归,因为每次传参都要调用拷贝构造。

2025-06-30 15:39:42 623

原创 【无标题】

/其实类里的每个成员变量都是这样访问的。// // 因为CPU有数据总线,规定必须从固定的整数倍位置开始读,每次读固定的整数字节。// //结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。// // 空间换时间,CPU读取内存数据的时候,不是能够从任意位置开始读的。// 析构函数和构造函数相反,不是完成对对象本身的销毁,完成的是对象中的资源清理。// //当有嵌套结构体时,嵌套的结构体对齐到自己的最大对齐数的整数倍处。

2025-06-29 20:44:20 339

原创 C++基本语法与类和对象一

/这里d的整型部分会给一个临时对象,而ri是这个临时对象的别名,而临时对象具有常性。//}这里就是野指针一样的东西,因为a建立在栈上,用完即销毁,这里返回的引用是野指针一样的东西,编译会给警告。//namespace 本质是定义一个域,不同的域可以有相同的命名,相同的与不可以有相同的名。// //cout是ostream类对象,主要面向窄字符的标准输出流,有自动类型识别。//rbb是临时对象的别名。//nullptr是一个特殊的关键字,是一种特殊类型的字面常量,可以转换成任意指针类型,

2025-06-28 15:44:03 992

原创 常见排序算法整理

(比如说第三个位置是最大值,将最大值换到是最小值的首位(假设),如果这时候第二位也是最小值,则顺序发生改变)稳定性:相同的值先后顺序排完后是否发生变化:一般情况下没问题,但比如排结构体的时候很有意义。现规定,总分相同,看语文成绩,所以我们可以:(有点类似于基数排序的思想)(如果使用稳定的排序的话,可以保证相同的总分,语文分高的在前面)(相同的数据有可能预排序时分到了不同的组里面)(可以保证每个值插入相等的值的后面)(快排要走递归,递归要走logN层)2、再按总分排序(稳定的排序)(跨位置交换的都很不稳定)

2025-06-25 16:23:54 612

原创 二叉树的性质

在后序的过程中,每增加一个度为1的,这个节点有一定是由度为0的节点过来的,即增加一个度为1的,就会减少一个度为0的,但也多出了另一个度为0的;若增加一个度为2的,度为2的,一定度为1的变过来的,会增加一个度为0的,减少的是度为1的。三、对于任何一棵二叉树,度为0的节点即叶节点(n0)的数量一定比度为2的分支节点(n2)多一个。四、完全二叉树中度为1的节点的个数要么是1,要么是0(具体有做题的时候式子是否成立可得)二、若规定根节点的层数为1,则深度为h的二叉树最大节点数是2^h-1。3、右孩子为左孩子加一。

2025-06-22 21:20:43 219

原创 链式二叉树经典题目

6、给定一个字符数组,用数组中的每个元素构建一个二叉树,若为空格,则用#表示,在树中为NULL,最后中序遍历,输出树中的所有元素。// //这里的int* returnSize是为了收到数组的个数,而采用整型指针的原因是为了修改实参。// if (p == NULL || q == NULL)//其中一个为空,另一个不为空。//前序遍历一个二叉树,将每个数放入一个数组中,并让使用者的主函数里关于二叉树大小的局部变量改变。// //找到这棵树的所有子树。//判断一棵树是不是轴对称的树。

2025-06-21 17:38:46 735

空空如也

空空如也

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

TA关注的人

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