自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(234)
  • 资源 (21)
  • 收藏
  • 关注

原创 操作系统的运行机制

有的指令有很高的权限。生活经验:我们安装完 Windows 操作系统后,会发现操作系统提供了多种多样的功能,比如“记事本”、“任务管理器”。注:很多人习惯把 Linux、Windows、MacOS 的“小黑框”中使用的命令也称为“指令”,其实这是“交互式命令接口”,注意与本节的“指令”区别。,甚至可以说,一个操作系统只要有内核就够了(eg:Docker—>仅需Linux内核),但操作系统的功能未必都在内核中,如图形化用户界面 GUI。,其中有个二进制位,1表示“内核态”,0表示“用户态”。

2025-03-31 20:17:00 857

原创 操作系统的发展与分类

操作系统的发展与分类

2025-03-27 18:40:03 577

原创 操作系统的特征

操作系统的特征

2025-03-27 18:33:57 288

原创 操作系统的概念、功能和目标

操作系统的概念、功能和目标

2025-03-20 19:57:24 782

原创 深入理解MySQL主从原理

高鹏(网名八怪),《深入理解MySQL主从原理》系列文的作者。 本系列通过GTID、Event、主库、从库、案例分析,五大块来详细讲解主从原理。

2025-03-07 16:01:34 647

原创 GTID模块初始化简介和参数binlog_gtid_simple_recovery

曾经有一个案例,当每次超过参数expire_logs_days的大小而清理binary log时,系统的I/O压力都非常高,最后发现和这里参数binlog_gtid_simple_recovery=false的设置有关,在1.2节中我们已经讲述过,每次清理binarylog时都会触发gtid_pured变量的设置。这个时候,从库的executed_gtids变量是正确的,如1.2节所述,从库的mysql.gtid_executed表包含所有的GTID。的介质在GTID模块初始化时的作用。

2025-03-06 20:00:40 719

原创 mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机

其处理逻辑依然是通过Gtid_state::update_on_commit函数调入Gtid_state::update_gtids_impl_own_gtid函数进行的。,gtid_executed变量和gtid_purged变量则对应了内部结构体Gtid_state中的executed_gtids和lost_gtids内存数据,它们分别表示。在binary log关闭的状态下,不生成GTID,mysql.gtid_executed表、gtid_executed变量、gtid_purged变量均不更新。

2025-02-26 20:04:14 913 1

原创 GDB调试报错:Program received signal SIGPIPE, Broken pipe(一遍过)

1)使用Vscode gdb attach调试,报错:Broken pipe2)直接使用gdb attach调试,报错:Program received signal SIGPIPE, Broken pipe

2025-02-26 19:58:15 232

原创 GTID的基本概念

这里先解释一下它们的作用,因为后面会用到。具体的Event解析可以参考2.2节和2.3节。GTID_EVENTGTID_EVENT作为DML/DDL的第一个Event,用于描述这个操作的GTID是多少。在MySQL 5.7中,为了支持从库基于LOGICAL_CLOCK的并行回放,封装了last commit和seq number两个值,可以称其为逻辑时钟。

2025-02-25 19:57:08 1040

原创 Can‘t read dir of ‘/etc/my.cnf.d‘ (OS errno 2 - No such file or directory)

如果/etc/my.cnf.d目录下缺少mysql-clients.cnf文件,mysql客户端工具在加载配置文件时会报错,导致无法正常启动。mysql-clients.cnf文件是MySQL客户端工具的配置文件,用于定义客户端工具(如mysql、mysqldump、mysqlbinlog等)的默认行为和参数。2)目录配置文件:/etc/my.cnf.d或/etc/mysql/conf.d。1)全局配置文件:/etc/my.cnf或/etc/mysql/my.cnf。

2025-02-10 15:16:59 420

原创 Centos源码安装MariaDB & 基于GTID主从部署(一遍过)

