解读向量数据库

news2024/11/24 20:55:27

不论是RAG,还是Agent,几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么,向量数据库是什么?与传统数据库有何不同? 又如何选择向量数据库呢? 本文是老码农关于向量数据库的学习笔记。

1. 什么是向量数据库?

首先,我们需要理解什么是向量?

向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“特征”或“维度”。例如,一张图片可以表示为像素值的向量,整个句子也可以表示为单词嵌入的向量。

一些常用的数据向量如下:

  • 图像向量,通过深度学习模型提取的图像特征向量,这些特征向量捕捉了图像的重要信息,如颜色、形状、纹理等,可以用于图像识别、检索等任务;

  • 文本向量,通过词嵌入技术如Word2Vec、BERT等生成的文本特征向量,这些向量包含了文本的语义信息,可以用于文本分类、情感分析等任务;

  • 语音向量,通过声学模型从声音信号中提取的特征向量,这些向量捕捉了声音的重要特性,如音调、节奏、音色等,可以用于语音识别、声纹识别等任务。

向量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,根据数据的复杂性和粒度,维度可以从几十到几千不等。向量通常是通过对原始数据(如文本、图像、音频、视频等)应用某种变换或嵌入函数来生成的。嵌入函数可以基于各种方法,例如机器学习模型、单词嵌入、特征提取算法。向量数据库采用索引策略来简化向量相似的特定查询。这在机器学习应用程序中特别有用,因为相似性搜索经常用于发现可比较的数据点或生成建议。

c333f7adc3987257a051bcf8cec9406e.jpeg

向量数据库的主要功能包括:

  • 管理:向量数据库以原始数据形式处理数据,能够有效地组织和管理数据,便于AI模型应用。

  • 存储:能够存储向量数据,包括各种AI模型需要使用到的高维数据。

  • 检索:向量数据库特别擅长高效地检索数据,这一个特点能够确保AI模型在需要的时候快速获得所需的数据。这也是向量数据库能够在一些推荐系统或者检索系统中得到应用的重要原因。

向量数据库的主要优点是,它允许基于数据的向量距离或相似性进行快速准确的相似性搜索和检索。这意味着,可以使用向量数据库,根据其语义或上下文含义查找最相似或最相关的数据,而不是使用基于精确匹配或预定义标准查询数据库的传统方法。向量数据库可以搜索非结构化数据,但也可以处理半结构化甚至结构化数据。例如,可以使用向量数据库执行以下操作,根据视觉内容和风格查找与给定图像相似的图像,根据主题和情感查找与给定文档相似的文档,以及根据功能和评级查找与给定产品相似的产品。

2. 向量数据库的工作机理

向量数据库的构建是为了适应向量嵌入的特定结构,并且它们使用索引算法根据向量与查询向量的相似性来有效地搜索和检索向量。

向量数据库的工作原理可以通过CPU和GPU的工作原理进行类比。CPU和GPU分别是计算机的运算和图形处理核心,而向量数据库则是大模型的记忆和存储核心。在大模型学习阶段,向量数据库接收多模态数据进行向量化表示,让大模型在训练时能够更高效地调用和处理数据。通过多线程机制和矩阵运算,GPU提供了强大的计算能力,让大模型的训练变得更加快速和高效。

区别于传统数据库,向量数据库主要有三点不同:数据向量化,向量检索和相似度计算。数据的向量化采用embedding 技术, 嵌入作为一个桥梁,将非数字数据转换为机器学习模型可以使用的形式,使它们能够更有效地识别数据中的模式和关系。一般的,文本是一维向量,图像是二维矩阵,视频相当于三维矩阵。这些嵌入实质上是存储数据的上下文表示的数字列表(即向量)。在存储层内,数据库以m个向量堆栈的形式存储,每个向量使用n个维度表示一个数据点,总大小为m×n。为了查询性能的原因,这些堆栈通常通过分片进行划分。

向量检索是输入一个向量,从数据库中查找与输入向量最相似的topN个向量返回。要在向量数据库中执行相似性搜索和检索,需要使用表示所需信息或条件的查询向量。查询向量可以从与存储向量相同类型的数据导出,或者从不同类型的数据导出。使用相似性度量来计算两个向量在向量空间中的距离。相似性度量可以基于各种度量,如余弦相似性、欧氏距离、向量内积,hamming距离、jaccard指数。

