跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

Xapian: 一款 C++ 全文检索解决方案

Xapian 是一款高性能开源 C++ 全文检索库,支持中文分词、模糊查询及排序加权。适用于嵌入式系统及分布式场景。安装可通过 vcpkg 或源码编译,集成使用 CMake。核心功能涵盖索引创建、关键词检索、更新删除。相比 Lucene 和 Elasticsearch,Xapian 更轻量且易于嵌入。性能优化建议批量插入、启用压缩及内存缓存。常见问题包括未捕获异常导致崩溃、路径权限不足及锁冲突,需通过 try-catch 处理异常并检查文件路径与权限。

SparkGeek发布于 2026/3/22更新于 2026/6/231 浏览
Xapian: 一款 C++ 全文检索解决方案

1.简介

Xapian 是一款高性能开源全文检索库,支持中文分词、模糊查询、排序加权、范围检索等核心功能,适合嵌入式系统、分布式检索服务等场景,与 C++ 工程化工具(CMake/vcpkg)适配性优异。

它的特点有:

1.高性能:轻量且高效,适配低资源场景

1) 检索 / 索引效率优异

  • 毫秒级检索:基于倒排索引核心架构,单条关键词检索延迟低至毫秒级;支持内存缓存(DB_CACHE 选项),重复查询性能提升 50%+,百万级索引检索响应时间仍可控。
  • 批量索引优化:支持批量文档提交(commit() 事务),避免单条插入的 IO 开销,索引写入效率比单条操作提升 10 倍以上。
  • 低资源占用:核心库体积小(编译后仅数 MB),内存占用可控 —— 嵌入式场景可启用内存模式(inmemory_open()),无磁盘 IO,内存占用仅为索引数据的 1.2 倍左右;磁盘存储支持压缩(DB_COMPRESS),索引体积可减少 30%-50%。

2) 并发友好

  • 读操作天然支持多线程并发:只读数据库(DB_OPEN_READONLY)无锁冲突,适合'读多写少'的检索场景(如后台管理系统、嵌入式查询服务);
  • 写操作支持事务隔离:批量更新 / 插入通过事务提交,避免多线程写冲突,且支持回滚(未提交的事务不会影响读操作)。

2.功能完备:覆盖全文检索核心需求

1) 灵活的查询能力

  • 基础全文检索:支持关键词、短语、前缀匹配(如 title:C++);
  • 高级查询逻辑:布尔运算(AND/OR/NOT)、模糊查询(允许字符差异,如 索引~1 匹配'索引 / 引索')、范围检索(数值 / 字符串范围,如价格 100-1000);
  • 加权检索:可对关键词、字段(标题 / 内容)设置不同权重(如标题权重×2),精准控制检索结果相关性。

2) 精细化结果处理

  • 多维度排序:支持'相关性优先''属性排序 + 相关性'(如按浏览量 / 时间降序后再按相关性)、自定义排序规则;
  • 结果高亮:可高亮匹配的关键词,提升用户体验;
  • 结果过滤 / 分页:支持结果集过滤(如仅保留某类文档)、分页获取(get_mset(start, count)),避免全量加载。

3) 完整的索引生命周期管理

  • 支持索引的增 / 删 / 改 / 查:可按文档 ID 精准更新 / 删除,也可批量清理过期索引;
  • 索引紧凑化(compact()):清理索引碎片,降低磁盘占用,提升检索速度;
  • 元数据支持:可存储索引级元数据(如索引版本、创建时间),便于索引管理。

3.轻量级与跨平台:适配多环境部署

原生支持 Windows(x86/x64)、Linux(x64/ARM)、macOS、嵌入式 Linux(如树莓派、工业网关),编译仅依赖 C++11+ 标准库和 zlib(可选),无其他重型依赖。

4.可扩展性:适配多语言 / 定制化需求

1) 多语言分词扩展

默认支持英文 / 西文分词(按空格 / 标点拆分),可无缝集成第三方分词库(如 jieba 中文分词、SCWS 分词),解决中文 / 日文等非空格分隔语言的检索问题。

2) 存储扩展

  • 支持磁盘存储(默认)、内存存储(嵌入式实时场景)、只读 / 读写模式切换;
  • 分布式扩展:可通过'文档 ID 哈希分片 + 节点并行检索 + 结果聚合'实现分布式检索(无原生分布式,但轻量级扩展成本低)。

3) API 扩展