下载源码编译安装说明:在编译过程中可能会遇到如下错误:解决方案:下载对应文件,并将其复制到对应目录下即可!配置文件如下:初始化文件初始化文件(init.file)内容如下:初始化脚本初始化脚本(initial.sh)如下:启动脚本启动脚本(start.sh)如下:mariadb tree根据自己需要安装,我在本地装了三个实例!连接结果:MySQL复制有两种方式:基于日志点的复制、基于GTID的复制,两种方式都依赖于MySQL二进

2025-01-03 19:04:59 673

原创 数据库新建用户后(Host:%),报错:localhost无法连接

上述连接命令使用127.0.0.1作为主机名,MariaDB在mysql.user表中首先查找Host为127.0.0.1的用户条目,如果没有找到,但是,如果MariaDB在处理连接请求时,由于某些原因(可能是配置问题或权限问题)没有正确识别maxscale@%用户,它可能会退回到使用匿名用户。由于maxscale用户对应的Host是%,理论上应该能够匹配任何主机,包括127.0.0.1和localhost。注意:匿名用户权限很高,非必要情况下,优选删除匿名用户!

2025-01-03 18:49:25 537

原创 InnoDB事务系统(二):事务的实现

因此,无论多少次写入相同的redo log记录,对数据库的实际影响都是相同的。【拓展:Innodb 以页为单位进行磁盘交互,一页大小 16 KB,一页中至少保存两条数据,也就是说当你更新某个页中的一条数据中的一个字段时,它都需要整页更新,而且如果事务修改了很多页,页之间的 block 不是连续的,磁盘还要不停的寻址。例如,页P1的LSN为10000,而数据库启动时,InnoDB检测到写入重做日志中的LSN为13000,并且事务已经提交,那么数据库需要进行恢复操作,将重做日志应用到P1页中。

2024-12-17 20:18:46 1248 1

原创 InnoDB 事务系统(一):认识事务

虽然在大多数的情况下,这并不会导致严重的结果,甚至可能还会带来性能的提升,但是用户首先需要知道严谨的事务标准,并在实际的生产应用中避免可能存在的潜在问题。当用 begin work 开启一个事务时,隐式地包含了一个保存点,当事务通过 rollback work:2 发出部分回滚命令时,事务回滚到保存点 2,接着依次执行,并再次执行到 rollback work:7 ,直到最后的 commit work 操作,这时表示事务结束,除灰色阴影部分的操作外,其余操作都已经执行,并且提交。若非这样,结果会非常可怕。

2024-12-17 19:58:59 1039

原创 InnoDB表

其中,File Header、Page Header、File Trailer 的大小是固定的,分别为 38、56、8 字节,这些空间用来标记该页的一些信息,如 Checksum,数据页所在 B+ 数索引的层数等。如果启用了 innodb_file_per_table 参数,需要注意的是每张表的表空间内存放的只是数据、索引和插入缓冲 Bitmap 页,其他类的数据,如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲(Double write buffer)等还是存放在原来的共享表空间内。

2024-12-13 18:59:16 669

原创 MySQL常用运维操作(二):grant赋权语句

在这个grant命令执行完成后, 如果有新的客户端使用用户名ua登录成功, MySQL会为新连接维护一个线程对象, 然后从acl_users数组里查到这个用户的权限, 并将权限值拷贝到这个线程对象中(也就是说,只要新连接建立,其对应线程对象就会获取该用户的super权限)。重点:每次需要判断一个用户对一个数据库读写权限的时候, 都需要遍历一次acl_dbs数组, 根据user、 host和db找到匹配的对象, 然后根据对象的权限位来判断。在T4时刻,执行set global时,权限验证通过。

2024-12-12 20:30:00 1113

原创 MySQL常用运维操作(一):快速复制一张表

假设要把db1.t里面a>900的数据行导出来, 插入到db2.t中。

2024-12-12 20:24:14 1010

原创 MySQL并发控制(二):锁

注:上述说的等值查询是指SQL语句where条件中有等值条件,且该语句会加锁。示例:此处体现了加锁规则1中左开右闭的本质,那就是,如果是范围查询且范围区间为左开右闭,如(5,10],那么加锁范围就是(5,10]。如果是范围查询且范围区间为左闭,如 [5,10] 或 [5, 10),则加锁区间为(0,5] 和(5,10]。(此处主要是针对原则1的总结,不涉及加锁规则中的优化)