其中,向量检索算法是向量数据库的核心之一。向量检索可以看为是近似最近邻搜索,通过预先的索引构建来减小数据查询时的搜索空间,加快检索速度。目前主要的几种检索算法有:

  • 基于树的方法,例如KDTree和Annoy

  • 基于图的方法,例如HNSW

  • 基于乘积量化的方法,例如SQ和PQ

  • 基于哈希的方法,例如LSH

  • 基于倒排索引的方法

向量数据库中的索引可以按照数据结构和压缩级别两个层次进行组织实现。根据数据结构建立索引的分类如下:

bfa42129bdc3bbc0807061c7e0f6f83a.jpeg

根据数据压缩方式建立索引, 主要包括平坦压缩和量化压缩。平坦压缩是指以未经修改的形式存储向量的索引,量化中索引的底层向量被分解成由较少字节组成的块(通常通过将浮点数转换为整数)以减少内存消耗和搜索过程中的计算成本。

6c0ffadb9c6ab50580192e2cc8567b9d.jpeg

相似性搜索和检索的结果通常是与查询向量具有最高相似性得分的向量的排序列表。然后,您可以访问与原始源或索引中的每个向量关联的相应原始数据。

3. 向量数据库的分类

根据向量数据库的的实现方式, 我们可以将向量数据库大致分为4类:原生的向量数据库、支持向量的全文检索数据库、支持向量的NoSQL数据库和支持向量的关系型数据库。

3.1 原生的向量数据库

原生的向量数据库是专门为存储和检索向量而设计的。包括Chroma, LanceDB, Marqo, Milvus/ Zilliz, Pinecone, Qdrant, Vald, Vespa, Weaviate等, 所管理的数据是基于对象或数据点的向量表示进行组织和索引。这里只介绍其中的三种,具体信息可以参考各自的官网。

Faiss

Faiss是一个用于高效相似性搜索和密集向量聚类的开源库。Faiss是用C++编写的,带有完整的Python/numpy包装器,一些常用算法都有GPU实现,成为了很多开源向量数据库的基础。

191ea2e0690b082b6871f78d805d28ec.jpeg

Faiss能构建不同的索引类型,并提供了欧式距离或者点积的相似度计算功能,有些索引类型是简单的基线,例如精确搜索。大多数可用的索引结构需要考虑搜索时间,搜索质量,每个索引向量使用的内存等。

Faiss支持多种向量搜索技术,提供了能够在不同大小的向量集中搜索的算法,甚至可以处理那些超过内存容量的向量集。

Faiss的主要优势之一是速度和可扩展性,即使在具有数十亿个向量的数据集中也可以进行快速搜索。此外,还提供了用于评估和调整参数的辅助代码。

Pinecone

Pinecone是一个基于云的向量数据库,可以开发实时相似性搜索应用,能够以毫秒级的延迟存储和探索高维向量嵌入,适用于推荐系统、图片和视频搜索以及自然语言处理等应用。

Pinecone 的主要功能包括自动索引、实时更新、查询自动调整和用于与当前流程进行简单交互的 REST API。其架构专为可扩展性和稳健性而构建,可以轻松管理海量数据,同时保持高可用性。

6a40772d064ee2d788eff9351366f6f6.jpeg

Pinecone是一个可以托管的向量数据库平台,也就是说有商用方案,也有免费使用方案。其主要特点包括:

  • 支持全托管服务

  • 高度可伸缩

  • 实时数据摄取

  • 低延迟的搜索

  • 与LangChain集成

Pinecone 采用了多种安全措施来保护用户的数据安全和隐私。多层次的访问控制机制可以控制用户的访问权限和操作权限,同时采用了数据加密、传输加密等技术来保护数据的安全性,还提供了数据备份和恢复等功能,可以防止数据丢失和损坏。

Pinecone 在性能方面表现非常出色,它能够支持高达 1 百万次的QPS,且具有低延迟和高吞吐量的特点,还具有分布式部署、实时索引构建和高效的向量相似度搜索等优点,可以帮助用户快速处理大规模的向量数据。

此外,Pinecone 还支持多种编程语言和框架,如 Python、Java、TensorFlow 等,使得用户可以轻松地将其集成到自己的应用程序中。

Milvus

Milvus是一个开源的分布式向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。

