- 博客(99)
- 收藏
- 关注
原创 Linux《进程间关系和守护进程》
本文介绍了进程组、会话和守护进程等概念,并展示了如何将网络计算器服务器程序改造为守护进程。主要内容包括:1. 进程组概念及组长进程的作用;2. 会话的组成和会话首进程;3. 控制终端与进程关系;4. 作业控制相关操作;5. 守护进程的实现原理,通过setsid函数创建独立会话;6. 详细实现了Dameon函数,包含工作目录切换和标准流处理;7. 将网络计算器服务器改造为守护进程后,即使关闭Xshell终端也能继续运行。最后指出可以通过系统提供的daemon函数简化守护进程创建过程。
2025-12-02 13:28:43
1294
32
原创 Linux《应用层自定义协议和序列化》
本文介绍了基于TCP套接字实现网络计算器的关键技术与实现方法。主要内容包括:1. 应用层协议设计,使用Jsoncpp库实现数据的序列化与反序列化;2. Socket类的面向对象封装,采用模板方法模式提高代码复用性;3. 自定义协议实现,通过添加报文长度解决TCP字节流边界问题;4. 网络计算器的完整实现,包含服务器端和客户端的交互流程。文章详细讲解了如何通过结构化设计实现应用层协议,包括请求/响应类的定义、报文封装与解析方法等,最终完成了一个支持加减乘除运算的网络计算器。该项目展示了OSI模型中应用层设计的
2025-12-01 11:51:24
997
35
原创 Linux《Socket编程Tcp》
本文介绍了基于TCP套接字的编程接口和实现方法。首先对比了TCP与UDP套接字的差异,重点讲解了TCP特有的连接建立接口(connect/accept)。然后通过多个实例展示了TCP通信的实现:从基础echo服务到支持多客户端的多进程/多线程版本,再到线程池优化版本。接着实现了实时翻译字典功能,最后完成了一个远程命令执行服务,包含命令白名单安全机制。文中详细呈现了各个版本的代码实现,包括套接字绑定、连接处理、数据传输等核心环节,并介绍了使用netstat工具监控网络状态的方法。通过系列实践,帮助开发者掌握T
2025-11-13 15:50:35
1504
32
原创 Linux《Socket编程UDP》
实现了以上的代码之后接下来就可以来实现进行翻译功能Dict.hpp文件的代码,在该文件当中需要实现一个Dict类,在该类的内部主要实现两个函数来提供给外部进行调用,其中一个是将对应的Dictionary文件打开,并且在类当中需要创建一个对应的哈希表来将Dictionary.txt文件当中的英文单词二号对应的中文翻译形成对应的键值对存储到哈希表当中。在以上我们已经了解了基于socket套接字进行UDP通信需要使用到的接口,那么接下来就试着来使用以上的接口实现一个客户端和服务器之间的简单通信。
2025-10-30 13:38:16
1666
45
原创 Linux《网络基础》
本文介绍了Linux网络编程的基础知识,主要包括: 计算机网络发展背景和协议分层的必要性(OSI七层模型和TCP/IP五层模型); 网络协议的本质是通信双方共同定义的结构化数据; 局域网通信基于MAC地址,广域网通信基于IP地址和端口号; 网络通信的核心概念包括IP地址、端口号、套接字(Socket)等; 介绍了UDP和TCP协议的基本特点,以及网络字节序的概念; 简要说明了Socket编程接口和地址结构体的设计思想。 文章为后续学习网络协议和Socket编程奠定了理论基础。
2025-10-17 08:29:31
1569
23
原创 Linux《线程同步和互斥(下)》
本文介绍了Linux线程同步和互斥的进阶内容,主要包括:1. 线程池的实现,基于生产者-消费者模型构建线程池框架,封装线程、条件变量和互斥锁等组件,支持任务调度和执行;2. 日志系统的设计与实现,采用策略模式支持多种日志输出方式,包含时间戳、日志等级、进程ID等信息的格式化输出;3. 单例模式的两种实现方式(懒汉模式和饿汉模式)及其线程安全考虑;4. 线程安全与可重入性的概念和区别;5. 死锁的产生条件和预防;6. STL容器和智能指针的线程安全性分析。通过封装线程池和日志系统,演示了多线程编程的实际应用场
2025-10-05 20:45:58
1695
40
原创 Linux《线程同步和互斥(上)》
本文主要介绍了Linux线程同步与互斥的实现方法。首先通过抢票示例展示了线程互斥的必要性,详细讲解了互斥量(mutex)的原理和使用方式,并封装了面向对象的互斥锁类。其次介绍了线程同步的概念,通过条件变量解决线程饥饿问题,实现了条件变量的封装。然后重点讲解了生产者消费者模型,包括基于阻塞队列和环形队列的两种实现方案,分析了POSIX信号量的使用。最后通过代码示例演示了单生产者多消费者和多生产者多消费者的运行效果。全文结合理论讲解与代码实践,深入剖析了线程同步互斥的核心机制。
2025-09-24 22:44:00
1526
29
原创 Linux《线程(下)》
本文将深入探讨线程编程相关内容。首先补充介绍了线程终止的三种方式:函数返回、pthread_exit调用及pthread_cancel取消线程。其次讲解了pthread_detach函数实现线程分离,使线程结束后自动释放资源。文章还详细解析了线程ID的本质和进程地址空间布局,说明pthread_t实际上是结构体的引用。最后,通过封装pthread库实现了一个面向对象的线程类,包括启动、终止、等待和分离等完整功能。全文循序渐进,从基础概念到实践应用,为后续线程控制学习打下坚实基础。
2025-09-17 19:26:58
1254
38
原创 Linux《线程(上)》
本文介绍了操作系统中的线程概念及其在Linux中的实现方式。主要内容包括:1. 线程概念:Linux使用轻量级进程(LWP)模拟线程,多个线程共享同一进程的地址空间;2. 线程与进程的区别:线程是调度的基本单位,创建和切换开销更小;3. 线程控制接口:介绍了POSIX线程库中的pthread_create()创建线程和pthread_join()等待线程;4. 线程优缺点:提高并行性但增加同步复杂度。文章还讨论了Linux中线程ID(LWP)的查看方法,并对比了不同操作系统和编程语言中的线程实现方式。
2025-09-14 22:32:25
1838
30
原创 Linux《进程信号(下)》
在之前的Linux《进程信号(上)》当中我们已经了解了进程信号的基本概念以及知道了信号产生的方式有哪些,还了解了信号是如何进行保存的,那么接下来在本篇当中就将继续之前的学习了解信号是如何处理的。除此之外还会了解到中断的概念,以及中断实际运行的原理是什么样的,在中断的学习当中将引入用户态和内核态相关对的概念,相信通过本篇的学习会让你对操作系统有更深的理解,一起加油吧!!!
2025-09-08 20:27:58
1525
31
原创 C++《C++11》(上)
本文介绍了C++11中的两大重要特性:列表初始化和右值引用。在列表初始化部分,通过initializer_list容器实现了统一初始化方式,使各类容器都能使用{}初始化。在右值引用部分,详细讲解了左值/右值概念、右值引用语法、移动构造和移动赋值原理,并通过string类实现示例展示了如何通过移动语义优化资源管理。文章还分析了不同场景下编译器对移动语义的优化处理,以及STL容器如何利用右值引用提升效率。这些特性使C++11代码更简洁高效,为后续学习C++11其他特性奠定了基础。
2025-09-05 16:01:18
1271
36
原创 Linux《进程信号(上)》
本文介绍了Linux系统中的信号机制,重点讲解了信号的基本概念、产生方式、保存机制和处理流程。主要内容包括:1. 信号概念:信号是进程间异步通信机制,通过生活实例类比说明;2. 信号产生方式:键盘输入、系统调用(kill/raise/abort)、硬件异常(除零、段错误)和软件条件(alarm);3. 信号保存机制:通过Pending、Block和Handler三张位图表管理信号状态;4. 信号处理:介绍了默认处理、忽略和自定义处理三种方式;5. 相关系统调用:signal()、sigprocmask()、
2025-09-02 22:35:50
1777
37
原创 C++《哈希表》
本文介绍了哈希表的基本概念、哈希函数和处理哈希冲突的方法。主要内容包括:1. 哈希表实现原理,重点讲解了直接定址法、除留余数法和乘法散列法等哈希函数;2. 处理哈希冲突的两种主要方法:开放地址法(线性探测、二次探测、双重探测)和链地址法,并给出了代码实现;3. C++标准库中unordered_map和unordered_set的使用方法及其与map/set的区别;4. 基于哈希桶的unordered_map和unordered_set的模拟实现,包括迭代器设计、插入查找删除等核心功能。通过测试验证了实现代
2025-08-28 16:22:48
1267
36
原创 Linux《进程间通信(下)》
本文介绍了Linux进程间通信(IPC)的SystemV机制,包括共享内存、消息队列和信号量三种方式。共享内存是最快的IPC形式,通过将物理内存映射到进程地址空间实现;消息队列使用内核缓冲区维护消息链表,通过类型标识区分不同进程;信号量本质是计数器,用于进程间的同步互斥。文章详细讲解了每种机制的系统调用接口,并提供了C++实现示例代码。重点分析了共享内存无内置同步机制的特性,以及如何结合命名管道实现同步;消息队列的责任链模式应用;信号量的建造者模式实现。通过具体的代码演示,展示了这些IPC机制的实际应用场景
2025-08-20 19:57:53
1172
35
原创 C++《使用红黑树封装map与set》
在之前的红黑树专题当中我们了解的红黑树的基本概念,在此之后我们试着实现了红代码。在之前的set和map专题当中我们已经了解了map和set的使用方法,了解了map和set如何使用,接下来就试着基于之前实现的红黑树来封装出出我们自己实现的map和set。相信通过本篇的学习能让你对map和set有更深的理解,一起加油吧!
2025-08-11 01:23:19
862
40
原创 Linux《进程间通信(上)》
本文介绍了Linux进程间通信中的管道机制,重点讲解了匿名管道和命名管道的实现原理与使用方法。主要内容包括: 进程通信的本质是让不同进程访问同一资源(如内存缓冲区),管道基于文件系统实现内存级通信; 匿名管道通过pipe系统调用创建,仅适用于有亲缘关系的进程,具有五大特性和四种通信情况; 命名管道通过mkfifo创建特殊文件,可实现无亲缘关系进程间的通信; 详细演示了两种管道的编程实现,包括父子进程通信示例和进程池设计; 介绍了VSCode远程开发环境的配置方法及常见问题解决方案。
2025-08-06 20:52:51
1273
34
原创 Linux《库的制作与原理》
本文介绍了Linux系统中库的制作与加载过程,包括静态库和动态库的生成、使用及区别。主要内容包括: 库的概念与分类:库是二进制可复用代码,分为静态库(.a)和动态库(.so)。 静态库制作:使用ar工具将.o文件打包,通过gcc的-l和-L选项链接使用。 动态库制作:使用gcc的-fPIC和-shared选项生成,需要设置环境变量或配置文件让系统能找到库。 ELF文件格式:详细解析了可执行文件、目标文件和库的ELF格式结构。 程序加载过程:从磁盘加载到内存,建立虚拟地址空间映射的完整流程。 动态链接原理:通
2025-07-06 02:18:16
1850
46
原创 Linux《文件系统》
本文深入探讨了文件系统在磁盘中的存储机制。首先从磁盘硬件结构入手,介绍了机械硬盘和固态硬盘的区别,详细讲解了磁盘的物理结构(盘片、磁道、扇区)和两种寻址方式(CHS和LBA)。然后引入文件系统概念,重点解析了Linux的ext2文件系统,包括分区管理、块组结构、inode和数据块存储机制,以及目录存储方式。文章还阐述了dentry树如何优化路径解析过程,解释了分区挂载的作用。最后对比分析了软链接(快捷方式)和硬链接(inode别名)的不同特性,并指出操作系统对目录硬链接的限制。
2025-06-01 19:46:24
2910
63
原创 Linux《基础IO》
本文介绍了Linux基础IO相关内容,包括文件描述符、重定向原理和缓冲区机制。首先回顾了C语言文件操作接口,引入Linux系统调用open、read、write等函数。重点讲解了文件描述符本质是数组下标,以及通过dup2实现重定向的原理。文章还演示了如何为自制shell添加重定向功能,并深入分析了"Linux下一切皆文件"的设计思想。最后探讨了内核缓冲区和语言层缓冲区的区别,并实现了一个简单的类libc库。通过这些内容,读者可以理解Linux文件操作的系统实现机制。
2025-05-26 19:50:36
2718
52
原创 Linux《自主Shell命令行解释器》
在上一篇中,我们学习了进程退出、进程等待和进程替换等概念。基于这些知识,本文将进一步探讨如何实现一个简单的Shell命令行解释器。通过构建Shell,我们可以更深入地理解操作系统如何执行用户输入的指令。本文将引导你逐步实现这一功能,帮助你更好地掌握操作系统的核心机制。让我们一起开始学习,共同进步!
2025-05-19 23:27:56
2390
45
原创 Linux《进程控制》
1.进程创建在之前的Linux《进程概念》当中我们已经了解了进程基本的概念,那么接下来在本篇当中我们将开始进程控制的学习;在本篇当中我们先会对之前的学习的创建子进程的系统调用fork再进行补充了解,并且再之后会重点的学习进程的终止、进程等待以及进程的替换。学习完这些知识之后再下一篇章当中就可以试着自己实现Shell,通过本篇的学习将会让你对进程有更深的理解,一起加油吧!!!1.进程创建。
2025-05-10 00:43:48
2281
46
原创 Linux《进程概念(下)》
在之前我们已经了解了进程基本的概念、知道了如何去创建子进程;还了解了进程状态、进程切换、进程O(1)调度算法等,那么接下来在本篇当中我们就来学习环境变量和程序地址空间的相关知识,相信通过本篇的学习你会有很大的所获,一起加油吧!
2025-05-03 20:47:33
3217
56
原创 Linux《进程概念(中)》
当中我们已经了解了进程的基本概念以及如何去创建对应的子进程,那么接下来在本篇当中我们就继续来进程的学习,在本篇当中我们要学习到进程的状态、进程的优先级、进程切换、Linux真实的调度算法——O(1)调度算法。
2025-04-29 14:51:21
2052
41
原创 递归、搜索和回溯算法《递归》
在之前的优选算法当中我们已经学习了一些基本的算法,那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法,其实也就是大家常常听到的dfs、bfs;其实本质就是递归,在学习搜索、回溯等算法的过程当中我们会先来了解算法的一些名词,之后再通过算法题来明白算法具体是如何使用的,最后在通过几道练习题来巩固算法。在本篇当中我们就来复习之前在C语言当中就学习到的递归,并且本次学习递归会和之前初次学习的角度不同,相信通过本篇的学习会让你不再惧怕递归,一起加油吧!
2025-04-28 16:22:09
1348
31
原创 Linux《进程概念(上)》
在之前的Linux学习当中我们已经了解了基本的Linux指令以及基础的开发工具的使用,那么接下来我们就要开始Linux当中一个非常重要的部分的学习——进程,在此进程是我们之后Linux学习的基础,并且通过进程的学习会让我们了解更多的操作系统的相关知识以及基本的底层原理,那么接下来就开始本篇的学习吧!
2025-03-30 21:46:46
3455
68
原创 Linux《基础开发工具(下)》
在之前的Linux《基础开发工具》上和中当中我们已经了解了一些的Linux当中的基础开发工具,接下来在本篇当中我们将继续来了解两个基本的开发工具git和gbd,信息通过本篇的学习让你了解和这两个工具的基本使用方法,接下来就开始本篇的学习吧!1.1 版本控制器的作用。
2025-03-24 20:59:38
2281
53
原创 C++《红黑树》
在之前的篇章当中我们已经了解了基于二叉搜索树的AVL树,那么接下来在本篇当中将继续来学习另一种基于二叉搜索树的树状结构——红黑树,在此和之前学习AVL树类似还是通过先了解红黑树是什么以及红黑树的结构特点,接下来在试着实现红黑树的结构以及实现红黑树插入新节点、进行节点查询的功能,相信通过本篇的学习能让你了解红黑树,一起加油把!!!
2025-03-18 23:30:13
2521
46
原创 Linux《进度条》
在之前的Linux基础开发工具当中我们已经了解了vim、gcc、makefile等基本的开发工具,那么有了这些开发工具我们就可以来实现我们Linux旅程当中的第一个程序——进度条。相信通过该项目的实现能让你对vim等开发工具更加的熟悉。
2025-03-16 21:22:43
1964
52
原创 Linux《基础开发工具(中)》
在之前的Linux《基础开发工具(上)》当中已经了解了Linux当中到的两大基础的开发工具yum与vim;了解了在Linux当中如何进行软件的下载以及实现的基本原理、知道了编辑器vim的基本使用方式,那么接下来在本篇当中将接下去继续来了解另外的两大基础的开发工具gcc/g++和自动化构建make/makefile,相信通过本篇的学习会使得你会有大的收获,一起加油吧!
2025-03-10 22:06:31
1866
59
原创 Linux《基础开发工具(上)》
在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识,那么接下来在本篇当中就开始学基本的开发工具,在此我们一共要了解6大开发工具,在此将这些工具的学习分为上中下篇,在本篇当中我们首先要来学习的是yun以及vim,一起加油吧!
2025-03-01 22:11:06
2479
61
原创 Linux《权限》
当中我们已经初步了解了Linux中的基本指令,并且在学习指令的过程中还学习了许多的Linux的基础知识,那么在本篇中将了解Linux内权限相关的知识,会学习Linux内权限的基本概念,之后还会了解如何修改文件的权限信息等操作;最后还要来了解关于权限的三个重要问题。接下来就开始本篇的学习吧!
2025-02-20 16:49:10
1817
61
原创 优选算法《位运算》
在本篇当中我们将会复习之前在C语言阶段学习的各种位运算,并且在复习当中将再补充一些在算法题当中没有进行总结的位运算的使用方法,再总结完常见的位运算使用方法之和接下来还是和之前的算法篇章一样通过几道算法题来对这些位运算的方法技巧进行巩固。在解决算法题过程中还是通过题目解析、算法原理讲解、代码实现三步来解决。相信通过本篇的学习能让你对位运算有更深的理解,一起加油吧!!!
2025-02-15 17:18:26
2089
63
原创 优选算法《前缀和》
在之前的篇章当中我们已经了解了双指针、滑动窗口、二分查找算法,那么接下来在本篇当中我们将继续进行算法的学习,在本篇当中我们学习的算法是前缀和算法。在此会先了解前缀和算法是什么,之后再了解前缀和算法的适用场景,再依次了解一维前缀和和二维前缀和,最后再了解完算法原理之后,还是和之前一样通过题目解析、算法原理讲解、代码实现的三步来完成代码习题。
2025-02-05 16:10:05
1882
72
原创 Linux《基础指令》
在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境,那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分,即指令和关于Linux的基础知识。相信通过本篇的学习能让你了解Linux的更多知识,一起加油吧!
2025-01-30 23:05:04
7618
58
原创 C++《AVL树》
在之前的学习当中我们已经了解了二叉搜索树,并且我们知道二叉搜索树的查找效率是无法满足我们的要求,当二叉树为左或者右斜树查找的效率就很低下了,那么这本篇当中我们就要来学习对二叉搜索树进行优化的二叉树——AVL树。在此会先来了解AVL树是什么,之后再学习AVL树的结构特点,最后会试着来实现AVL树的结构。在AVL树当中各种旋转是较难理解的,需要我们静下心来理解,一起加油吧!!!
2025-01-21 21:29:10
2080
59
原创 优选算法《二分查找》
在之前的学习当中我们已经初步了解过了二分查找的整体逻辑以及二分查找,接下来我们在本篇当中将系统的来学习二分查找的使用方式以及在什么情况下可以使用二分查找。在之前的学习当中我们了解到的二分查找是要求在有序的数组当中当数组元素有序时才能使用,但是其实这只是二分查找最朴素的使用场景,接下来我们将学习更多的二分查找的使用场景。相信通过被本章的学习之后你会有所收获,一起加油吧!!!
2025-01-18 22:34:58
2033
49
原创 Linux《Linux简介与环境的搭建》
在学习了C++或者是C语言的基础知识之后就可以开始Linux的学习了,现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用,所以Linxu也是我们学习编程的重要环节,在此接下来我们将会花大量的时间在Linxu的学习上。那么接下来我们就开始Linux第一个篇章的学习,在此我们将会了解到Linux的发展史以及Linux的优势,最后还会讲解如何搭建Linux的环境,一起加油吧!
2025-01-17 23:53:38
2718
41
原创 优选算法《滑动窗口》
你这时可能会疑惑这个算法在之前怎么完全没有听说过,没有关系接下来在本篇当中就将带你一步步的了解滑动窗口的算法原理以及在什么情况下适合使用滑动窗口来解决问题,并且还会通过几道算法题的讲解让你进一步的理解滑动窗口。那么接下来就开始本篇的学习吧!,相信通过那几道算法题的讲解你已经知道该如何灵活的使用双指针了吧,那么接下来我们就接着来学习下一个优选算法——在优选算法的第一章当中我们了解了。
2024-12-30 20:43:04
5195
80
原创 优选算法《双指针》
在这些算法中我们先来了解的是一些非常经典且较为常用的算法,在此也就是优选出来的算法,接下来在每一篇章中我们都会来学习一种优选算法,并且在了解了算法原理之后接下来会通过几道算法题来巩固相应的算法原理。在每道算法题的讲解中都会通过。三步来带你完全吃透每道算法题,相信通过这一系列算法专题的学习,你的算法以及代码能力会有质的飞跃。接下来就开始本篇双指针专题算法的学习吧!在学习了C/C++的基础知识之后接下来我们就可以来系统的学习相关的算法了,这在之后的。
2024-12-16 22:53:59
3540
85
原创 C++《set与map》
在之前我们已经学习了解了C++STL当中的string和vector等容器,现在我们已经懂得了这些容器提供的接口该如何使用,并且了解了这些容器的底层结构。接下来我们在本篇当中将继续学习STL内的容器set与map,在此这两个容器与我们之前学习的容器提供的成员函数以及底层结构有较大的差异。接下来就开始本篇的学习吧!
2024-12-02 22:32:06
3653
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