2024-12-10 19:58:10 995

原创 MySQL并发控制(一):幻读

如果只在id=5这一行加锁, 而其他行不加锁的话, 会怎么样。下面先来看一下这个场景(注意: 这是我假设的一个场景) :可以看到, session A里执行了三次查询, 分别是Q1、 Q2和Q3。它们的SQL语句相同, 都是select * from t where d=5 for update。这个语句的意思你应该很清楚了, 查所有d=5的行, 而且使用的是当前读, 并且加上写锁。这三个语句的执行结果如上图所示。其中, Q3读到id=1这一行的现象, 被称为“幻读”。

2024-12-06 18:40:38 1127

原创 MySQL索引(五):逻辑相同性能不同

优化器可以选择遍历主键索引,也可以选择遍历索引t_modified, 优化器对比索引大小后发现, 索引t_modified更小, 遍历这个索引比遍历主键索引来得更快。如果你的SQL语句条件用的是where t_modified='2018-7-1’的话, 引擎就会按照上面绿色箭头的路线, 快速定位到 t_modified='2018-7-1’需要的结果。explain的结果里面第二行的key=NULL表示的就是,这个过程是通过遍历主键索引的方式,一个一个地判断tradeid的值是否匹配。

2024-12-04 20:51:25 755 1

原创 MySQL索引(四):字符串索引

(但如果建立前缀索引的对象是身份证号时(一般同一地区身份证号的前几位相同),则需要创建长度较长的前缀索引,才能满足区分度的要求。但是,索引选取的越长, 占用的磁盘空间就越大, 相同的数据页能放下的索引值就越少, 搜索的效率也就会越低。但是, 对于这个查询语句来说, 如果你定义的index2不是email(6)而是email(7) , 也就是说取email字段的前7个字节来构建索引的话, 即满足前缀’zhangss’的记录只有一个, 也能够直接查到ID2, 只扫描一行就结束了。4)使用hash字段。

2024-12-04 20:48:05 1119

原创 MySQL索引(三):选错索引

优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。

2024-12-04 20:44:53 1011

原创 MySQL索引(二):索引选择

在不同的业务场景下, 应该选择普通索引, 还是唯一索引?下面对其进行分析...

2024-12-04 20:40:03 806

原创 MySQL存储管理(二):自增主键

问:表定义自增id用完了会怎样?答:若表定义的自增值达到上限,当再申请下一个id时,得到的值保持不变。-- 创建表t,指定自增id为int的最大值-- 成功插入一行 4294967295-- 查看表t当前自增id*/-- 再次插入一行数据,报主键冲突可以看到第一个insert语句插入数据成功后,这个表的AUTO_INCREMENT没有改变(还是4294967295) , 就导致了第二个insert语句又拿到相同的自增id值, 再试图执行插入语句, 报主键冲突错误。

2024-12-04 20:31:20 1270

原创 MySQL主从复制(七):GTID

GTID(Global Transaction Identifier)是MySQL 5.6及以后版本中引入的一个关键特性,用于在MySQL的复制架构中实现全局唯一的事务标识。GTID以事务为单位管理复制,不再需要靠log_file和log_pos来定位复制位置,在主从切换、故障恢复时更加简单。

2024-12-02 19:16:40 1133

原创 MySQL查询执行(八):Memory引擎

思考:两个group by语句都用了order bynull, 为什么使用内存临时表得到的语句结果里, 0这个值在最后一行;而使用磁盘临时表得到的结果里, 0这个值在第一行?答:答案对应第一小节:内存表的数据组织结构。

2024-11-20 20:06:40 731

原创 MySQL查询执行(七):临时表

思考:临时表和内存表的区别?

2024-11-18 20:39:03 1615

原创 MySQL查询执行(六):join查询

