向量库面试题

1. 基础概念(共15题)

1. 什么是向量数据库?它解决了什么问题?

向量数据库(Vector Database)是一种专门用于存储、索引和检索高维向量数据的数据库系统,通常用于处理非结构化数据的相似度搜索问题,如图像、文本、音频或视频的表示向量(embedding)。

传统数据库不适合用来进行高维向量之间的相似度搜索,而这是很多 AI 应用的核心需求,比如:

应用场景 需要解决的问题
文本检索(RAG) 找到与用户问题语义最相近的文档片段
图像检索 找到相似风格或内容的图片
推荐系统 为用户推荐兴趣相似的内容或产品
人脸识别 找到与某张人脸最相似的其他人脸图像
多模态搜索 用一句话检索一张对应的图像

这些都要求在一个海量的向量集合中快速找到“最相近”的向量,即最近邻搜索(Nearest Neighbor Search)

  1. 向量数据库和传统关系型数据库的最大区别是什么?

向量数据库与传统关系型数据库(如 MySQL、PostgreSQL)在设计目标、数据类型、查询方式和底层实现上存在本质区别。以下是它们最大的区别及核心对比:


最大区别:数据类型与查询方式

项目 向量数据库 关系型数据库
主要数据类型 高维向量(如 512 维、1024 维 float 数组) 表格结构化数据(字符串、数字、日期等)
查询目标 找出“相似”的向量(最近邻搜索) 精确匹配或范围查找(=、<、>、LIKE 等)
查询语义 相似度检索(Approximate Nearest Neighbor,ANN) 精确匹配查询(SQL 语句)

举例:

任务 向量数据库做的事 关系型数据库做的事
文本检索 给一个句子,找出语义最相似的文本段落 通过关键词或字段筛选满足条件的记录
图像搜索 上传一张猫的图片,找出最像猫的其他图片 不支持此类搜索
人脸识别 给定一个人脸向量,找出最相似的面孔 无法处理此类相似性问题

其他重要区别对比

维度 向量数据库 关系型数据库
核心算法 HNSW、IVF、PQ 等 ANN 算法 B+ 树、哈希索引等
典型用途 图像/文本/音频/多模态相似搜索、RAG、推荐系统、人脸识别 电商订单、用户表、财务数据、ERP 系统等
数据规模适应性 支持亿级高维向量搜索 适用于百万级结构化记录处理
查询语言 API 调用(部分支持 SQL-like) 标准 SQL
存储结构 向量+元数据(embedding + metadata) 结构化表格字段
一致性要求 允许近似查询(ANN)以换取性能 高一致性事务保障(ACID)

总结一句话:

向量数据库适合处理“模糊相似”的非结构化数据搜索问题,而关系型数据库适合处理“精确匹配”的结构化数据查询。


  1. 什么是向量?向量如何表达文本/图像/音频等数据?
  2. 高维向量与低维向量的特点有何不同?
  3. 什么是“相似性搜索”?它与精确匹配有何区别?
  4. 什么是向量空间模型(VSM)?
  5. 如何将文本数据转化为向量?
  6. 词向量和句向量的区别是什么?
  7. 什么是高维空间的“维度灾难”?
  8. 为什么常使用浮点型向量而非整数?
  9. 向量之间的相似性如何量化?
  10. 什么是稠密向量和稀疏向量?
  11. 向量数据库如何支持多模态数据?
  12. 向量数据库是否支持布尔查询或范围查询?
  13. 什么是“嵌入”(Embedding)?如何生成它?

2. 相似性搜索算法(共15题)

  1. 什么是K近邻(KNN)搜索?
  2. 什么是近似最近邻(ANN)搜索?优点是什么?
  3. 欧几里得距离的公式是什么?适用于哪些场景?
  4. 余弦相似度是如何计算的?适合什么场景?
  5. 点积(Dot Product)与余弦相似度有何联系?
  6. 曼哈顿距离和闵可夫斯基距离的区别?
  7. 如何在百万级向量中高效查找最相似的10个?
  8. 相似性搜索中如何使用批量查询(batch query)?
  9. 什么是Top-K搜索?如何提高其效率?
  10. 在文本检索中,余弦相似度是否总是优于L2?
  11. 向量标准化(normalize)对搜索结果有何影响?
  12. 如何评估相似性搜索结果的准确性(Recall@K等)?
  13. 什么是倒排索引与向量搜索的组合用法?
  14. ANN 与 Brute-force 检索的速度与准确率对比?
  15. 在多模态检索中如何设计相似性函数?

3. 索引结构(共15题)

  1. FAISS 中有哪些主要索引类型?
  2. 什么是 HNSW(Hierarchical Navigable Small World)?

33. IVF(Inverted File)索引是如何工作的?

1. **向量聚类**:首先将所有向量通过聚类算法(如k-means)分成多个簇(cluster)
2.  **倒排索引构建**:为每个簇建立一个列表,记录属于该簇的所有向量
3. **搜索过程**:
- 查询时先确定查询向量最接近的几个簇(称为"探针")
- 然后只在这些簇的向量中进行精确或近似搜索

34. 什么是 PQ(Product Quantization)?如何压缩向量?

PQ(Product Quantization,乘积量化) 是一种高效的向量压缩和近似最近邻搜索(Approximate Nearest Neighbor, ANN)方法,常用于大规模向量检索系统中,比如图像检索、NLP、推荐系统等。

PQ 的核心思想是:
将高维向量拆分成若干低维子向量,对每个子向量分别进行独立的量化(即聚类),从而实现高效压缩和快速距离估计。

压缩过程可以分为以下几步:

  1. 向量分割

假设原始向量维度为 $D$,我们将其均匀划分为 $M$ 个子向量,每个子向量维度为 $D/M$。