除 C++ 核心 API 外,提供 Python/Perl/PHP 等绑定(SWIG 封装),可跨语言调用;同时支持自定义评分函数、排序规则,满足个性化检索需求。

5.易用性:低学习成本,易上手

2.安装与集成

2.1.vcpkg 一键安装(推荐,自动解决依赖)

# Windows(x64) vcpkg install xapian:x64-windows
# Linux/macOS(x64) vcpkg install xapian:x64-linux
# 嵌入式 ARM 平台(如树莓派) vcpkg install xapian:arm-linux

安装后,vcpkg 会自动配置头文件、库文件路径,CMake 可直接查找。

2.2.源码编译(适合定制化 / 无网络环境)

依赖安装:

  • Windows:需安装 Visual Studio 2019+、CMake、zlib(vcpkg 安装:vcpkg install zlib)
  • Linux:sudo apt-get install g++ cmake zlib1g-dev libiconv-dev
  • macOS:brew install cmake zlib iconv

编译步骤:

git clone https://github.com/xapian/xapian.git
cd xapian && mkdir build && cd build
# 配置(指定安装路径、编译类型)
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local \
  # 安装路径(Linux/macOS)
  -DCMAKE_BUILD_TYPE=Release \
  # Release 模式(性能最优)
  -DENABLE_ZLIB=ON \
  # 启用压缩(减少索引体积)
  -DENABLE_ICONV=ON # 启用字符编码转换(中文支持)
# 编译安装(-j 后接 CPU 核心数,加速编译)
make -j$(nproc) && sudo make install # Linux/macOS
# Windows(Visual Studio 命令行)
cmake .. -G "Visual Studio 17 2022" -A x64
msbuild Xapian.sln /p:Configuration=Release
msbuild INSTALL.vcxproj /p:Configuration=Release

2.3.工程集成:CMake 配置(直接复用)

在你的 C++ 项目中,修改 CMakeLists.txt,快速集成 Xapian:

cmake_minimum_required(VERSION 3.15)
project(XapianTutorial)
set(CMAKE_CXX_STANDARD 17) # Xapian 要求 C++11+,推荐 17+
set(CMAKE_BUILD_TYPE Release)
# 1. 查找 Xapian 库(vcpkg 安装无需指定路径,源码编译需确保安装路径在 CMAKE_PREFIX_PATH 中)
find_package(Xapian REQUIRED)
if (Xapian_FOUND)
  message(STATUS "Xapian 找到:${Xapian_INCLUDE_DIRS}")
  message(STATUS "Xapian 库:${Xapian_LIBRARIES}")
endif()
# 2. 生成可执行文件,链接 Xapian
add_executable(xapian_demo main.cpp)
target_link_libraries(xapian_demo PRIVATE Xapian::Xapian)

3.核心功能实战

3.1.创建索引(文档入库)

核心 API:Xapian::WritableDatabase(写数据库)、Xapian::Document(文档对象)

#include <xapian.h>
#include <iostream>
#include <string>
using namespace std;

// 创建索引:将文档(标题 + 内容 + 属性)写入数据库
void create_index(const string& db_path) {
    try {
        // 1. 打开/创建数据库(DB_CREATE_OR_OPEN:不存在则创建,存在则追加)
        Xapian::WritableDatabase db(
            db_path,
            Xapian::DB_CREATE_OR_OPEN | Xapian::DB_COMPRESS // 启用索引压缩
        );
        // 2. 定义测试文档(实际场景可从文件/数据库读取)
        struct Doc {
            string doc_id; // 业务唯一 ID
            string title; // 文档标题
            string content; // 文档内容
            int views; // 附加属性(用于排序)
        };
        vector<Doc> docs = {
            {"1001", "C++ 并发编程实战", "std::thread 互斥锁 条件变量 原子操作", 5000},
            {"1002", "Boost.Asio 网络编程", "异步 IO TCP/UDP 定时器 信号处理", 3800},
            {"1003", "CMake 跨平台构建", "vcpkg 依赖管理 静态库/动态库 多目标编译", 2500}
        };
        // 3. 批量添加文档(批量操作比单条插入效率高 10 倍+)
        for (const auto& doc : docs) {
            Xapian::Document xdoc;
            // 设置文档原始数据(可存储完整内容,检索时读取)
            xdoc.set_data(doc.title + "\n" + doc.content);
            // 添加可检索的关键词(支持前缀标识,如 title:、content:)
            // 标题权重设为 2,内容权重设为 1(检索时标题匹配优先级更高)
            xdoc.add_term("title:" + doc.title, 2);
            xdoc.add_term("content:" + doc.content, 1);
            // 设置排序属性(第 0 个字段存储 views,用于后续按浏览量排序)
            xdoc.set_value(0, Xapian::sortable_serialise(doc.views));
            // 插入数据库(第二个参数是 Xapian 内部文档 ID,建议与业务 ID 关联)
            db.add_document(xdoc, stoul(doc.doc_id));
        }
        // 4. 提交事务(批量操作后必须提交,否则数据不生效)
        db.commit();
        cout << "索引创建成功!数据库路径:" << db_path << endl;
    } catch (const Xapian::Error& e) {
        cerr << "创建索引失败:" << e.get_msg() << endl;
        throw; // 向上抛出,便于上层处理
    }
}