到底可不可以使用join如果直接使用join语句, MySQL优化器可能会选择表t1或t2作为驱动表, 这样会影响我们分析SQL语句的执行过程。所以, 为了便于分析执行过程中的性能问题, 我改用straight_join让MySQL使用固定的连接方式执行查询, 这样优化器只会按照我们指定的方式去join。在这个语句里, t1 是驱动表, t2是被驱动表。

2024-11-14 21:08:02 1023

原创 UNIX网络编程-TCP套接字编程(实战)

1)当fork子进程时,必须捕获SIGCHLD信号。2)当捕获信号时,父进程必须处理被中断的系统调用,如accept函数。3)SIGCHLD的信号处理函数必须正确书写,并使用waitpid函数以免留下僵尸进程。

2024-11-12 20:08:02 1003

原创 UNIX网络编程-传输层

传输层主要包括:TCP、UDP、SCTP(流控制传输协议)!绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。这些传输协议都转而使用网络协议IP:或是IPv4,或是IPv6。尽管可以绕过传输层直接使用IPv4或IPv6,但这种技术(往往称为原始套接字)却极少使用。UDP是一个简单的、不可靠的数据报协议,而TCP是一个复杂、可靠的字节流协议。

2024-10-18 20:12:50 910

原创 UNIX网络编程-简介

要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocal)。大多数网络应用划分为客户端(client)和服务器(server)。在设计网络应用时,确定总是由客户发起请求往往能够简化协议和程序本身。当然一些较为复杂的网络应用还需要异步回调通信,也就是由服务器向客户端发起请求。通常客户端每次只与一个服务器通信,但一个服务器可以同时与多个客户端通信。一个服务器同时处理多个客户端请求:可认为客户端与服务器之间是通过某个网络协议通信的,但实际上这样的通信通常涉及多个网络协议层。

2024-10-17 14:00:19 873

原创 MySQL查询执行(五):查询那么多数据会不会把数据库打爆

思考:我的主机内存只有100G, 现在要对一个200G的大表做全表扫描, 会不会把数据库主机的内存用光了?答:不会。查询的结果是分段发给客户端的,因此扫描全表,查询返回大量的数据,并不会把内存打爆。

2024-10-16 18:57:06 1141

原创 MySQL查询执行(四):查一行也很慢

假设存在表t,这个表有两个字段id和c,并且我在里面插入了10万行记录。

2024-09-14 18:45:35 1003

原创 MySQL查询执行(三):显示随机消息

思考:假设有一个英语学习App,首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。如果让你来设计这个SQL语句,你会怎么写呢?

2024-07-28 14:41:10 775

原创 MySQL查询执行(二):order by工作原理

假设你要查询城市是“杭州”的所有人名字, 并且按照姓名排序返回前1000个人的姓名、 年龄。

2024-07-27 17:31:21 950

原创 MySQL查询执行(一):count执行慢

MySQL查询处理器是MySQL数据库服务器的组件,它负责执行SQL查询。查询处理器的主要任务是解析查询(把用户提交的SQL查询转换为可以被数据库引擎理解和执行的数据操作指令序列),生成查询计划,然后执行该计划。SQL语句查询编译的步骤:1)语法分析,建立查询分析树;2)生成逻辑计划,将分析树转化为初始查询计划,并优化;(逻辑优化,生成逻辑执行计划)3)生成物理计划,为逻辑计划中的每个操作符选择实现算法以及执行顺序;

2024-07-27 17:06:48 1233

原创 MySQL存储管理(三):分区表

表对应磁盘文件:我在表t中初始化插入了两行记录, 按照定义的分区规则, 这两行记录分别落在p_2018和p_2019这两个分区上。从图中可以看到,这个表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件。对于引擎层来说, 这是4个表。对于Server层来说, 这是1个表。注:分区表是由server层定义的,而非引擎层。

2024-06-28 18:35:51 903

原创 Centos MySQL 源码安装(5.6)

注1:5.6 不支持C++ 11及更高版本,所以在编译 MySQL 5.6 时,需将编译器配置改为: C++98 或 C++03 标准。然而,由于您之前定义的 byte 宏,编译器在尝试解析 std::byte 类型的枚举时可能会遇到麻烦,因为它实际上试图将 byte 解释为宏展开,而不是 std::byte 类型。注1:my3307.cnf文件中的/home/mysql80/node3307/mysql为mysql安装路径,根据自己情况进行更改;注:上述安装过程为无密码安装,因此连接时,无需输入密码。