Milvus 基于 Faiss、Annoy、HNSW 等向量搜索库构建,可以轻松管理数百万个实体,可以根据不同的数据特点选择最合适的索引算法,核心是解决稠密向量相似度检索的问题。在向量检索的基础上,Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、time travel 等功能,同时大幅优化了向量检索的性能,可满足任何向量检索场景的应用需求。

12dfe5dc1d7920c024c95124a13fa4e5.jpeg

Milvus 还具有分布式部署、高可用性和高扩展性等优点,可以帮助用户快速处理海量的向量数据。它也提供了多种安全措施来保护用户的数据安全和隐私,支持 SSL/TLS 加密和访问控制等技术,可以防止数据被非法访问和窃取,还提供了数据备份和恢复等功能,可以保护数据的完整性和可用性。

此外,Milvus 还提供了多种客户端 SDK,如 Python、Java、C++ 等,使得用户可以方便地使用不同的编程语言来访问和操作 Milvus。

3.2 支持向量的全文检索数据库

这类数据库包括Elastic/Lucene、OpenSearch和Solr。它们都具有丰富的文本检索功能,如可定制的标记器,分词器,停用词列表和N-grams等,大部分都基于开源库,且有大型集成的生态系统,包括了向量库。

例如,Elasticsearch,是一个支持各种类型数据的分布式搜索和分析引擎。Elasticsearch在7.3 版本中,添加了对向量数据索引的支持,支持混合查询,但是向量检索采用的仍然是暴力计算,性能损耗较大。在8.0版本引入了knn search其实就是一种近似最近邻搜索算法,相似度支持欧式距离,点积和余弦相似性,knn search底层其实使用的是HNSW。遗憾的是,这种方式无法进行混合检索。

3.3 支持向量的NoSQL 数据库

几乎所有这些NoSQL数据库都是最近才通过添加向量搜索扩展而具备向量能力的,所以如果要是使用的话一定要做好测试。Cassandra,Rockset,Azure Cosmos DB和MongoDB等都纷纷宣布了增加向量搜索的计划。NoSQL数据库的向量搜索性能可能差别很大,这取决于所支持的向量函数、索引方法和硬件加速。

例如,RedisVector是一个向量数据库,专注于向量数据的有效处理。它擅长存储和分析大量向量数据,包括张量、矩阵和数值数组。通过 利用内存数据存储Redis,RedisVector可提供高性能的查询响应时间。它提供内置的索引和搜索功能,可以快速搜索和查找相似的载体,RedisVector还支持各种距离测量,用于比较向量和执行复杂的分析操作。通过对向量数据的操作,包括元素级算术和聚合,RedisVector 为处理向量提供了一个多功能环境,适用于处理和分析高维向量数据的机器学习应用,从而能够创建定制的推荐系统和基于相似性的准确搜索。

对于支持向量的NoSQL 数据库,探索尝试未尝不可,但在生产环境中使用要慎之又慎。

3.4 支持向量的SQL 数据库

这些大都是关系型数据库并且支持sql查询,例如SingleStoreDB, PostgreSQL, Clickhouse和Kinetica的pgvector/Supabase Vector等。它们都宣布包含了向量搜索功能,如点积,余弦相似度,欧几里得距离和曼哈顿距离,并且使用相似度分数找到n个最近邻。由于提供了混合查询,可以将向量与其他数据结合起来以获得更有意义的结果。另外,大多数SQL数据库都可以作为服务部署,可以在云上进行完全的管理。

67b6c3a9f47c8b4daf723588ac54c6d1.jpeg

例如,Postgres 通过 pg_vector pg_embdding 两个插件来实现向量数据库,让PG数据库支持向量索引检索的能力。其索引算法使用的是基于Faiss的IVF Flat索引,提供了优异的召回率。

4. 向量数据库的一些对比

4.1 编程语言支持

Chroma是一个Python/TypeScript包装器,基于C++编程语言的有OLAP数据库Clickhouse以及开源向量索引HNSWLib。但如今,快速响应且可扩展的数据库通常使用现代语言如Golang或Rust编写。在专为向量数据库而构建的供应商中,唯一使用Java构建的是Vespa。

4.2 开源与否

Pinecone是完全闭源的,Zilliz也是一个闭源的完全托管的商业解决方案,但它完全建立在Milvus之上,其他向量数据库至少在代码库方面是源代码可用的,具体的许可证决定了代码的可许可性以及如何部署。

a9300e5cebe0a9ec86bd78e36d97b972.jpeg

