- 博客(377)
- 收藏
- 关注
原创 sphinx(3)RST语法
RST语法摘要 RST(reStructuredText)是一种轻量级标记语言,专为技术文档设计。它使用下划线标记标题,支持有序/无序列表、定义列表和字段列表。段落通过空行分隔,缩进段落形成引用样式。RST强调可读性和扩展性,适合复杂文档结构,是Python文档系统Sphinx的默认格式。其语法包括: 标题:使用下划线字符标记层级 段落:空行分隔,缩进形成引用 列表:支持有序(数字/字母)、无序(+-*)和定义列表 字段列表:冒号标记的键值对结构 RST比Markdown更适合技术文档,虽学习曲线稍陡但表现
2025-11-25 21:03:11
396
原创 sphinx(2)配置介绍
Sphinx(2)配置摘要 本文介绍了Sphinx文档生成器的核心配置项,主要包括项目信息和一般配置参数。项目信息配置包含project(项目名称)、author(作者)、copyright(版权)、version/release(版本号)等基础元数据。一般配置项详细列举了50多项参数,涵盖扩展模块、源文件处理、模板路径、代码高亮等各个方面。重点介绍了pygments_style代码高亮样式的配置,并列出sphinx、default、emacs等常用样式选项。这些配置项通过conf.py文件进行设置,能够灵
2025-11-18 20:44:11
645
原创 sphinx(1)基础使用
Sphinx是一个强大的文档生成工具,最初为Python文档需求而设计。它支持多种输出格式、结构化文档、代码文档自动化和国际化。安装简单,通过sphinx-quickstart生成基本结构,包含配置文件、源文件和构建目录。Sphinx基于reStructuredText编写文档,通过Makefile命令生成HTML、PDF等格式输出。其优势在于灵活扩展和自动化文档管理,适合技术项目文档开发。
2025-11-18 20:42:38
1036
原创 Linux之rsyslog(6)RainerScript
摘要:RainerScript基础语法与功能 RainerScript是rsyslog的核心配置语言,专用于处理网络事件和日志过滤。它支持复杂表达式(含算术、逻辑、字符串运算符),并分为内置函数(如cnum()、dyn_inc())和模块函数(需加载模块,如fmhttp)。控制结构包括if-else条件分支和foreach循环(仅遍历JSON数据),语法类似主流编程语言。无类型设计需注意隐式转换,如字符串拼接需用&而非+。典型应用包括日志分类、字段提取(如正则re_extract())和条件路由。
2025-11-14 13:22:14
876
原创 Linux之rsyslog(5)过滤条件
文章摘要:本文详细介绍了rsyslog的四种过滤条件类型:传统选择器(基于优先级和设备)、基于属性的过滤器(支持多种比较操作)、基于表达式的过滤器(支持复杂运算)以及BSD风格块(v7+版本不再支持)。重点讲解了选择器的设备-优先级语法和扩展功能,以及基于属性过滤器的contains、isequal等操作符的使用方法。文章还提供了配置示例,如通过msg属性过滤特定消息内容,并强调正则表达式和转义字符的处理注意事项。
2025-11-14 13:20:50
1237
原创 Linux之rsyslog(4)属性配置
摘要:本文详细介绍了rsyslog日志系统中的属性配置机制,包括消息属性和系统属性两大类。消息属性(如msg、hostname等)从原始日志中提取,用于模板和条件语句处理;系统属性(如$now、$myhostname等)由rsyslog核心提供,与时间相关的属性还区分本地和UTC版本。文章强调时间属性的使用注意事项,并列出完整的属性对照表,为日志格式化、过滤和转发提供灵活的数据访问方式。通过合理配置这些属性,可实现高效的日志管理需求。
2025-11-10 21:13:05
825
原创 Linux之rsyslog(3)模板配置
Linux rsyslog(3)模板配置摘要 本文详细介绍了rsyslog的字符串生成模块和模板系统。字符串生成模块通过本地C接口加速模板处理,提供约5%性能提升,内置smfile、smfwd等核心模块。 rsyslog模板用于定义数据输出格式,支持列表、子树、字符串和插件四种类型。列表模板适合JSON流水线,子树模板序列化完整JSON树,字符串模板处理简单文本。模板通过template()对象定义,可配合常量、属性语句使用。 文章还介绍了保留模板名称(如RSYSLOG_TraditionalFileFor
2025-11-05 22:41:37
652
原创 Linux之rsyslog(2)输入输出配置
Linux rsyslog(2)输入输出配置摘要 rsyslog是一个高度可扩展的日志处理框架,其工作流程分为输入模块接收、规则集处理和操作输出三个阶段。支持三种配置语法,推荐使用结构化的RainerScript格式。rsyslog提供丰富的输入/输出模块,包括文件(omfile)、网络(omfwd)、数据库(ommysql)等,满足不同场景需求。输入模块如imtcp、imudp负责接收日志,输出模块则处理日志存储和转发。配置时需注意规则集的绑定和过滤条件设置,实现灵活的日志处理流水线。(149字)
2025-11-03 20:47:55
602
原创 Linux错误(7)接口处于Down状态不通告IPv6地址变更事件
在linux 4.14内核版本上,接口处于Down状态时,IPv6地址操作不会触发netlink通告,会导致用户空间存在地址残留。接口处于DOWN时,接口IPv6地址会处于 tentative 状态,处于重复地址检测的试探状态,是一个临时状态。而内核在通告IPv6地址时,会判断地址的状态,tentative 状态地址不会被通告。
2025-10-29 22:04:16
854
2
原创 Linux(1)rsyslog(1)基础使用
摘要: rsyslog是Linux系统中高性能的开源日志处理工具,具有模块化架构、可靠传输和强大过滤能力。支持从传统syslog协议到现代数据库整合的多种功能。安装可通过apt/yum/dnf命令完成,配置保存在/etc/rsyslog.d/目录下。基础使用包括创建自定义日志规则、发送测试消息(logger命令)和验证结果(tail命令)。相比syslog-ng等替代方案,rsyslog在性能、兼容性和企业级部署方面更具优势,是Linux生态中广泛应用的日志管理解决方案。
2025-10-29 22:00:40
1016
1
原创 代码训练LeetCode(49)插入区间
本文介绍了在有序区间列表中插入新区间并合并重叠区间的算法。给定一个按起始端点排序的区间列表和一个新区间,要求在插入后保持区间有序且无重叠。分析表明,可通过一次遍历实现:先处理左侧不重叠区间,再合并重叠区间,最后处理右侧区间。代码实现中使用了动态数组存储结果,时间复杂度为O(n),空间复杂度为O(n)。关键点在于利用区间已排序的特性优化合并过程,确保高效处理大规模数据。该算法适用于需要动态维护有序非重叠区间的场景,如日程安排、资源分配等问题。
2025-10-26 20:03:46
508
1
原创 代码训练LeetCode(48)字母异位词分组
摘要:本文介绍了如何将字符串数组中的字母异位词分组的问题。通过使用哈希表存储排序后的字符串作为键,原始字符串列表作为值,实现了高效的分组。文章详细分析了解题思路和复杂度(时间复杂度O(nk log k),空间复杂度O(nk)),并提供了C语言实现代码。该方法适用于处理包含小写字母的字符串数组,能够有效地将字母异位词归为一组输出。通过此类练习,可以提升对哈希表和字符串处理的应用能力。
2025-10-25 19:54:00
468
1
原创 代码训练LeetCode(47)生命游戏
这篇文章介绍了如何实现康威的“生命游戏”算法。生命游戏是一个二维细胞自动机,每个细胞的生死由周围8个邻居的状态决定。作者通过分析问题,提出创建辅助数组来存储中间状态,避免直接修改原数组影响后续判断。代码实现包括复制原始状态、遍历每个细胞计算活邻居数、应用生存规则更新状态。这种方法保证了状态更新的同步性,同时兼顾了空间效率。该问题训练了多维数组操作和复杂逻辑实现能力,是提升编程技巧的经典案例。
2025-08-10 18:43:26
1151
8
原创 Libevent(5)之使用教程(4)工具
Author: Once Day Date: 2025年8月3日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…
2025-08-03 12:14:37
1939
37
原创 Libevent(4)之使用教程(3)配置
本文介绍了Libevent事件库中事件配置的基本概念和使用方法。主要内容包括: 事件的生命周期:从初始化、待处理到活跃状态的转换过程,以及持久化事件的特性。 事件构造:使用event_new()函数创建事件对象,需要指定事件基础、文件描述符、触发标志、回调函数和参数。 事件标志:详细说明了EV_TIMEOUT、EV_READ、EV_WRITE等标志的作用和使用场景。 持久化事件:解释了EV_PERSIST标志如何使事件在触发后保持待处理状态,以及超时重置机制。 回调参数传递:介绍如何使用event_self
2025-07-27 15:39:32
1662
33
原创 Libevent(3)之使用教程(2)创建事件
本文介绍了Libevent库中event_base的创建和配置方法。主要内容包括:使用event_base_new()创建默认event_base;通过event_config结构体进行更精确的配置,包括禁用特定后端方法、设置功能要求和运行时标志;以及多CPU环境下的优化提示。文章详细说明了各种配置选项的含义和使用场景,并指出配置不满足时可能返回NULL的情况。这些内容为使用Libevent进行高效网络编程提供了基础支持。
2025-07-19 14:59:13
1897
26
原创 代码训练LeetCode(46)旋转图像
摘要: 本文探讨了LeetCode矩阵置零问题,要求将矩阵中0元素所在行列全部置零,且需原地操作。分析采用两次遍历策略:首次标记需置零的行列,第二次执行置零操作。示例代码使用两个一维数组存储标记,空间复杂度O(m+n),时间复杂度O(m*n)。该方案在限制条件下实现高效处理,适用于类似矩阵操作场景,强调优化空间使用的重要性。
2025-07-12 22:01:00
453
5
原创 代码训练LeetCode(45)旋转图像
摘要: 本文探讨了如何原地旋转n×n矩阵90度的问题。通过分析旋转规律,提出先转置矩阵再反转每行的解决方案。以3×3矩阵为例展示了操作步骤,最终实现的空间复杂度为O(1),时间复杂度为O(n²)。代码通过双重循环完成转置和行反转操作,强调了对矩阵操作的理解和原地修改技巧的重要性。这类问题有助于提升对数组处理能力和编程技巧的掌握。
2025-07-12 21:59:35
378
1
原创 代码训练LeetCode(44)螺旋矩阵
这个问题考察了对矩阵的遍历操作,特别是在不同的遍历顺序下如何有效处理边界条件。通过这种类型的问题,可以加强对数组操作和循环控制的理解。为了提升编程能力,建议多练习类似的矩阵操作问题,这有助于提高对多维数组处理的熟练度和对循环控制逻辑的把握。
2025-07-02 21:59:32
722
4
原创 代码训练LeetCode(43)有效的数独
这个题目考察了数组的使用、布尔逻辑及简单的算法思维。通过这类问题,可以增强对基本数据结构的理解和操作能力。要提升编程能力,建议多练习类似的逻辑判断和数组操作题目,以锻炼思维和编程技巧。
2025-07-02 21:58:14
1028
2
原创 libevent(2)之使用教程(1)介绍
Libevent 是用于开发快速可移植非阻塞 IO 程序的库,其设计目标包括:使用 Libevent 编写的程序应能在所有 Libevent 支持的平台上运行。即便在没有理想非阻塞 IO 实现的情况下,Libevent 也应支持次优方案,确保程序能在受限环境中运行。Libevent 会尝试在各平台上使用可用的最快非阻塞 IO 实现,且尽量不引入过多开销。Libevent 的设计即使在程序需要管理数万个活跃套接字时也能良好工作。
2025-06-29 13:41:58
1459
35
原创 代码训练LeetCode(42)串联所有单词的子串
题目要求我们找出所有可能的“串联子串”的起始索引。这些串联子串是由给定数组 `words` 中的所有字符串以任意顺序排列连接形成的。所有 `words` 中的字符串长度都是相同的。
2025-06-28 12:38:17
976
7
原创 代码训练LeetCode(41)无重复字符的最长子串
这个题目要求我们找出给定字符串中最长的不含重复字符的子串,并返回这个子串的长度。字符串可能由英文字母、数字、符号和空格组成。为了解决这个问题,我们可以使用滑动窗口的方法。滑动窗口是一种可以将嵌套的循环问题转换为单循环问题,从而降低时间复杂度的技术。具体到这个问题,我们可以定义两个指针,一个指向子串的开始位置,另一个随着遍历逐步向后移动,从而形成一个窗口。我们还需要一个数据结构来存储窗口内的字符,以快速判断字符是否重复,通常使用哈希表实现。
2025-06-28 12:37:24
616
3
原创 libevent(1)之基础概述
libevent是一个功能强大的跨平台事件驱动库,在高性能网络编程领域有着广泛的应用。它最初由Niels Provos等人开发,最早可以追溯到2000年。经过多年的发展演进,目前已经成为了业内公认的优秀开源项目之一。作为一个专注于事件驱动和异步I/O的编程库,libevent帮助开发者以一种高效而统一的方式处理各种类型的事件,比如网络I/O、定时器、信号等。它能够自动利用操作系统提供的最佳I/O多路复用机制,如Linux上的epoll、BSD上的kqueue等,从而实现了可移植性和高性能。
2025-06-24 22:07:44
1620
26
原创 代码训练LeetCode(40)长度最小的子数组
这个问题要求我们在一个由正整数构成的数组中找到总和大于等于给定值 `target` 的最短子数组,并返回这个子数组的长度。如果没有这样的子数组,我们需要返回0。我们可以使用**滑动窗口**的方法来解决这个问题。滑动窗口是一种用于处理数组/列表中元素的连续问题的有效方法。基本思想是,保持两个指针,表示当前的窗口的开始和结束位置,并根据当前窗口的值来调整指针,直到找到满足条件的窗口。
2025-06-24 22:01:03
456
2
原创 代码训练LeetCode(39)三数之和
题目要求在一个整数数组 `nums` 中找出所有唯一的三元组 `[nums[i], nums[j], nums[k]]`,使得 `i != j`、`i != k`、`j != k`,并且这三个数的和等于0。解决这个问题的一个有效方法是使用**排序**和**双指针**技术。首先,对数组进行排序,然后使用一个外层循环遍历数组,对于外层循环中选定的每个元素,使用两个指针分别指向当前元素后面的开始和数组的末尾,通过移动这两个指针来寻找和为0的三元组。
2025-06-24 21:59:55
916
原创 代码训练LeetCode(38)盛最多水的容器
这道题目其实是一个非常经典的问题,在算法中称为“盛最多水的容器”。给定一个数组 `height`,数组中的每个元素代表垂直线的高度,数组的索引表示垂直线的位置。我们需要找到两根线,这两根线与 x 轴形成的容器可以容纳最大量的水。一个直观的方法是使用双重循环枚举所有可能的线对,计算它们构成的容器的容积,然后找出最大值。但这种方法的时间复杂度是 O(n^2),对于较大的 n 来说效率不高。
2025-06-22 21:54:18
1018
1
原创 代码训练LeetCode(37)两数之和
给定一个已经按非递减顺序排列的整数数组 `numbers`,我们需要找到两个数,它们的和正好等于给定的目标数 `target`。返回这两个数的下标(从1开始计数),确保第一个下标小于第二个下标。题目保证有唯一解,并且不允许重复使用相同的元素。
2025-06-22 21:51:42
928
原创 代码训练LeetCode(36)判断子序列
本题要求判断一个字符串 s 是否是另一个字符串 t 的子序列。子序列的定义是在不改变字符顺序的情况下,可以通过删除一些字符(或不删除)从 t 中得到 s。
2025-06-17 23:02:51
1018
8
原创 代码训练LeetCode(35)验证回文串
我们需要判断一个给定的字符串 `s` 是否是回文串。一个字符串如果忽略大小写、只考虑字母和数字,并且前后读都一样,那么它就是回文串。
2025-06-17 23:01:48
413
1
原创 RFC4291-IPv6地址架构
本规范定义了 IPv6(互联网协议第 6 版)的编址架构。文档内容包括 IPv6 编址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和多播地址的定义,以及 IPv6 节点的必备地址。本文档替代了 RFC 3513《IPv6 编址架构》。
2025-06-15 15:24:48
2212
51
原创 代码训练LeetCode(34)文本左右对齐
这道题目要求我们将一组单词根据指定的宽度 `maxWidth` 进行左右对齐的排版。具体要求如下:- 每行尽可能多地放置单词,但不能超过 `maxWidth`。- 单词间的空格要尽量均匀分布。如果不能均匀分配,则左侧空格多于右侧。- 最后一行单词左对齐,单词间只有一个空格,右侧填充空格至 `maxWidth`。
2025-06-13 22:50:12
1018
1
原创 代码训练LeetCode(33)字符串首次匹配
这个问题要求我们在一个字符串(haystack)中寻找另一个字符串(needle)的首次出现位置,并返回其索引。如果不存在,返回-1。这是一个经典的字符串搜索问题,常见于文本编辑器的查找功能中。
2025-06-13 22:46:27
1230
原创 代码训练LeetCode(32)Z字形变换
本题要求将给定的字符串 `s` 按照 `Z` 字形排列,并按行读取形成一个新的字符串。当 `numRows` 为 1 或者 `numRows` 大于等于字符串长度时,`Z` 字形排列实际上不会改变字符串顺序。这是一个常见的字符串处理问题,涉及到字符串的遍历和重新组织。
2025-06-12 21:42:08
772
1
原创 代码训练LeetCode(31)反转字符串中的单词
这个题目要求我们接收一个字符串 `s`,然后反转其中的单词顺序。需要特别注意的是:1. 单词是由非空格字符组成,单词之间可能有一个或多个空格分隔。2. 结果字符串中单词之间只能有一个空格,并且不能有前导空格和尾随空格。
2025-06-12 21:40:53
924
原创 代码训练LeetCode(30)最长公共前缀
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。
2025-06-11 20:44:20
315
2
原创 代码训练LeetCode(29)最后一个单词的长度
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。
2025-06-11 20:42:15
441
原创 代码训练LeetCode(28)罗马数字
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。
2025-06-10 21:55:52
982
原创 代码训练LeetCode(27)接雨水
本题目要求将一个给定的罗马数字字符串转换为对应的整数值。罗马数字使用七个基本符号(I, V, X, L, C, D, M)进行表示,不同的符号组合表示不同的数值,而且有特定的规则来表示特定的数值,如 IV 表示 4,IX 表示 9 等。罗马数字是由七种基本符号构成,每种符号对应一个基本的数值。通常情况下,小的数字放在大的数字右边,表示这些值的累加。然而,如果小的数字放在大的数字左边,则表示大的数减去小的数。这种特例仅限于几种特定的组合。
2025-06-10 21:54:50
1299
1
Autotool Tutorial(epita.fr) - Autorools使用教程PDF文档
2023-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