48、互联网新闻服务器INN与NNTP的使用与配置指南

互联网新闻服务器INN与NNTP的使用与配置指南

1. NNTP访问与授权

NNTP(网络新闻传输协议)是互联网上传输新闻文章的常用协议。在使用NNTP时, nntp_access 文件用于控制不同主机的访问权限。以下是一个示例 nntp_access 文件:

#
# by default, anyone may transfer news, but not read or post
default
xfer
no
#
# public.vbrew.com offers public access via modem. We allow
# them to read and post to any but the local.* groups
public.vbrew.com
read
post
!local
#
# all other hosts at the brewery may read and post
*.vbrew.com
read
post

在这个文件中, default 表示默认设置, xfer 表示传输权限, no 表示不允许默认用户传输新闻。对于 public.vbrew.com ,允许其读取和发布新闻,但不能访问以 local. 开头的新闻组。而所有以 .vbrew.com 结尾的主机都可以读取和发布新闻。

NNTP授权方面, nntpd 守护进程提供了一个简单的授权方案。如果在 nntp_access 文件中使用大写的访问令牌, nntpd 会要求客户端进行相应操作的授权。例如,当指定权限为 Xfer XFER 时,客户端必须通过授权才能将文章传输到你的站点。授权过程通过新的NNTP命令 AUTHINFO 实现,客户端使用该命令向NNTP服务器传输用户名和密码, nntpd 会将其与 /etc/passwd 数据库进行比对,并验证用户是否属于 nntp 组。不过,当前的NNTP授权实现仅为实验性的,只能与普通风格的密码数据库配合使用,不支持影子密码。如果你从源代码编译并安装了PAM包,更改密码检查相对简单。

2. nntpd与C News的交互

nntpd 接收到一篇文章时,它需要将其传递给新闻子系统。根据文章是通过 IHAVE 还是 POST 命令接收的,文章会分别交给 rnews inews 处理。你也可以在编译时进行配置,将传入的文章批量处理,并将结果批次移动到 /var/spool/news/in.coming ,由 relaynews 在下一次队列运行时拾取。

nntpd 需要访问历史文件才能正确执行 ihave/sendme 协议。编译时,必须确保历史文件的路径设置正确。如果你使用C News,要保证C News和 nntpd 对历史文件的格式达成一致。C News使用 dbm 哈希函数来访问历史文件,但 dbm 库有多种不同且略有不兼容的实现。如果C News链接的 dbm 库与标准 libc 中的不同,你也需要将 nntpd 与该库链接。

nntpd 和C News不一致时,系统日志中可能会出现 nntpd 无法正确打开文件的错误消息,或者你可能会看到通过NNTP接收的重复文章。测试新闻传输是否故障的一个好方法是从新闻池区域选择一篇文章,通过 telnet 连接到NNTP端口,并将文章提供给 nntpd ,示例如下:

$ telnet localhost nntp
Trying 127.0.0.1...
Connected to localhost
Escape characters is '^ ]'.
201 vstout NNTP[auth] server version 1.5.11t (16 November 1991) ready at
Sun Feb 6 16:02:32 1194 (no posting)
IHAVE msg@id435 Got it.
QUIT

如果收到 Got it 消息,说明 nntpd 已经有这篇文章;如果收到 335 Ok 消息,则表示历史文件查找失败。可以通过检查系统日志来查看具体问题, nntpd 会将各种消息记录到系统日志的守护进程设施中。不兼容的 dbm 库通常会表现为 dbminit 失败的消息。

3. INN概述

INN(Internet News Daemon)是目前最流行的网络新闻服务器之一,具有极高的灵活性,适用于除最小型新闻站点之外的所有站点,并且扩展性良好,适合大型新闻服务器配置。

INN的核心程序是 innd 守护进程,它的任务是处理所有传入的文章,将其本地存储,并在需要时将其传递给任何传出的新闻源。 innd 在启动时开始运行,并作为后台进程持续运行。作为守护进程运行可以提高性能,因为它只需在启动时读取一次状态文件。根据新闻源的流量,某些文件(如包含所有最近处理文章列表的历史文件)的大小可能从几兆字节到几十兆字节不等。