2024-06-21 19:06:57 219

原创 MySQL存储管理(一):删数据

表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认情况下,InnoDB存储引擎有一个共享表空间idbdata1,即所有数据都存放在这个表空间内。如果用户启用了参数 innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。

2024-06-21 18:44:34 1138

原创 MySQL日志(三):数据安全

回答这个问题前,先看一下磁盘、SSD、内存随机读写与顺序读写的性能对比,如下图所示:从上图可以看出两点:1)内存的读写速度比磁盘随机读写高出几个数量级。2)磁盘顺序读写速度堪比内存读写速度。问1:什么是WAL呢?WAL即 Write Ahead Log,WAL的核心思想是,每次更新操作都先写入日志,只做了写日志这一个磁盘操作。这个日志叫做redo log(重做日志),也就是《孔乙己》记账的粉板,在更新完内存写完redo log后,就返回给客户端,本次更新成功。

2024-06-14 19:37:26 951

Go 版本 Etcd 客户端操作 Etcd

本文诣在使用 Go 客户端操作 Etcd,并实现元数据的写入(单条写、批量写)、读取(单挑读、前缀读)、监听(watch)、更新(update)!

2024-03-23

JDBC PrepareStatement 使用(附各种场景 demo)

该资源中包含 JDBC 连接 MySQL 完整代码、常规 select、update 语句完整代码,以及 JDBC 批量处理数据的几种不同方式完整代码,且附带 使用说明!

2024-01-14

//===计算机网络基础知识===//

该资源总结了面试中的各种核心问题,具体见链接:https://blog.youkuaiyun.com/weixin_47156401/article/details/132780015?spm=1001.2014.3001.5502

2023-09-14

编译原理学习视频课件!

该文档为编译原理学习视频课件,学习视频链接为:https://www.bilibili.com/video/BV17W41187gL/?spm_id_from=333.337.search-card.all.click

2023-08-31

//-SQL解析器完整代码-//

该代码是使用Flex和Bison工具实现的SQL解析器,非常适合初学者学习使用!

2023-08-28

图片裁剪python代码

图片裁剪python代码

2023-06-07

校园新闻管理系统的设计与实现

校园新闻管理系统的设计与实现,包括代码,开题,论文,代码环境配置说明,非常详细没有之一!

2023-06-07

相位差测量电路-非常详细!

该文档内包含设计思路,以模块化设计整个电路便于调试,文档内包含multisim的仿真图!//----------------附有开题报告、毕业设计----------------//

2023-04-13

labelme打样软件

labelme打样软件,直接运行exe即可使用,使用时有任何疑问随时于我联系!!!

2022-11-25

遥感影像配准结果输出tif影像

因为两幅多时像影像在拍摄时即便是同源也无法保证拍摄到的景象完全一致,换句话说:配准时为了使两幅影像的同名点能够对应上,两幅影像(参考影像和待配准影像)的尺寸难免会发生变化(多出的部分使用0填充),甚至待配准影像还会发生些微旋转;因此在配准结果输出 .tif 影像时绝对不是简单的 png 转 tif ,该资源主要是实现了对遥感影像配准结果输出 .tif 做出了具体实现;代码注释非常详细!!!

2022-06-08

根据投影坐标裁剪影像中的目标区域

在影像配准时通常要求输入的参考影像和待配准影像是同一地区且尺寸相等,但是在实际应用时如果要求输入的参考影像和待配准影像是同一地区且尺寸相等的话,则需人工手动裁剪,无形中增加了工作量!!! 所以在配准前需要增加一个自动裁剪功能,该资源给出了裁剪目标区域的代码且注释非常详细,并附有相关测试影像!

2022-06-07

高斯正反算(投影坐标转大地坐标、大地坐标转投影坐标)非常好用

