<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[atuddjdec_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/atuddjdec_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; atuddjdec_]]></copyright><item><title><![CDATA[算法篇：前缀和]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/159354366</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/159354366</guid><author>atuddjdec_</author><pubDate>Wed, 25 Mar 2026 16:21:13 +0800</pubDate><description><![CDATA[核心思想是：提前计算出从起点到每个位置的累加和，这样当需要求某个区间的和时，不需要遍历区间内的每个元素，直接用两个前缀和相减即可得到，时间复杂度从O(n)降到O(1)。]]></description><category></category></item><item><title><![CDATA[算法篇：二分查找]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/159347427</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/159347427</guid><author>atuddjdec_</author><pubDate>Sun, 22 Mar 2026 19:20:29 +0800</pubDate><description><![CDATA[每次都通过比较中间元素，将查找范围缩小一半，直到找到目标或确认目标不存在。数据结构一定要是有序的（升序或降序）支持随机访问（如数组、列表），链表不适合34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣（LeetCode）题目解析：在一个升序数组中，找到一段全是目标值的区间，返回全是目标值的第一个下标和最后一个目标值的下标。假设左边界下标是resleft，目标值为x，右边界下标为resright[left,resleft-1]都是小于x的。]]></description><category></category></item><item><title><![CDATA[算法篇：滑动窗口]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/159314839</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/159314839</guid><author>atuddjdec_</author><pubDate>Sat, 21 Mar 2026 15:33:31 +0800</pubDate><description><![CDATA[此方法针对的对象是一段连续的区间。]]></description><category></category></item><item><title><![CDATA[算法篇：双指针]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/157978574</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/157978574</guid><author>atuddjdec_</author><pubDate>Wed, 11 Mar 2026 15:44:43 +0800</pubDate><description><![CDATA[双指针算法主要包括对撞指针和快慢指针两种形式。对撞指针通常从序列两端向中间移动，适用于有序数组的问题，如移动零、复写零、盛水容器等；快慢指针则通过不同移动速度解决环形结构问题，如快乐数判定。文章详细介绍了这些算法的实现思路，包括移动零时划分0和非0区域、复写零时从后向前处理、快乐数判断中的循环检测等。还展示了如何用双指针优化暴力解法，如三数之和问题中固定一个数后转化为两数之和问题，并强调了去重处理的重要性。通过多个LeetCode例题（如283、1089、15题等）的代码实现]]></description><category></category></item><item><title><![CDATA[Linux——网络概念]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/155771732</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/155771732</guid><author>atuddjdec_</author><pubDate>Sun, 14 Dec 2025 11:10:38 +0800</pubDate><description><![CDATA[本文系统介绍了计算机网络的基本概念与协议体系。主要内容包括：1）局域网和广域网的定义与特点；2）OSI七层模型和TCP/IP四层模型的各层功能、关键设备及协议；3）网络传输的基本流程，包括数据封装与分用、IP地址与MAC地址的作用区别；4）Socket编程基础知识，包括端口号、网络字节序、常用API接口等。文章详细阐述了TCP和UDP协议的特性差异，以及数据在网络中的传输原理，为理解计算机网络通信机制提供了全面的基础知识框架。]]></description><category></category></item><item><title><![CDATA[Linux:线程池]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/155562325</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/155562325</guid><author>atuddjdec_</author><pubDate>Fri, 05 Dec 2025 09:34:57 +0800</pubDate><description><![CDATA[本文介绍了线程池的设计与实现过程，主要包括三个核心模块：线程封装、锁和条件变量封装以及日志系统。首先实现了Thread类封装线程操作，Mutex类封装互斥锁，Cond类封装条件变量。然后设计了基于策略模式的日志系统Logger，支持控制台和文件两种输出方式。最后采用单例模式实现了固定数量的线程池ThreadPool，包含任务队列管理、线程调度等功能。测试结果表明，该系统能够正确处理并发任务，日志输出规范完整。整个设计通过模块化封装和组合，实现了线程安全、高效的任务处理机制。]]></description><category></category></item><item><title><![CDATA[生产者消费者模型]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/155533660</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/155533660</guid><author>atuddjdec_</author><pubDate>Wed, 03 Dec 2025 17:20:05 +0800</pubDate><description><![CDATA[321原则”3：3种关系：生产者之间，消费者之间，生产者和消费者之间2：2种角色：生产者和消费者1:一个交易场合生产者和消费者模型就好比去超市买东西：有了交易场所，生产者就可以把生产多的货，存储到交易场所中，即使生产者不生产了，只要交易场所中有货，那么消费者可以直接从交易场所中取货。生产者-消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯，而通过阻塞队列。]]></description><category></category></item><item><title><![CDATA[线程同步与互斥]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/155134141</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/155134141</guid><author>atuddjdec_</author><pubDate>Sun, 30 Nov 2025 11:10:41 +0800</pubDate><description><![CDATA[本文介绍了线程互斥和同步的相关概念及实现方法。首先解释了共享资源、临界资源、临界区等基本概念，通过抢票案例演示了多线程环境下资源竞争的问题。重点讲解了互斥量(mutex)的实现原理和使用方法，包括初始化、加锁解锁操作，并分析了硬件层面如何保证原子性。随后引入条件变量解决线程同步问题，详细解释了pthread_cond_wait的工作原理和注意事项，强调其必须与互斥量配合使用。文章还探讨了线程安全与可重入性的区别，以及死锁产生的四个必要条件及预防策略。最后指出STL容器和智能指针的线程安全性问题。]]></description><category></category></item><item><title><![CDATA[Linux：线程概念及控制]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/154726923</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/154726923</guid><author>atuddjdec_</author><pubDate>Sat, 15 Nov 2025 16:34:04 +0800</pubDate><description><![CDATA[Linux线程是进程内部的执行流，共享进程资源但拥有独立的栈和上下文。线程比进程更轻量级，创建和切换开销更小。Linux通过轻量级进程(LWP)实现线程，内核使用struct page结构体管理物理内存页。线程共享进程地址空间但拥有私有数据，如线程ID、寄存器、栈等。线程终止可通过return、pthread_exit或pthread_cancel实现，需用pthread_join回收资源以避免泄漏。线程可分离开启自动回收，此时不可再join。pthread库维护的线程ID实质是进程地址空间中的内存地址。]]></description><category></category></item><item><title><![CDATA[Linux进程信号]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/154192806</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/154192806</guid><author>atuddjdec_</author><pubDate>Wed, 05 Nov 2025 19:50:11 +0800</pubDate><description><![CDATA[本文详细介绍了Linux系统中的信号机制及其应用。首先解释了信号的概念与分类（62种信号，前31种为普通信号），介绍了信号产生方式（键盘、kill命令、系统调用等）和信号处理过程（递达、未决、阻塞）。文章深入讲解了信号在内核中的表示方式和操作函数（sigprocmask、sigpending等），以及用户态与内核态的切换机制。通过具体代码示例演示了信号处理流程、可重入函数问题和volatile关键字的作用。最后介绍了sigaction函数的强大功能和信号处理中的注意事项.]]></description><category></category></item><item><title><![CDATA[进程间通信（IPC）]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/153696939</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/153696939</guid><author>atuddjdec_</author><pubDate>Sun, 26 Oct 2025 15:09:20 +0800</pubDate><description><![CDATA[本文介绍了进程间通信（IPC）的主要方法和实现原理，重点分析了管道和SystemV共享内存两种机制。首先阐述了进程通信的四大目的：数据传输、资源共享、事件通知和进程控制。随后详细讲解了管道技术，包括匿名管道的特性（单向通信、生命周期随进程、自带同步机制）和命名管道的创建方法。特别通过代码示例展示了父子进程如何通过匿名管道实现通信。然后深入探讨了SystemV共享内存机制，包括其数据结构、关键函数（shmget、shmat、shmdt等）和完整通信流程，并通过实例演示了两个进程通过共享内存实现数据交互。]]></description><category></category></item><item><title><![CDATA[Linux：库制作与原理]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/153054860</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/153054860</guid><author>atuddjdec_</author><pubDate>Sun, 19 Oct 2025 20:04:25 +0800</pubDate><description><![CDATA[文章摘要：本文系统介绍了编程中库的概念与使用。库是预先编译好的可重用代码集合，分为静态库（.a/.lib）和动态库（.so/.dll）。静态库在编译时链接到可执行文件，动态库则在运行时加载。文章详细讲解了如何创建、打包和使用两种库，包括Makefile编写、库路径配置等。同时深入分析了ELF文件格式，解释了程序头表和节头表的作用，对比了静态链接和动态链接的区别，重点阐述了动态链接通过GOT表实现函数地址重定位的机制。最后还介绍了目标文件的组成和链接过程，以及如何通过readelf等工具查看文件结构。]]></description><category></category></item><item><title><![CDATA[Ext系列文件系统]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/152667508</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/152667508</guid><author>atuddjdec_</author><pubDate>Sat, 11 Oct 2025 16:50:43 +0800</pubDate><description><![CDATA[本文系统介绍了计算机存储系统的层级关系与磁盘结构原理。主要内容包括：1)存储设备层级关系：磁盘→服务器→机柜→机房；2)磁盘物理结构：详细解析扇区、磁头、磁道等组件及其容量计算；3)数据寻址方法：CHS与LBA两种寻址方式；4)文件系统管理：阐述块、分区、inode等概念及其运作机制；5)目录结构与文件操作原理；6)软硬链接的区别与应用场景。文章通过类比磁带、卷纸等日常物品，形象解释了磁盘的逻辑存储结构，并深入分析了ext2文件系统的组织方式，包括超级块、块组描述符等核心组件。最后还探讨了文件时间属性和路径]]></description><category></category></item><item><title><![CDATA[Linux：基础IO]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/152311742</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/152311742</guid><author>atuddjdec_</author><pubDate>Tue, 07 Oct 2025 14:17:29 +0800</pubDate><description><![CDATA[本文深入探讨了Linux系统中文件操作的核心概念和实现机制。首先从狭义和广义两个角度理解文件概念，指出Linux下&quot;一切皆文件&quot;的抽象设计理念。文章详细解析了文件描述符(fd)的分配规则、重定向原理及缓冲区机制，包括标准I/O提供的全缓冲、行缓冲和无缓冲三种类型。通过代码示例演示了文件I/O系统调用(open/read/write)与C库函数(fopen/fread/fwrite)的关系，并剖析了FILE结构体内核实现。最后设计了一个简易的libc库原型，展示用户级缓冲区的实现原理。]]></description><category></category></item><item><title><![CDATA[进程控制 ]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/152006998</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/152006998</guid><author>atuddjdec_</author><pubDate>Sun, 28 Sep 2025 20:36:50 +0800</pubDate><description><![CDATA[本文摘要：本文深入探讨了Linux系统中的进程管理相关概念与技术，主要包括以下内容：1. fork函数的实现原理和写时拷贝机制，解析父子进程共享资源的实现方式；2. 进程终止的三种场景和常见退出方法，比较了_exit、exit和return的区别；3. 进程等待的必要性及实现方法，详细介绍了wait和waitpid函数的使用；4. 进程程序替换原理及exec函数族的使用；5. 自主Shell的实现原理，包括命令行解析、内建命令执行和外部程序执行。]]></description><category></category></item><item><title><![CDATA[初相识进程]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/151681627</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/151681627</guid><author>atuddjdec_</author><pubDate>Mon, 22 Sep 2025 07:15:00 +0800</pubDate><description><![CDATA[本文摘要：文章系统介绍了操作系统进程管理的核心概念，包括进程定义、进程控制块(PCB)、进程状态（运行、睡眠、僵尸等）、进程优先级调度算法，以及Linux内核中的进程调度队列实现。重点讲解了进程地址空间、虚拟内存管理机制，分析了父子进程的数据隔离原理和写时拷贝技术。同时详细阐述了命令行参数和环境变量的工作机制，包括PATH等常见环境变量的作用与设置方法。文章通过代码示例和Linux命令操作演示了进程创建、状态监控、优先级调整等实际应用，揭示了操作系统如何通过虚拟地址空间和分页机制实现进程间的内存隔离与管理。]]></description><category></category></item><item><title><![CDATA[Linux基础开发工具（gcc/g++，yum，vim，make/makefile）]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/151370010</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/151370010</guid><author>atuddjdec_</author><pubDate>Sun, 14 Sep 2025 13:15:11 +0800</pubDate><description><![CDATA[本文介绍了Linux开发中的常用工具和基本概念，包括yum软件包管理器、vim编辑器、gcc编译器、make构建工具、进度条程序实现以及gdb调试器。重点讲解了yum的软件包管理操作、vim三种模式的切换与常用命令、gcc编译的四个阶段（预处理-编译-汇编-链接）、makefile的编写规则，并通过实例演示了进度条程序的实现方法。最后详细说明了gdb调试器的使用技巧，包括断点设置、变量监视、条件断点等调试方法，为Linux环境下的C/C++开发提供了全面的工具使用指南。]]></description><category></category></item><item><title><![CDATA[Linux权限]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/151353404</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/151353404</guid><author>atuddjdec_</author><pubDate>Tue, 09 Sep 2025 16:54:41 +0800</pubDate><description><![CDATA[Linux权限管理摘要：Linux系统权限管理主要涉及用户分类（root超级用户和普通用户）、文件访问者角色（User/Group/Others）和基本权限（读/写/执行）。文件权限可通过chmod命令修改，支持字符表示法（u/g/o/a）和八进制数值表示法。chown和chgrp命令分别用于修改文件所有者和所属组。umask权限掩码影响新建文件的默认权限（如root默认为0022）。目录权限中，x权限控制进入目录，w权限控制文件操作，r权限控制查看内容。通过设置粘滞位（chmod +t）可限制目录下的文件]]></description><category></category></item><item><title><![CDATA[C++之set和map的运用]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/147374454</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/147374454</guid><author>atuddjdec_</author><pubDate>Thu, 08 May 2025 20:01:57 +0800</pubDate><description><![CDATA[map的声明如下，Key就是map底层关键字的类型，T是map底层value的类型，set默认要求Key⽀持⼩于⽐较，如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数，map底层存储数据的内存是从空间配置器申请的。⼀般情况下，我们都不需要传后两个模版参数。map底层是⽤红⿊树实现，增删查改效率是 O(logN) ，迭代器遍历是⾛的中序，所以是按key有序顺序遍历的。map底层的红⿊树节点中的数据，使⽤pair<Key, T>存储键值对数据。T1 first;T2 second;{}]]></description><category></category></item><item><title><![CDATA[C++之红黑树]]></title><link>https://blog.youkuaiyun.com/atuddjdec_/article/details/147354693</link><guid>https://blog.youkuaiyun.com/atuddjdec_/article/details/147354693</guid><author>atuddjdec_</author><pubDate>Sun, 20 Apr 2025 19:31:58 +0800</pubDate><description><![CDATA[分析：因为p和u都是红⾊，g是⿊⾊，把p和u变⿊，左边⼦树路径各增加⼀个⿊⾊结点，g再变红，相当于保持g所在⼦树的⿊⾊结点的数量不变，同时解决了c和p连续红⾊结点的问题，需要继续往上更新是因为，g是红⾊，如果g的⽗亲还是红⾊，那么就还需要继续处理；c为红，p为红，g为⿊，u不存在或者u存在且为⿊，u不存在，则c⼀定是新增结点，u存在且为⿊，则c⼀定不是新增，c之前是⿊⾊的，是在c的⼦树中插⼊，符合情况1，变⾊将c从⿊⾊变成红⾊，更新上来的。他这⾥所指的叶⼦结点不是传统的意义上的叶⼦结点，⽽是我们说的。]]></description><category></category></item></channel></rss>