INN的另一个重要特性是任何时候都只有一个 innd 实例在运行,这对性能非常有益,因为守护进程可以处理所有文章,而不必担心与同时在新闻池中搜索的其他 innd 副本同步其内部状态。然而,这种选择影响了新闻系统的整体设计。由于尽快处理传入新闻非常重要,因此服务器不应被诸如为通过NNTP访问新闻池的新闻阅读器提供服务或解压缩通过UUCP到达的新闻批次等日常任务所占用。因此,这些任务已从主服务器中分离出来,并在单独的支持程序中实现。

如今,NNTP是传输新闻文章最常见的方式, innd 不直接支持其他方式。这意味着 innd 在TCP套接字(端口119)上监听连接,并使用 ihave 协议接受新闻文章。通过非NNTP传输方式到达的文章通过另一个进程间接支持,该进程接受文章并通过NNTP将其转发给 innd 。例如,通过UUCP链接传入的新闻批次传统上由 rnews 程序处理,INN的 rnews 会在必要时解压缩批次,并将其拆分为单个文章,然后逐个提供给 innd

4. INN的文章处理流程

innd 接收到一篇文章时,它首先在历史文件中查找其消息ID。重复的文章将被丢弃,并且可以选择记录其出现情况。对于太旧或缺少某些必需标题字段(如 Subject: )的文章也是如此。如果 innd 认为文章可以接受,它会查看 Newsgroups: 标题行,以确定文章发布到了哪些新闻组。如果这些新闻组中的一个或多个在 active 文件中找到,则文章将被存储到磁盘;否则,它将被存储到特殊组 junk 中。

单个文章存储在 /var/spool/news (也称为新闻池)下,每个新闻组都有一个单独的目录,其中每篇文章都存储在一个单独的文件中。文件名是连续的数字,例如, comp.risks 中的一篇文章可能存储为 comp/risks/217 。当 innd 发现要存储文章的目录不存在时,它会自动创建该目录。

除了本地存储文章外,你可能还希望将其传递给传出的新闻源,这由 newsfeeds 文件控制,该文件列出了所有下游站点以及应提供给它们的新闻组。

innd 的接收端一样,传出新闻的处理也由单个接口处理。 innd 不自己进行所有特定于传输的处理,而是依赖各种后端来管理文章向其他新闻服务器的传输。传出设施统称为通道,根据其用途,通道可以具有不同的属性,这些属性决定了 innd 向其传递的确切信息。

对于传出的NNTP新闻源,例如, innd 可能在启动时派生 innxmit 程序,并为应通过该新闻源发送的每篇文章将其消息ID、大小和文件名传递给 innxmit 的标准输入。对于传出的UUCP新闻源,它可能将文章的大小和文件名写入一个特殊的日志文件,另一个进程会定期读取该文件,以创建批次并将其排队到UUCP子系统。

此外,还有一些不是严格意义上传出新闻源的通道类型,例如用于存档某些新闻组或生成概述信息。概述信息旨在帮助新闻阅读器更有效地对文章进行线程化处理。旧风格的新闻阅读器必须单独扫描所有文章,以获取线程化所需的标题信息,这会给服务器机器带来巨大压力,尤其是在使用NNTP时,而且速度非常慢。INN的概述机制通过为每个新闻组在单独的文件(称为 .overview )中预先记录所有相关标题来缓解这个问题。新闻阅读器可以直接从新闻池目录中读取该信息,也可以在通过NNTP连接时使用 XOVER 命令获取该信息。INN让 innd 守护进程将所有文章提供给 overchan 命令,该命令通过通道与守护进程相连。

5. 新闻阅读器与INN的交互

运行在与服务器同一台机器上(或通过NFS挂载了服务器新闻池的)新闻阅读器可以直接从新闻池中读取文章。要发布用户撰写的文章,它们会调用 inews 程序,该程序会添加任何缺失的标题字段,并通过NNTP将文章转发给守护进程。

