自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 为什么会有深拷贝和浅拷贝?

深拷贝和浅拷贝是针对对象属性为对象的,因为基本数据类型在进行赋值操作时(也就是拷贝)是直接将值赋给了新的变量,也就是该变量是原变量的一个副本,这个时候你修改两者中的任何一个的值都不会影响另一个,而对于对象或者引用数据来说在进行浅拷贝时,只是将对象的引用复制了一份,也就内存地址,即两个不同的变量指向了同一个内存地址,那么在改变任一个变量的值都是该变这个内存地址的所存储的值,所以两个变量的值都会改变。

2023-09-20 22:55:58 126

原创 【Linux】进程理解

进程是系统进行资源分配的基本单位,是程序加载到内存后的执行过程。进程一般由数据段,代码段和进程控制块三部分组成。系统通过进程控制块感知进程的存在并对进程进行控制。由于进程之间空间相互独立,多进程比多线程更安全,一个进程基本上不会影响另外一个进程。进程fork以后,遵循读时共享写时复制的机制。文件描述符和mmap建立的映射区。子进程的进程ID,定时器,未决信号集和父进程不同。

2023-09-20 22:55:12 167

原创 【Linux】字节序理解

大端法:7f存在0x1003 5f存0x1002 3f存0x1001 1f存0x1000 低存高。小端法:7f存在0x1000 5f存0x1001 3f存0x1002 1f存0x1003 低存低。比如0x1f3f5f7f 地址0x1000 0x1001 0x1002 0x1003。

2023-09-20 22:55:06 284

原创 【Linux】死锁理解

因为资源调度的方式不合理或者资源的稀缺性,导致进程间的相互等待。互斥条件,请求和保持条件,环路等待条件,不可剥夺条件。死锁的预防只要破坏死锁产生的四个必要条件。通常采用预先静态分配方法,可以破坏请求和保持条件。死锁的避免:采用银行家算法,只要系统处于安全状态,系统便可避免死锁。死锁的解决:撤销进程,剥夺资源。

2023-09-20 22:54:55 190

原创 【Linux】指针常量和常量指针

这个是指针常量,不能修改指向【其实就是引用的原型】:可以理解为const是否限制了星号。

2023-09-20 22:54:43 143

原创 【Qt】Qt中的中心部件意义

需要注意的是,setCentralWidget()函数会将之前设置的中心部件替换为新的中心部件。在Qt中,中心部件是指QMainWindow类中的一个QWidget对象,它被放置在主窗口的中心区域。中心部件在整个窗口中占据主要的显示区域,用于显示应用程序的主要内容。使用setCentralWidget()函数可以方便地设置窗口的中心部件,使其占据主要区域,并显示应用程序的主要内容。总而言之,中心部件在Qt中具有重要的意义,它是应用程序的核心显示区域,用于展示主要内容和提供交互功能。

2023-09-15 23:10:55 2120

原创 【Qt】Unicode编码作用 ,以及在Qt中的理解

Unicode编码的作用是提供一个统一的字符标准,解决字符编码混乱问题

2023-09-15 19:22:44 1114

原创 【Qt】Qt中将字符串转换为数字类型的函数总结以及用法示例

通过这些函数,我们可以方便地将字符串转换为数字类型。

2023-09-15 19:11:24 2836

原创 【Qt】Qt中关联容器QMap,QMultiMap,QHash,QMultiHash 的理解

详解Qt中的四种关联容器,并回答了QMultiHash和QMultiMap到底有哪些区别的问题

2023-09-15 18:35:59 865

原创 【C++】Qt的属性系统,简单示例

这个例子中,text属性用于设置和获取标签的文本。当按钮被点击时,text属性会被修改,标签的文本也会相应地改变。

2023-09-15 18:02:42 210

原创 【Linux】Base64编码

Mz1 对这3个字符进行一个Base64编码理解,把他化为2进制数据,在以6个位为单位分割,然后用这个16进制化为10进制,查表得出阿斯卡码对应的字符,那么这个字符就是base64编码,因为64个字符有64阿斯卡码。相关截图源于一个b站up主,我是记录下学习用的。

2023-09-11 22:54:04 218

原创 【C++】auto关键字推导规则

(1)当不声明为指针或是引用时,auto的推导结果和初始化表达式抛弃引用和const属性限定符后的类型一致,图上面的e和f。(2)当声明为指针或是引用时,auto的推导结果将保持初始化表达式的const属性。

2023-09-06 22:38:25 120

原创 【C++】c++内存结构

栈 stack :是那些编译器在需要时分配,在不需要时自动清除的存储区。存放在栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据也就自动释放了。在 C 语言中,未初始化的放在.bss段中,初始化的放在.data段中;堆 heap :由 new 分配的内存块,其释放编译器不去管,由程序员自己控制。代码区 (.text段) :存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)。常量存储区 (.rodata段) :存放常量,不允许修改(通过非正当手段也可以修改)。

2023-09-06 21:00:30 266