int main() {
    const string db_path = "xapian_test_db";
    create_index(db_path);
    return 0;
}

3.2.关键词检索(基础 + 高级查询)

核心 API:Xapian::Database(读数据库)、Xapian::Enquire(查询器)、Xapian::Query(查询语句)

// 检索功能:支持关键词、模糊查询、布尔逻辑、排序
void search(const string& db_path, const string& query_str) {
    try {
        // 1. 打开只读数据库(DB_OPEN_READONLY:避免写锁冲突)
        Xapian::Database db(db_path, Xapian::DB_OPEN_READONLY | Xapian::DB_CACHE);
        Xapian::Enquire enquire(db);
        // 2. 构建查询语句(支持多种查询类型)
        Xapian::Query query;
        // 示例 1:精确关键词查询("并发" 和 "编程" 必须同时出现)
        // query = Xapian::Query(Xapian::Query::OP_AND, "并发", "编程");
        // 示例 2:模糊查询(允许 1 个字符错误,如 "编呈" 也能匹配 "编程")
        // query = Xapian::Query("编程~1");
        // 示例 3:布尔逻辑查询("C++" 或 "Boost",且包含 "编程")
        query = Xapian::Query(
            Xapian::Query::OP_AND,
            Xapian::Query(Xapian::Query::OP_OR, "C++", "Boost"),
            Xapian::Query("编程")
        );
        // 3. 设置查询器参数
        enquire.set_query(query);
        // 排序规则:先按 views 降序(第 0 个属性),再按相关性降序
        enquire.set_sort_by_value_then_relevance(0, true);
        // 结果过滤:只保留 views > 3000 的文档(可选)
        enquire.set_filter(Xapian::Query(Xapian::Query::OP_GT, 0, Xapian::sortable_serialise(3000)));
        // 4. 执行查询,获取前 10 条结果
        Xapian::MSet results = enquire.get_mset(0, 10);
        // 5. 输出结果
        cout << "查询关键词:" << query_str << endl;
        cout << "匹配到 " << results.size() << " 条结果(共 " << results.get_matches_estimated() << " 条):\n" << endl;
        for (const auto& item : results) {
            cout << "=====================================" << endl;
            cout << "业务 ID:" << item.get_docid() << endl;
            cout << "相关性:" << item.get_percent() << "%(满分 100%)" << endl;
            cout << "浏览量:" << Xapian::sortable_unserialise<int>(item.get_document().get_value(0)) << endl;
            cout << "内容:\n" << item.get_document().get_data() << endl;
        }
    } catch (const Xapian::Error& e) {
        cerr << "检索失败:" << e.get_msg() << endl;
        throw;
    }
}

// 在 main 函数中添加检索调用
int main() {
    const string db_path = "xapian_test_db";
    create_index(db_path);
    search(db_path, "C++ 或 Boost 且 编程"); // 对应上述查询逻辑
    return 0;
}

3.3.索引更新与删除