新闻阅读器也可以通过NNTP远程访问服务器。这种类型的连接与基于NNTP的新闻源处理方式不同,以避免占用守护进程。每当新闻阅读器连接到NNTP服务器时, innd 会派生一个名为 nnrpd 的单独程序,该程序处理会话,而 innd 则返回处理更重要的事情(例如接收传入的新闻)。 innd 进程通过NNTP协议来区分传入的新闻源和连接的新闻阅读器。NNTP协议要求基于NNTP的新闻阅读器在连接到服务器后发出 mode reader 命令,当服务器收到此命令时,它会启动 nnrpd 进程,将连接交给它,并返回监听来自另一个新闻服务器的连接。曾经有至少一个基于DOS的新闻阅读器没有配置为执行此操作,因此在与INN通信时会失败,因为如果 innd 不知道连接来自新闻阅读器,它本身不识别用于读取新闻的任何命令。

6. INN的安装与配置

在深入了解INN的配置之前,先介绍其安装。即使你从各种Linux发行版中安装了INN,也建议阅读这部分内容,因为它包含一些关于安全性和兼容性的提示。

Linux发行版在相当长的一段时间内包含了INN - 1.4sec版本,但该版本存在两个微妙的安全问题。现代版本没有这些问题,大多数发行版包含INN 2或更高版本的预编译Linux二进制文件。

如果你愿意,也可以自己构建INN。你可以从 ftp.isc.org /isc/inn/ 目录获取源代码。构建INN需要编辑一个配置文件,该文件告诉INN有关操作系统的一些详细信息,并且某些功能可能需要对源代码进行一些小的修改。编译包本身相当简单,有一个名为 BUILD 的脚本会引导你完成整个过程,源代码中还包含了关于如何安装和配置INN的详细文档。

安装所有二进制文件后,可能需要进行一些手动调整,以使INN与可能想要访问其 rnews inews 程序的其他应用程序兼容。例如,UUCP期望在 /usr/bin /bin 中找到 rnews 程序,而INN默认将其安装在 /usr/lib/bin 中。因此,要确保 /usr/lib/bin/ 在默认搜索路径中,或者有符号链接指向 rnews inews 命令的实际位置。

7. INN的基本配置

INN正常运行需要一个有效的网络设置,即使在独立主机上运行也是如此。因此,在运行INN时,内核必须支持TCP/IP网络,并且需要按照相关说明设置回环接口。

接下来,必须确保 innd 在启动时启动。默认的INN安装在 /etc/news/ 目录中提供了一个名为 boot 的脚本文件。如果你的发行版使用SystemV风格的 init 包,只需从 /etc/init.d/inn 文件创建一个符号链接指向 /etc/news/boot ;对于其他类型的 init ,必须确保 /etc/news/boot 从某个 rc 脚本中执行。由于INN需要网络支持,因此启动脚本应在网络接口配置完成后运行。

8. INN的配置文件

INN的所有配置文件都位于 /etc/news 目录中。INN 2版本对配置文件进行了一些更改,下面将详细介绍这些文件。

8.1 inn.conf文件

inn.conf 是INN的主要配置文件,它决定了你的机器在Usenet上的名称。INN 2版本允许在该文件中配置大量参数,幸运的是,大多数参数都有适合大多数站点的默认值。 inn.conf(5) 文件详细列出了所有参数,如果遇到问题,应仔细阅读该文件。

以下是一个简单的 inn.conf 示例:

# Sample inn.conf for the Virtual Brewery
server:
vlager.vbrew.com
domain:
vbrew.com
fromhost:
vbrew.com
pathhost:
news.vbrew.com
organization:
The Virtual Brewery
mta:
/usr/sbin/sendmail -oi %s
moderatormailer: %s@uunet.uu.net
#
# Paths to INN components and files.
#
pathnews:
/usr/lib/news
pathbin:
/usr/lib/news/bin
pathfilter:
/usr/lib/news/bin/filter
pathcontrol:
/usr/lib/news/bin/control
pathdb:
/var/lib/news
pathetc:
/etc/news
pathrun:
/var/run/news
pathlog:
/var/log/news
pathhttp:
/var/log/news
pathtmp:
/var/tmp
pathspool:
/var/spool/news
patharticles:
/var/spool/news/articles
pathoverview:
/var/spool/news/overview
pathoutgoing:
/var/spool/news/outgoing
pathincoming:
/var/spool/news/incoming
patharchive:
/var/spool/news/archive
pathuniover:
/var/spool/news/uniover
overviewname:
.overview
  • server: 行告诉 rnews inews 程序在传递文章时应联系的主机,这是绝对关键的,因为要将文章传递给 innd ,它们必须与服务器建立NNTP连接。
  • domain: 关键字应指定主机的完全限定域名的域名部分。一些程序必须查找主机的完全限定域名,如果解析器库只返回未限定的主机名,则会将 domain 属性中给出的名称附加到它后面。
  • fromhost: 行定义了 inews 在为本地用户发布的文章添加 From: 行时将使用的主机名。大多数新闻阅读器在撰写对文章作者的回复邮件时使用 From: 字段。如果省略该字段,它将默认为新闻主机的完全限定域名,但这并不总是最佳选择。例如,如果新闻和邮件由两个不同的主机处理,则应在 fromhost 语句后提供邮件主机的完全限定域名。
  • pathhost: 行定义了INN在收到文章时要添加到 Path: 标题字段的主机名。在大多数情况下,你可能希望使用新闻服务器的完全限定域名,因为这是默认值,所以可以省略该字段。但在某些情况下,可能希望使用通用名称,如 news.vbrew.com ,以便在需要时轻松将新闻系统移动到不同的主机。
  • organization: 语句允许你配置 inews 将在本地用户发布的文章的 Organization: 行中放置的文本。正式情况下,应在此处放置组织的描述或组织的全名。如果不想这么正式,有幽默感的组织可以在这里展示一些有趣的内容。
  • mta: 指定了用于发布版主消息的邮件传输代理的路径名, %s 将被版主的电子邮件地址替换。
  • moderatormailer: 定义了用户尝试发布到受版主管理的新闻组时使用的默认地址。每个新闻组的版主地址列表通常保存在一个单独的文件中,但很难跟踪所有这些地址。因此, moderatormailer 条目作为最后手段被参考,如果定义了该条目, inews 会将 %s 字符串替换为(略有转换的)新闻组名称,并将整个文章发送到该地址。

文件的其余部分指定了INN组件和文件的路径。如果从包中安装了INN,这些路径应该已经为你配置好了;如果从源代码安装,则需要确保它们反映了INN的安装位置。

8.2 active和newsgroups文件

active newsgroups 文件用于存储和描述新闻服务器托管的新闻组。它们列出了我们感兴趣接收和发布文章的新闻组,以及关于它们的管理信息。这些文件位于 /var/lib/news/ 目录中。

active 文件确定了服务器支持哪些新闻组,其语法很简单。 active 文件中的每一行有四个由空格分隔的字段:
| 字段 | 说明 |
| — | — |
| name | 新闻组的名称 |
| himark | 该新闻组中文章使用的最高编号 |
| lomark | 该新闻组中使用的最低活动编号 |
| flags | 标志位,可能包含特定的值 |

例如,对于一个新创建的新闻组, himark lomark 都为0,因为没有文章。如果发布了5篇文章,它们将编号为1到5,此时 himark 将等于5, lomark 将等于1。如果文章5被取消, himark 将保持在5,以确保该文章编号不会被重新分配, lomark 将保持在1。如果取消文章1, himark 将保持不变,但 lomark 将变为2。如果再发布一篇新文章,它将被分配文章编号6,因此 himark 将变为6,而 lomark 保持在2。这种机制允许我们轻松为新文章分配唯一的文章编号,并计算该组中大约有多少活动文章: himark - lomark

flags 字段可能包含以下值之一:
- 用于表示新闻组的不同属性和状态。

通过合理配置这些文件,可以有效地管理新闻组,为用户提供良好的新闻阅读和发布体验。在实际使用中,还需要根据具体需求对INN进行进一步的优化和调整。例如,可以根据新闻流量调整历史文件的存储策略,或者根据不同的网络环境配置传出新闻源的传输方式。同时,定期检查系统日志,及时发现和解决可能出现的问题,确保INN服务器的稳定运行。