原创 【Linux】协程理解

协程是一种比线程更加轻量级的存在,一个线程可以拥有多个协程。无论是进程还是线程,都是由操作系统所管理的。而协程不是被OS所管理,而完全是由程序所控制(也就是在用户态执行)。

2023-09-06 20:27:01 34

原创 【Linux】Epoll触发模式

讲讲epoll的边沿触发和水平触发水平触发:如果epoll_wait缓冲区有数据则直接返回。边沿触发:如果一次没有读完epoll_wait缓冲区中的数据,则只有当另外有数据再写入时,才返回。 使用边沿触发和非阻塞IO来达到水平触发的效果,减少了epoll_wait的调用次数,提高了效率。 边沿触发可以只读取缓存区中前面的部分信息,进而分析后面的信息是否有用,如果无用则直接丢弃。

2023-09-06 20:26:49 151

原创 【C++】map和unordered_map

空间占用率高,因为map内部实现了红黑树,虽然提高了运行效率,但是因为每一个节点都需要额外保存父节点,孩子节点以及红/黑性质,使得每一个节点都占用大量的空间。适用处,对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map。红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,因此效率非常的高。有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作。因为内部实现了哈希表,因此其查找速度非常的快。

2023-09-06 20:26:40 101

原创 【算法奥义】二叉搜索树的最近公共祖先

这样理解,一个人从郑州到上海,一个交叉口就是一个节点,两个人各走各的,把节点都存储到数组中,然后遍历,第一个不相等节点,就是二者最小公共祖先节点。第二种解法:两个人一起走,突然有个路口要分离,【需要进行一次判断】,那么这个就是最小公共祖先,省去了一部分存储,

2023-09-06 20:26:28 74

原创 【C++】析构函数尽量是虚函数

为了实现多态的动态绑定,通常将基类指针指向派生类对象,当指针销毁时,如果析构函数不是虚函数,根据析构函数在继承中的调用顺序,则派生类对象将不会被析构,造成内存泄漏。析构函数不是虚函数容易引起。

2023-09-06 20:26:17 84

原创 【Linux】mmap存储映射

将磁盘空间映射到进程空间,使进程可以采用指针的方式操作这段内存,而不用调用read和write函数。提高了读写的效率,同时也可以实现进程间的通信。

2023-09-05 15:44:15 37

原创 【Linux】网络编程IO理解

它要求主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程。读写数据,接受新的连接以及处理客户请求均在工作线程中完成。它将所有IO操作都交给主线程和内核来处理,工作线程仅仅负责业务逻辑。

2023-09-05 15:43:32 124

原创 【Linux】select,poll,epoll区别

select poll epollselect单个进程打开的文件描述符有上限,为1024或者2048。select对于有响应的事件需要轮询来查找满足要求的事件。每次调用select都需要把文件描述符集合从用户态拷贝到内核态。poll描述fd的集合是链式的,解决了打开文件描述符数量的限制。同样需要轮询满足事件的文件描述符。也需要进行用户态和内核态的文件描述符拷贝。poll是水平触发。epoll使用了mmap内存映射技术和红黑树的数据结构。通过三个函数来监听多个文件描述符,同时不随数量的上升效率呈线性的

2023-09-05 15:42:21 142

原创 【Linux】字节序理解

大端法:7f存在0x1003 5f存0x1002 3f存0x1001 1f存0x1000 低存高。小端法:7f存在0x1000 5f存0x1001 3f存0x1002 1f存0x1003 低存低。比如0x1f3f5f7f 地址0x1000 0x1001 0x1002 0x1003。

2023-09-05 15:39:51 48

原创 【Linux】一些常见查看各种各样信息的命令

Linux命令find命令,用来查找文件。常用的按照名字查找-name,按照文件类型查找-type,linux常用的文件类型有七种,普通文件,目录文件,管道,套接字,软链接,块设备,字符设备。还可以按照文件大小查询-size。grep命令,按照文件内容来查找。使用规则是grep option pattern fileps auxcurl命令 访问一个网页df查看磁盘大小du查看目录大小free -h 查看内存大小和使用情况top查看系统的实时负载netstat -ta 查看监听的TCP

2023-09-05 15:37:09 712

原创 【Linux】管道理解

管道是半双工的,数据只能单向流动,不可重复读取,

2023-09-05 15:36:29 23

原创 【Linux】进程调度方式

进程调度方式抢占式:立马停止。非抢占式:时间片用完或者等待资源时,再调用另一个进程。进程调度算法先来先服务短作业优先优先级调度时间片轮转高响应比优先

2023-09-05 15:35:40 25

原创 【Linux】线程同步及资源共享

线程间同步互斥锁读写锁(读时共享,写时互斥)条件变量信号量(互斥锁的升级版)自旋锁(可以避免进程或线程上下文的开销)线程共享资源文件描述符表(打开的文件)进程用户ID和进程组ID进程的内存地址空间.text代码段 .data数据段 .bss heap堆区 全局变量 静态变量每种信号的处理方式进程的当前目录线程独享资源线程栈寄存器组的值线程ID错误返回码errno变量线程信号屏蔽字线程优先级