// 更新文档:根据业务 ID 修改文档内容或属性
void update_document(const string& db_path, const string& doc_id, const string& new_content) {
    try {
        Xapian::WritableDatabase db(db_path, Xapian::DB_OPEN_WRITE);
        Xapian::docid xapian_docid = stoul(doc_id);
        // 1. 获取原有文档(不存在则抛出异常)
        Xapian::Document xdoc = db.get_document(xapian_docid);
        // 2. 修改文档内容(示例:更新 content 并重新设置关键词)
        string old_data = xdoc.get_data();
        string new_data = old_data.substr(0, old_data.find("\n")) + "\n" + new_content;
        xdoc.set_data(new_data);
        // 3. 清除原有关键词,添加新关键词(可选,根据需求调整)
        xdoc.clear_terms();
        xdoc.add_term("title:" + old_data.substr(0, old_data.find("\n")), 2);
        xdoc.add_term("content:" + new_content, 1);
        // 4. 更新数据库
        db.replace_document(xapian_docid, xdoc);
        db.commit();
        cout << "文档 " << doc_id << " 更新成功!" << endl;
    } catch (const Xapian::Error& e) {
        cerr << "更新文档失败:" << e.get_msg() << endl;
        throw;
    }
}

// 删除文档:根据业务 ID 删除
void delete_document(const string& db_path, const string& doc_id) {
    try {
        Xapian::WritableDatabase db(db_path, Xapian::DB_OPEN_WRITE);
        Xapian::docid xapian_docid = stoul(doc_id);
        db.delete_document(xapian_docid);
        db.commit();
        cout << "文档 " << doc_id << " 删除成功!" << endl;
    } catch (const Xapian::Error& e) {
        cerr << "删除文档失败:" << e.get_msg() << endl;
        throw;
    }
}

// 在 main 函数中测试
int main() {
    const string db_path = "xapian_test_db";
    create_index(db_path);
    update_document(db_path, "1001", "std::thread 互斥锁 条件变量 原子操作 C++20 协程");
    delete_document(db_path, "1003");
    search(db_path, "C++"); // 验证更新/删除结果
    return 0;
}

4.对比同类工具的核心优势

对比维度XapianLucene(Java)ElasticsearchSQLite 全文检索
轻量级极高(MB 级,无依赖)中(需 JVM,百 MB 级)重(分布式,GB 级)低(集成于 SQLite)
嵌入式适配完美(内存模式 + ARM)不支持不支持较好,但功能有限
检索功能丰富度高(模糊 / 加权 / 范围)高极高(分布式能力)低(仅基础全文检索)
工程化集成易(CMake/vcpkg)中(Maven/Gradle)复杂(独立服务部署)

5.性能优化

1.索引优化

  • 批量插入:避免单条插入,累积一定数量文档后批量提交(db.commit()),减少 IO 开销。
  • 压缩索引:启用 Xapian::DB_COMPRESS 选项(创建数据库时),降低磁盘占用(适合嵌入式存储受限场景)。
  • 分词优化:集成中文分词库(如 jieba、SCWS),替换默认英文分词,提升中文检索精度(示例:将文档内容先分词再调用 add_term)。

2.检索优化

  • 内存缓存:使用 Xapian::Database::open() 时启用内存缓存(Xapian::DB_OPEN_READONLY | Xapian::DB_CACHE),重复查询性能提升 50%+。
  • 查询过滤:使用 enquire.set_filter() 过滤无关文档(如按时间范围、类别),减少结果集大小。
  • 异步查询:结合 Boost.Asio 实现异步检索,避免阻塞主线程(适合实时系统)。

3.嵌入式 / 分布式适配

  • 内存模式:使用 Xapian::inmemory_open() 创建内存数据库,无磁盘 IO,延迟低(适合嵌入式实时检索)。
  • 分片存储:分布式场景下,按文档 ID 哈希分片索引,各节点独立检索后聚合结果(提升并发处理能力)。

6.适用场景

  • 嵌入式系统:如工业网关、智能设备的本地检索(内存模式 + 低资源占用);
  • 轻量级单机检索服务:如后台管理系统、小型网站的全文搜索(无需分布式,部署成本低);
  • 定制化检索需求:需深度集成 C++ 项目,且要求灵活的分词 / 排序 / 加权规则(如结合 Jieba 实现中文检索);
  • 高性能读多写少场景:如文档知识库、日志检索(并发读优化 + 批量写效率)。

其核心短板是无原生分布式支持(需自行实现分片 / 聚合),若需大规模分布式检索,可优先考虑 Elasticsearch;但对于单机 / 嵌入式 / 轻量级场景,Xapian 是'性能 + 易用性 + 扩展性'的最优选择之一。

7.Xapian::WritableDatabase 用 Xapian::DB_CREATE_OR_OPEN 打开崩溃

Xapian 所有数据库操作失败都会抛出继承自 Xapian::Error 的异常,未捕获的异常会直接触发程序终止崩溃,这是 90% 以上此类问题的根因。