总之,INN是一个功能强大且灵活的网络新闻服务器,通过深入了解其各个组件和配置文件,可以根据不同的应用场景构建出高效、稳定的新闻系统。无论是小型的内部新闻站点还是大型的公共新闻服务器,INN都能提供可靠的支持。

互联网新闻服务器INN与NNTP的使用与配置指南

9. 新闻组的管理与配置

新闻管理员可以通过 active newsgroups 文件控制用户对新闻组的访问。下面详细说明如何管理和配置这些新闻组。

9.1 新闻组的添加与删除

要添加一个新的新闻组,需要在 active 文件中添加一行,指定新闻组的名称、初始的 himark lomark 值(通常为 0)以及相应的 flags 。例如,要添加一个名为 test.group 的新闻组,可以在 active 文件中添加如下行:

test.group 0 0 <flags>

其中 <flags> 需要根据新闻组的具体属性进行设置。

如果要删除一个新闻组,只需从 active 文件中删除对应的行。但需要注意的是,删除新闻组后,该新闻组下的所有文章并不会自动删除,需要手动清理相关的文件。

9.2 新闻组的属性设置

flags 字段用于设置新闻组的各种属性,常见的属性设置如下:
| 标志 | 说明 |
| — | — |
| m | 表示该新闻组是受版主管理的,用户发布的文章需要经过版主审核才能发布 |
| y | 表示该新闻组是活动的,用户可以正常访问和发布文章 |
| n | 表示该新闻组是非活动的,用户不能访问和发布文章 |

例如,如果要将 test.group 设置为受版主管理的活动新闻组,可以将 flags 设置为 my

test.group 0 0 my
10. 新闻源的配置

新闻源的配置主要通过 newsfeeds 文件来完成,该文件列出了所有下游站点以及应提供给它们的新闻组。以下是一个简单的 newsfeeds 文件示例:

# 下游站点1
news.site1.com comp.* sci.*
# 下游站点2
news.site2.com misc.*

在这个示例中, news.site1.com 会接收到所有以 comp. sci. 开头的新闻组的文章,而 news.site2.com 会接收到所有以 misc. 开头的新闻组的文章。

配置新闻源时,需要注意以下几点:
- 新闻组选择 :根据下游站点的需求,合理选择要提供的新闻组。可以使用通配符(如 * )来指定一组新闻组。
- 权限控制 :确保只有授权的下游站点才能接收新闻文章。可以通过 nntp_access 文件来控制不同站点的访问权限。

11. 概述信息的生成与使用

概述信息对于新闻阅读器非常重要,它可以帮助新闻阅读器更高效地对文章进行线程化处理。INN 通过 overchan 命令来生成概述信息。

生成概述信息的流程如下:

graph LR
    A[innd守护进程接收到文章] --> B{文章是否可接受}
    B -- 是 --> C[将文章提供给overchan命令]
    C --> D[overchan命令生成概述信息]
    D --> E[将概述信息存储到.overview文件]
    B -- 否 --> F[丢弃文章]

新闻阅读器可以通过以下两种方式获取概述信息:
- 直接读取 :直接从新闻池目录中的 .overview 文件中读取概述信息。
- 使用 XOVER 命令 :在通过 NNTP 连接到服务器时,使用 XOVER 命令获取概述信息。

12. 安全性与性能优化

在使用 INN 时,安全性和性能是两个重要的方面。以下是一些安全性和性能优化的建议:

12.1 安全性优化
  • 更新版本 :使用最新版本的 INN,以避免已知的安全漏洞。如前面提到的,INN - 1.4sec 版本存在安全问题,应使用现代版本。
  • 权限控制 :通过 nntp_access 文件和 newsfeeds 文件严格控制不同主机和站点的访问权限,只允许授权的用户和站点访问和接收新闻文章。
  • 密码保护 :如果使用 NNTP 授权,确保使用强密码,并定期更换密码。同时,注意密码数据库的安全性,避免使用不支持的密码类型(如影子密码)。
