- 博客(67)
- 收藏
- 关注
原创 UDP网络编程
本文介绍了基于UDP协议的网络编程实现,主要包括三个关键部分: 网络基础:阐述了IP地址、端口号和套接字(socket)的概念,说明了IP+端口号能唯一标识网络进程,并介绍了TCP/UDP协议特性及网络字节序转换方法。 UDP通信实现: 实现简易echo服务器(V1版本),完成消息收发功能 扩展为翻译服务器(V2版本),通过字典文件实现英汉翻译 升级为多线程群聊系统(V3版本),使用路由类(Route)管理在线用户并实现消息广播 关键技术: 封装InetAddr类处理地址转换 使用线程池处理并发请求 通过s
2025-08-18 15:29:48
1273
原创 TCP网络编程
本文介绍了TCP服务器从单进程到多进程、多线程及线程池的演进实现。首先封装了基础类Common(错误码枚举和防拷贝类)和InetAddr(IP地址处理类),随后构建单进程TCP服务器框架。针对单进程的局限性,分别实现了三种并发方案:多进程版本通过fork创建子进程处理请求;多线程版本使用std::thread创建分离线程;线程池版本则通过任务队列高效处理连接。每种方案都详细解析了核心流程、系统调用和资源管理机制,展现了服务器开发从简单到复杂的演进过程,同时分析了不同并发模型的优缺点。
2025-08-18 15:29:11
1045
原创 数据结构--图
图论基础与算法实现 图的基本概念 图是由顶点集合(V)和边集合(E)组成的数据结构G=(V,E)。顶点间的关系可以是双向(无向图)或单向(有向图)。重要概念包括: 完全图:无向完全图有n(n-1)/2条边,有向完全图有n(n-1)条边 连通性:无向图中任意顶点对连通则为连通图,有向图中任意顶点对双向连通则为强连通图 生成树:连通图的最小连通子图,n个顶点有n-1条边 图的存储结构 邻接矩阵:用二维数组表示顶点间关系,适合稠密图 邻接表:数组存储顶点,链表存储边关系,适合稀疏图 图的遍历算法 广度优先搜索(B
2025-08-15 10:24:46
1231
原创 c++智能指针
智能指针是C++中管理动态内存的重要工具,基于RAII(资源获取即初始化)设计思想,通过对象生命周期自动管理资源释放。标准库提供了几种智能指针:auto_ptr(已弃用)、unique_ptr(独占所有权)、shared_ptr(共享所有权,引用计数)和weak_ptr(解决循环引用问题)。其中,shared_ptr采用引用计数机制,可能因循环引用导致内存泄漏,需配合weak_ptr使用。智能指针支持自定义删除器,可通过函数对象、lambda或函数指针实现资源特殊释放方式。相比new操作,make_shar
2025-08-15 10:21:12
1021
原创 继承与多态
本文系统介绍了面向对象编程中继承与多态的核心概念。在继承部分,详细阐述了三种继承方式(public/protected/private)的特点、类模板继承的三种情形、基类与派生类转换规则、作用域处理原则,以及默认成员函数的生成机制。特别分析了多继承引发的菱形继承问题及虚继承解决方案,并对比了继承与组合的优缺点。多态部分则深入讲解了动态多态的实现条件、虚函数机制、override/final关键字使用,以及虚函数表和多态底层原理。文章还区分了动态绑定与静态绑定的差异,并介绍了纯虚函数和抽象类的特性。全文通过丰
2025-08-13 14:51:02
1062
原创 vector
本文介绍了C++中vector容器的使用与实现。vector与string类似,但可以存储任意类型数据。文章详细讲解了vector的构造方式(无参、指定数量、拷贝、迭代器范围)、迭代器使用、空间管理(size/capacity/resize/reserve)以及增删查改操作(push_back/pop_back/insert/erase等)。重点分析了迭代器失效问题(插入/删除时)和memcpy浅拷贝的风险,并提供了解决方案。最后给出了vector的代码实现,包括深拷贝处理、迭代器失效修复等关键细节。文章通
2025-08-13 14:48:46
932
原创 C++11
本文摘要:C++11引入了多项新特性提升编程效率。列表初始化统一了初始化语法,支持内置和自定义类型,通过std::initializer_list简化容器初始化。右值引用和移动语义优化资源管理,区分左值/右值,减少拷贝开销。可变参数模板支持参数包扩展,emplace接口实现高效就地构造。类功能增强包括默认移动操作、成员变量缺省值、final/override控制。lambda表达式提供匿名函数功能,通过捕获列表访问外部变量,底层实现为仿函数。包装器function和bind提供了更灵活的可调用对象管理方式。
2025-08-12 15:53:30
679
原创 线程的互斥和同步
摘要: 本文系统探讨了多线程编程中的互斥与同步机制。在互斥方面,分析了临界资源、临界区等概念,通过售票系统案例展示了数据竞争问题及全局锁/局部锁的解决方案。同步部分重点讲解了条件变量实现线程阻塞队列,并通过生产者消费者模型阐述了两种实现方式:基于互斥锁的阻塞队列和基于信号量的环形队列,前者适用于整体资源保护,后者支持资源分块并发访问。最后介绍了线程池设计与单例模式的结合,对比了饿汉式和饱汉式单例的实现差异。全文通过代码示例详细展示了各类同步机制的具体应用场景和技术实现细节。
2025-08-12 15:51:59
1131
原创 线程的概念和控制
本文深入探讨了Linux系统中线程的实现机制与应用。首先从概念层面分析了线程作为CPU调度基本单位的本质,指出Linux采用轻量级进程(LWP)模拟线程的实现方式。详细阐述了虚拟地址空间划分、页表映射等核心机制,说明Linux通过共享地址空间的进程实现线程功能。文章系统梳理了POSIX线程库接口,包括创建、等待、终止和分离等操作,并通过代码示例展示实际应用。特别强调了线程特有数据(TSD)和线程局部存储(TLS)的实现原理,最后对比了线程与进程在资源分配、调度等方面的差异,揭示了Linux线程模型的独特设计
2025-08-11 13:39:39
1225
原创 Linux进程信号
文章摘要 进程信号是Linux系统中的重要通信机制,用于异步通知进程特定事件的发生。信号可分为常规信号和实时信号,可通过键盘输入、系统调用、硬件异常等方式产生。进程对信号的处理包括默认动作、忽略信号或自定义处理函数。内核通过pending表、block表和handler表三张位图结构管理信号状态。信号捕捉涉及用户态与内核态的切换,其中硬件异常和系统调用是触发信号的主要途径。volatile关键字可防止编译器优化对信号变量的访问,而SIGCHLD信号则用于父进程监控子进程状态。信号机制体现了操作系统中硬件中断
2025-08-11 13:39:04
1047
原创 进程间通信
进程间通信(IPC)是实现多进程数据交换的关键技术,主要包括匿名管道、命名管道和共享内存三种方式。匿名管道适用于有血缘关系的进程(如父子进程),通过fork()创建并遵循单向通信机制;命名管道允许无血缘关系的进程通过文件系统进行通信,但需手动创建和删除管道文件;共享内存则是速度最快的IPC方式,通过系统调用让不同进程访问同一块内存区域,但需额外机制(如管道)实现同步。三种方式各有优缺点:匿名管道简单但受限,命名管道更通用但需文件操作,共享内存高效但缺乏内置同步保护。实际应用中需根据场景需求选择合适的IPC机
2025-08-10 15:57:51
1174
原创 库的制作和原理
本文介绍了程序开发中动静态库的概念和使用方法。主要内容包括:1、库的分类和系统默认使用规则,gcc默认使用动态库;2、静态库的制作过程(ar命令打包.o文件)和使用方法(-L指定路径,-l指定库名);3、动态库的制作(gcc -shared)和加载时的四种解决方案;4、ELF文件的组成结构(ELF头、程序头表、节头表和节)及其在链接和加载时的作用;5、静态链接和动态链接的区别,动态链接推迟到程序加载时进行,通过动态链接器解析依赖库。文章还通过具体示例说明了库的实际应用场景和操作步骤。
2025-08-10 15:57:32
804
原创 Ext系列文件系统
本文主要介绍了磁盘存储结构和Linux文件系统的核心概念。首先阐述了磁盘物理结构(CHS)与逻辑块地址(LBA)的转换关系,指出操作系统通过LBA线性地址访问磁盘扇区。其次详细解析了文件系统的关键组件:块组包含超级块、块组描述符、位图和inode表;inode存储文件属性并与数据块建立映射;目录文件通过文件名-inode映射实现路径解析。最后对比了硬链接(共享inode)和软链接(快捷方式)的实现差异。全文系统性地展现了从磁盘物理结构到文件系统组织的完整知识体系,重点剖析了ext2文件系统的存储管理机制。
2025-08-09 22:16:49
604
原创 深入解析进程创建与终止机制
本文介绍了Linux进程管理的核心概念与技术。主要内容包括:1.进程创建机制(fork函数、写时拷贝);2.进程终止方式(状态码、exit与_exit区别);3.进程等待的必要性及方法(wait/waitpid函数);4.进程替换原理及6种exec函数;5.自主shell实现方案(命令行解析、环境变量处理、内建命令执行)。文章通过代码示例详细说明了进程控制的关键技术点,包括父子进程关系处理、进程状态监控和程序替换实现,最后展示了如何构建一个支持基础命令的简易shell解释器。
2025-08-09 22:16:33
895
原创 Linux权限
本文系统介绍了Linux系统中的权限管理机制。首先阐述了权限的本质是控制用户行为的能力,分为超级用户(root)和普通用户两种角色。详细说明了文件权限的三种身份(所有者、所属组、其他用户)和三种基本权限(rwx)的含义及作用,特别强调了目录权限的特殊性。文章还介绍了权限修改命令chmod的两种方式:符号法和八进制数字法,解释了umask掩码的作用机制。最后讨论了文件角色更改命令(chown/chgrp)和公共操作区(tmp目录)的实现原理,包括粘滞位的特殊作用。全文通过大量实例说明了Linux权限系统的设计
2025-08-08 21:04:52
1174
原创 Linux系统层IO
本文介绍了C语言文件操作和系统I/O接口的核心概念。主要内容包括:1.C语言文件操作函数(fopen、fwrite、fread、fclose)的使用方法和注意事项;2.系统调用接口(open、write、read)与库函数的区别,重点解析了open函数的flags参数组合规则;3.文件描述符的分配规则、重定向原理及其实现方式;4.Linux"一切皆文件"的设计哲学及其优势;5.缓冲区的类型(全缓冲、行缓冲、无缓冲)、作用和实现原理,并通过实例分析了重定向时缓冲区行为的变化。文章通过代码示
2025-08-08 21:04:36
792
原创 进程Linux
本文摘要: 本文系统介绍了计算机操作系统核心概念,包括: 冯诺依曼体系结构:以内存为中心,所有设备只能与内存直接交互的计算机架构; 操作系统功能:作为软硬件中介,管理资源并提供执行环境; 进程管理:详细解析了进程概念、PCB结构、Linux进程状态(运行/阻塞/僵尸等)及调度算法; 环境变量:全局属性的系统参数及其继承特性; 虚拟地址空间:解释了物理地址与虚拟地址的区别,以及地址空间划分和管理的实现方式。 通过mm_struct和vm_area_struct等数据结构,阐述了操作系统如何高效管理进程地址空间
2025-08-07 16:46:18
1111
原创 Linux基础开发工具
Linux系统软件管理与开发工具摘要 本文介绍了Linux系统中常用的软件管理工具和开发工具链。主要内容包括: 软件包管理:对比了源码安装、rpm和yum/apt三种安装方式,重点讲解了yum(CentOS)和apt(Ubuntu)包管理器的基本操作。 文本编辑器vim:详细说明了vim的四种模式(正常、插入、底行、可视)及其切换方式,并列举了常用操作命令。 编译器gcc/g++:解释了从预处理到链接的完整编译过程,以及静态链接和动态链接的区别。 构建工具Makefile:展示了从基础到进阶的Makefil
2025-08-07 16:45:57
830
原创 c++的String类
摘要:本文系统介绍了C++标准库中的String类,包括构造方法(默认构造、字符数组构造、拷贝构造等)、容量操作(size/capacity/clear等)、访问操作([]/at/迭代器等)、修改操作(追加/插入/删除/替换)以及查找/截取功能。重点分析了字符串的遍历方式(下标/迭代器/范围for)、非成员函数(运算符重载/getline)和性能优化策略,如使用operator+=和stringstream减少深拷贝。文章还详细说明了字符串比较规则和内存管理机制。
2025-08-01 15:42:44
1028
原创 C++基础语法
本文摘要:C++核心概念解析 命名空间:解决命名冲突的机制,通过作用域隔离标识符,支持嵌套、匿名和别名使用 I/O系统:基于<iostream>和<fstream>的标准输入输出实现 缺省参数:函数参数默认值设定规则,必须从右向左连续定义 方法重载:基于参数列表差异实现,返回类型不能作为重载依据 引用:变量的别名,需初始化且不可重新绑定,与指针存在本质区别 inline函数:编译器优化建议,权衡执行效率与代码膨胀 nullptr:类型安全的空指针表示,解决NULL的二义性问题 作用域
2025-08-01 15:42:12
813
原创 日志与策略模式
本文介绍了一个基于C++策略模式的日志系统实现。该系统通过LogStrategy抽象基类定义日志输出接口,并由ConsoleLogStrategy和FileLogStrategy两个子类分别实现控制台和文件输出策略。Logger类作为核心组件,采用RAII机制自动管理日志输出,内部类LogMessage负责构建包含时间戳、日志级别、进程ID等信息的完整日志消息。系统支持线程安全的多策略动态切换,通过互斥锁保证并发写入安全,并提供宏定义简化用户接口。设计上充分运用了策略模式、RAII等面向对象技术,实现了高扩
2025-07-22 15:35:02
341
原创 网络层传输
本文系统梳理了IP协议及相关网络技术,主要内容包括:1. IP协议头结构分析:详细解析版本号、首部长度、服务类型、总长度、分片标识、生存时间(TTL)等字段的功能,重点说明IP分片机制和校验原理;2. 子网划分技术:对比传统分类划分与CIDR方案,阐述子网掩码的作用机制,并通过实例演示网络号计算方法;3. 地址管理方案:探讨IPv4数量限制的三大解决对策(动态分配、IPv6、NAT),分析私有/公有IP区别及NAT转换流程;4. 路由选择机制:解释路由表查询原则和"下一跳"转发逻辑,介绍
2025-07-22 15:29:03
635
原创 传输层协议
摘要:本文详细解析了TCP和UDP两种传输层协议的核心特性与应用场景。UDP具有无连接、不可靠但高效的特点,适用于对实时性要求高但可靠性要求不低的场景;TCP通过确认应答、超时重传、流量控制、拥塞控制等机制确保可靠性,但效率相对较低。文章深入剖析了TCP的三次握手/四次挥手连接管理、滑动窗口机制、流量控制策略以及拥塞控制算法,并比较了两种协议在异常处理、数据包格式等方面的差异。同时指出UDP实现可靠传输可借鉴TCP机制,在应用层实现序列号、确认应答等功能。最后讨论了TCP粘包问题及解决方案,为网络编程提供重
2025-07-21 21:57:02
944
原创 数据链路层
本文系统介绍了以太网核心技术原理,主要包含五部分内容:1)以太网帧结构,详解MAC地址、协议类型和CRC校验,分析数据帧长度限制源于碰撞域控制需求;2)MTU机制,阐述1500字节上限对IP/UDP/TCP协议的影响及分片重组原理;3)ARP协议,解析IP到MAC地址转换的广播请求/单播应答流程;4)ARP欺骗攻击,揭示中间人劫持的三阶段实施过程;5)局域网控制技术,包括交换机碰撞域划分和CSMA/CD协议的多路访问冲突检测机制。全文通过快递包裹类比、通信路线示例等形象化表述,深入浅出地阐释了数据链路层核心
2025-07-21 21:56:16
979
原创 c++算法四
本文摘要:文章系统介绍了BFS算法在不同场景下的应用,分为四大类:1. FloodFill算法(图像渲染、岛屿数量、岛屿最大面积、被围绕区域),强调标记处理和边界条件;2. 单源最短路径(迷宫出口、基因变化、单词接龙、高尔夫砍树),着重队列分层和位置更新;3. 多源最短路径(矩阵、飞地数量、地图高度),提出"超级源点"优化思路;4. 拓扑排序(课程表、火星词典),涉及DAG图构建和环检测。每种应用均包含解题思路、代码实现要点和易错细节,如队列操作、标记数组初始化、正难则反策略等,为BFS
2025-07-15 09:16:24
767
原创 c++算法三
文章摘要:本文总结了链表、哈希表、字符串、栈、队列和优先级队列等数据结构中的常用技巧和算法。链表部分介绍了虚拟头节点、快慢双指针、逆序链表等技巧,并详细讲解了两数相加、两两交换节点、重排链表等问题的解题思路。哈希表部分涵盖了两数之和、字符重排、重复元素等问题的解法。字符串部分讨论了最长公共前缀、回文子串、二进制求和等问题的处理。栈和队列部分则介绍了栈在字符串处理、表达式求值中的应用,以及队列在树型结构层序遍历中的使用。最后,优先级队列部分探讨了其在Top-K问题中的应用,如最后一块石头的重量、数据流中第K大
2025-07-15 09:15:36
1007
原创 c++算法二
本文总结了位运算和分治算法的常见应用。位运算部分包括基础运算、位操作技巧(如提取/修改指定位、位图思想)以及异或运算的应用(如判断字符唯一性、找缺失数字)。分治算法部分主要介绍了快速排序及其变种(如颜色分类、找第K大元素),以及归并排序及其在逆序对统计中的应用。文章通过具体例题(如字符替换、中毒时间计算等)展示了这些算法的实际应用场景和实现细节,强调了对边界条件和特殊情况的处理。
2025-07-14 22:06:05
675
原创 c++算法一
本文总结了双指针、滑动窗口、二分查找和前缀和等算法技巧的应用场景和解题思路。双指针常用于处理数组中的覆盖、环检测、单调性问题,如复写0、快乐数、盛水容器等。滑动窗口适用于寻找符合条件的子区间,如最小长度子区间、无重复字符子串等。二分查找适用于具有二段性的数组,如查找元素位置、算术平方根、峰值等。前缀和用于快速计算连续区间的和或积,如中心下标、子数组和、矩阵区域和等。每种技巧都通过具体题目进行了详细解析,并提供了代码实现的注意事项。
2025-07-14 22:05:03
1169
原创 c++类和对象
文章主要介绍了C++中类的定义、实例化、成员变量与函数、内存对齐、this指针、默认成员函数、运算符重载、const修饰符、初始化列表、静态成员、友元、内部类及匿名对象等概念。重点包括:类的访问修饰符(public、private、protected)控制成员的可访问性;实例化方式(栈上或堆上)影响对象的生命周期和内存管理;成员变量与函数的内存分配及this指针的作用;默认成员函数(构造函数、析构函数、拷贝构造函数)的自动生成与自定义;运算符重载的实现方式;const修饰符在成员函数中的应用;初始化列表的使
2025-05-16 16:37:17
931
原创 C语言文件操作
在程序设计中,文件主要分为程序文件和数据文件。程序文件包括源程序、目标文件和可执行程序,而数据文件则用于存储程序运行时读写的数据。文件通过文件名唯一标识,包含路径、主干和后缀。文件操作的核心是文件指针,它由fopen函数在文件打开时返回,并在文件关闭时失效。文件操作包括打开、关闭、读写等,其中读写操作可以通过字符、文本行、格式化或二进制方式进行。此外,文件还支持随机读写,通过fseek、ftell和rewind函数实现。文件缓冲区用于提高数据读写效率,系统自动为每个使用的文件在内存中开辟缓冲区,数据先存储在
2025-05-16 16:36:14
1038
原创 翻译环境和运行环境
在ANSIC的实现中,存在翻译环境和运行环境两个不同的环境。翻译环境负责将源代码转换为可执行的机器指令,涉及预处理、编译、汇编和链接四个主要步骤。预处理阶段处理宏定义和条件编译等;编译阶段进行词法、语法和语义分析,生成汇编代码;汇编阶段将汇编代码转换为机器指令;链接阶段解决多文件、多模块间的调用问题,生成最终的可执行文件。运行环境则负责程序的执行,包括程序载入内存、调用main函数、执行程序代码以及程序终止。程序执行时使用运行时堆栈存储局部变量和返回地址,静态内存用于存储全局变量和静态变量。
2025-05-15 16:21:52
1422
原创 深入解析C++模板:从基础到高级应用
文章摘要:本文详细介绍了C++中的模板机制,包括函数模板和类模板的使用。函数模板支持隐式和显式实例化,能够根据传入参数自动推断类型,或直接指定类型。类模板允许定义多个类型参数,实例化时需显式指定类型。非类型模板参数支持将值作为参数传入,包括整型、枚举、指针等。模板特化分为全特化和偏特化,全特化为特定类型提供专属实现,偏特化则对部分参数进行约束。模板的分离编译问题通过包含编译和显式实例化解决,确保编译器在实例化时能正确生成代码。
2025-05-15 16:18:31
704
原创 动态内存管理
C语言通过<stdlib.h>库提供内存管理函数,包括malloc、calloc、realloc和free。malloc和calloc用于分配堆内存,calloc会初始化内存为0,realloc用于调整已分配内存的大小,free用于释放内存。C++则通过new和delete操作符管理内存。new用于在堆上分配内存并调用构造函数,delete用于调用析构函数并释放内存。对于数组,使用new[]和delete[]。operator new和operator delete是底层函数,分别用于分配和释放
2025-05-14 17:55:15
1150
原创 C语言指针
文章摘要:本文详细介绍了指针在C语言中的基本概念和操作。首先,解释了指针变量与地址的关系,以及指针的两个基本操作符&和*。接着,讨论了指针变量的大小在不同平台下的差异,并指出指针类型决定了指针的步长和解引用的能力。文章还探讨了const修饰指针的两种方式,以及指针之间的运算规则。此外,介绍了野指针的形成原因及规避方法,并提到了assert断言的使用。最后,文章涉及了指针与数组的关系,包括数组名的理解、一维和二维数组传参的本质,以及字符指针变量和函数指针变量的定义与使用。
2025-05-14 17:54:16
776
原创 SQL操作全解析:增删改查与约束详解
1.查询语文成绩>80,且英语成绩>80的同学2.查询语文成绩大于80,或者是英语成绩大于80的同学3.观察and和or的优先级。
2025-05-13 12:49:34
1079
原创 java中的io流
Java中的java.io.File类用于抽象描述文件或目录,但创建File对象并不保证文件实际存在。File类提供了构造方法、属性及多种方法,如判断文件是否存在、是否为目录或普通文件,以及创建、删除文件等操作。文件操作时需处理可能抛出的异常。此外,Java支持通过字符流(如Reader、Writer)和字节流(如InputStream、OutputStream)进行文件读写,使用缓冲流(如BufferedInputStream、BufferedOutputStream)可提高效率。文件操作完应关闭流,tr
2025-05-11 13:00:55
919
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