- 博客(79)
- 资源 (1)
- 收藏
- 关注

原创 剑指offer刷题笔记
如果是按照朴素做法的话,则需要循环k次时间复杂度为 O ( k ) ,则这个复杂度就比较高了,而如果是 采用快速幂时间复杂度是 O(logn)。题解 : 例如 ans[2] = A[0] x A[1] x A[3] x A[4], 删除原始链表中所有重复数字的节点,只留下不同的数字。3、将上面两个结果相加,即重复步骤1,2,直至进位的运算结果为0;我们可以简单的理解为,把老链表的节点一个个拆下来,放到新链表中。2、两个整数做与&,然后再左移一位,即得到进位的运算结果;给你一个链表,删除链表的倒数第。
2022-12-14 16:17:07
606

原创 LeetCode 101:和你一起你轻松刷题(C++)总篇章正在陆续更新
再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。在样例中,我们初始化糖果分配为 [1,1,1],第一次遍历更新后的结果为 [1,1,2],第二次遍历更新后的结果为 [2,1,2]在样例中,排序后的数组为 [[1,2], [1,3], [2,4]]。因此最终保留的区间为 [[1,2], [2,4]]。在这个样例中,我们可以移除区间 [1,3],使得剩余的区间 [[1,2], [2,4]] 互不重叠。
2022-11-01 22:37:36
1695
1
原创 电气学习知识点
NPN的电流流向是从发射极->集电极,发射极接通电平vcc。(这里接通电源的原因是和PNP二极管电流流向一致)。NPN的电流流向是从集电极->发射极,集电极接通电平vcc(这里接通电源的原因是和NPN二极管电流流向一致)。NPN和PNP(两种不同类型的三极管)都是集电极输出。因为可以把输入的电平拉低,所以这是低电平输入。因为可以把输入的电平拉高,所以这是高电平输入。NPN示意图(集电极连接负载 — 正方形)PNP示意图(集电极连接负载 — 正方形)下图b:基极、c集电极、e发射极。
2024-10-14 16:26:15
1697
原创 qt中信号槽第五个参数
当信号发射时,槽函数立即直接调用。无论槽函数所属对象在哪个线程,槽函数总在发送者所在线程执行,即槽函数和信号发送者在同一线程。:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。,当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接受者所在线程执行,即槽函数与信号接受者在同一线程。可以看出:emit发射信号后立马执行槽函数,没有任何等待;,默认的连接方式,如果信号与槽,也就是发送者与接受者在同一线程,等同于。
2023-12-31 19:36:53
2157
原创 设计模式-简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2023-07-14 16:31:19
698
原创 Qt样式表Qss
Qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性它是用来美化UI界面。实现界面和程序的分离,快速切换皮肤。学习视频。
2023-07-09 21:12:57
877
原创 Json在Qt中的使用
关于 Qt 中 Json 数据对象以及字符串之间的转换的操作流程是固定的,我们在编码过程中只需要按照上述模板处理即可,相关的操作是没有太多的技术含量可言的。可以看出,通过构造函数就可以将实例化之后的 QJsonObject 或者 QJsonArray 转换为 QJsonDocument 对象了。对象,如何判断内部封装的到底是什么类型的数据呢?通过调用 toxxx() 方法就可以得到文本格式或者二进制格式的 Json 字符串了。中的对象,在里边可以存储多个键值对,为了方便操作,键值为字符串类型,值为。
2023-06-21 13:31:18
2165
原创 Qt中的互斥锁(QMutex和QMutexLocker)
表示尝试去加锁,timeout 为超时时间。如果互斥锁为可用状态,该函数会占用该互斥锁,并返回 true ,否则返回 false。如果互斥锁被另一个线程占用,该函数会等待 timeout 毫秒直到互斥锁为可用状态。
2023-05-17 16:59:15
5738
原创 QT多线程的两种写法及运用
1.声明一个信号 2. 重写run方法 (注意是protected的)子线程做完复杂工作后,停止主线程里的lcd数字++主线程:使lcd数字++;子线程:处理复杂任务。
2023-05-02 13:46:41
280
原创 设计模式-单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。那么我们就必须保证:(1)该类不能被复制。(2)该类不能被公开的创造。那么对于C++来说,它的构造函数,拷贝构造函数和赋值函数都不能被公开调用。
2023-04-30 15:37:20
884
原创 QT中TCP的学习
QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程。下方的信号都是系统提供的,我们只需要写相应的槽函数。
2023-04-24 20:31:25
542
原创 QMap和QVector
QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第二个称value(键值)QVector类是动态数组的模板类,顺序容器,它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们。使用前需要包含头文件 #include。
2023-04-23 18:02:21
841
原创 QDialog两个显示函数show()和exec()的区别
QDialog的显示有两个函数show()和exec()。模态对话框(不可以对其他窗口进行操作) 非模态对话框(可以对其他窗口进行操作)下方代码,创建了模态和非模态对话框,并有详细注释,仔细阅读就能明白。
2023-04-23 13:18:33
1318
原创 Qt 之按钮鼠标 悬浮、按下、松开后的效果
本文介绍了Qt中的按钮实现响应鼠标悬浮、按下、松开后的效果,在三种状态下,按钮改变不同的背景图片。方式1:通过修改样式表的方式去实现;方式2:通过继承QPushButton去实现一个自定义的按钮;方式3:在主界面中给按钮安装事件过滤器的方式去实现继承QPushButton类后,重写了event()方法break;break;case QEvent :: MouseButtonPress : this -> setIcon(QIcon(":/icons/images/暂停.png"));
2023-04-22 20:52:18
5518
2
原创 qt中信号和槽机制
返回void需要声明,不需要实现可以有参数写到signals 下返回void需要声明,也需要实现可以有参数,可以重载写到 public slot 下或者 public 或者 全局函数 emit 自定义信号。
2023-04-22 11:48:39
585
原创 nginx线程池源码剖析
条件变量 - 一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。任务队列 - 按顺序保存待处理的任务序列,等待线程中的线程组处理。网络上的请求和响应,互斥锁,等待同步方式调用的数据库响应。任务 - 待处理的工作,通常由标识、参数和处理函数组成。互斥锁 - 保证在任一时刻,只能有一个线程访问该对象。读取文件,但文件尚未缓存,从硬盘中读取较为缓慢。线程池 - 由多个已启动的一组线程组成。这个主要对,互斥锁和条件变量进行了一层封装。解决方案: 运用多进程或多线程技术解决。
2023-04-13 10:46:33
514
原创 线程同步-信号量-互斥量-条件变量
与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。
2023-04-11 21:45:01
602
原创 protobuf序列化
协议的模板所有的message必须定义到一个文件中,且文件的后缀名为.proto。例如我们定义的bike.proto文件required:必须填发送的数据bike.proto// 使用的版本 package tutorial;// 生成一个包把类放进去 // 申请短信请求 message mobile_request {// 按顺序写编号 }
2023-04-09 17:10:33
1100
1
原创 TCP分包和粘包
相关的,路由器有一个MTU( 最大传输单元)一般是1500字节,除去IP头部20字节,留给TCP的就只有MTU-20字节。TCP是以段(Segment)为单位发送数据的,建立TCP链接后,有一个最大消息长度(MSS).如果应用层数据包超过MSS,就会把应用层数据包拆分,分成两个段来发送.b)服务端:先解析本次数据包,获取数据大小N,再读取N个字节,这N个字节就是一个完整的数据内容。当应用层数据超过1460字节时,TCP会分多个数据包来发送。a)客户端:先发送包表示和长度,再发送数据内容。
2023-04-08 19:12:03
2567
原创 Libevent学习之旅
libevent是一个轻量级的开源的高性能的事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。跨平台,支持Windows、Linux、BSD和Mac OS;支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务;支持I/O,定时器和信号等事件;采用Reactor模式;
2023-04-08 14:39:54
451
原创 epoll之多路IO复用
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。LT模式(水平触发)下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户程序去操作;而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提示了,无论fd中是否还有数据可读。
2023-04-06 10:07:46
414
原创 select之多路IO复用
举一个简单地网络服务器的例子,如果你的服务器需要和多个客户端保持连接,处理客户端的请求,属于多进程的并发问题,如果创建很多个进程来处理这些IO流,会导致CPU占有率很高。所以人们提出了I/O多路复用模型:一个线程,通过记录I/O流的状态来同时管理多个I/O,需要的线程数大大减少,减少了内存开销和上下文切换的CPU开销。
2023-04-03 17:46:00
231
原创 linux之线程
类比:创建一个进程,类似于“克隆”一个家庭。该“家庭”与原来的家庭完全相同但是新“家庭”和原来的家庭完全独立。进程包含一个或多个线程。类似与一个家庭,包含一个或多个家庭成员。家庭内的各成员同时做各自的事情(父亲工作、母亲持家、小孩上学)而对于家庭外部的人来说,这个家庭同时在做多件事情。家庭内的每个成员,就是一个线程。各个家庭成员有自己的个人资源(线程有自己的局部变量)但是所有家庭成员都能共享这个家庭的资源:房子、汽车、家庭的公共资金。
2023-03-30 20:10:00
657
原创 进程间通信----共享内存机制
是允许两个或多个进程(不相关或有亲缘关系)访问同一个逻辑内存的机制。它是共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。addr:指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。第一个程序向共享内存中写入数据,第二个程序向共享内存中读取数据。prot:映射区域的保护方式。length:代表将文件中多大的部分映射到内存。读取文件 也可以配合信号量,多个进程一起读取。一个小栗子:这两个进程需要在同一个目录下。
2023-03-29 21:31:34
565
原创 进程间通信----信号量
信号量,是一种特殊的变量:只能对信号量执行P操作和V操作P操作(要执行代码的时候): 如果信号量的值 == 0, 则挂起该进程,如果信号量的值 > 0, 则把该信号量减1V操作(执行完代码的时候): 如果有进程因该信号量而被挂起,则恢复该进程运行,如果没有进程因该信号量而挂起,则把该信号量加1注意:P操作、V操作都是原子操作,即其在执行时,不会被中断。注意:此指的“信号量”是指System V IPC的信号量,与线程所使用的信号量不同。该信号量,用于进程间通信。
2023-03-27 22:00:02
1391
原创 进程间通信---消息队列
消息队列,用于从一个进程向另一个进程发送数据。但仅把数据发送到一个“队列”中,而不指定由哪个进程来接受。消息队列,独立与发送消息的进程和接收消息的进程。(信号、管道、命名管道都不独立与发送和接收进程)消息队列,有最大长度限制:MSGMNB消息队列中的单条消息,也有最大长度限制:MSGMAX。
2023-03-26 22:12:42
807
原创 进程间通信----管道
注:单进程中的管道无实际用处,管道用于多进程间通信。一个进程实现管道通信(管道主要用于多进程通信)父子进程各有一个管道的读端和写端;这里的父子进程可以实现全双工。
2023-03-26 19:13:09
892
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人