12.2 性能优化
  • 硬件升级 :如果新闻流量较大,可以考虑升级服务器的硬件配置,如增加内存、提高 CPU 性能等。
  • 缓存设置 :合理设置缓存,减少对磁盘的频繁访问。例如,可以设置历史文件的缓存大小,提高文章查找的速度。
  • 并行处理 :对于一些可以并行处理的任务,如文章的解压缩和转发,可以使用多线程或多进程技术来提高处理效率。
13. 故障排查与日志分析

在使用 INN 过程中,可能会遇到各种问题,如文章重复、无法访问新闻组等。通过分析系统日志可以帮助我们快速定位和解决问题。

nntpd 会将各种消息记录到系统日志的守护进程设施中。常见的错误信息及解决方法如下:
| 错误信息 | 可能原因 | 解决方法 |
| — | — | — |
| dbminit failed | dbm 库不兼容 | 确保 C News 和 nntpd 链接的 dbm 库一致 |
| nntpd can not open it properly | 历史文件路径设置错误或文件权限问题 | 检查历史文件的路径设置,并确保 nntpd 有足够的权限访问该文件 |
| Article lookup failed | 历史文件损坏或文章编号冲突 | 检查历史文件是否损坏,如有必要,重建历史文件 |

通过定期检查系统日志,及时发现和解决问题,可以确保 INN 服务器的稳定运行。

14. 总结

INN 作为一款功能强大且灵活的网络新闻服务器,为互联网新闻的传输和管理提供了可靠的支持。通过合理配置 INN 的各个组件和文件,如 nntp_access inn.conf active newsfeeds 等,可以实现对新闻组的有效管理、新闻源的灵活配置以及概述信息的高效生成。

同时,在使用 INN 过程中,要注重安全性和性能优化,通过更新版本、权限控制、硬件升级等方式确保服务器的安全和高效运行。当遇到问题时,通过分析系统日志可以快速定位和解决问题。

无论是小型的内部新闻站点还是大型的公共新闻服务器,INN 都能根据不同的应用场景构建出高效、稳定的新闻系统,满足用户对新闻阅读和发布的需求。希望本文的介绍能帮助你更好地理解和使用 INN 服务器。

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析仿真验证相结合。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 本项目是本人参加BAT等其他公司电话、现场面试之后总结出来的针对Java面试的知识点或真题,每个点或题目都是在面试中被问过的。 除开知识点,一定要准备好以下套路: 个人介绍,需要准备一个1分钟的介绍,包括学习经历、工作经历、项目经历、个人优势、一句话总结。 一定要自己背得滚瓜烂熟,张口就来 抽象概念,当面试官问你是如何理解多线程的时候,你要知道从定义、来源、实现、问题、优化、应用方面系统性地回答 项目强化,至少知识点的比例是五五开,所以必须针对简历中的两个以上的项目,形成包括【架构和实现细节】,【正常流程和异常流程的处理】,【难点+坑+复盘优化】三位一体的组合拳 压力练习,面试的时候难免紧张,可能会严重影响发挥,通过平时多找机会参交流分享,或找人做压力面试来改善 表达练习,表达能力非常影响在面试中的表现,能否简练地将答案告诉面试官,可以通过给自己讲解的方式刻意练习 重点针对,面试官会针对简历提问,所以请针对简历上写的所有技术点进行重点准备 Java基础 JVM原理 集合 多线程 IO 问题排查 Web框架、数据库 Spring MySQL Redis 通用基础 操作系统 网络通信协议 排序算法 常用设计模式 从URL到看到网页的过程 分布式 CAP理论 锁 事务 消息队列 协调器 ID生成方式 一致性hash 限流 微服务 微服务介绍 服务发现 API网关 服务容错保护 服务配置中心 算法 数组-快速排序-第k大个数 数组-对撞指针-最大蓄水 数组-滑动窗口-最小连续子数组 数组-归并排序-合并有序数组 数组-顺时针打印矩形 数组-24点游戏 链表-链表反转-链表相加 链表-...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值