- 博客(68)
- 收藏
- 关注
原创 【Qt】Qt 批量修改同类对象
新建一个「样式文件」(如),统一定义组件样式:// GlobalStyle.qml(放在项目根目录,方便引用)// 定义 Button 的全局样式font.pixelSize: 14, // 字体大小14号color: "#333333" // 背景色深灰色radius: 4 // 圆角4px(可选)在所有需要的 QML 文件中引用该样式:// 主界面 Main.qml。
2025-12-05 11:33:41
933
原创 SFTP和FTPS 安全性、速度和可靠性对比 ,以及在实际场景中的选择
SFTP和FTPS是两种安全文件传输协议,在安全性、速度和可靠性方面各有特点。 安全性: SFTP基于SSH协议,全程单通道加密,支持密钥认证,漏洞较少,适合简单安全需求。 FTPS基于FTP扩展SSL/TLS,支持双向证书验证,适合高合规场景,但存在端口配置复杂性和潜在降级攻击风险。 速度: SFTP因单连接交互式设计,小文件传输较慢,不支持多线程; FTPS双连接分离控制与数据,大文件传输更快,支持多线程批量传输。 可靠性: SFTP单端口易配置,兼容性好,但断点续传较弱; FTPS双连接容错强,断点续
2025-09-29 04:55:13
846
原创 FTP控制连接和数据连接的建立过程详解
理解FTP的双连接机制有助于解决实际应用中的连接问题,特别是防火墙环境下的端口配置和被动模式的正确使用,这也是FTP客户端配置中最容易出现问题的环节。来完成文件传输操作:控制连接和数据连接。这两种连接各司其职,建立过程也有明显差异,下面详细介绍它们的工作机制。FTP(文件传输协议)最显著的特点是使用。
2025-09-29 04:45:57
976
原创 SFTP和FTPS在实际业务场景中的应用
摘要: SFTP和FTPS是两种主流安全文件传输协议,适用于不同业务场景。SFTP基于SSH协议,配置简单、防火墙友好,适合跨平台文件同步、开发运维管理及中小企业低成本传输。FTPS扩展FTP协议支持SSL/TLS加密,兼容传统FTP系统,适合大文件高并发传输、双向证书认证等高安全场景。选型需考虑技术环境、网络配置、安全需求及运维成本:Linux/自动化场景优先SFTP;需合规性、大文件传输或兼容旧系统则选FTPS。两者可并存使用,关键是根据实际需求权衡协议特性。
2025-09-29 04:44:34
1041
原创 FTP 与 FTPS:文件传输协议的对比与详解
FTP与FTPS是两种常用的文件传输协议,FTP作为基础协议存在安全性缺陷(明文传输),而FTPS通过SSL/TLS加密实现了安全增强。FTP采用双连接模式(控制连接21端口+数据连接),分主动/被动两种模式;FTPS在此基础上对控制/数据连接均加密,分显式(兼容性强)和隐式(强制加密)两种实现方式。核心差异在于安全性、端口和兼容性:FTP适合非敏感数据传输,FTPS则用于财务、隐私等敏感场景。主流工具包括FileZilla、WinSCP等客户端和vsftpd等服务器软件。需注意FTPS与SFTP(基于SS
2025-09-29 04:41:17
1070
原创 【MySQL数据库】InnoDB实现MVCC(多版本并发控制)底层原理
InnoDB实现MVCC的核心机制 InnoDB通过Undo Log版本链实现MVCC,其核心原理为: 版本链构建:数据修改时生成Undo Log记录旧值,通过隐藏列DB_TRX_ID(事务ID)和DB_ROLL_PTR(回滚指针)串联成链式结构,保存历史版本。 事务回滚机制: 触发条件:显式ROLLBACK或异常(冲突/超时/崩溃)。 执行过程:根据事务ID定位私有Undo Log,按操作类型(INSERT/UPDATE/DELETE)逆向恢复数据,并维护版本链完整性。 协同机制:与Redo Log配合确
2025-09-26 18:22:34
1263
原创 【Git】Git 操作指令大全及使用场景详解
本文全面整理了Git常用操作指令,涵盖仓库创建与配置、文件跟踪与暂存、提交操作、分支管理、远程仓库操作、撤销回退、历史查看、标签管理和储藏操作等10大类场景。详细说明了每个指令的具体使用场景和功能,包括git init创建仓库、git add暂存文件、git commit提交变更、git branch分支管理、git push/pull远程操作等核心命令,以及git reset回退、git log查看历史、git stash临时保存等实用操作。是Git版本控制系统的完整参考指南,适合开发人员日常查阅使用。
2025-09-26 15:23:19
1024
原创 NAT穿透概念和实现 及其应用场景
低延迟:需避免数据经第三方服务器中继(如实时音视频、在线游戏);低成本:无需为设备分配公网IP或部署专线(如智能家居、个人服务);高隐私/安全:数据无需经中心化服务器,减少泄露风险(如P2P文件传输、工业设备数据);灵活性:设备部署在任意内网,仍可被公网访问或与其他内网设备直连(如远程办公、边缘计算)。这些场景也决定了NAT穿透技术的选择:实时性要求高的场景优先用STUN+UDP打洞,稳定性要求高的场景用TURN中继(兜底),简单场景(如家庭设备)用UPnP。
2025-09-23 01:53:38
889
原创 NAT概念 以及 技术实现内网与外网通信
综上,NAT是“地址不足时的折中方案”,而其他技术则根据“访问需求、安全性、成本”提供了更灵活的选择——比如企业服务器用“公网IP+反向代理”,远程办公用“SSL VPN”,跨地域组网用“MPLS VPN”,未来IPv6普及后则可直接实现原生通信。这类技术的核心是将“内网设备的数据包”封装在“外网可识别的数据包”中,通过“隧道”传输到外网目标,本质是“给内网数据‘套一个公网兼容的‘外壳’,让它能在公网中‘隐身’传输”,适用于。除了NAT,还有哪些技术可以实现内网与外网的通信?
2025-09-23 01:21:13
1141
原创 【Error】C++引用悬挂问题
C++中引用悬挂与空引用的区别关键点在于:引用悬挂指向已销毁对象的内存,导致未定义行为;而空引用在C++中根本不存在,编译器会阻止引用绑定nullptr。引用必须初始化且无法解绑,悬挂引用常因返回局部变量引用或管理不当的动态内存导致。避免方法包括不返回局部变量引用、使用智能指针管理生命周期等。引用悬挂比空指针更隐蔽危险,需特别注意对象生存期管理。
2025-08-06 10:37:13
389
1
原创 【算法 - 哈希表】两数之和
两数之和题目解析思路解法一 :暴力枚举 依次遍历解法二 :使用哈希表来做优化核心逻辑为什么之前的暴力枚举策略不太好用了?所以,这就是 这道题选择 ==固定一个数,再与其前面的数逐一对比完后,再将其自身放入hash表中,参与匹配== 的原因代码实现两数之和。
2024-07-05 13:35:52
1250
5
原创 【C++报错】c++实例类的时候提示已声明所在行数,所属文件不可访问 的解决办法
c++实例类的时候提示已声明所在行数,所属文件不可访问。
2024-04-26 13:47:20
5675
21
原创 【C++报错】error C2143:语法错误:缺少“ : ”(在“<” 的前面)[ 相互引用问题 ]
若检查完后原代码中并未出现该提示的语法问题,则是存在互相引用问题。
2024-04-26 12:20:36
1229
14
原创 【Linux】man手册
man手册就是linux下提供给用户查看linux语法的一本书,当用户遇到一些不懂的命令/函数的时候,不用刻意地去记住命令/函数是什么,只需要记住怎么在man手册中查询即可。
2024-04-16 23:34:33
2185
1
原创 【Linux报错】E348:No string under cursor
时直接编辑,则会出现上述的 E348 的报错。进入插入模式,即可编辑文件。
2024-04-16 23:28:32
2129
原创 【Linux】进程基础铺垫(三)软件基础:系统调用接口
就好比 去银行取钱,银行不可能让你直接去银行金库(底层的所有数据信息)里面去取钱,这样会非常危险。担心群众中有坏人又必须的给用户提供服务就出现了银行柜台窗口( 也就是我们这里的 系统调用接口 ),为了方便您更便捷的取钱与咨询,每个窗口都有工作人员提供服务( lib库函数封装,通过 函数调用 来进行 系统函数接口的调用【 不同的平台 会自动调用 不同的系统函数接口 】 )。存在软件,就自然会有操作系统 对其进行管理。操作系统:1.数据方面的支持;2.功能方面的支持。
2024-04-14 21:20:39
578
5
原创 【Linux】进程基础铺垫(二)软件基础:操作系统 (Operator System)
先描述,在组织数据 有数据的结构体;硬件 也有硬件的结构体。每一个独立的硬件都有自己各自的厂商只有自己才知道自己对应的设备如何被访问。每一种硬件都有属于自己的软件(驱动程序)。【 要配合操作系统进行使用 遵守操作系统的规则,接口格式,文件格式 进行设计 】。厂商生产的时候,都会按照 系统接口 来设计 对应的驱动程序常见的驱动程序 默认已经内置通过结构性数据来编写算法。否则 一直两两 if else 的判断,效率特别特别低,通过数据结构,将数据组织起来结构体(这里是指 链表)直接遍历一遍数组。
2024-04-14 21:16:02
824
1
原创 【Linux】进程基础铺垫(一)硬件基础:冯诺依曼体结构
寄存器(速度不亚于cpu本身)内存磁盘 光盘 磁带 甚至是云盘cpu非常的快。输入/输出设备 又非常慢。所以计算机整体读取信息的速度完全取决于 速度最慢的 输入/输出设备【木桶效应:取决于短板】
2024-02-12 01:44:54
772
13
原创 【C++】string类 详细讲解【string接口、迭代器、容量相关操作、npos、string类中运算符重载、编码、Vs 和 g++ 下 string结构的说明等讲解】
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。string类的文档介绍字符序列迭代器才是容器访问的主流形态 【通用性】迭代器都是左闭右开,begin 左闭,end 右开(最后一个位置的下一个位置)it :本质 保护迭代器指向的数据 * it不能修改constiterator it :保护的选代器本身不能修改 it不能修改。
2023-12-20 23:35:51
3769
19
原创 【C++】日期类的实现
因为都只是判断,并不修改,所以都加const成员函数的一大特点:参数中含有隐藏的 this指针//隐藏的this指针out
2023-12-04 17:22:57
305
9
原创 【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】
STL ( standard template libaray - 标准模板库 ):是C++标准库 的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2023-12-04 17:19:47
479
15
原创 【C++】C/C++内存分布【C/C++内存管理方式详解以及new/delete、operator new/operator delete、malloc/free 三者之间的关系讲解内存泄漏问题】
【说明】栈:又叫堆栈 –非静态局部变量函数参数返回值等等临时变量,栈是向下增长的。函数建立栈帧,存储临时变量内存映射段“:是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)堆:用于程序运行时动态内存分配,堆是可以上增长的。数据段【静态区】:存储全局数据和静态数据。代码段【常量区】可执行的代码只读数据(包含 常量)常量区,修改会报错常量区存放 二进制的代码( 指令 cpu才能看的懂 )
2023-11-30 10:17:38
675
11
原创 【Linux】Linux环境基础开发工具使用(三)gcc/g++ 编译器【 Linux编译器-gcc/g++编译器的使用 选项以及介绍 、gcc编译过程的详细讲解 、函数库,动静态库的理解】
在这里涉及到一个重要的概念:函数库我们的C程序中,并没有定义“printf”的函数实现。且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现。那么,是在哪里实现 “printf”函数 的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了。在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去C语言有自己的标准库,默认给你链接到上面去了。
2023-11-30 10:03:25
1530
7
原创 【Linux】Linux环境基础开发工具使用(二)vim【 Linux编辑器-vim使用与介绍 详细讲解 、vim各模式的命令合集 、sudo提权问题的讲解 以及如何提权 】
vi/vim的区别简单点来说,它们都是多模式 编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。我们课堂上,统一按照vim来进行讲解。三种模式正常模式插入模式底行模式我们一共有12种总模式,大家下来可以研究一下还有 视图模式 :可以进行代码的批量化注释vim操作打开关闭查看查询插入删除替换撤销复制等等操作。练习:当堂口头模式切换练习。
2023-11-27 12:47:29
658
16
原创 【Linux】Linux环境基础开发工具使用(一)yum【Linux 软件包管理器 yum 工具的详细讲解 以及 国内yum源推荐 、centos 7 yum源更新详细步骤、以及Linuxyum生态】
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译得到可执行程序因为linux是来源的,就会随之产生通过开源开发出来的的软件。要先挑出资源对应的源代码,且还有很多个版本,源代码在环境中 先编译,再下载到你的操作系统里。挑出来后在你的系统环境中编译,一编译就报错,还得修复bug。检查报错的过程就是叫 交叉编译。可见这个是安装软件的办法是有多麻烦,逼不得已才用这个。方法二:于是linux社区的工作者们 就已经把一些常用的软件提前编译好做 软件包(rpm包。
2023-11-25 22:40:56
756
15
原创 【Linux】权限理解【文件权限以及目录权限详解、以及umsk程序掩码知识详解】
目录的可执行权限是表示你可否在目录下执行命令。-x决定是否可以进入目录如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录即使目录仍然有-r读权限这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件-r决定是否可以进行对文件属性信息进行查看的权力而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限 ,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档也就是说-x权限 是后续操作的前提。-w。
2023-11-23 09:12:08
731
17
原创 【Linux】Linux中的基本概念
解答:一个文件没有内容,大小确实为0,但是一个文件有名称,修改日期,类型,大小。Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。文件在磁盘或硬盘上保存,也就是文件的内容和属性在磁盘硬盘上保存。(路径分隔符)分隔起来的一串由文件夹构成的字符串)字符串。文件的属性在宏观上是数据。思考1 :新建一个空文件,这个文件要不要占据磁盘空间?路径的本质:多叉树的搜素路径(快速定位)[新建一个空文件,这个文件要占据磁盘空间。文件的属性也是要保存在计算机上的。的标识指定文件的(由。
2023-11-22 09:10:43
708
36
原创 【Linux】Linux的常用基本指令
绿色颜色标识的 为语法a [ all ] 所有d [ director ] 目录f [ force ] 强制i [ ignore ] 忽略r [ recursive ] 递归q [ quit ] 退出。
2023-11-21 10:30:23
587
35
原创 【C++】模板初阶 【 深入浅出理解 模板 】
如何实现一个通用的交换函数呢?......使用函数重载虽然可以实现,但是有一下几个不好的地方:重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?如果在C++中,也能够存在这样一个模具,通过给这个模具中 填充不同材料(类型),来获得不同材料的铸件**(即生成具体类型的代码)**,那将会节省许多头发。
2023-11-18 17:04:33
364
27
原创 【C++】类与对象 III 【 深入浅出理解 类与对象 】
临时变量具有常属性( 不可修改,要加const )。内置类型 整形和浮点形(意义非常相近,表示数字大小) 隐式互相转换int和指针 只能显式转【强制类型转换】内置类型 —隐式转换—> 自定义类型:【 类型转换都是通过临时变量做中间值,由构造函数来支持 】能支持这个转换,就看类里面有没有相对应类型的单参数/ 支持传一个参数/多参数带缺省(也可以)的半缺省( 这些都看实际具体的情况是否有同对应类型的参数条件 )构造函数支持转换。若不想让隐式类型转换发生,C++引入入新关键字explicit。
2023-11-18 17:01:23
356
14
原创 【C++】类与对象 II 【深入浅出 万字详解】
没有初始化会产生什么问题?没有初始化了, 会造成 野指针、随机值 问题初始化容易忘class Datepublic:void Init(int year, int month, int day) //函数初始化_day = day;int _month;int _day;d1.Print();Date d2;d2.Print();return 0;C语言中,每次都要初始化一下。
2023-11-18 16:59:43
265
21
原创 【C++】类与对象 I
C语言面向过程关注的是过程。分析出求解问题的步骤,通过函数调用逐步解决问题。用洗衣服来做个例子:C++基于面向对象关注的是对象。将一件事情拆分成不同的对象,靠对象之间的交互完成。整个过程主要是:人、衣服、洗衣粉、洗衣机四个对象之间交互完成的,人不需要关心洗衣机具体是如何洗衣服的,是如何甩干的。对象具体怎么完成的,那是它的事情。C语言结构体:只能定义变量由于结构体中只能定义变量,导致函数只能在结构体外定义导致数据和方法分离,所以必须带参数 才能访问在结构体中定义的变量。
2023-11-14 23:00:49
839
16
原创 【C++】C++的介绍及其发展史
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。C++是基于C语言而产生的。
2023-11-12 14:40:14
609
20
原创 【C++】C++入门详解 II【深入浅出 C++入门 这一篇文章就够了】
引用概念上定义一个变量的别名,指针存储一个变量地址。引用在定义时必须初始化,指针没有要求(则容易出现 野指针问题)引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个 同类型 实体没有NULL引用,但有NULL指针[ 3、4点提现:引用更安全,但也不是绝对的安全 ]在sizeof 中含义不同引用结果为引用类型的大小,但指针始终是地址空间 所占字节个数(32位平台下占4个字节)引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小有多级指针,但是没有多级引用。
2023-11-12 14:30:01
285
7
原创 【C++】C++入门详解 I【C++入门 这一篇文章就够了】
C++ 就是在对 C语言使用中遇到的缺陷与不足的改进。C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助。补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。为后续类和对象学习打基础namespace[关键字] + 命名空间的名字 + { } +( { } 里面 )命名空间的成员一般开发中是用项目名字做命名空间名。命名空间中可以定义变量。
2023-11-12 14:29:24
299
7
原创 【数据结构】排序算法复杂度 及 稳定性分析 【图文详解】
前面给大家讲述了各大排序算法的原理、思路以及实现步骤、代码码源,下面让我们来对比一下各大排序之间的算法复杂度以及稳定性分析优劣,加深我们对于各排序算法的理解,帮助我们以后能更快的在具体场景下选择出最适的排序算法。
2023-11-05 09:46:23
648
14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