自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

oorik的博客

简简单单记录学习笔记

  • 博客(228)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 个人网站迁移

之前用hexo搭了一个静态网站,挂在github上了,更新文章太麻烦了,以后就不用那个了。主题界面之类的东西,还没有搞,等放假了好好弄一下。

2023-11-04 21:28:14 426

原创 qDebug()打印QString去除引号的三种方式

qDebug()打印QString去除引号的三种方式

2024-02-01 20:10:16 417

原创 Qt两种定时器

对于 QTimerEvent不用重写定时器超时函数并且再手动绑定,QTimerEvent他会自动调用timerEvent,该函数将自动在使用startTimer函数启动的定时器到期时被调用,所以只需要重写这个就行。这样通过按钮点击之后,调用里面Qtimer的start,因为外面绑定了定时器超时槽函数,所以。一般用按钮控制定时器,所以跟按钮关联的槽函数一般里面有start,stop就是控制定时器的。然后需要给定时器绑定 定时器超时的槽函数,也就是时间到了,该做什么。用timerId可以获取哪个定时器的id。

2024-01-27 14:24:03 469

原创 github提交 ! [rejected] master -> main (fetch first)error: failed to push some refs to ‘github ...‘

报错的原因是因为,每个仓库都有一个分支,也可以理解为大仓库里的小仓库,我们只是跟线上远程仓库有了关联,但没有跟线上远程仓库的某个分支关联,所以我们没法提交。在终端输入 git pull --rebase origin main即可跟刚创建的线上远程仓库的默认分支main关联。将我的项目和github上的仓库建立个联系,即终端输入git remote add origin 仓库地址。将缓存区文件提交到本地仓库,即终端输入git commit -m “提交我的项目文件”即使是创建仓库之后,本地是master,

2023-11-03 13:31:43 578

原创 git使用大全

Git使用教程:完全图解!_git使用教程图文详解-CSDN博客

2023-10-17 18:02:36 493

原创 git问题error: remote origin already exists.

2、关联自己的仓库 git remote add origin https://gitee.com/xxxxxx.git。error: remote origin already exists.表示远程仓库已存在。1、先输入git remote rm origin 删除关联的origin的远程库。3、最后git push origin master,这样就推送到自己的仓库了。

2023-10-17 17:39:55 491

原创 git clone和git init git pull 的一点问题

本地仓库创建的时候,git init ---> git clone,查看文件夹,发现git init的文件下有个.git文件,也就是这是一个仓库,然后git clone拉下来的代码文件内部也有一个.git文件,也就是这个代码文件也是一个仓库,换句话说仓库底下嵌套了一个子仓库。这时候标题上的问题有答案了吧,git clone实际上是包括了git init这个命令的,所以git clone 之前没有必要使用git init,如果使用了。反而会出现仓库嵌套的问题,有可能因为疏忽出现意想不到的问题。

2023-10-17 17:39:02 345

转载 connect函数会阻塞,怎么解决?

二是但是当客户端插上网线,但是连接网络失败,也就是说能够获取到ip地址,但是和服务器是ping不通的。这种情况下connect就可能会发生阻塞,因为按照《UNIX 网络编程》中讲解,connect的在进行三次握手,如果失败情况,需要等待75s的超市时间的。第一次握手时,创建连接,connect处于阻塞状态,等待服务器accept,第二次握手成功,connect从阻塞返回,accept同样的需要收到客户端ack以后才从阻塞返回,连接建立完成。这意味着在2秒内,如果连接操作没有完成,就会超时。

2023-09-30 17:26:24 1077

原创 function实现原理

【代码】function实现原理。

2023-09-30 17:25:57 62

原创 缓存行/伪共享问题,验证优化

优化程序性能时,合理使用缓存行对于减少缓存未命中和提高数据访问效率非常重要。这可以通过调整数据结构的布局、避免伪共享(False Sharing)等方式来实现。

2023-09-26 09:15:32 343

原创 手搓CAS原理实现/ 模拟mutex的lock和unlock

cas有可能会有aba的问题,解决方法:加版本号,每次数据操作就更新版本号,最后比对版本号,, 或者用加时间戳。flag的0表示现在没上锁,1表示已经上锁了。通过cas去实现自旋锁。

2023-09-20 22:38:37 113

原创 373. 查找和最小的 K 对数字 ,为什么要先把一个数组的下标都插入

找出第一个最小数对之后寻找下一个,由于数对 {1, 2} 在 num1 和 num2 内的下标分别为 0 和 0,考虑到数组是有序的,所以下一个最小数对在 num1 和 num2 内的下标可能是 1 和 0 或者 0 和 1,其中下标为 1 和 0 的数对 {7, 2} 已经在堆内,所以只要添加数对 {1, 4} 即可。可以发现这个添加的数对 {1, 4} 的下标和已经找到的前一个最小数对 {1, 2} 的下标的区别是,在 nums1 的下标不变,在 nums2 的下标加 1。,其中第一个元素来自。