该资源主要实现高斯正反算(投影坐标转大地坐标、大地坐标转投影坐标),经过查资料对高斯正反算的计算原理、公式等重新进行了整理;转换精度基本为零!确保能够拿到能直接使用!!!

2022-05-21

遥感影像png格式转tif格式

在做遥感影像方面的处理时往往需要把png格式的数据转为tif格式,该文件包含完整代码及测试影像,此外注释非常详细!!!

2022-05-18

投影坐标与像素坐标间的转换

该资源主要是实现像素坐标与投影坐标间的转换,转换精度基本为零,转换公式原理及转换测试精度可见:https://blog.youkuaiyun.com/weixin_47156401/article/details/124444130?spm=1001.2014.3001.5502

2022-04-29

高斯正反算设计实现!!!

针对高斯正反算网上给出的方法很多,但是我试了之后发现多少都有些问题:或公式原理问题、或精度问题!通过查找资料对其进行了总结与测试(费了很大一番功夫)!原理!代码!测试结果!本文都一一给出,此外本文还对常见坐标系:北京54、西安80、WGS84、CGCS2000、自定义坐标系等坐标系的高斯转换都做出了实现并使用 QT 进行封装可视化!

2022-04-23

论文免费查重降重神器!

支持论文查重、降重,且降重后的语句逻辑通顺,可以借鉴使用哈!!!

2022-04-20

MVSIP2017(在VS中用于程序打包的扩展)

在VS中用于程序打包的扩展,全程 Microsoft Visual Studio Installer Project ,用该扩展对程序进行打包,可以说是非常简单实用的一种方式!

2022-04-08

gdal 2.3.2!!!

无需重新编译,下载解压后和opencv一样在项目中包含即可使用,非常实用!

2022-04-05

boosts1.7.8标准库

直接解压即可使用!!!Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是由C++标准委员会库工作组成员发起,在其中有些内容有望成为下一代C++标准库的内容。它在C++社区中影响非常大,可以说是不折不扣的准标准库。

2022-03-21

opencv4.4.0版本

下载后直接解压即可使用,非常方便!!!

2022-03-21

BP神经网络车牌识别!

基于bp神经网络的车牌识别,带有测试数据,代码(matlab)注释非常详细,简单易懂,非常实用!

2022-03-02

手写数字识别非常易懂!

手写数字识别matlab实现,非常使用,代码注释非常详细!!!

2022-03-02

电子科技大学机器学习大作业

电子科技大学机器学习大作业,里面包含课程报告、仿真代码(python)、ppt,且仿真代码中注释非常详细!!!

2022-03-02

栅格数据矢量化代码实现(非常实用)

该工程主要是栅格转矢量的具体实现,工程中包含二值图的细化、矢量化、dp算法简化等诸多功能,且代码注释非常详细,如有需要自行下载!!!

2022-01-10

SIFT 算法 C++ 代码实现(非常实用)

该工程主要是对 SIFT 算法的具体实现,代码中注释非常详细易懂、没有之一,非常适合小伙伴们学习哦!!!

2022-01-07

二值图像细化算法(非常实用)

该实现(C++实现)是在查表法的基础上进行优化后的结果,结果比较完美,且效率较高,适合学习;详细分析见:https://blog.youkuaiyun.com/weixin_47156401/article/details/122287851?spm=1001.2014.3001.5502

2022-01-03

多时相影像变化检测精度评价

该资源主要是对多时相影像变化检测进行精度评价(C++实现),代码注释非常详细,非常实用!!!

2021-12-30

多时相影像配准结果使用 Qt 进行模块化显示

多时相遥感影像配准后,将配准结果使用 Qt 模块化显示(使用 C++ 语言实现),目的是为了更方便的展示配准结果,代码备注非常详细,很适合学习使用!!!

2021-12-20

多时相遥感影像变化检测卷帘功能.zip

代码主要是对变化检测结果做一个可视化实现,语言 C++,工具 vs2019 + Qt 能满足大多数需求且简单易懂适合学习,代码非常详细!!!

2021-12-07

空空如也

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

TA关注的人

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