<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dby0222的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dby0222</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dby0222]]></copyright><item><title><![CDATA[栈和队列，1047，150]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164617350</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164617350</guid><author>dby0222</author><pubDate>Tue, 08 Sep 2026 15:34:28 +0800</pubDate><description><![CDATA[尾递归优化：如果递归调用是函数的最后一步操作（尾递归），编译器可以复用当前栈帧而不新建，从而把空间复杂度降到 O(1)。1、栈是一种操作受限的线性表，所有的插入、删除和访问操作都只能在栈顶这一端进行。另一端是封闭的，叫栈底。普通队列：数组实现时存在"假溢出"——元素出队后，队头前移，但已出队的空间无法复用。函数调用栈：每个函数调用会被压入栈帧，返回时弹出，这就是递归能工作的底层机制。队列同样是一种操作受限的线性表，但规则正好相反：队尾入队，队头出队。链式队列：用链表实现，无容量限制，适合长度不确定的场景。]]></description><category></category></item><item><title><![CDATA[LeetCode225，20]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164465076</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164465076</guid><author>dby0222</author><pubDate>Mon, 07 Sep 2026 15:55:14 +0800</pubDate><description><![CDATA[1、先将新元素入队到queue2，再把queue1中所有元素依次出队并入队到queue2，最后交换两个队列。这样新元素就在queue1的队首，即栈顶。3、遇到右括号先判断 stack 是否为空，空则直接返回 False。5、返回 not stack（栈空为 True，否则 False）4、遇到左括号直接 stack.append(ch) 入栈。1、建一个空列表 stack 当栈用。2、直接从queue1出队即可。3、返回queue1的队首元素。4、判断queue1是否为空.不相等返回 False。]]></description><category></category></item><item><title><![CDATA[递归基本概念]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164334090</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164334090</guid><author>dby0222</author><pubDate>Thu, 03 Sep 2026 15:58:44 +0800</pubDate><description><![CDATA[执行过程：factorial(4) → 4×factorial(3) → 4×3×factorial(2) → 4×3×2×factorial(1) → 回溯计算得 24。return fib(n-1) + fib(n-2)  # 拆成两个子问题，结果相加。数列：1, 1, 2, 3, 5, 8, 13...，规律是每个数 = 前两个数之和。if n <= 2:          # 终止：第1、2项都是1!if n == 1:          # 终止：1。= n × (n-1)递归就是函数调用自己。]]></description><category></category></item><item><title><![CDATA[链表基础知识指南 ]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164297705</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164297705</guid><author>dby0222</author><pubDate>Wed, 02 Sep 2026 15:41:07 +0800</pubDate><description><![CDATA[new_node.prev = prev        # ② 新节点指向前驱（双向）next_node.prev = new_node   # ④ 后继指回新节点（双向）链表是一种线性数据结构，由一系列节点组成，每个节点包含数据和指向下一个节点的指针。new_node.next = next_node   # ① 新节点指向后继。prev.next = new_node        # ③ 前驱指向新节点。1. 理解指针含义：next 指向下一个节点，prev 指向上一个节点。]]></description><category></category></item><item><title><![CDATA[LeetCode三道题]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164261440</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164261440</guid><author>dby0222</author><pubDate>Tue, 01 Sep 2026 15:26:39 +0800</pubDate><description><![CDATA[如果 nums[i]!= val，则把 nums[i] 放到 nums[k] 位置，然后 k++。当窗口和 ≥ target 时，尝试缩小窗口（移动 left）找最小长度。慢指针 k：指向下一个要存放「不等于 val 的元素」的位置。用两个指针 left 和 right 维护一个窗口。较大的平方值放入结果数组的末尾（从后往前填充）如果 nums[i] == val，则跳过。用两个指针从两端向中间移动，比较平方值。原数组有序，但负数平方后可能变大。right 向右扩展窗口，累加和。]]></description><category></category></item><item><title><![CDATA[数据结构入门：从数组到二分查找 —— 以 LeetCode 704 为例]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/164221548</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/164221548</guid><author>dby0222</author><pubDate>Mon, 31 Aug 2026 16:35:10 +0800</pubDate><description><![CDATA[当 nums[mid] > target 时，right = mid - 1（mid 已经检查过，排除）选择合适的数据结构，可以极大地提升算法的效率。当 nums[mid] > target 时，right = mid（右开边界，mid 不包含）区间：[4, 6)，mid = 5，nums[5]=12 > 9 → right = 5。初始：[0, 5]，mid = 2，nums[2]=3 < 9 → left = 3。初始：[0, 6)，mid = 3，nums[3]=5 < 9 → left = 4。]]></description><category></category></item><item><title><![CDATA[Shell结构化命令：让脚本拥有判断与决策能力]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162765823</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162765823</guid><author>dby0222</author><pubDate>Sun, 12 Jul 2026 21:52:39 +0800</pubDate><description><![CDATA[与其他编程语言不同，Bash的if判断的是命令的退出状态码，而非布尔值。注意：>和<在方括号中必须转义（\>、\<），否则会被当作重定向符号。echo "========== 系统检查工具 =========="· if后面的命令退出状态码为0（成功）时，then后的命令才执行。test命令允许测试命令退出码之外的条件，包括数值、字符串和文件。echo "========== 检查完成 =========="echo "可读，共 $line 行"echo "$target_file 不存在"]]></description><category></category></item><item><title><![CDATA[Shell脚本入门：从零构建你的第一个bash脚本]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162765176</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162765176</guid><author>dby0222</author><pubDate>Fri, 10 Jul 2026 15:42:59 +0800</pubDate><description><![CDATA[效果：date的输出被传给who，但who不接收标准输入，所以实际上等同于只执行who。# 或 /home/zhang/zz/sh_script/test.sh  绝对路径。每个命令执行完毕后都会返回一个0~255的整数值，0表示成功，非0表示失败。输出：当前用户是：zhang pts/0 2026-07-10 10:30。wc（word count）默认输出三个值：行数、词数、字节数。效果：先显示当前日期时间，再显示当前登录用户列表。echo "本次报告将保存为：$filename"]]></description><category></category></item><item><title><![CDATA[Linux用户管理与文件权限详解——从小白到上手]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162698504</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162698504</guid><author>dby0222</author><pubDate>Thu, 09 Jul 2026 15:08:19 +0800</pubDate><description><![CDATA[sudo usermod -G new_team zhangsan   # 附加组（替换原有附加组）2. 将用户加入组：sudo usermod -aG share_group user1 user2。sudo usermod -aG new_team zhangsan  # 追加附加组（推荐）sudo chage -E 2026-12-31 username  # 设置过期日期。sudo groupmod -n new_team dev_team  # 修改组名。]]></description><category></category></item><item><title><![CDATA[Linux环境变量全面解析]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162666431</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162666431</guid><author>dby0222</author><pubDate>Wed, 08 Jul 2026 14:41:11 +0800</pubDate><description><![CDATA[环境变量（Environment Variable） 是在操作系统或程序外部设置的变量，以 变量名=值 的形式存在。当你在命令行输入一个命令（如 ls、bash、python）时，Shell 需要知道这个程序在哪个目录下。# 输出示例：/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin。# 像 bash、ls 这些命令，因为它们的所在目录（如 /bin）已经在 PATH 中。局部环境变量只在定义它们的那个 Shell 进程中可见，子 Shell 无法访问。]]></description><category></category></item><item><title><![CDATA[理解Shell]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162638111</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162638111</guid><author>dby0222</author><pubDate>Tue, 07 Jul 2026 14:48:54 +0800</pubDate><description><![CDATA[命令别名属于内部命令，仅在定义它的Shell进程中有效。简单来说，Shell是指一种应用程序，它提供了一个界面，用户通过这个界面访问操作系统内核的服务。Shell脚本（Shell Script）是为Shell编写的脚本程序，文件名通常以.sh结尾。存在于Shell之外的程序，位于/bin、/usr/bin、/sbin等目录。子Shell：在CLI提示符后输入/bin/bash命令时创建的新Shell。│   ├── 独立程序文件（/bin、/usr/bin）├── history：-a强制写入，!]]></description><category></category></item><item><title><![CDATA[Vim编辑器与Shell命令补充]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162635515</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162635515</guid><author>dby0222</author><pubDate>Mon, 06 Jul 2026 16:16:16 +0800</pubDate><description><![CDATA[按ESC键退出插入模式，返回普通模式。在普通模式下按下:（英文冒号）进入命令行模式，光标移到消息行等待输入命令。按v进入可视模式，移动光标高亮选择文本，按y复制，移动光标后按p粘贴。在普通模式下按/，输入要查找的字符串，按回车定位。│   │   ├── 命令行模式（按:进入，执行保存/替换）│   │   ├── 普通模式（移动、删除、复制、查找）│   │   └── 可视模式（按v进入，多行选择）1. 按i进入插入模式，输入多行包含"old"的文本。│   │   ├── 插入模式（按i进入）]]></description><category></category></item><item><title><![CDATA[Linux常用运维命令实操详解]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162552551</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162552551</guid><author>dby0222</author><pubDate>Fri, 03 Jul 2026 17:02:42 +0800</pubDate><description><![CDATA[本文基于VMware Linux虚拟机 + Xshell远程连接实操，完整梳理进程管理、磁盘挂载、磁盘空间查看、文本排序检索、压缩解压全套运维命令；重点拆解`top`、`sort`、`grep`核心命令，附带实操步骤、参数说明、练习案例与运行截图说明，搭建完整Linux基础命令知识框架。3. 文章覆盖全部命令：ps、top、kill、mount、umount、df、du、sort、grep、tar、gzip。用途：动态刷新CPU、内存、交换分区、进程资源占用，排查服务器卡顿核心命令。]]></description><category></category></item><item><title><![CDATA[Linux常用命令实践与总结]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162551318</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162551318</guid><author>dby0222</author><pubDate>Fri, 03 Jul 2026 14:31:46 +0800</pubDate><description><![CDATA[从最初的不熟悉，到能够熟练切换目录、创建和操作文件，这个过程让我体会到命令行的强大和高效。Linux采用树形目录结构存储文件，所有文件从根目录（/）开始，呈倒树状结构分布。cannot remove: Is a directory rm删除目录未加-r 添加-r选项。cd（Change Directory）命令用于切换当前工作目录。rm（Remove）命令用于删除文件或目录。rmdir（Remove Directory）命令用于删除空目录。mkdir（Make Directory）命令用于创建新目录。]]></description><category></category></item><item><title><![CDATA[使用Xshell连接虚拟机与Xftp文件传输]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162522225</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162522225</guid><author>dby0222</author><pubDate>Thu, 02 Jul 2026 15:35:29 +0800</pubDate><description><![CDATA[通过本次作业，我深入了解了SSH协议的基本原理和工作机制，掌握了使用Xshell远程连接Linux虚拟机的完整流程，包括安装SSH服务、查看IP地址、建立会话连接等操作。SSH作为Linux远程管理的核心协议，在实际工作中应用非常广泛，掌握SSH连接和文件传输技能是Linux运维和开发工作的基础。在已连接成功的Xshell窗口中，点击工具栏上的Xftp图标（文件夹形状的按钮），即可自动建立文件传输会话。SSH默认使用22号端口，是目前Linux服务器远程管理中最常用的协议，替代了不安全的Telnet协议。]]></description><category></category></item><item><title><![CDATA[Ubuntu虚拟机安装与Linux初探]]></title><link>https://blog.youkuaiyun.com/dby0222/article/details/162520757</link><guid>https://blog.youkuaiyun.com/dby0222/article/details/162520757</guid><author>dby0222</author><pubDate>Thu, 02 Jul 2026 15:00:43 +0800</pubDate><description><![CDATA[通过本次作业，我初步了解了Linux操作系统的基本概念和虚拟机的使用方法，并成功在VMware虚拟机上完成了Ubuntu的安装。使用虚拟机的好处是可以在一台物理机上同时运行多个不同的操作系统，且各系统之间相互隔离，不会影响宿主机系统的稳定性，非常适合学习和实验环境。Linux具有稳定性高、安全性强、开源免费、可定制性强等优点，广泛应用于服务器、云计算、嵌入式设备、移动终端（如Android基于Linux内核）等领域。2. 创建新虚拟机：打开VMware，选择"创建新的虚拟机"，选择"典型"安装模式。]]></description><category></category></item></channel></rss>