2023-09-05 15:34:51 47

原创 【Linux】进程间通信与同步

IPC进程间通信无名管道pipe(血缘关系的进程)有名管道fifo (无血缘关系的进程)共享内存信号(开销小)消息队列信号量套接字进程间同步文件锁信号量

2023-09-05 15:33:12 135

原创 【Linux】进程和线程区别

进程线程的本质区别进程更安全,一个进程完全不会影响另外的进程。进程间通信比线程间通信的性能差很多。线程切换开销更低。

2023-09-05 15:28:44 19

原创 【Linux】线程理解

线程是CPU调度的基本单位。一个进程可以包含多个线程,线程自己基本不拥有系统资源,但是它可以和同属于一个进程的其他线程共享进程所拥有的全部资源。多线程之间对内存共享,线程间通信可以直接基于共享内存来实现,比多进程之间通信更轻量。多线程之间切换不需要切换虚拟内存空间、文件描述符等,所以线程的上下文切换也比多进程轻量。

2023-09-05 15:28:12 51

原创 【Linux】进程理解

进程是系统进行资源分配的基本单位,是程序加载到内存后的执行过程。进程一般由数据段,代码段和进程控制块三部分组成。系统通过进程控制块感知进程的存在并对进程进行控制。由于进程之间空间相互独立,多进程比多线程更安全,一个进程基本上不会影响另外一个进程。进程fork以后,遵循读时共享写时复制的机制。文件描述符和mmap建立的映射区。子进程的进程ID,定时器,未决信号集和父进程不同。

2023-09-05 15:20:53 406

原创 【Linux】虚拟地址空间理解

虚拟地址是操作系统管理内存的一种方式。**方便不同进程使用的虚拟地址彼此隔离。方便物理内存中不相邻的内存在虚拟地址上视为连续的来使用。虚拟内存对实际内存有保护作用。

2023-09-05 15:19:36 41

原创 【Linux】常见并发模式理解

半同步半异步模式:同步线程用于处理客户逻辑,异步线程用于处理IO事件。异步线程监听到客户请求后,就将其封装成请求对象并插入到请求队列中,请求队列将通知某个工作在同步模式下的工作线程来读取并处理该请求对象。半同步半反应堆模式采用的事件处理模式是reactor模式:它要求工作线程自己从socket上读取客户请求和往socket写入服务器应答。半同步半反应堆也可以模拟proactor模式,即。问题:主线程和工作线程共享请求队列需要加锁。工作线程较少时可能产生请求任务堆积。在这种情况下,主线程会将应用程序数据,

2023-09-05 15:16:40 47

原创 【Linux】Epoll Reactor【反应堆】模式的工作流程

Reactor模式的工作流程主线程往epoll内核事件表中注册socket上的就绪事件。主线程调用epoll_wait等待socket上有数据可读。当socket上有数据可读时,epoll_wait通知主线程。主线程将socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒,它从socket读取数据,并处理客户请求,然后往epoll内核事件表中注册该socket上的写就绪事件。主线程调用epoll_wait等待socket可写。当socket可写时,epoll_wait通知主线程

2023-09-05 15:14:59 460

原创 【Linux】Libevent相关小知识总结

Libevent是基于事件的,也就是说,相当于去注册一个事件,当这个事件发生的话,那么就会调用回调函数。

2023-09-03 18:40:39 493

原创 【Linux】多路IO转接问题-select

首先设置一个lfd绑定服务端地址结构,用于监听新的连接。1.如果是lfd:那么可能是新的连接进来,就要调用accept阻塞监听获得这个新的连接,将fd加入到数组中;2.其他fd,有可能是需要断开连接,也有可能是要有数据传输。

2023-09-03 14:12:19 304

原创 【算法奥义】最大矩形问题

【代码】【算法奥义】最大矩形问题。

2023-09-02 11:34:40 890 1

原创 【C语言奥义】char和char数组和char*总是搞混

这边我直接展示个图大家看下:然后我们看下运行的结果:为啥第一行的结尾会有个a呢?因为char数组市存储单个字符的,没有结束符,我们的字符串都应该有结束符,来告诉编译器结束位置,所以需要给char数组后面加一个’\0’元素:这样就没有问题了。笔者实力较差,如果出错地方请高手指点一二,评论私信都可以,谢谢!

2023-08-31 21:23:39 112

原创 【算法奥义】关于算法时间复杂度和空间复杂度的总结

2023-08-30 22:42:32 101

原创 【分割线-----------】毕业后经历从此开始

呜呜呜,失业中,从此记录心路历程。

2023-08-26 22:37:53 25

原创 【选择排序—十大排序】排序源码,C++实现

【代码】【选择排序—十大排序】排序源码,C++实现。

2023-07-21 20:30:59 74

空空如也

空空如也

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

TA关注的人

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