2023-09-06 13:26:21 84

原创 C++位域

而这种数据结构的缺点在于,位段实现依赖于具体的机器和系统,在不同的平台可能有不同的结果,这导致了位段在本质上是不可移植的。在一个 “联合” 内可以定义多种不同的数据类型, 一个被说明为该 “联合” 类型的变量中,允许装入该 “联合” 所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。一个位域成员不允许跨越两个 unsigned int 的边界,如果成员声明的总位数超过了一个 unsigned int 的大小, 那么编辑器会自动移位位域成员,使其按照 unsigned int 的边界对齐。

2023-08-24 19:45:32 129

原创 含泪总结当遇到linux文件系统根目录上的磁盘空间不足怎么办!!

那天写项目代码,cmake编译生成文件的时候给我说磁盘不够了..文件没法生成,因为当时是远程连接的,所以就先断了连接,重启了虚拟机!好家伙重启之后因为内存不够,根本进不到gnu界面,就是想重新扩容操作都没办法!总之遇到这种情况就是要对根目录磁盘空间进行扩展。如果你的虚拟机还能进去,那么直接看后面步骤,前面这块说说最麻烦,空间不够了,虚拟机怎么进去.

2023-08-24 19:43:56 3352

原创 手撕LFU缓存

为了方便操作,给双向链表加上了虚拟的头结点和尾结点,并在初始化的时候首尾相接。因为LFU多了频率,所以需要重构结点,,就不像LRU那个一样用pair对组了。这里需要用到的有,插入,删除结点,以及链表判空,和返回链表最后一个尾结点。所以针对LRU的模仿写法,我就直接用STL的list去做。为了确定最不常使用的键,可以为缓存中的每个键维护一个。下面是我们自己实现的双向循环链表的写法,代替list。是LRU的升级,多了一个访问次数的维度。使用计数最小的键是最久未使用的键。操作,使用计数器的值将会递增。

2023-08-15 18:59:20 164

原创 对于生产者消费者/shutdown/close的补充

一点补充写一个循环队列用信号量去做生产者消费者,一个判空,一个判满,一个互斥锁(这个锁也能用信号量 去表示,比如0代表加锁着,1代表锁释放了 -》后面就叫做信号量锁)流程:先对空/满进行pv操作,在对互斥锁/信号量表示的锁,进行加锁/解锁如果先操作锁,再操作信号量会引起死锁用条件变量的话先操作lock锁,再对cond条件变量进行while wait,再unlock,最后notify。

2023-08-12 14:52:38 162

原创 ICMP 理解

差错报告机制,tcp/ip协议族中重要的子协议,通常被ip层或者更高的(tcp/udp)使用,,属于网络层协议,主要用于在ip主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。

2023-08-07 13:20:04 185

原创 有关bind一些困惑解答

绑定成员函数时,需要传入成员函数的指针(或可调用对象)、成员函数所属的对象(或指向该对象的指针)、以及任何要为成员函数提供的参数。通过源码中的模板函数重载选择正确的实现,并返回创建的绑定对象。对于&a和a都是可以正确编译执行,结果正确,往常我总是用&a的写法,传的是指针进去,所以见到绑定成员函数,第二个参数传的是a,本身对象而感到困惑。(而不是对象的指针或引用),但这个代码仍然能够编译和运行,并且没有出现错误。的引用和修饰符,以便获得准确的函数类型。函数的参数可以接收对象和对象的指针(作为左值引用)

2023-07-29 11:11:58 181

原创 C++的对象优化经验

而对于已有对象进行构造赋值的时候,就是构造临时对象,然后调用赋值语句这个~Test就是产生的临时对象Test(20)的析构指针不要指向临时对象,因为临时对象会析构,指针指向一个已经析构的对象,这样不安全引用可以指向临时对象,因为是别名所以指针这种都是要new一个出来,最后delete堆上分配的内存,不delete,是不会自动析构的,会泄漏内存对于vector的push_back,你给他传左值,他就调左值的拷贝构造,你给他传右值,就会调右值的拷贝构造.vector怎么实现的呢?

2023-07-23 20:09:35 205

原创 聊聊函数适配器和迭代适配器demo

使用inserter()时需要指定容器类型和插入的位置,函数返回一个迭代器,可以通过这个迭代器来向容器中插入数据,而不必考虑容器的具体类型和位置。迭代器适配器,inserter将元素插入到容器的指定位置,支持多种容器类型。inserter包含在头文件中。函数适配器,bind2nd ,bind1st等等已经被bind 绑定器 替换了, not1函数适配器。迭代器适配器->rbegin(),rend() 就是尾巴和头,和正常走的方向相反。有好几种,容器适配器stack,queue。

