- 博客(39)
- 收藏
- 关注
原创 在银河麒麟 使用自带的Qt5.12.8编译达梦数据库驱动 QDM
在Makefile.Realse和Makefile.Debug的LIBS 的末尾加入 -lrt 其中l是L的小写,表示链接上librt库。在dm.pro文件中加入 INCLUDEPATH += 对应的路径。下载Qt 5.12的源码,将驱动源码放在对应路径下。将编译得到的动态库放在了如下路径。
2024-08-06 14:39:37
409
原创 Qt 打包程序
4. 注意修改后的iss文件不要删除,可以和exe保存到同一个文件夹下,如果对程序有修改,没有引入新的依赖就只需要将exe替换掉即可。1. 创建新文件夹,将debug或者release下的exe程序拷贝到新文件夹。这个命令能帮助你将exe程序依赖的动态库和文件都拷贝进去。2. 在新文件夹中打开cmd,运行。
2024-07-09 15:49:08
216
原创 cmake添加第三方库
在现代CMake中,推荐使用find_package或find_library配合target_link_libraries来替代link_directories。这里,find_package(MyLib REQUIRED)会查找MyLibConfig.cmake文件,并设置一些变量,如MyLib::MyLib(一个Imported Target),你可以直接使用target_link_libraries命令来链接你的目标到这个Imported Target。
2024-07-03 15:34:51
256
原创 TCP问题总结
本质是对序列号的确认,tcp对每个字节的数据都进行了编号,数据接收到1~1000,ack回复确认1001,告诉对方我需要1001的数据,区别于拥塞控制的快速重传快重传是为了在没有触发超时重传的时候,就立即重传丢失的数据,本质是为了提升传输效率发送方接收到三次同样的确认之后,会立即重传丢失的报文,那么为什么是三次呢?如果发送发已经发送了数据包,N-1,N,N+1,N+2此时收到一次ack(N),可以认为是N还未到收到第二次ack(N),可以认为是N+1先于N到达,此时可能是网络乱序。
2023-10-02 20:19:39
185
原创 常用设计模式总结
饿汉式一定是线程安全的,对象的实例化是静态的处于数据段,在程序运行之前就已经初始化好了,但是懒汉式更通用,没有资源浪费。使用一个装饰器类继承被装饰的基类,装饰器类中存放一个基类的指针,调用的还是被装饰者的方法,但是加上自己的装饰内容。主要关注对象 是一对多的关系,多个对象依赖于一个对象,当对象发生变化,其他对象收到通知。主要是增加现有类的功能,另一个办法是新增加一个子类,这样子类太多了。对于不同的权限,声明不同的代理类,代理类和被代理类继承统一基类,每需要一个产品,那就有一个工厂类,过于精细,类太多。
2023-08-29 20:54:55
42
原创 运行时多态,对特定的派生类指针需要调用不一样的函数时
解决方案:在函数中使用dyma_cast,如果成功转型就说明是此子类,否则转型为nullptr。需求:当一个运行时多态的函数,当传入某个特殊的子类时,需要调用不同的函数。意外发现nullptr指针同样可以调用类的公有成员函数,因为。
2023-07-28 10:52:51
53
原创 C++知识查漏补缺
在c++中,使用立即数初始化,那么就是一个常量在编译阶段,会将所有的a使用10代替(const int a = 10),使用变量初始化(const int a = b)就是一个常变量,因为b的值只有在运行阶段才能知道,其行为和在c中一致,c++11以前函数返回一个本地对象的时,这个对象会被拷贝到调用此函数的栈,如果有返回值优化(NRVO)会把对象之间构造到栈上,如果返回的是std::move(a),反而会影响返回值优化。类的成员函数被const修饰时,构成重载,因为影响了能否修改成员变量。
2023-07-26 10:33:35
47
原创 Epoll原理详解
实际上,epoll_wait 的效率是 O(ready fd num) 级别的,因此 edge-trigger 模式的真正优势在于减少了每次 epoll_wait 可能需要返回的 fd 数量,在并发 event 数量极多的情况下能加快 epoll_wait 的处理速度,但别忘了这只是针对 epoll 体系自己而言的提升,与此同时 user app 需要增加复杂的逻辑、花费更多的 cpu/mem 与其配合工作,总体性能收益究竟如何?eventpoll 对象也是文件系统中的一员,和socket一样,它也会有。
2023-06-06 15:14:24
774
1
原创 MySQL基础知识
Buffer Pool Cache是存放在内存结构中的, 对数据的修改先看缓存中有没有书数据,没有的话去磁盘中拿进来,当事务对数据进行修改时,不直接对磁盘修改,而是在缓存中修改,缓存中修改完成的叫脏页,脏页由后台线程定时刷入磁盘,而redo log则是记录事务修改记录的,当事务commit时,是将redo log写入磁盘进行持久化。例如当事务A和事务B并发执行时,当事务A更新后,事务B查询读取到A尚未提交的数据,此时事务A回滚,则事务B读到的数据就是无效的脏数据。
2023-04-21 20:19:38
124
原创 基于c++11,14,17新特性的线程池
线程池的优势就是(每个池都有自己的优势),在服务进程启动之初,就事先创建好线程池里面的线程,当业务流量到来时需要分配线程,直接从线程池中获取一个空闲线程执行task任务即可,task执行完成后,也不用释放线程,而是把线程归还到线程池中继续给后续的task提供服务。线程池里面的线程个数是可动态增长的,根据任务的数量动态的增加线程的数量,但是会设置一个线程数量的阈值(线程过多的坏处上面已经讲过了),任务处理完成,如果动态增长的线程空闲了60s还没有处理其它任务,那么关闭线程,保持池中最初数量的线程即可。
2023-04-08 09:47:48
402
原创 nginx内存池剖析
第一块内存的current指向第一个failed<4的内存块,failed记录当前内存块分配内存失败次数(即可分配内存大小end-last<size就会分配失败),当指向的内存块可分配内存都不够时,开辟新的内存块(之后每次开辟的内存块大小都和第一块一样大),第一块内存的large指向一个ngx_pool_large_s结构体,包含一个指向自己类型的next指针,和一个指向大块内存地址的指针,这个大块内存直接通过malloc开辟,事实上这个结构体存储的地址也是通过小块内存分配的!last:可用内存起始地址。
2023-03-15 19:22:09
142
原创 SGI STL二级空间配置器源码剖析
从上面可以看到__STL_DEFAULT_ALLOCATOR通过宏控制有两种实现,一种是allocator< T >,另一种。管理内存,和C++标准库中提供的allocator是一样的,但其二级空间配置器allocator采用了基于freelist。SGI STL包含了一级空间配置器和二级空间配置器,其中一级空间配置器allocator采用malloc和free来。是alloc,这两种分别就是SGI STL的一级空间配置器和二级空间配置器的实现。二级空间配置器分配空间流程。
2023-03-09 19:14:55
76
原创 【无标题】C++ STL(3)
调用hash_val,可以传入任意type,任意数量的参数,调用1号hash_val,比如例子中传入3个参数,1号hash_val调用2号hash_val,z2号函数分解为seed,和1+2个参数,再调用自己直到只剩一个参数调用三号hash_val。c++提供一个万用的hash Function,以cusomerHash为例子。
2023-03-04 15:10:54
39
原创 【无标题】effective c++ 笔记(3)
中出现异常抛出等问题,那么delete B就不是一定被执行,造成内存泄漏,因此考虑使用对象进行管理,在程序离开作用域时,对象就会自动被析构。考虑一个使用于字体资源的RAII类,由于经常需要访问原始资源Fonthandle,需要经常将Font转换为Fontheadle,考虑以下代码,使用一个Lock类对互斥锁mutex进行管理。看起来非常合理,但是如果发生copy会怎么样?
2022-10-09 08:36:15
219
原创 【无标题】effective c++ 读书笔记(2)
例如在设计一个类用于管理数据库连接的class时,在其析构函数中调用db.close(),以保证在class被销毁时数据库连接能被关闭,但是此操作就有抛出异常的风险,因此应该在析构函数中对异常进行吞下,并提供一个普通函数版本,供此class的使用者自己调用。当一个class中有virtual函数时,他们就需要携带额外的信息,其内部会有一个虚函数表指针指(vptr)向一个虚函数表,这个虚函数表(vtbl),重要的是这个虚函数表会导致类的体积增加,并且影响移植性,因此无端的声明virtual析构是错误的。
2022-10-08 07:23:38
55
原创 c++ 11 14笔记(3)标准库
为了解决非必要的拷贝:当赋值的右边是一个右值的时候,左边可以去‘偷’右边的内容,而不需要去allocation(分配空间)两种insert 上面的是原始的版本,下面的是‘偷’的版本,原来的string的拷贝函数也需要重载一个,原版copy是深拷贝,重新分配内存,新版是直接指针指像原来的地址(到此为止就是浅拷贝),并且将之前的指针打断。因此,只要保证赋值的那个对象是个右值或者以后不会再用,都可以用‘偷’的方式赋值给别的变量。在forwad里面调用process,第四,五行,forward传入一个右值,但是调用
2022-07-12 21:38:08
198
转载 linux下将qt打包为可执行文件
qt项目在Linux平台上面发布成可执行程序.run,或是免安装的绿色版本、亦或者安装形式的安装包。文章目录简介:该博文系列:开发平台环境:项目在Linux平台发布:下载/系列地址:感谢:简介:qt项目在Linux平台上面发布成可执行程序,或是免安装的绿色版本、亦或者安装形式的安装包。亲测有效。测试项目参见 QT5/C++项目:基于QT的跨平台网络对战象棋 ;实现了QT5的项目在windows、Linux、MacOS、Android平台的发布开发平台环境:编程环境: .
2021-11-06 12:53:24
4065
原创 runtime error: addition of unsigned offset to 0x602000000090 overflowed to 0x60200000008c 力扣
出现这个错误的可能:1. 访问数组的[-1]的位置,数组下标出现-12. 使用的size_t数据类型,这个类型是无符号的int型,如果出现-1了会变的很大,也会出现数组越界
2021-10-27 13:22:32
21446
转载 linux下Qt5.14.2安装
安装包下载网址Index of /archive/qt/5.14/5.14.2在linux下载好后,给文件添加权限sudo chmod +x qt-opensource-linux-x64-5.14.2.run然后执行下面代码进行安装sudo ./qt-opensource-linux-x86-5.4.1.run弹出安装窗口,点下一步,在选择组件时全选,安装结束后在终端输入下面命令,进行环境配置sudo gedit /etc/profile添加:注意修改目录export
2021-10-21 21:06:02
5216
2
原创 ubuntu20.04无法联网
右上角无网络连接的图标清除一下网络连接的缓存service NetworkManager stopsudo rm /var/lib/NetworkManager/NetworkManager.stateservice NetworkManager start此时右上角出现网络链接标志,联网成功
2021-10-18 11:04:38
831
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人