请先使用以下最小可测试代码,完整捕获异常,获取精准的错误信息,再针对性解决:

#include <xapian.h>
#include <iostream>
int main() {
    try {
        // 正确用法:DB_CREATE_OR_OPEN 是 Xapian 命名空间下的宏,注意大小写
        // 注意:路径请先使用纯英文、无特殊字符的本地路径测试
        Xapian::WritableDatabase db("./test_xapian_db", Xapian::DB_CREATE_OR_OPEN);
        std::cout << "数据库打开成功" << std::endl;
        // 显式关闭数据库,避免析构时抛出异常导致崩溃
        db.close();
    } catch (const Xapian::Error& e) {
        // 打印 Xapian 专属异常信息,精准定位问题
        std::cerr << "=== Xapian 异常详情 ===" << std::endl;
        std::cerr << "异常类型:" << e.get_type() << std::endl;
        std::cerr << "错误信息:" << e.get_msg() << std::endl;
        std::cerr << "完整描述:" << e.get_description() << std::endl;
        return 1;
    } catch (const std::exception& e) {
        std::cerr << "标准异常:" << e.what() << std::endl;
        return 1;
    } catch (...) {
        std::cerr << "未知异常,程序崩溃" << std::endl;
        return 1;
    }
    return 0;
}

打印日志如下:

文章配图

明显是创建目录失败,权限不足,经过调整创建目录,问题解决。

其它可能的原因分析:

1.未捕获异常导致程序直接终止(最常见)

  • 原因:C++ 中未被捕获的异常会直接调用 terminate 函数,触发程序崩溃,即使只是简单的路径不存在、锁冲突等可恢复错误。
  • 解决方案:所有 Xapian 相关操作(打开、写入、提交、关闭)必须包裹在 try-catch 块中,优先捕获 Xapian::Error 基类,确保所有异常都被处理。

2.路径不合法 / 父目录不存在 / 权限不足

  • 核心说明:根据 Xapian 官方文档,DB_CREATE_OR_OPEN只会自动创建路径的叶子目录,不会递归创建父目录。例如路径为 ./data/index/db,如果 ./data/index 目录不存在,会直接抛出异常,而非自动创建父目录。
  • 其他常见路径问题:
    • 程序对目标路径没有读写权限(Linux 无 w 权限、Windows 只读目录 / 系统保护目录);
    • 目标路径是一个已存在的普通文件,而非目录;
    • 路径使用了网络文件系统(NFS/SMB),锁机制不可靠,导致打开失败。
  • 解决方案:
    • 打开数据库前,先递归创建父目录(C++17 可使用 std::filesystem::create_directories,或系统 API/Boost 库);
    • 检查路径权限,确保程序有完整的读写权限;
    • 优先使用本地磁盘路径,避免网络共享目录;先用纯英文无特殊字符的路径测试,排除编码问题。

3.数据库排他锁冲突(DatabaseLockError)

  • 原因:Xapian 的 WritableDatabase 采用排他写锁设计,同一时间只允许一个进程 / 线程以写入模式打开同一个数据库。如果出现以下情况,会抛出锁异常:
    • 多进程 / 多线程同时用 WritableDatabase 打开同一个数据库路径;
    • 上一个程序异常退出,未正常释放锁文件,导致锁残留。
  • 解决方案:
    • 确保同一时间只有一个 WritableDatabase 实例打开同一个数据库,多线程 / 多进程写入必须加锁同步;
    • 若锁残留,先关闭所有相关程序,删除数据库目录下的 flintlock/glasslock 锁文件,再重新打开。

4.数据库文件损坏,打开时校验失败

  • 原因:之前的程序异常退出、断电、磁盘写满、内存不足等,导致数据库事务未正常提交,文件结构损坏;也可能是跨大版本 Xapian 打开不兼容的数据库格式。
  • 解决方案:
    • 先备份数据库目录,使用 Xapian 自带的 xapian-check 工具检查完整性:xapian-check 你的数据库路径;
    • 轻微损坏可使用 xapian-repair 工具修复,严重损坏只能删除重建数据库;
    • 确保编译链接的 Xapian 库版本,与创建数据库的版本一致,避免跨大版本不兼容。