4.3 检索算法

众多向量数据库的检索算法都采用了HNSW,其中,Milvus 的检索算法支持最为丰富。

f75b5dc17329f83948ff8e0f31451b4c.jpeg

4.4 部署方式

向量数据库的典型部署方式包括本地部署和托管/云原生,两者都遵循CS架构。还有一种新的选择是嵌入式模式,其中数据库本身与应用程序代码紧密耦合,以serverless的方式运行。目前,只有Chroma和LanceDB可用作嵌入式数据库。

82dea2da8e44549df8246396ce57807d.jpeg

综上所述,主流向量数据库的部分指标对比如下:

b7e54579388ea7b77b14ca3caec523a7.jpeg

此外,在选择向量数据库时,还需要特别考量以下因素:

  • 可扩展性:能够高效处理高维度大数据量并能够根据数据需求的增长进行扩展。

  • 性能:速度和效率对数据库至关重要,需要在数据搜索、搜索性能和执行各种向量操作方面表现出色。

  • 灵活性:支持广泛的数据类型和格式,并且可以轻松适应不同的应用场景。

  • 易用性。这些数据库易于使用和管理,易于安装和配置,具有直观的API,并且有良好的文档和支持。

  • 可靠性:需要有可靠和稳定的声誉。

5. 向量数据库与其他类型数据库的对比

传统数据库,如关系数据库,旨在存储结构化数据。这意味着数据被组织到预定义的表、行和列中,确保数据的完整性和一致性。传统数据库往往针对CRUD进行优化,旨在高效地创建、读取、更新和删除数据条目,使其适用于从 Web 服务到企业软件的各种应用程序。但是,一旦定义了数据库结构,进行更改可能会非常复杂且耗时。这种刚性可确保数据一致性,但灵活性可能不如某些现代数据库的无模式或动态模式性质。

特性 关系型数据库 向量数据库
数据类型 数值、字符串、时间等传统数据类型 向量数据不存储原始数据
数据规模 小,1亿数据量为规模很大 大,千亿数据是底线
数据组织方式 基于表格,按照行和列组织 基于向量,按照向量维度组织
查找方式 精确查找:点查/范围查 近似查找:对算力要求较高
低时延,高并发 否 
支撑上层应用 较弱 对外提供统一的API,更适合大规模AI引用程序的部署和使用
应用场景 容错率低,需提供更为精准的搜索结果 场景容错率较高

与在行和列中存储多种标准数据类型(如字符串、数字和其他标量数据类型)不同,向量数据库引入了向量这种新的数据类型,并围绕此数据类型构建优化,专门用于实现快速存储、检索和最近邻搜索语义。在传统数据库中,使用查找完全匹配项的索引或键值对对数据库中的行进行查询,并返回这些查询的相关行。

特别地, 向量数据库与图数据库的对比如下:

0b83eba26ddc8d66f9d2a6ab560c9bd8.jpeg

6. 向量数据库在大模型中的应用

基于大模型的应用经常一些面临挑战,例如生成不准确或不相关的信息;缺乏事实一致性或常识;重复或自相矛盾;有偏见的或令人反感等。为了克服这些挑战,可以使用向量数据库来存储与所需领域的不同主题、关键词、事实、观点和/或来源的信息。然后,在使用一个大模型时,通过AI插件从向量数据库中传递信息,以生成更具信息性和吸引力的内容,符合目标意图和指定风格。

借助向量数据库,我们能够快速加载和存储事件作为嵌入,并使用向量数据库作为为AI模型提供动力的大脑,提供上下文信息,长期记忆检索,语义上的数据关联等等。向量数据库的典型使用方式如下:
1. 使用embeding 技术创建向量
2. 将这些向量存储到向量数据库
3. 应用索引策略来组织管理向量
4. 使用查询向量执行相似性搜索
5. 从向量数据库中取得相似的向量

实际上,向量数据库在不同的领域和应用程序中都有着许多用例,涉及自然语言处理(NLP)、计算机视觉(CV)、推荐系统(RS)和其他需要对数据进行语义理解和匹配的领域。在向量数据库中存储信息的一个用例是使大型语言模型(LLM)能够基于AI插件生成更相关、更连贯的文本。