2023-07-21 00:29:16 88

原创 ubuntu 20.04安装Protobuf

GNU Wget(常常简称为wget)是一个网络上进行下载的简单而强大的自由软件, 其本身也是GNU计划的一部分。它的名字是"World Wide Web" 和 "Get"的结合, 同时也隐含了软件的主要功能。生成./configue,进行后续安装 (直接按照我下面的安装v3版本方便简单)没有./autogen.sh ,not found,执行下面命令。v3开头是自带的autogen.sh,不用安aotomake。v2开头的版本没有autogen.sh文件,下面就用wget下载v3版本的,示例。

2023-07-16 22:26:55 1017

原创 stringstream的使用

写到290题使用stringstream简化步骤,学习一下使用库定义了三种类:istringstream、ostringstream、stringstream 主要用来进行数据类型转换,比如可以将一个int类型的对象存入流中,然后经过流赋值给一个string的对象中,从而实现了int到string的转变,由于 使用 string 对象来代替字符数组,就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问

2023-07-12 22:30:33 463

原创 现代C++智能指针改写

对于真正的shared的计数类,里面有个ptr指针和两个引用计数的,一个use保证shared_ptr,一个weeks保证week_ptr ,这里实现简单引用计数思路就行,不按照源码完整的设计。转移构造函数模板的作用是扩展了`smart_ptr`的移动构造函数的能力,使得可以从其他类型的`smart_ptr`实例中转移所有权。对于上面的unique_ptr的板子加上引用计数,改成shared_ptr对象类。对这一版的c++跟进,加入auto和unique的ptr。

2023-07-11 11:43:15 231

原创 376. 摆动序列

这个题可以用动态规划和贪心,我那天写的时候自己发现一个巨简单的思路,看了之前自己抄的题解和网上的题解,讲解的都很麻烦,各种坡度等等。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为。连续子数组 [4,-1,2,1] 的和最大,为 6。第一个差(如果存在的话)可能是正数或负数。这篇博客就记录下,我的写法。

2023-07-06 10:46:05 112

原创 部分抓包测试

linux下使用tcpdump抓包,生成pcap格式文件,利用wireshark打开,进行数据包分析。在wireshark工具栏,-》统计-》流量图-》选择tcp类型。进行访问百度页面的http抓包,观察tcp和http。ping baidu,拿到百度服务器ip。使用curl命令在访问百度页面。得到整个tcp流的执行过程。

2023-07-05 16:15:00 232

原创 为什么不提倡用vector<bool>?

因为C++没有直接去给一个bit来操作,所以用operator[]的时候,正常容器返回的应该是一个对应元素的引用,但是对于vector< bool>实际上访问的是一个"proxy reference"而不是一个"true reference",返回的是"std::vector< bool>:reference"类型的对象。vector并不是一个STL容器,不是一个STL容器,不是一个STL容器!而对于d,它的类型并不是bool,而是一个vector< bool>中的一个。

2023-07-03 16:34:49 231

原创 有关STL关联/非关联容器/优先级队列的按序初始化

1.比如想要按照second去排序,思路一,转换成vector这种线性容器,然后利用sort函数,自定义第三个参数去做想要的排序。下面看几种写法:我拿23题做例子,你里面存pair啥都行一个道理。

2023-06-29 09:44:03 202

原创 有关回溯问题,总结的细致要点

组合的:组合去重:用used数组初始化false,记录当前层这个值用过没used数组最好别用bool,用int好点,我后面出文章说为啥少用vector我推荐的写法: 不用used了for里面加// 要对同一树层使用过的元素进行跳过continue;也能用set去重// 控制某一节点下的同一层元素不能重复continue;// 记录元素递归注意递归完了set不用erase,,因为set是记录每层,每层都会创建一个的组合和子集,三种不同的去重方式,个人推荐,这种,代码少。

2023-06-25 19:01:11 298

原创 syslog.h使用

linux操作系统现在rsyslogd取代了原先的syslogd服务,rsyslog 是一个 syslogd 的多线程增强版,其配置语法与syslogd的配置文件一致。(2) format:们与传入 printf()中的参数是一样的,但与 printf()不同的是这里的格式字符串不需要包含一个换行字符。LOG_UPTO()宏创建一个能过滤特定级别以及以上的所有消息的位掩码。(2)传入 openlog()的 log_options 参数是一个位掩码,它是下面几个常量之间的 OR 值。

2023-06-21 09:31:00 541

原创 python阶段