5.编译链接 / ABI 不兼容导致内存崩溃

  • 原因:
    • 编译时使用的 Xapian 头文件版本,与运行时链接的库版本不一致,导致 ABI 不兼容;
    • Windows 下,程序的运行时库(MT/MD/MTd/MDd)与 Xapian 库编译时的选项不一致,导致内存分配 / 释放错误;
    • Linux 下系统自带的 Xapian 库与自行编译的版本冲突,符号链接错误。
  • 解决方案:
    • 确保头文件与链接库版本完全一致,优先从官方源码编译同一份 Xapian 库;
    • Windows 下严格对齐运行时库选项,禁止混用 Debug/Release、静态 / 动态运行时;
    • Linux 下使用 pkg-config --cflags --libs xapian-core 获取正确的编译链接参数。

6.其他高频导致崩溃的原因

  • 线程安全问题:WritableDatabase 实例不是线程安全的,多线程同时操作同一个实例会导致数据竞争、内存错误,直接崩溃。解决方案:单实例操作加互斥锁,或每个线程使用独立的数据库实例。
  • 析构函数抛出异常崩溃:若不主动调用 close(),WritableDatabase 的析构函数会自动关闭数据库,若关闭时出错(如磁盘满、提交失败),会在析构函数中抛出异常,直接触发程序终止。解决方案:显式调用 close() 并包裹在 try-catch 中,不依赖析构函数自动关闭。
  • 资源不足:磁盘剩余空间不足、Linux 下 inode 耗尽,导致数据库无法写入锁文件 / 元数据,抛出异常。解决方案:检查磁盘空间和 inode 使用情况,释放存储空间。

目录

  1. 2.安装与集成
  2. 2.1.vcpkg 一键安装(推荐,自动解决依赖)
  3. Windows(x64) vcpkg install xapian:x64-windows
  4. Linux/macOS(x64) vcpkg install xapian:x64-linux
  5. 嵌入式 ARM 平台(如树莓派) vcpkg install xapian:arm-linux
  6. 2.2.源码编译(适合定制化 / 无网络环境)
  7. 配置(指定安装路径、编译类型)
  8. 安装路径(Linux/macOS)
  9. Release 模式(性能最优)
  10. 启用压缩(减少索引体积)
  11. 编译安装(-j 后接 CPU 核心数,加速编译)
  12. Windows(Visual Studio 命令行)
  13. 2.3.工程集成:CMake 配置(直接复用)
  14. 1. 查找 Xapian 库(vcpkg 安装无需指定路径,源码编译需确保安装路径在 CMAKEPREFIXPATH 中)
  15. 2. 生成可执行文件,链接 Xapian
  16. 3.核心功能实战
  17. 3.1.创建索引(文档入库)
  18. 3.2.关键词检索(基础 + 高级查询)
  19. 3.3.索引更新与删除
  20. 4.对比同类工具的核心优势
  21. 5.性能优化
  22. 6.适用场景
  23. 7.Xapian::WritableDatabase 用 Xapian::DBCREATEOR_OPEN 打开崩溃
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 写作工具深度评测:9 大平台功能与价格对比
  • 基于 PSO 与 DWA 融合的无人机三维动态避障路径规划及 Matlab 实现
  • IntelliJ IDEA 下载、安装与配置入门指南
  • 稳定扩散 Stable Diffusion 秋叶整合包本地安装与使用指南
  • NVIDIA Jetson Orin Nano 8GB 开发套件评测:性能与 AI 应用分析
  • OpenClaw 多智能体路由实战:飞书多机器人配置指南
  • 低延迟高并发 EasyDSS 无人机 RTMP 高清推流直播技术剖析
  • 随机链表深拷贝:三步法详解与代码实现
  • ALVR 无线 VR 串流项目快速上手指南
  • Python 代码打包成可执行文件的六种主流方案及优缺点对比
  • Arduino BLDC 模糊逻辑避障控制机器人
  • GitHub Desktop 中文汉化方法:界面本地化配置指南
  • Jetson Orin NX 部署 Ollama 与 Llama 3.2
  • Flutter 三方库 flutter_cors 解决鸿蒙 Web 与混合开发跨域问题
  • 解决 IDEA 或 DataGrip 连接数据库问题:设置 JVM IPv4 参数
  • Linux 进程详解:从基础概念到实战操作
  • Agent 入门前置:大模型基础(开发向)
  • AI 大模型应用开发体系化学习路线与实战指南
  • 普通人如何利用 AI 大模型实现商业化变现
  • 7 款主流 AI 编程工具评测与对比

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online