- 博客(48)
- 收藏
- 关注
原创 Linux进程间通信:深入理解System V消息队列
消息队列是Linux系统编程中强大而灵活的进程间通信工具。System V消息队列的核心概念:消息类型、队列标识符、内核持久化四大关键APImsgget()msgsnd()msgrcv()msgctl()的详细用法实战编程技能:能够编写生产者和消费者程序技术选型能力:知道何时选择消息队列而非其他IPC机制面试准备:熟悉常见面试问题最佳实践建议键值管理:使用ftok()生成唯一键值,避免硬编码错误处理:始终检查系统调用返回值资源清理:程序退出前删除创建的消息队列消息设计:精心设计消息结构,考虑未来扩展。
2025-12-29 16:50:47
736
原创 【Linux】VMware虚拟机中的Ubuntu操作系统主文件夹扩容
3、然后选择硬盘,再点击扩展,就会得到下面的图,然后增加你想扩展的空间大小,记得增加后点击扩展。这一栏,然后点击它再点击设置你就会看到一下信息。4、打开虚拟机根据下面的提示在终端输入指令。1、在扩展空间之前确保你已经将虚拟机关机。2、在VMware的主界面的上方找到上图的。这样就完成了对主文件夹的扩容操作。
2025-12-18 21:41:07
266
1
原创 C++ 内存分区详解
程序员手动分配和释放(C:malloc/free,C++:new/delete):未初始化或初始化为0的全局变量和静态变量(程序启动时自动清零)存储static变量(包括全局static和局部static)│ .bss段 │ 未初始化全局/静态变量。│ .data段 │ 已初始化全局/静态变量。│ 栈区 │ ← 向下生长。│ 常量区 │ 字符串常量等。│ 代码区 │ 程序指令。存储程序的可执行代码(机器指令)
2025-12-17 15:04:56
702
原创 I/O复用机制深度解析:select/poll/epoll全面对比
I/O复用(I/O Multiplexing)是一种高效处理多个I/O操作的技术,允许单个进程同时监控多个文件描述符。当其中一个或多个文件描述符就绪(可读、可写或异常)时,进程能够及时进行相应的操作。特性selectpollepoll时间复杂度O(n)O(n)O(1)连接数限制1024无限制系统内存限制内存拷贝每次调用都需要拷贝每次调用都需要拷贝内核内部维护触发模式水平触发水平触发支持ET/LT跨平台好较好Linux特有适用场景连接数少,跨平台连接数中等。
2025-11-07 09:50:40
698
原创 Socket编程实战:从基础API到多线程服务器
Socket(套接字)是网络通信的端点,它提供了不同主机间进程通信的接口。在Linux系统中,Socket可以被视为一种特殊的文件描述符,通过标准的文件I/O操作来进行网络数据传输。参考答案字节序是多字节数据在内存中的存储顺序:大端序:高位字节存储在低地址小端序:低位字节存储在低地址网络编程使用网络字节序(大端序)保证不同架构主机间的兼容性。需要使用htons()、htonl()、ntohs()、ntohl()进行转换。参考答案。
2025-11-06 18:48:49
980
原创 HTTP协议与Web详解
HTTP(超文本传输协议)是应用层协议,负责客户端(通常是浏览器)与服务器之间的通信。它规定了信息如何打包、传输和解析,是万维网的数据通信基础。功能:将域名()解析为IP地址作用范围:全球互联网目的:方便记忆网站地址参考答案HTTP长连接(Keep-Alive)允许在同一个TCP连接上发送和接收多个HTTP请求/响应。优势减少TCP连接建立和关闭的开销降低服务器资源消耗提高页面加载速度参考答案DNS是将域名转换为IP地址的系统。工作原理浏览器检查本地缓存查询本地hosts文件。
2025-11-06 18:18:38
1056
原创 UDP协议深度解析:无连接通信
UDP(用户数据报协议)是互联网协议族中无连接、不可靠的传输层协议,其核心设计理念是"快速轻量"。与TCP的复杂可靠性机制相比,UDP更加简单直接,适用于对实时性要求较高但能容忍少量数据丢失的场景。
2025-11-06 17:03:21
766
原创 TCP协议深度解析:从三次握手到可靠传输的底层机制
由于TCP是流式协议,不保留消息边界,多个小数据包可能被合并成一个大数据包发送(粘包),或者一个大包被拆分成多个小包(拆包)。TCP协议作为互联网通信的基石,其设计精巧而复杂。理解TCP的三大特性、头部结构、连接管理机制和可靠传输原理,对于网络编程和故障排查都至关重要。通过本文的学习,你应该掌握了:TCP三大特性的具体表现和应用场景TCP头部各字段的功能和作用Socket编程的基本流程和API使用方法三次握手和四次挥手的详细过程及原理TIME_WAIT状态的意义和实际问题解决方法。
2025-11-06 16:51:20
942
原创 网络编程基础:分层模型、TCP协议与Socket编程详解
本文详细介绍了网络基础与分层模型,包括OSI七层模型和TCP/IP四层模型的结构与对比,网络连接要素(网络设备和传输介质),TCP控制位的作用与机制,序号与确认号的工作原理,以及Socket编程实战和常见面试题。理解这些基础知识对于深入学习网络编程和网络协议至关重要。在实际应用中,需要根据具体场景选择合适的协议和模型,如对可靠性要求高的场景使用TCP,对实时性要求高的场景使用UDP。
2025-11-06 15:43:03
695
原创 C++动态内存管理详解:new/delete与malloc/free深度对比
在C++程序中,内存管理是核心概念之一。C++提供了new和delete运算符来管理堆内存,相比C语言的malloc/free函数,new/delete不仅能够申请和释放内存,还能自动调用构造函数和析构函数,提供更安全、更方便的内存管理方式。特性new/delete语言C语言函数C++关键字/运算符初始化不调用构造函数自动调用构造函数清理不调用析构函数自动调用析构函数类型安全需要强制类型转换自动类型推导失败处理返回NULL抛出bad_alloc异常大小计算手动指定字节数。
2025-10-24 19:53:41
825
原创 C++特性详解:extern、缺省参数、函数模板与名字空间
/ 1. 多文件共享全局变量// 2. 使用其他编译单元的变量// 3. C++调用C语言库// 4. 声明在其他文件中定义的函数用于声明外部定义的变量和函数支持C++与C语言的混合编程实现多文件间的数据共享简化函数调用,提供默认行为必须从右向左连续提供通常在函数声明中指定实现泛型编程,代码复用支持类型安全的通用算法可以通过特化提供特定类型的优化实现解决命名冲突问题组织代码逻辑结构支持嵌套和别名,提高代码可读性。
2025-10-24 19:38:40
762
原创 C++中函数重载解析:从原理到应用
函数重载是C++多态性的重要体现,通过深入理解名称修饰规则、调用约定和重载解析过程,可以编写出更加灵活和健壮的代码。在实际开发中,要注意避免歧义调用,合理设计函数接口,并充分考虑与模板、继承等特性的交互作用。掌握函数重载不仅有助于通过技术面试,更是提升C++编程能力的关键一步。建议通过实际项目不断练习,加深对这一重要特性的理解和运用。
2025-10-24 18:55:27
430
原创 C++中inline函数与有参宏深度解析:从使用到底层原理
inline函数是C++中用于建议编译器将函数体直接插入到调用处的一种函数修饰符。它是一种以空间换时间的优化手段。减少函数调用开销 避免压栈、跳转、返回等操作代码在编译期间展开 保持函数的类型安全检查有参宏是C/C++预处理器提供的文本替换机制,使用#define指令定义。#define 宏名(参数列表) 替换文本头文件函数声明参数说明。
2025-10-23 23:06:28
784
原创 C++中const与引用深度解析:从使用到底层原理
/ 1. 函数参数保护// 2. 常量定义// 3. 成员函数不修改对象状态public:// 4. 返回对象内部状态的引用const和引用是C++中重要的特性,正确使用它们可以:提高代码的安全性和可靠性避免不必要的拷贝,提升性能使接口设计更加清晰和直观帮助编译器进行更好的优化在实际开发中,应该遵循以下原则:默认使用const,除非需要修改优先使用引用传递大对象在需要重新绑定或可选参数时使用指针合理使用const成员函数表达设计意图。
2025-10-23 22:44:39
801
原创 数据结构八大排序:堆排序-从二叉树到堆排序实现
二叉树是每个节点最多有两个子树的树结构,通常称为左子树和右子树。重要概念:孩子节点:一个节点的直接下级节点父节点:拥有孩子节点的上级节点叶子节点:没有孩子节点的节点(终端节点)分支节点:至少有一个孩子节点的节点大顶堆:每个节点的值都大于或等于其孩子节点的值小顶堆:每个节点的值都小于或等于其孩子节点的值堆排序作为一种高效的比较排序算法,以其O(nlogn)的时间复杂度和O(1)的空间复杂度在特定场景下具有重要价值。
2025-10-21 17:33:23
889
1
原创 数据结构八大排序:归并排序-原理+C语言实现+优化+面试题
归并排序是John von Neumann在1945年提出的一种高效排序算法,采用分治策略。其核心思想是将两个有序序列合并成一个有序序列,通过递归地将待排序序列分割成若干子序列,分别排序后再合并。时间复杂度:O(nlogn)空间复杂度:O(n)稳定性:稳定排序适用性:适合大规模数据排序归并排序以其稳定的O(nlogn)时间复杂度和稳定性在大数据排序中占据重要地位。虽然需要O(n)的额外空间,但在需要稳定排序、链表排序或外部排序场景下是不可替代的选择。
2025-10-21 17:17:13
598
原创 数据结构八大排序:希尔排序-原理解析+C语言实现+优化+面试题
希尔排序是Donald Shell在1959年提出的一种改进的插入排序算法,也称为缩小增量排序。它是第一批突破O(n²)时间复杂度的算法之一,通过将原始列表分割成多个子序列分别进行插入排序,从而大幅提高排序效率。希尔排序特点1:数据量小的时候,效率更高希尔排序特点2:数据越有序,效率越高平均时间复杂度:O(n^1.3) 到 O(n²)最好时间复杂度:O(nlogn)最坏时间复杂度:O(n²)空间复杂度:O(1)稳定性:不稳定排序。
2025-10-21 17:04:11
1004
原创 数据结构八大排序:快速排序-挖坑法(递归与非递归)及其优化
快速排序是由Tony Hoare在1960年提出的一种高效的排序算法,采用分治策略。其核心思想是:选择一个基准元素,通过一趟排序将待排记录分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序。平均时间复杂度:O(nlogn) 最坏时间复杂度:O(n²) 最好情况:O(nlogn)空间复杂度:O(logn) 稳定性:不稳定排序。
2025-10-21 16:51:42
860
原创 数据结构八大排序中的四大简单排序:直接插入排序、选择排序、基数排序和冒泡排序
四大简单排序算法是学习更复杂算法的基础,并且4种简单排序都是以双重for循环为核心,直接插入排序:小数据量、基本有序数据选择排序:小数据量、交换次数少的场景基数排序:整数、字符串排序,稳定且高效冒泡排序:教学演示、小数据量稳定排序掌握这些基础排序算法不仅有助于理解算法设计思想,也为大家学习更高级的排序算法打下坚实基础。在实际应用中,应根据具体需求选择合适的排序算法。
2025-10-20 18:16:20
763
1
原创 数据结构:哈希基础、6种哈希函数构造方法、4种解决哈希冲突的方法和哈希扩展(一致性哈希+虚拟节点+布隆过滤器)
技术核心思想空间复杂度时间复杂度主要优势典型应用传统哈希表键值映射到数组O(n)O(1)平均快速访问字典、缓存一致性哈希哈希环映射O(n)O(log n)节点增减影响小分布式系统虚拟节点多对一映射O(kn)O(k log n)负载均衡负载均衡器布隆过滤器多哈希位图O(m)O(k)空间效率高存在性检测。
2025-10-13 18:11:12
708
原创 Linux系统互斥锁:pthread_mutex_init, pthread_mutex_lock等函数详解
特性互斥锁读写锁并发性完全互斥读共享,写互斥性能读写均需排队读操作可并发,性能更优适用场景读写操作频率相当读多写少场景复杂度简单相对复杂开销较小较大实现二进制状态需要维护读者计数参考答案:互斥锁是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问造成的数据不一致问题。它确保在任何时刻只有一个线程可以进入临界区执行代码。参考答案:死锁是指两个或多个线程互相等待对方释放锁而无法继续执行的情况。避免方法:按固定顺序获取锁。
2025-10-09 09:56:25
966
原创 数据结构:七大线性数据结构从结构体定义到函数实现的的区别
在程序设计中,数据结构的选择直接影响算法的效率和代码的可维护性。本文将深入解析顺序表、单链表、双向链表、栈、链栈、队列、循环队列这七种线性数据结构,通过对比它们的结构体定义和函数实现,帮助大家理解各自的特点和适用场景。// 静态数组存储元素int length;// 当前长度} SeqList;结构特点使用连续内存空间 通过数组下标直接访问元素 需要预先分配固定大小int data;// 数据域// 指针域} ListNode;结构特点。
2025-10-06 20:16:10
1944
原创 数据结构KMP算法详解:C语言实现
KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由D.E.Knuth、J.H.Morris和V.R.Pratt于1977年联合发表。该算法通过预处理模式串,构建next数组,在匹配失败时利用已有信息跳过不必要的比较,将时间复杂度从暴力匹配的O(m*n)优化到O(m+n)。KMP算法通过巧妙的next数组设计,实现了字符串匹配的高效性能。预处理思想:提前分析模式串特征,为匹配阶段做准备空间换时间:使用额外空间存储next数组,换取时间复杂度的优化指针不回溯。
2025-10-02 21:07:39
860
原创 Linux条件变量:pthread_cond_init、pthread_cond_wait等函数详解
条件变量(Condition Variable)是线程同步的重要机制,用于线程间的等待和通知。它与互斥锁配合使用,可以高效地实现线程的阻塞和唤醒。条件变量是Linux多线程编程中强大的同步工具,正确使用可以大大提高程序效率。理解基本原理:条件变量用于线程间通信和同步掌握正确用法:必须与互斥锁配合,使用while循环检查条件区分signal和broadcast:根据场景选择合适的唤醒方式注意资源管理:正确初始化和销毁条件变量。
2025-09-26 17:56:56
851
原创 Linux系统读写锁:pthread_rwlock_init、pthread_rwlock_rdlock等函数详解
读写锁(Read-Write Lock)是一种特殊的线程同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入资源。与互斥锁相比,在读多写少的场景下能显著提高程序性能。读写锁是Linux多线程编程中重要的同步工具,特别适用于读多写少的场景。合理使用读写锁可以显著提高程序并发性能。关键要点包括:理解读写锁的基本原理和适用场景掌握读写锁相关函数的使用方法注意避免死锁和性能瓶颈根据实际需求选择合适的同步机制。
2025-09-26 17:48:22
875
原创 我的linux作业
线程等待条件满足,同时会释放互斥锁。:让线程在特定条件下等待或被唤醒。:防止虚假唤醒,确保条件真正满足。:唤醒等待该条件的某个线程。,防止多个线程同时修改。
2025-09-26 17:13:21
239
原创 Linux进程全面详解:从创建到管理
子进程结束但父进程未调用wait()回收避免方法:父进程调用wait()/waitpid(),或使用SIGCHLD信号处理。
2025-09-26 16:03:53
593
原创 Linux线程全面解析:pthread_create、pthread_join等函数详解与应用
线程安全指多线程环境下数据访问的一致性保证方法:互斥锁、原子操作、线程局部存储、不可变对象。
2025-09-26 15:39:04
653
原创 Linux文件系统调用:文件调用函数与exec系统函数详解与应用
文件系统调用是操作系统内核提供的底层接口,允许应用程序直接与文件系统交互。在Linux中,这些调用提供了对文件的直接控制能力,相比标准I/O库函数具有更高的灵活性和性能。Linux文件系统调用提供了底层文件操作能力,相比标准I/O库具有更高的灵活性和性能。掌握open/read/write/close等基本调用,以及exec进程控制函数,是Linux系统编程的基础。最后希望大家记住下面几个关键点:理解文件描述符的概念和使用掌握各种打开标志和权限设置熟悉错误处理和资源管理了解缓冲机制和性能影响因素。
2025-09-25 22:35:09
904
原创 Linux:共享内存全面详解
共享内存是最快的一种进程间通信(IPC)方式,它允许多个不相关的进程直接访问同一块物理内存区域。由于数据不需要在进程空间和内核空间之间来回拷贝,因此特别适合大量数据传输的场景。共享内存是Linux系统中最快的IPC机制,适合高性能和大量数据交换的场景。掌握共享内存的关键在于理解四个核心API函数的使用方法,以及同步机制的重要性。实际项目中,共享内存常与信号量结合使用,以确保数据的一致性。本文详细介绍了共享内存的原理、函数使用、实战示例和常见面试题,希望能够帮助大家全面理解和掌握这一重要的进程间通信技术。
2025-09-24 18:42:25
1024
原创 Linux管道完全指南:从原理到实战,一文搞定进程通信!
管道是一种半双工的进程间通信机制,数据只能单向流动。它就像现实中的水管,数据从一端流入,从另一端流出。及时关闭不需要的文件描述符,避免资源泄漏考虑缓冲区大小,大数据量时分批传输处理SIGPIPE信号,避免程序意外终止父子进程执行顺序要协调好。
2025-09-24 18:25:54
330
原创 Linux:fork()函数详解:原理、用法及经典面试题解析
fork()是Linux/Unix系统中用于创建新进程的系统调用。它通过复制当前进程(父进程)来创建一个全新的进程(子进程)。调用一次,返回两次(父进程和子进程各返回一次)子进程是父进程的完整副本通过返回值区分父子进程合理使用wait()避免僵尸进程理解写时复制机制有助于性能优化创建并行处理任务实现网络服务器的并发模型执行外部程序(通常配合exec()系统函数)掌握fork()是Linux系统编程的基础,也是区分初级和中级程序员的重要标志。建议大家多动手实践,加深理解!
2025-09-24 18:16:52
682
原创 Linux信号量手册:POSIX、System V API和pv操作详解
信号量是一种用于进程间同步的机制,由Dijkstra提出。在Linux中,信号量常用于控制多个进程对共享资源的访问,避免竞争条件。信号量是Linux进程同步的重要工具,掌握semget、semop、semctl三个核心函数是进行进程间通信编程的基础。通过本文的详细讲解和实战示例,希望大家能掌握下面4个知识理解信号量的基本概念和工作原理熟练使用三个核心信号量函数解决经典的进程同步问题避免常见的编程陷阱和错误最后再给大家推荐一篇我个人认为写的更详细更易懂的一篇文章。
2025-09-24 11:41:50
439
原创 Linux文件操作权限详解
Linux文件操作权限标志提供了灵活而强大的文件控制机制。从基本的O_RDONLY、O_WRONLY和O_RDWR,到高级的O_EXCL、O_SYNC等标志,了解并正确使用这些标志对于编写可靠、安全的Linux系统程序至关重要。正确使用这些标志可以帮助我们:控制文件的访问方式(读、写或读写)管理文件创建行为确保数据完整性和安全性实现高性能的文件I/O操作。
2025-09-18 17:25:17
779
原创 数据结构:单链表使用C语言全面详解与实现
单链表是数据结构中最基础也是最重要的线性结构之一,在C语言中广泛应用。本文将全面讲解单链表的原理、实现和应用,通过详细的代码示例帮助读者深入理解并掌握单链表的各种操作。单链表是C语言中非常重要的数据结构,掌握单链表的原理和操作对于提高编程能力至关重要。本文详细介绍了单链表的各种操作,包括初始化、插入、删除、查找和销毁等,并提供了完整的示例程序。***学习技巧:指针p向后遍历,初始化时从哪里出发?如果是插入,删除这种需要找到前驱节点的函数,则指针p向后遍历时,一律从辅助节点出发p->next!
2025-09-10 18:35:35
485
原创 C语言标准I/O扩展指南:putchar、getchar、puts、fgets等函数详解
在C语言编程中,除了常用的printf和scanf函数外,标准库还提供了其他多种输入输出函数,它们各有特点和应用场景。本文将深入讲解这些函数的使用方法,帮助开发者全面掌握C语言的I/O操作。函数用途特点putchar输出单个字符简单高效getchar输入单个字符常与缓冲区处理结合puts输出字符串自动添加换行符fgets输入字符串安全,可限制长度fputs输出字符串不自动添加换行符打开/关闭文件文件操作基础二进制I/O高效处理大量数据。
2025-09-10 17:37:26
1015
原创 C语言格式说明符全解:从%d到%n,掌握常用%用法
在C语言中,printf()和scanf()等函数通过格式说明符来指定数据的输入输出格式。这些说明符以百分号开头,后面跟一个或多个字符,用于指定数据类型、长度、精度等格式信息。格式说明符的基本结构为:格式说明符用途分类数据类型功能描述%d整数int输出有符号十进制整数%i整数int输出有符号十进制整数(与%d几乎相同)%u整数输出无符号十进制整数%o整数输出无符号八进制整数(无前缀0)%x整数输出无符号十六进制整数(小写字母,无前缀)%X整数。
2025-09-08 23:13:54
3365
原创 C语言文件操作函数:fopen, fread, fwrite, fclose, ftell, fseek, fscanf, fprintf的理解与记忆
文件操作是C语言编程中不可或缺的重要部分,无论是数据处理、配置文件读写还是日志记录,都离不开文件操作。本文将深入讲解C语言中最常用的文件操作函数,包括fopenfreadfwritefcloseftellfseekfscanf和fprintf的理解与记忆。文件操作是C语言编程中的重要组成部分,掌握这些核心函数对于处理各种文件IO任务至关重要。本文详细介绍了fopenfclosefreadfwritefprintffscanffseek和ftell等函数的使用方法,并通过紧凑的代码示例加深理解。
2025-08-29 17:28:56
757
原创 C语言BF算法(Brute-Force)【字符串匹配】从原理到实现
BF算法(Brute-Force,暴力匹配算法)是一种简单直观的字符串匹配算法。从主串的每一个位置开始,依次与模式串进行比较,直到找到完全匹配的位置或遍历完整个主串。这种算法之所以被称为"暴力"算法,是因为它不采用任何技巧,直接尝试所有可能的匹配位置。虽然时间复杂度较高,但它的优点是实现简单,易于理解,是学习更高级字符串匹配算法(如KMP、BM算法)的基础。BF算法作为字符串匹配领域最基础的算法,虽然效率不高,但其简单直观的思想值得我们学习。
2025-08-28 09:52:15
378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