- 博客(99)
- 收藏
- 关注
原创 Git原理与使用
工作区有一个隐藏目录·git,它不算工作区,而是 Git的版本库。这个版本库里面的所有文件都可以被Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。开始也只能应用于Linux平台,后面慢慢的被移植到windows下,现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。但在此之前的工作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的文件就越来越多,文件多不是问题,
2025-12-20 16:24:08
944
原创 Linux_Socket_TCP_字典功能
本文摘要: 文章介绍了TCP socket API的基本用法,包括socket()创建通讯端口、bind()绑定地址端口、listen()监听连接、accept()接受连接等关键函数。重点展示了一个基于多线程的TcpServer类实现,包含初始化套接字、处理客户端请求的服务函数,以及通过线程池处理并发连接。代码示例演示了如何创建TCP服务器,使用回调函数处理客户端命令,支持日志记录和错误处理。服务器采用非拷贝设计,支持IPv4地址,通过端口绑定实现网络通讯。(149字)
2025-11-04 15:18:45
593
原创 笔试强训_day01_C++
【摘要】本文介绍了数字统计题目的解题方法。通过枚举给定范围内的所有数字,结合除模运算进行数字拆分,统计数字2出现的次数。解题步骤包括:1)枚举区间内的每个数字;2)拆分数字的每一位;3)判断是否为2并进行计数。代码实现使用循环结构和条件判断,最终输出统计结果。文章以生动活泼的图文风格呈现,鼓励读者点赞支持。
2025-11-01 22:57:47
314
原创 Linux_Socket_UDP
本文介绍了Socket编程的基础知识,重点讲解了UDP协议的实现方法。主要包括:1)Socket基本概念,如IP地址、端口号和网络字节序;2)TCP与UDP协议的区别;3)Socket常用API函数;4)sockaddr结构体的作用。文章详细展示了UDP服务器和客户端的完整实现代码,包括创建套接字、绑定地址和端口、收发数据等核心功能,并提供了编译用的Makefile文件。通过实例代码演示了基于UDP协议的简单网络通信过程。
2025-11-01 20:04:10
1201
原创 Linux_网络基础
本文摘要:文章系统介绍了计算机网络的发展历程、协议概念及分层结构。从独立计算机到局域网、广域网的演进,阐述了网络产生的必然性。重点解析了协议的本质——通信双方约定的结构化数据类型,并列举了IEEE、ISO等主要协议标准制定组织。详细说明了TCP/IP五层模型(物理层、数据链路层、网络层、传输层、应用层)各层的功能及对应设备,比较了OSI七层模型与TCP/IP模型的差异。通过数据封装与分用过程,解释了局域网通信原理和跨网络传输流程,区分了IP地址(网络层标识)和MAC地址(链路层标识)的不同作用,IP地址代表
2025-09-03 21:49:31
1165
原创 Linux_详解线程池
本文介绍了基于C++17的线程池设计与实现方案。主要内容包括:1)采用策略模式设计可扩展的日志系统,支持控制台和文件两种输出方式;2)实现固定数量线程池,通过任务队列、互斥锁和条件变量实现线程安全的任务调度;3)结合单例模式创建线程安全且延迟加载的线程池实例,采用双检查锁机制确保性能和安全。整个系统包含日志模块、线程封装模块、锁和条件变量模块,通过模块化设计实现高可扩展性,适用于需要处理大量短期任务的服务器场景。
2025-08-28 16:33:12
1093
原创 Linux_线程同步与互斥
本文摘要: 本文系统讲解了Linux线程同步机制,重点介绍了互斥量与条件变量的使用。首先通过售票系统案例演示了多线程共享资源导致的数据竞争问题,详细讲解了互斥量的初始化、加锁解锁等接口用法。随后深入探讨了互斥量的实现原理和RAII封装方式。第二部分介绍了线程同步的条件变量机制,包括等待/唤醒操作规范,并通过生产者消费者模型展示了条件变量的实际应用。最后讲解了基于POSIX信号量的环形队列实现方案,分析了不同同步机制的特点和适用场景。全文通过大量代码示例,清晰呈现了Linux多线程编程中的核心同步技术。
2025-08-23 22:03:48
964
原创 Linux_线程概念及其控制
本文主要介绍了Linux系统中的线程概念及其相关管理机制。首先解释了线程的定义和特点,包括线程作为进程内部的控制序列、共享进程资源的特性。接着详细阐述了分页式存储管理原理,包括虚拟地址与页表转换、物理内存管理、多级页表结构以及缺页异常处理机制。文章对比了线程与进程的优缺点,分析了线程在资源占用、调度效率等方面的优势,同时也指出其健壮性降低等缺点。随后介绍了POSIX线程库的使用方法,包括线程创建、终止、等待和分离等操作,并提供了相关函数原型和示例代码。最后展示了一个线程封装类的实现,演示了如何创建和管理多线
2025-08-18 23:23:18
1039
原创 【软件介绍】RVC本地部署使用方法
【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。
2025-08-06 16:26:59
2465
1
原创 Linux_详解进程信号
本文系统介绍了Linux操作系统中信号机制的原理与应用。主要内容包括:1. 信号概念与分类:信号是进程间异步通知的软中断方式,分为普通信号(1-31)和实时信号(34-64)。普通信号用于分时系统的事件通知,实时信号适用于实时系统。2. 信号产生方式:通过按键(如Ctrl+C)、系统命令(kill)、函数调用(kill/raise/abort)和软件条件(如alarm函数)等多种方式产生信号。3. 信号处理机制:内核通过未决(pending)和阻塞(block)标志位管理信号。信号处理方式包括默认动作、忽略
2025-08-06 16:24:55
1071
原创 Linux_进程间通信
本文系统介绍了进程间通信(IPC)机制,重点分析了管道通信的实现方式。文章首先阐述了进程间通信的四大目的(数据传输、资源共享、事件通知和进程控制),然后详细比较了三种IPC发展历程(管道、SystemV、POSIX)。在管道通信部分,深入讲解了匿名管道和命名管道的创建方法、读写规则、使用场景及差异,并通过多个代码示例(如进程池、文件拷贝、客户端-服务器通信)展示了实际应用。特别强调了管道的特点:半双工、流式服务、生命周期随进程等。最后,通过完整的客户端/服务器通信示例代码,展示了命名管道在不相关进程间通信的
2025-08-02 14:42:47
1112
原创 Linux_库制作与原理
本文介绍了Linux系统中动静态库的基本概念和使用方法。主要内容包括:1. 库的定义与分类,解释了静态库(.a/.lib)和动态库(.so/.dll)的区别;2. 静态库的制作与使用,详细说明了ar命令打包.o文件的方法,以及gcc链接静态库的三种场景;3. 动态库的制作与加载,重点讲解了动态库的编译选项(-fPIC,-shared)和四种解决库路径搜索问题的方法;4. 目标文件和ELF文件格式分析,包括ELF文件的组成结构、从编译到加载的过程,以及程序表头和节表头的作用;5. 深入解析了静态链接和动态链接
2025-07-29 18:50:26
934
1
原创 Linux_软硬连接
硬链接:不支持对目录创建硬链接,虽然现代一些Linux版本允许对目录做硬链接,但在一般情况下并不推荐这样做,因为可能导致循环引用等问题。硬链接:即使源文件(即其他硬链接所指向的文件)被删除,只要存在至少一个硬链接,文件内容仍能通过其它硬链接访问,不会消失。软链接:如果删除了软链接所指向的源文件,那么通过软链接尝试访问文件将会失败,因为软链接失去了有效的指向。#取消链接,注意:删除目录链接时目录后面加“/”是删除目录,不加是删除链接。软链接:可以对文件或目录创建软链接,经常被用来链接目录。
2025-07-24 16:41:45
1106
原创 Linux_Ext系列文件系统基本认识
从现在开始,磁盘就是一个元素为扇区的一维数组,数组的下标就是每一个扇区的LBA地址。机械磁盘作为计算机中唯一的一个机械设备,虽然他的访问速度慢于机械硬盘,但因其容量大,价格便宜,被服务器所选中。那我们如何找到LBA地址呢,我们需要通过CHS地址转化成LBA,CHS转换LBA地址,这是有硬件本身磁盘来做的。每一个扇区都有一个下标,我们叫做LBA(LogicalBlockAddress)地址,其实就是线性地址。到这我们要思考一个问题,文件数据都储存在”块”中,那么很显然,在柱面上的磁道,扇区个数是一样的。
2025-07-22 22:14:50
636
原创 Linux_基础IO详解
【Linux文件操作指南】 本文系统讲解了Linux文件操作的核心概念:1.文件本质是磁盘上的永久存储,包含元数据与内容;2.回顾了C语言文件接口(fopen/fread/fwrite)及标准流(stdin/stdout/stderr);3.详解系统调用open/read/write/dup2,阐述文件描述符分配规则与重定向原理;4.通过结构体file_operations揭示"一切皆文件"的设计思想;5.分析缓冲机制(全缓冲/行缓冲/无缓冲)对IO效率的影响,并提供fflush等刷新策
2025-07-22 17:08:04
906
原创 Linux入门_线程控制详解
获取命令行解析命令行建立一个子进程 (fork)替换子进程(execvp)父进程等待子进程退出 (wait)// 下面是shell定义的全局数据// 1. 命令行参数表// 2. 环境变量表// 3. 别名映射表// 4. 关于重定向,我们关心的内容// {// index++;// }if(pwd!g_envs = 0;//本来要从配置文件来//1. 获取环境变量environ[i]
2025-07-19 14:31:16
612
原创 Linux入门_线程概念详解
先描述后组织例子:学生,辅导员,校长描述被管理的对象组织被管理的对象总结计算机管理硬件1.描述起来,用struct结构体2.组织起来,用链表或其他高效的数据结构。
2025-07-07 16:42:24
804
原创 linux_git的使用
本文介绍了版本控制工具Git的基本概念和使用方法。首先解释了版本控制系统的功能是记录文件历史变更,并重点说明Git是目前主流的分布式版本控制系统。文章回顾了Git的发展历史,从Linux社区开发背景到其设计目标。在操作部分详细讲解了Git的安装步骤(通过yum或apt命令)以及基本使用流程——“三板斧”:git clone克隆仓库、git add添加文件、git commit提交变更、git push推送至远程服务器。最后指出这些操作完成后即可在Github页面查看代码改动。
2025-07-04 21:03:26
1159
1
原创 Linux_编辑器Vim基本使用
Vim是vi编辑器的升级版,支持语法高亮和多平台使用。它有三种主要模式:命令模式(移动光标、删除等操作)、插入模式(文字输入)和末行模式(保存、查找等)。常用操作包括:i进入插入模式,ESC返回命令模式,:w保存,:q退出。命令模式下,hjkl移动光标,dd删除行,yy复制行,p粘贴,u撤销。末行模式支持行号显示(setnu)、跳转行号(#)、查找(/或?)等功能。Vim通过模式切换和丰富指令实现高效文本编辑。
2025-05-26 20:56:53
1275
1
原创 Linux详解基本指令
如果当前⽤⼾是root: yum install -y tree (因为现在开始⽤的都是root,所以推荐这个⽤法) # 如果当前⽤⼾是普通⽤⼾: sudo yum install -y tree (后⾯讲讲完vim,⼤家才能将⾃⼰添加到系统信任列表中,暂时普通⽤⼾⽆法使⽤sudo)理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点,都只有一个父节点,所以,从根目录开始,定位指定文件,路径具有唯一性。
2025-05-19 17:46:46
1307
原创 Linux环境搭载
Linux环境的搭建主要有三种方式:直接安装在物理机、使用虚拟机软件和购买云服务器。直接安装不推荐,因为Linux桌面使用不友好;虚拟机软件如VMWare可能存在bug,导致环境问题;最推荐的是使用云服务器,如腾讯云、阿里云等,不仅搭建简单,还能让项目被外网访问,适合学生共用。远程连接Linux需要服务器的公网IP、管理员账户(root)和密码。使用Xshell远程终端软件,通过新建会话并输入ssh [ip]和密码即可连接。在Xshell中,复制粘贴使用ctrl+insert和shift+insert,而非
2025-05-19 09:14:45
404
原创 C++_数据结构_哈希表(hash)实现
当key是string/Date等类型时,key不能取模,那么我们需要给HashTable增加一个仿函数,这个仿函数支持把key转换成一个可以取模的整形,如果key可以转换为整形并且不容易冲突,那么这个仿函数就用默认参数即可,如果这个Key不能转换为整形,我们就需要自已实现一个仿函数传给这个参数,实现这个仿函数的要求就是尽量key的每值都参与到计算中,让不同的key转换出的整形值不同。在理想状态中,去找到符合的哈希函数是不可能的,哈希冲突是必然发生的,所以我们要尽可能减少设计的哈希函数的哈希冲突。
2025-05-18 22:03:08
1210
原创 C++_unordered_map和unordered_set的使用
1. unordered_set系列的使用1.1unordered_set和unordered_multiset参考文档。
2025-04-27 22:36:44
1100
原创 C++_数据结构_详解红黑树
大家应该都学过平衡二叉树(AVLTree),了解到AVL树的性质,其实平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。如果在AVL树中插入或删除节点后,使得高度之差大于1。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小.
2025-04-25 11:42:41
1528
原创 LeetCode_滑动窗口_长度最小的子数组
我们继续观察,当我们sum -= nums [left],并且进行判断,sum <= target,那我们需要再回到left的位置吗,当然这是没有必要的,当我们的sum <=target时,此时已经满足,不再进入判断,我们只需要再次right++即可;然后我们通过判断,每次大于我们的target,我们让left++,重新回到left的位置,这样我们的效率来到了n!,当我们大于target时,后续的遍历都会比前一次长度更长,所以省略这些不必要的过程。是该条件下的长度最小的子数组。个正整数的数组和一个正整数。
2025-03-28 13:43:07
503
原创 C++_数据结构_AVL树
因为10 < b子树的值 < 15,将b变成10的右⼦树,10变成15的左子树,15变成这棵树新的根,符合搜索树的规则,控制了平衡,同时这棵的高度恢复到了插入之前的h+2,符合旋转原则。因为5 < b子树的值 < 10,将b变成10的左子树,10变成5的右子树,5变成这棵树新的根,符合搜索树的规则,控制了平衡,同时这棵的高度恢复到了插入之前的h+2,符合旋转原则。对不平衡子树旋转,旋转后本质调平衡的同时,本质降低了子树的高度,不会再影响上一层,所以插入结束。1->2 或者 -1->-2。
2025-02-06 16:52:39
1106
原创 OJ_两个数组的交集_环形链表 ll
数据结构初阶阶段,我们通过证明一个指针从头开始走一个指针从相遇点开始走,会在入口点相遇,指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。这里我们利用set插入的性质,返回的pair(iterator,bool)根据常规解法中的思路,我们发现这与set的性质类似,链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。给定一个链表的头节点。,则在该链表中没有环。
2025-02-04 19:09:05
739
原创 C++_数据结构_map与set
map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第二个模版参数,map底层存储数据的内存是从空间配置器申请的。一般情况下,我们都不需要传后两个模版参数。map底层是用红黑树实现,增删查改效率是OlogN,迭代器遍历是走的中序,所以是按key有序顺序遍历的。
2025-02-04 15:29:35
757
原创 C++_详解多态
多态是一个继承关系下的类对象,去调用同一个函数,产生不同行为。比如student继承person对象。person是全价买票,student是优惠买票。
2024-12-02 22:46:06
908
原创 C++二叉树OJ_中序遍历(非递归)
二叉树的中序遍历(迭代):主要考虑根与左子树插入的前后关系,利用栈(存节点)解决无法访问父节点的问题。主要考虑根与左子树插入数组的前后关系,我们先观察一下二叉树的前序遍历。递归对于你来说,手到擒来(这里就不过多的解释了)在中序遍历(左子树,根,右子树)与上一章。给定一个二叉树的根节点。
2024-11-26 12:55:54
539
原创 C++_深入理解继承与虚继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,而继承是类设计层次的复用。比如说一个人,他具有身高,年龄,姓名等个人信息,然后利用这些信息我们可以定义一个Person类。而当我们想定义一个学生Student类时,学生首先肯定是一个人,所以这时候我们可以复用Person类。但是学生除了具备一个人的基本信息外,
2024-11-25 18:05:06
1160
原创 C++OJ_ 二叉搜索树与双向链表
当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。数据范围:输入二叉树的节点数 0≤n≤10000≤n≤1000,二叉树中每个节点的值 0≤val≤10000≤val≤1000。要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构。输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。2.返回链表中的第一个节点的指针。双向链表的其中一个头节点。
2024-11-16 23:48:24
505
原创 C++_STL之priority_queue(优先级队列)
priority_queue文档介绍优先级队列的实现的关键取决于数据结构的堆,如果忘记了,就回去看看吧【数据结构】详解堆1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
2024-11-15 19:58:40
950
原创 C++_模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。
2024-11-15 19:57:35
765
gitee(基于Git的代码托管和研发协作平台)
2024-09-26
TortoiseGit
2024-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