由于向量数据库将要查询的数据存储为嵌入向量,并且语言模型(LLM)也将其内部的知识编码为嵌入向量,因此在生成式问答应用中是天生一对。向量数据库充当知识库的功能,而LLM可以直接在嵌入空间中查询数据的子集,一般可以使用以下方法进行操作:

  1. 用户通过界面用自然语言提出问题。

  2. 问题的文本被传递给嵌入模型,然后返回一个句子嵌入向量。

  3. 问题向量被传递给向量数据库,通过ANN搜索返回与之最相似的前k个结果。这一步非常关键,因为它大大缩小了LLM在下一步中的搜索空间。

  4. 构建一个LLM提示(基于开发者预定义的模板),将其转换为嵌入向量,并传递给LLM。使用类似LangChain的框架可以方便地执行此步骤,因为可以动态构建提示语,并调用LLM的本地嵌入模块,而无需为每个工作流编写大量自定义代码。

  5. LLM在前k个结果中搜索信息,并生成问题的答案,答案发送回用户。

6bd249f37fb9ef289eb622c6a98c8224.jpeg

结合LLM和向量数据库可以构建许多其他有用的应用程序。然而,了解向量数据库的一些潜在限制是必要的。在搜索应用中,它们不一定优先考虑关键词短语的精确匹配来确定相关性。存储和查询的数据必须适应所使用的嵌入模型的最大序列长度(对于类似BERT的模型,这个长度不超过几百个词)。目前,最好的方法是利用像LangChain和LlamaIndex这样的框架,将数据分块或压缩成适合底层模型上下文的固定大小的向量。

同样,向量数据库也面临着许多与其他数据库技术相同的挑战, 需要继续努力提高可扩展性、近似精度、延迟性能和经济性。许多向量数据库在核心数据库能力方面需要提升,例如安全性、弹性、运营支持和工作负载支持的多样化。随着AI应用的成熟,未来需要的不仅仅只限于向量搜索功能。

【参考资料与关联阅读】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PC删除数据,并提示删除成功

<template<el-button size"mini" type"text">分配权限</el-button><el-button size"mini" type"text" click"btnEditRow(row)">编辑</el-button ><el-popconfirmtitle"这是一段内容确定…

通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式

国家级APT&#xff08;Advanced Persistent Threat&#xff0c;高级持续性威胁&#xff09;组织是有国家背景支持的顶尖黑客团伙&#xff0c;专门针对特定目标进行长期的持续性网络攻击。朝鲜APT组织Lazarus Group就是非常活跃的一个APT团伙&#xff0c;其攻击目的主要以窃取资…

P2704 [NOI2001] 炮兵阵地 题解

P2704 题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示 解题思路分析Code更多方法 题目 原题链接 题目描述 司令部的将军们打算在 N M N\times M NM 的网格地图上部署他们的炮兵部队。 一个 N M N\times M NM 的地图由 N N N 行 M M M 列组成&#x…

Android 12 打开网络ADB并禁用USB连接ADB

平台 RK3588 Android 12 Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&am…

代码块02使用细节-Java

代码块02使用细节 四、使用细节1、static代码块/静态代码块&#xff0c;随着类的加载而执行&#xff0c;且只执行一次2、 类什么时候被加载 [重要 ! ]案例演示&#xff1a;static代码块 3、普通代码块&#xff0c;在创建对象实例时&#xff0c;会被隐式的调用。案例演示&#x…

2023 中国 Serverless 用户调查,邀您填写!

当前云计算已成为数字时代的基础设施&#xff0c;支撑众多企业进行数字化转型升级。随着企业上云的范围更加广泛&#xff0c;国内云计算正在迈向云原生时代。Serverless技术因其以应用为中心、屏蔽底层复杂逻辑&#xff0c;灵活扩展&#xff0c;按需取用的特点&#xff0c;已经…

【解决方案】安科瑞智能照明系统在福建二建大厦项目上的研究与应用

【摘要】&#xff1a;智能化已经成为当今建筑发展的主流技术、涵盖从空调系统、消防系统到安全防范系统以及完善的计算机网络和通信系统。但是长期以来、智能照明在国内一直被忽视、大多数建筑物仍然沿用传统的照明控制方式、部分智能大厦采用楼宇自控&#xff08;BA&#xff0…

如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类

有时候当我们新建MFC工程需要使用到微软的一些自带控件&#xff0c;如播放视频要用到Windows media player控件&#xff0c;这时&#xff0c;我们可以通过添加“ActiveX控件中的mfc类(A)”这一选项. 还有有时候我们需要用到“类型库中的MFC类(T)及“MFC ODBC使用者(O)”。那我们…