PyUnit使用TestCase类来表示测试用例,并要求所有用于执行测试的类都必须从该类继承。每个测试函数在执行之前,都会调用一次setUp,而测试函数结束时则会调用tearDown。如果想在每次测试前后对测试环境进行初始化和恢复,则需要重载setUp以及tearDown。分享我最近在学习python看过的一些文章。python的自动测试框架PyUnit。unittest之TestCase类。

2023-06-21 09:30:09 226

原创 前缀和以及map混用,打开思路

我们通过前缀和数组保存前 n 位的和,presum[1]保存的就是 nums 数组中前 1 位的和,也就是 presum[1] = nums[0], presum[2] = nums[0] + nums[1] = presum[1] + nums[1]. 依次类推,所以我们通过前缀和数组可以轻松得到每个区间的和。精华如下图:我们只要统计各个阶段前缀和出现的次数,只要有能和k组成新的前缀和的,那就说明k也是存在的,且presum-k的次数不就是k出现的次数吗,,还是两数之和的问题。

2023-06-21 09:27:35 307

原创 Qt自学笔记

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxG4ybs4-1686157321362)(C:/Users/oorik/AppData/Roaming/Typora/typora-user-images/image-20230607211307289.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnUHmZnr-1686157321355)(…

2023-06-21 09:27:08 397

原创 记pymysql

eg1: 这是我那个考级代码里,用来判断看传入的对象是哪个,后面sql语句就去对应的table表去找。有两个类 一个User和Manager类。

2023-06-21 09:26:13 39

原创 qt信号槽

如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。connect函数相对于做了信号处理动作的注册 调用conenct函数的sender对象的信号并没有产生, 因此receiver对象的 method 也不会被调用 method槽函数本质是一个回调函数, 调用的时机是信号产生之后, 调用是Qt框架来执行的 connect中的sender和recever两个指针必须被实例化了, 否则conenct不会成功。

2023-06-21 09:26:06 245

原创 音乐考级系统python+mysql

不带界面这个,基本操作你想要的都有,并且里面也做了接口限制,算是比较基本完善的demo了。对于没有gui或者web界面要求的可以直接拿去当做大作业是没有一点问题的。

2023-06-21 09:25:47 1724

原创 Qt控件学习

我们对复选框按钮操作的时候,可以设置选中和未选中状态,并且还可以设置半选中状态,这种半选中状态一般需要当前复选框按钮下还有子节点,类似一树状结构。这里我们选择group box 把一组按钮放一起,给这些按钮设置一个槽函数,选中后做个打印看看。QRadioButton 是 Qt 提供的单选按钮,QCheckBox 是 Qt 中的复选框按钮,它的父类是 QAbstractButton。用容器去吧这一组一组的按钮区分开来,容器。他是高配版QPushButton。

2023-06-21 09:24:33 1113 1

原创 qt常用基本类

QVariant类,这个类型充当着最常见的数据类型的联合,提供大量的api可以进行类型的转换。qt的这些类型能互相转换,也能转换为标准c++的string,反正api用到去查就行。QDate日期 ,第二种写法里面就是format格式化,查帮助文档看看有很多的。QString就是给字符串套层壳子,他是QByteArray的更深一层封装。qt里面的QByteArray类型就是c的字符数组char*套一层壳子。反正就是字符串的意思。qt里面有自己一套api和c/c++的api都是对应通用的。

2023-06-19 21:27:00 433

原创 Python多线程

RLock被称为重入锁,RLock锁是一个可以被同一个线程多次 acquire 的锁,但是最后必须由获取它的线程来释放它,不论同一个线程调用了多少次的acquire,最后它都必须调用相同次数的 release 才能完全释放锁,这个时候其他的线程才能获取这个锁。使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间。python进程独有进程锁。

2023-06-15 00:15:00 195

原创 Python心经(6)

心经第三节和第五节都写了些面向对象的,这一节补充一些内置函数,,可以用在类上的这两节提到的充当装饰器的,property,staticmethod,classmethod就不提了。

2023-06-13 10:55:30 1294

原创 面试经典150题:数组/字符串合集

经典150题,数组字符串部分

2023-06-12 15:23:45 1212

(与手机日历功能类似)C++实现当前整月日历的显示,翻页查询上月,下月,上年,下年的日历

根据电脑当前时间,计算出当前的年份,日期,星期几信息,(范围在1900年1月1日之后),根据操作面板选择选项,即可显示此时的整个月的日历信息。此外实现了日历翻页查询,根据当前日历,可选择查询上个月,下个月,上一年,下一年的日历显示操作,整体操作与手机自带的日历基本操作相同。算是一个实战小项目,源码利用c++编写,任何问题欢迎私信。*************************************************************************************************************************************************************************************************************************************************************************************************************************************

2022-06-01

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

TA关注的人

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