- 博客(68)
- 收藏
- 关注
原创 【MFC】vs2019中使用sqlite3完成学生管理系统
SQLite 库中一个用于将 SQL 语句编译为字节码程序的函数,它是执行 SQL 语句(特别是那些带有参数或者需要更精细控制执行过程的语句)的重要前置步骤。这种方式比直接使用sqlite3_exec函数更灵活,适用于复杂的数据库操作,如带有参数绑定的插入、更新、删除操作以及需要逐行处理的查询操作等。sqlite3_step,用于执行在sqlite3_prepare_v2中已经准备好的 SQL 语句的下一个步骤。再使用sqlite3_prepare_v2执行相对复杂的语句时,需要用到占位符。
2024-12-09 11:38:42
612
1
原创 【Qt开发】事件与信号/事件过滤器
例如:一个窗口可以作为其界面上的QLabel组件的事件过滤器,派发给QLabel组件的事件由窗口去处理,这样就不需要重新定义一个标签类啦。如果有事件就派发给接收事件的对象去处理,事件循环还可以把相同的事件进行合并发送给接收事件的对象去处理。注意,应用程序的事件循环只会处理自主事件和发布事件,而不会处理发送事件,因为发送事件是以同步模式运行的。每一个事件都有唯一的的事件类型,也有对应的事件类,有的事件类可以处理多种类型的事件。参数e就是事件对象,通过e->type()来判断事件的类型,调用对应的处理函数。
2024-08-16 18:27:12
1078
原创 【Qt开发】信号和槽
自定义信号Q_OBJECTsignals://自定义信号 hello发射信号//发射信号 emit hello();编写槽函数Q_OBJECT//定义槽函数使用函数connect()连接信号hello()和槽world()My m1;Your y1;自定义信号和槽函数规则信号函数必须是无返回值函数,但可以有参数信号函数无需实现‘槽函数参数的个数不得大于信号函数参数是的个数,严格情况下,信号和槽函数的参数个数和类型需要保持一致使用信号与槽的类中,必须在类的定义中插入宏。
2024-08-14 18:48:25
854
原创 【Qt开发】QPainter/QPen/QBrush/QFont
用QPainter在绘图设备上绘图主要是指用QPainter的接口绘制基本图形,包括点、直线、圆、矩形、多边形、文字等。QPainter能绘制点、直线、圆、矩形等各种基本图形,还可以绘制文字和位图,用这些基本图形可以组成任何想要的图形。需要在界面上绘图,我们需要在这此事件处理函数中创建一个QPainter对象来获取绘图设备的接口,然后用这个对象来进行绘图。QBrush是定义绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等。QPen用于设置绘图时线条的特性,主要包括线宽、颜色、线性等。
2024-08-13 21:42:41
873
原创 【Qt开发】QToolBox/QToolButton/QListWidget
在UI可视化设计时,在工具箱组件上点击鼠标右键调出快捷菜单,分别可以使用Insert Page和Delete Page菜单项添加页和删除页。QListWidgetItem还有一个标志变量flags,用来设置列表项的特性,flags是枚举类型Qt::ItemFlag的枚举类型的组合。信号,在一个组件上点击鼠标右键时,组件发射这个信号,用于请求创建快捷菜单。QListWidget的每一个节点是一个项,一个项存储了文字、文字的格式定义、图标、用户数据等内容。没有父类,所以没有属性,但它有一些读取函数、设置函数。
2024-08-08 10:38:49
976
原创 并查集(C++)
班级总人数10人,现在需要不10人分别添加到三个兴趣小组中,每个人只能参加一个兴趣小组。:由于篮球小组人比较少,某班级决定解散,成员合并到游泳小组。:某班级要创建三个兴趣小组,分别是象棋、游泳、篮球。主要解决的是元素分组的问题。象棋小组:{2,4,6,7}游泳小组:{0,1,5,8}这里就可以使用到并查集。篮球小组:{3,9}
2024-01-05 20:46:23
518
原创 【MySQL-增删查改】
select是把通过where已经筛选出来的记录拿出来,而别名total的产生是在select和where之间,这段区域是需要把筛选出来的记录的某些字段拿出来。其前后顺序是先where再生成total别名,所以where中无法使用别名。排序中可以使用别名,排序需要先拿出数据出来,再来排序,故别名可以使用。由于主键或唯一键的存在,导致新的记录无法插入,则可以使用以下方法。答:错误,total别名无法再where中使用。是修改了表中存在的记录(有就修改,没有就添加),包含id、学号、姓名、qq。
2023-06-16 21:26:47
1152
原创 mysql-数据类型
find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;而,char类型是固定个数,char(11),在插入数据时,即使你只使用了2个字节,数据库也分配给你11个字节。float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节。
2023-05-20 18:59:46
537
原创 如何快速理解TCP协议
目录什么是TCPTCP的报文格式TCP的如何保证可靠性确认应答(ACK)机制超时重传机制连接管理机制(三次握手和四次挥手)三次握手四次挥手滑动窗口什么是TCPTCP全称位”传输控制协议(Transmission Control Protocol)“。TCP是在传输层中TCP是有连接的协议;”三次握手和四次握手 “TCP是可靠的TCP是面向字节流的TCP的报文格式源端口号和目的端口号:表示数据从哪个进程来到那个进程去。32位序号和32位确认序号:TCP传输是面向字节流的且可靠的,会对每
2022-03-26 22:49:01
8833
1
原创 高并发内存池(2)
从零实现一个高并发内存池高并发内存池整体框架设计申请内存部分高并发内存池-Thread Cache高并发内存池-Central Cache高并发内存池整体框架设计现在很多的开发环境都是多核多线程,在申请内存的场景下,必然存在激烈的锁竞争问题。malloc本身就已经很优秀了,那么我们的项目原型tcmalloc就是在多线程高并发的场景下更胜一筹,所以这次我们实现的内存池要考虑几个方面。性能问题在多线程下,锁竞争问题内存碎片问题concurrent memory pool主要由下面3个部分组成:
2022-03-12 13:32:26
1212
原创 开胃菜-定长内存池(1)
从零实现一个高并发内存池定长内存池性能测试定长内存池介绍:向操作系统申请一块足够的内存,并以链表的方式来连接,该内存只能被固定的类型所申请。windows和Linux下如何直接向堆申请页为单位的大块内存:VirtualAlloc框架:_memory:先向操作系统申请一块足够大的空间,我们需要一个指针来指向这块空间。_freelist:程序释放空间时,我们不用还给操作系统,而是用自由链表来连接起来,当下次申请空间时,先在自由链表中找,我们需要一个指针来指向链表的头部。bySize:表示_me
2022-03-11 15:32:04
806
原创 高并发内存池的介绍
从零实现一个高并发内存池项目介绍池化技术内存池内存池主要解决的问题项目介绍当前高并发内存池的原型是Google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc,free)。我们的高并发内存池的项目只是把tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcmalloc的精华。这个项目会用到C/C++、数据结构(链表、
2022-03-11 10:12:58
297
原创 【Linux入门】多线程(线程概念、生产者消费者模型、消息队列、线程池)万字解说
目录1️⃣线程概念什么是线程线程的优点线程的缺点线程异常线程异常Linux进程VS线程2️⃣线程控制创建线程获取线程的id线程终止等待线程线程分离3️⃣线程互斥进程线程间的互斥概念互斥量互斥量的接口互斥量的实现原理研究怎么看待线程在申请锁的时候等待挂起可重入VS线程安全概念常见的线程不安全情况常见的线程安全情况常见的不可重入情况常见的可重入情况可重入与线程安全的联系可重入与线程安全的区别4️⃣死锁死锁的四个必要条件避免死锁避免死锁的算法5️⃣线程同步条件变量同步概念和竞态条件初始化条件变量销毁条件变量等待条
2022-01-23 20:17:27
2727
11
原创 【Linux入门】进程信号(2)
进程信号????产生信号????阻塞信号信号其他相关常见概念在内核中的表示sigset_t信号集的操作函数sigprocmask函数sigpending????捕捉信号内核如何实现信号的捕捉sigaction可重入函数volatile关键字SIGCHLD信号普通信号????产生信号1 通过终端按键生产信号。如Ctrl+C,2 调用系统函数向进程发信号。kill函数,在命名解释行上 klii 选项 进程id(不演示,我们通过代码模拟kill命令)#include <sys/types.h&
2021-12-05 10:58:36
1029
10
原创 【Linux入门】进程信号(1)
进程信号信号入门生活角度的信号技术应用角度的信号信号概念用kill -l命令查看系统定义的信号列表信号处理常见方式的概览产生信号通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号硬件异常产生信号信号捕捉-初识模拟一下野指针异常阻塞信号信号其他相关常见的概念在内核中的表示sigset_t信号集操作函数sigprocmasksigpending捕捉信号内核如何实现信号的捕捉sigaction可重入函数volatileSLGCHLD信号信号入门生活角度的信号技术应用角度的信号信号概念用ki
2021-11-24 16:35:26
2186
5
原创 【Linux入门】进程间的通信
为什么要进程间通信?进程间通信是如何完成的?a.进程间运行的时候是具有独立性(数据层面)b.进程间通信,一般一定要借助第三方(os)资源c.通信的本质就是”数据的拷贝“进程A-》数据”拷贝“给os-》os数据”拷贝“给进程B操作系统一定要提供一段内存区域,且可以让双方进程都能看到。所以,进程间的通信本质是,让不同的进程先看到同一份资源(内存、文件内核缓存等)。...
2021-11-23 13:36:45
2187
4
原创 【linux入门】动静态库
认识动静态库我们在Linux编写C代码时,默认是用动态库。动静态库其实是一堆目标文件(.o)的集合,是一些可执行文件的“半产品”。链接时,把各个.O文件进行链接,最终形成可执行程序。当一堆.o文件要被大量使用时,我们把这些目标文件进行打包,就形成了一个库。动静态库的各自特征静态库:程序在进行汇编链接时,把库的代码直接复制到可执行文件中。这样就不需要静态库库。使用静态库生产的可执行文件一般比较大。动态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行
2021-11-18 08:00:00
598
4
原创 【Linux入门】基础IO
基础IO✔回顾C文件的接口✔系统文件I/O接口介绍✔回顾C文件的接口把内容写入文件中,先要打开文件。文件的路径/文件名(不带路径会在当前路径下创建文件)什么是当前路径:当前进程运行时的路径打开文件的方式打开文件一定是进程运行的时候打开的fcloseproc程序fputsfgteslinux中一切皆文件(显示器、键盘)任何进程在运行的时候会默认打开三个输入输出流。stdin stdout stderr键盘 显示器 显示器标准输入 标准输出 标准错误如何理解:FILE
2021-11-17 09:38:43
1515
3
原创 【Linux入门】:进程控制
进程控制1️⃣进程的创建fork函数初识fork函数的返回值写时拷贝fork函数常规用法fork函数失败的原因2️⃣进程的终止进程退出的场景进程常见退出方法_exit函数exit函数return退出3️⃣进程等待进程等待的必要性进程等待的方法wait方法waitpid方法获取子进程status4️⃣进程程序替换替换的原理替换函数函数解释命名理解5️⃣我们可以综合前面的知识,做一个简易的shell1️⃣进程的创建fork函数初识在上篇文章中已经讲了fork函数,主要有:创建子进程有两个返回值创建
2021-11-04 20:53:11
708
4
原创 【Linux入门】进程概念(超详解,建议收藏)
系统中,可以存在大量进程的当我们的电脑开机的时候,启动的第一个进程是操作系统(os),而os要对之后运行起来的进程进行管理工作(进程管理)。操作系统如何进行进程管理??(先描述,在组织)、当有大量程序加载到内存中时,就如同系统中同时出现大量进程,操作系统会增添大量的PCB对这些进程进行描述,并用链表的方式对PCB组织起来。1、标示符:前台进程,只能有一个前台进程+& 在后台跑+表示前台还是后台2、优先级什么是优先级?谁先谁后拿到某种资源为什么要有优先级?资源有限。CPU
2021-10-02 22:14:40
6848
10
原创 旋转数组的最小值——二分查找
>题目描述????点击链接写题有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。例1:输入:[3,4,5,1,2]返回值:1例2:输入:[1,0,1,1,1]返回值:0例3:输入:[1,2,2,2,2]返回值:1>题解1通过线性遍历可以完成,时间复杂度O(N)>题
2021-09-24 17:26:34
246
原创 二维数组中的查找
>题目描述????点击这里写题描述:在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。>题解1强暴一点,就是一个一个找,时间复杂度为O(N2
2021-09-23 23:31:15
142
原创 155.最小栈-力扣(LeetCode)
目录55.最小栈-力扣(LeetCode)正确题解优化题解1优化题解255.最小栈-力扣(LeetCode)????155.最小栈-力扣(LeetCode)题目描述:设计push、pop、top、getMin,函数,并且可以在时间复杂度为O(1)的情况下找出最小值错误的思路:给定一个变量,来记录最小值,这种想法是错误的,我们应该要更全面的考虑问题。当我们入栈{6,5,4,3,2,1}时,每次记录最小值的变量随着每次入栈而改变,当数据全部入栈,记录最小值的变量就为1,如果在不删除数据的情况下,可以
2021-09-05 13:34:15
691
2
原创 【Linux入门】第三篇:软件包管理器yum和编辑器vim的使用
目录前言Linux软件包管理yumLinux开发工具Linux编辑器-vim使用01.vim的基本概念02.vim的基本操作03.vim正常模式命令集04.vim末行模式命令集05.vim操作总结06. 简单vim配置Linux编辑器-gcc/g++使用Linux调试器-gdb使用Linux项目自动化构建工具-make/Makefile前言Linux软件包管理yumLinux开发工具Linux编辑器-vim使用01.vim的基本概念02.vim的基本操作03.vim正常模式命令集04.vim
2021-08-04 15:13:25
957
1
原创 【Linux入门】第二篇:shell命令及运行原理和Linux权限的概念
目录前言shell命令及运行原理Linux权限的概念Linux下的用户Linux创建用户和删除用户Linux用户切换Linux增加用户权限(添加到信任列表)Linux权限的管理01.文件访问者的分类02.文件类型和访问权限(事物属性)03.文件权限值的表示方法04.文件访问权限的相关设置方法a)修改文件的访问权限b)修改文件的拥有着c)修改文件或目录的所属组d)查看或修改文件的掩码e)file指令目录的权限粘滞位总结前言shell命令及运行原理在Linux中,严格意义来说是一个操作系统,我们称之为"核
2021-07-29 19:40:22
767
6
原创 【C++STL】第一篇:string类介绍及模拟实现
目录一、标准库中的string类1.1 string类2.2 string类中的常用接口说明一、标准库中的string类1.1 string类字符串的表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,
2021-07-25 19:50:08
510
11
原创 【C++类与对象】第二篇:(构造函数、析构函数、拷贝构造、运算符重载、取地址及const取地址操作符重载)
目录前言1. 构造函数2. 析构函数3. 拷贝构造函数4.赋值操作符重载5.默认拷贝构造与赋值运算符重载问题6. const成员函数7. 取地址及const取地址操作符重载总结前言1. 构造函数2. 析构函数3. 拷贝构造函数4.赋值操作符重载5.默认拷贝构造与赋值运算符重载问题6. const成员函数7. 取地址及const取地址操作符重载总结...
2021-05-31 23:00:10
538
16
原创 【C++类与对象】第一篇:类的介绍及this指针
目录面向过程和面向对象的初步认识1.类的引入2.类的定义3.类的作用域4.类的实例化5.类的访问限定符及封装6.类的对象大小的计算7.类的成员函数的this指针面向过程和面向对象的初步认识我们先初步认识一下面向过程和面向对象:我们学c语言,c语言就是面向过程,关注的是过程,分析求解问题的步骤,通过对函数的调用逐步解决问题。我们学c++,c++就是面向对象,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。在现在这个时代,点外卖已经成为我们的日常了,以外卖为例来简单区别过程和对象:
2021-05-26 22:58:16
1220
27
原创 【C++入门语法】第一篇:(命名空间、缺省参数、函数重载、引用、内联函数)
目录命名空间namespace关键字using namespace std在程序中的作用命名空间嵌套C++输入&输出缺省参数缺省参数分类函数重载C不支持函数重载的原因(名字修饰)extern"C"引用引用概念引用特性常引用使用场景做参数做返回值传值、传引用效率比较引用和指针的区别内联函数auto关键字(C++11)auto的使用细则auto不能推导的场景基于范围的for循环(C++11)指针空值---nullptr(C++11)命名空间在c和c++中,变量,函数和后面要学到的类是大量存在的,这
2021-05-23 17:47:25
634
23
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人