如何获取抖音订单API数据接口?

在开放平台中&#xff0c;每个API接口都有相应的文档说明和授权机制&#xff0c;以确保数据的安全性和可靠性。开发者可以根据自己的需求选择相应的API接口&#xff0c;并根据文档说明进行调用和使用。 开放平台API接口是一套REST方式的开放应用程序编程接口&#xff0c;它…

NX二次开发UF_CURVE_create_arc_point_center 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_point_center Defined in: uf_curve.h int UF_CURVE_create_arc_point_center(tag_t point, tag_t center, UF_CURVE_limit_p_t limit_p [ 2 ] , tag_t support…

Clion取消double shift(按两下shift键)全局搜索

Clion 取消 double shift&#xff08;按两下 shift 键&#xff09;全局搜索。 如下图所示打开 setting。 点击 advanced setting&#xff0c;搜索 disable&#xff0c;取消勾选左侧复选框&#xff0c;点击 ok。

Linux进程状态(僵尸进程,孤儿进程)+进程优先级+进程调度与切换

Linux进程状态[僵尸进程,孤儿进程]进程优先级 一.进程状态1.进程排队2.教材上对于进程状态的描述:1.阻塞挂起 3.Linux下具体的进程状态:1.Linux下的进程状态数组2.R3.S:可终止睡眠---浅度睡眠1.补充:前台进程和后台进程2.一种"奇怪"的现象 4.D:不可终止睡眠---深度睡…

ESXi 添加虚拟闪存 无可选设备问题排查

虚拟内存是计算机系统中的一种技术&#xff0c;它可以将计算机硬盘的一部分空间作为临时存储器来使用。当计算机的物理内存&#xff08;RAM&#xff09;不足时&#xff0c;操作系统可以将部分数据从内存移至硬盘的虚拟内存空间中&#xff0c;以释放内存供其他程序使用。虚拟内存…

C++基础 -4- C/C++混合编程

引用格式(图片代码段呈现) extern "C" {#include "string.h" }代码验证 &#xff08;分别使用了C/C 的标准输出&#xff09; #include "iostream"using namespace std;extern "C" { #include "stdio.h" #include "…

Arthas 使用

Arthas是阿里巴巴开源的Java诊断工具&#xff0c;采用命令行交互的形式进行问题的定位与诊断。它能够帮助你. 解决以下问题&#xff1a; 这个类从哪个 jar 包加载的&#xff1f;为什么会报各种类相关的 Exception&#xff1f;我改的代码为什么没有执行到&#xff1f;难道是我…

卸载软件最最最彻底的工具——Uninstall Tool

卸载软件最最最彻底的工具——Uninstall Tool Uninstall Tool 是一款功能强大的专业卸载工具。针对一些普通卸载不彻底的问题&#xff0c;它可以做到最优&#xff0c;比如Matlab等软件的卸载难的问题也可以较好地解决。 它比 Windows 自带的“添加/删除程序”功能快 3 倍&…

深度学习:全面了解深度学习-从理论到实践

深度学习&#xff1a;全面了解深度学习-从理论到实践 摘要&#xff1a;本文旨在为读者提供一份全面的深度学习指南&#xff0c;从基本概念到实际应用&#xff0c;从理论数学到实践技术&#xff0c;带领读者逐步深入了解这一领域。我们将一起探讨深度学习的历史、发展现状&#…

算法通关第十七关青铜挑战——原来贪心如此简单(什么是贪心思想and经典例题分析)

大家好&#xff0c;我是怒码少年小码。 一转眼&#xff0c;又到了11月末尾了&#xff0c;莫名感觉今年真的很快&#x1f602;。今天的主角是贪心。 贪心的思想非常不好解释&#xff0c;而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来&#xff…

Ubuntu 22.03 LTS 安装deepin-terminal 分屏

安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0c;鼠标点击可以切换…

C#常见的设计模式-结构型模式

引言 设计模式是软件工程中用于解决常见问题的可复用解决方案。在C#编程中&#xff0c;常见的设计模式具有广泛的应用。本篇博客将重点介绍C#中常见的结构型设计模式&#xff0c;包括适配器模式、装饰器模式、代理模式、组合模式和享元模式。 目录 引言1. 适配器模式(Adapter …