\[\mathbf{x} = [\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_M] \]

  1. 训练码本(Codebook)

对每个子向量集合分别使用 K-means 聚类,训练出 $K$ 个聚类中心(即码本):

  • 每个子空间都有一个独立的码本。
  • 每个码本的大小决定了压缩精度和存储大小。
  1. 编码(Quantization)

将每个子向量替换为其最接近的聚类中心的索引

\[\mathbf{x}_i \rightarrow q_i \in \{0, 1, ..., K-1\} \]

最终,整个向量被表示为一组索引:$[q₁, q₂, ..., q_M]$。

举个例子

假设有一个 128 维的向量:

  • 划分为 $M = 8$ 个子向量(每个16维);
  • 每个子空间使用 $K = 256$ 个聚类中心;
  • 每个索引用 1 字节(8 bits)表示;
  • 最终压缩后向量仅占用 8 Bytes。

相比于原始 128维 float 向量(通常是 128×4 = 512 Bytes),压缩率高达 64 倍

PQ 的优点

优点 说明
压缩率高 显著减少内存占用
距离计算快 可通过查表(lookup table)快速估算向量间距离
可扩展 与倒排索引(IVF)等技术结合效果更佳

PQ 的应用场景

  • Facebook FAISS:使用 PQ/IVF-PQ 进行高效的向量检索;
  • 大规模推荐系统:压缩向量以节省内存;
  • 图像/文本检索:通过近似距离搜索相似内容。
  1. IVF-PQ 的结构是如何组成的?
  2. Scalar Quantization 和 Product Quantization 有何不同?
  3. 什么是 OPQ(Optimized PQ)?
  4. 什么是 Flat 索引?适用于哪些场景?
  5. 什么是 Annoy?它的原理是什么?
  6. HNSW 与 IVF 哪种更适合低延迟查询?
  7. 多段索引结构(Multi-level Index)是如何工作的?
  8. 怎么评估一个索引结构的构建时间和搜索性能?
  9. 向量数据库中的索引压缩技术有哪些?
  10. 图索引(如HNSW)和树索引(如KD-Tree)相比有何优势?
  11. 为什么 KD-Tree 不适用于高维向量?

4. 性能优化(共10题)

  1. 如何加快向量检索的响应速度?
  2. 什么是 Recall / Precision / Latency 在向量库中代表什么?
  3. 向量数据库如何进行缓存优化?
  4. 如何使用量化技术(PQ/OPQ)来压缩数据?
  5. 如何利用GPU加速向量搜索?
  6. 查询并发量大时,向量数据库如何扩展?
  7. 如何调整索引参数来权衡搜索速度与准确率?
  8. 向量数据库中的预热机制(warm-up)是做什么的?
  9. 向量插入/删除频繁时如何维持索引的性能?
  10. 如何避免“冷启动”问题影响搜索质量?

5. 应用场景(共10题)

  1. 向量数据库在推荐系统中如何使用?
  2. 如何构建一个图像相似性检索系统?
  3. 多语言搜索(跨语言向量检索)是怎么实现的?
  4. 如何利用向量搜索做文本去重?
  5. 音频指纹识别是否可用向量数据库实现?
  6. 如何结合向量库做用户画像匹配?
  7. 在知识问答系统中如何使用向量检索?
  8. 向量库在金融风控场景下如何应用?
  9. 使用向量搜索辅助内容审核有哪些方法?
  10. 如何用向量库支持“反向搜索”(given output, find similar input)?

6. 特定数据库系统(共15题)

  1. FAISS 是什么?它的主要应用场景有哪些?
  2. FAISS 中如何选择合适的索引类型?
  3. FAISS 是如何进行批量检索的?
  4. Milvus 是什么?它的整体架构是怎样的?
  5. Milvus 与 FAISS 的对比有哪些?
  6. Milvus 中如何实现索引重建?
  7. Weaviate 是什么?支持哪些语义搜索能力?
  8. Pinecone 的使用门槛高吗?部署方式如何?
  9. Pinecone 如何处理版本管理与回滚?
  10. Qdrant 的特点是什么?
  11. 向量数据库与 Elasticsearch 的集成方式有哪些?
  12. 如何用 FAISS + Transformers 实现语义搜索?
  13. 哪些向量数据库支持云原生部署?适用于哪些公司?
  14. 哪些库适合嵌入移动端/边缘设备?
  15. OpenSearch 中如何使用 k-NN 插件做向量检索?

7. 分布式系统与部署(共10题)

  1. 向量数据库如何横向扩展(sharding)?
  2. 如何确保分布式环境下的查询一致性?
  3. 什么是副本复制机制?它如何提高可用性?
  4. 向量库在 Kubernetes 上如何部署?
  5. 如何监控向量数据库的健康状态?
  6. 如何做多租户隔离管理(multi-tenancy)?
  7. 如何配置负载均衡以保证向量查询性能?
  8. 数据迁移时如何避免索引重建?
  9. 向量库如何与云存储(S3/GCS)结合?
  10. 在边缘计算场景中部署向量数据库需要考虑什么?

8. 高级话题与趋势(共10题)

  1. 什么是 Learned Index?它如何替代传统索引结构?
  2. Faiss 是否适合用于持续向量更新的业务场景?
  3. 如何评估语义相似性与向量相似性的关系?
  4. 向量数据库如何做 ACL 权限控制?
  5. 支持高频更新的向量库该如何设计?
  6. 多模态向量如何实现联合检索?
  7. 你如何看待“RAG + 向量数据库”在AI中的应用?
  8. 向量库和图数据库是否可以融合使用?
  9. 下一代向量数据库有哪些值得关注的特性?
  10. 你认为未来向量库的发展方向是什么?
posted @ 2025-05-20 21:40  不报异常的空指针  阅读(117)  评论(0)    收藏  举报