当前位置: 首页 > news >正文

llama.cpp初识

Llama.cpp:赋能本地大语言模型推理的核心引擎及其应用场景

引言:Llama.cpp 是什么?

大型语言模型 (LLM) 的兴起正在深刻改变人机交互和信息处理的方式。然而,这些强大的模型通常需要巨大的计算资源,使得它们在云端之外的部署面临挑战。llama.cpp 项目的出现,为在更广泛的硬件上高效运行 LLM 提供了一条可行路径。

项目目标与核心价值

llama.cpp 项目的核心目标是实现大型语言模型在各种硬件平台上的高效推理,无论是本地设备还是云端环境,都力求简化部署流程并达到顶尖性能 (1)。它不仅是一个独立的推理工具,更是 ggml (Georgi Gerganov Meta Language) 库新特性开发的主要平台 (1)。ggml 及其后续演进的 GGUF 格式,专注于优化模型在 CPU 和多种硬件上的运行效率,特别强调通过量化等技术减小模型体积和内存占用。这种对“极简设置”和“顶尖性能”的追求,构成了 llama.cpp 的核心价值主张。

该项目的成功不仅仅体现在能够运行模型,更关键在于它能够在多样化的硬件配置下 高效地 完成这一任务。这意味着 llama.cpp 背后是持续的优化工作和对广泛兼容性的不懈追求。这种设计理念使得 llama.cpp 成为推动开源 LLM 运动的关键力量,它赋予了个人和中小型组织在不依赖大规模云基础设施的情况下,进行实验和创新的能力。通过降低技术门槛和资源需求,llama.cpp 促进了人工智能领域更加多元化和富有韧性的生态系统。

关键特性概览

llama.cpp 的强大功能和广泛适用性源于其一系列精心设计的关键特性。

纯 C/C++ 实现与跨平台能力

llama.cpp 完全采用纯 C/C++ 编写,并且不依赖任何外部库 (1)。这一选择对其性能和可移植性至关重要。C/C++ 的底层特性允许开发者进行细致的性能优化,而无外部依赖则极大地简化了在不同操作系统和硬件架构上的编译与部署过程。目前,llama.cpp 已确认支持 Windows、macOS、Linux 等主流桌面操作系统,以及 Android 和 iOS 等移动平台 (1)。这种设计使得 llama.cpp 能够轻松部署于资源受限的设备,例如嵌入式系统或旧式硬件,这些环境下通常难以支持复杂的运行时或大型依赖库 (3)。

硬件优化:CPU 与 GPU 支持

为了在不同硬件上实现最佳性能,llama.cpp 进行了广泛的硬件优化。它特别针对苹果的 Apple Silicon 平台进行了优化,利用了 ARM NEON、Accelerate 和 Metal 框架。对于 x86 架构的 CPU,它支持 AVX、AVX2、AVX512 甚至 AMX 指令集。在 GPU 加速方面,llama.cpp 支持 NVIDIA GPU (通过 CUDA)、AMD GPU (通过 HIP)、以及摩尔线程的 MTT GPU (通过 MUSA)。此外,它还支持通用的 Vulkan 和 SYCL 后端 (1)。一个特别实用的特性是 CPU+GPU 混合推理,允许用户在 GPU 显存不足以容纳整个模型时,利用系统内存共同完成推理,这为在显存有限的设备上运行更大规模的模型提供了务实的解决方案 (1)。

这种对多样化硬件的广泛支持,从高端 GPU 到通过 Vulkan 支持的集成显卡,再到对 Apple Silicon 的专门优化,体现了项目致力于让 LLM 无处不在运行的决心。这种努力也间接促进了硬件厂商之间的良性竞争,例如 AMD 便曾强调其 Ryzen AI 处理器在运行 llama.cpp 时的出色表现 (7),从而推动了消费级设备上 AI 能力的整体进步。

量化与 GGUF 文件格式的核心作用

量化技术是 llama.cpp 能够在普通硬件上运行大型模型的“魔法”核心。项目支持从 1.5 比特到 8 比特的多种整型量化方案 (1)。这些技术通过降低模型权重的精度,显著减小了模型文件在磁盘上和内存中的占用。为了高效地封装这些量化模型,llama.cpp 生态系统采用了 GGUF (GGML Universal File Format) 文件格式。GGUF 不仅存储量化后的模型权重,还包含了模型的元数据、分词器信息等,是一个专为本地高效部署 LLM 而设计的统一格式 (1)。

GGUF 格式本身是从早期的 GGML 格式发展而来,解决了后者在可扩展性、元数据支持和特殊 token 处理等方面的一些局限性 (9)。这种演进体现了社区对更健壮、更面向未来的模型分发格式的需求。GGUF 的出现和广泛采用,以及 llama.cpp、Ollama 等工具和众多图形界面的支持 (8),实际上已经为本地执行的量化 LLM 创建了一个事实上的标准。这种标准化极大地简化了用户获取、分享和使用模型的体验,并促进了不同工具和平台之间的互操作性。

支持的模型范围

llama.cpp 的实用性因其支持的模型数量和种类之多而得到极大增强。它不仅仅局限于 LLaMA 系列模型 (包括 LLaMA 1, 2, 和 3),还广泛支持如 Mistral 7B、Mixtral MoE、DBRX、Falcon、多种中文 LLaMA/Alpaca 衍生模型、法语的 Vigogne、BERT、Koala、百川 (Baichuan 1 & 2) 及其衍生模型、Aquila (1 & 2)、Starcoder 系列、Refact、MPT、Bloom、Yi 系列、StableLM 系列、Deepseek 系列、Qwen 系列、Phi 系列、GPT-2 等众多纯文本模型 (1)。更令人印象深刻的是,llama.cpp 也积极跟进多模态模型的发展,支持 LLaVA (1.5 和 1.6)、BakLLaVA、Obsidian、ShareGPT4V、MobileVLM、Yi-VL、Mini CPM、Moondream、Bunny、GLM-EDGE 和 Qwen2-VL 等模型 (1)。

这种广泛的模型支持表明 llama.cpp 并非绑定于单一模型架构,而是一个通用的、适应性强的推理引擎。开发社区对新兴开源模型的快速接纳和支持,确保了 llama.cpp 在快速发展的 LLM 领域中能够保持其相关性。特别是对多模态模型的支持,极大地拓宽了其潜在的应用范围。这种广泛的模型兼容性也为研究和实验提供了便利。研究人员可以轻松地在本地测试和比较不同的模型架构,而开发者则可以根据特定任务的需求选择最合适的模型,而不必受限于特定模型提供商的生态系统。可以说,llama.cpp 的模型支持能力是其推动 LLM 技术普及和创新的一个重要因素。

为了更清晰地展示 llama.cpp 的核心技术优势,下表进行了总结:

Table 1: Llama.cpp 核心特性及其优势

特性 (Feature)描述 (Description)优势 (Advantage)
纯 C/C++ 实现 (Pure C/C++ Impl.)无外部依赖 (1)高性能、高可移植性、易于多平台编译与部署 (1)
广泛的硬件优化 (Broad HW Opt.)支持 Apple Silicon (Metal, NEON), x86 (AVX*), NVIDIA (CUDA), AMD (HIP), Vulkan, SYCL, CPU+GPU混合 (1)在各类硬件上实现最佳性能,充分利用可用计算资源
整型量化 (Integer Quantization)支持 1.5-bit 到 8-bit 量化 (1)大幅降低模型大小和内存占用,提升推理速度,使大模型能在消费级硬件上运行 (3)
GGUF 文件格式 (GGUF File Format)专为 llama.cpp 设计的统一模型文件格式,包含模型权重、元数据、分词信息 (1)高效存储、快速加载、跨工具兼容性好、支持元数据和特殊 token、易于模型分发与使用 (8)
跨平台兼容性 (Cross-Platform)支持 Windows, macOS, Linux, Android, iOS (1)开发者可一次构建,多平台部署;用户可在自己选择的设备上运行 LLM
广泛的模型支持 (Broad Model Support)支持 LLaMA 系列, Mistral, Mixtral, Falcon, Qwen, Phi, LLaVA 等多种文本和多模态模型 (1)用户和开发者有丰富的模型选择,可针对不同任务和需求选用最合适的模型

Llama.cpp 的核心使用场景

llama.cpp 的设计使其在多种场景下都能发挥重要作用,从个人用户的日常应用到开发者的复杂系统集成,其影响力日益扩大。

1. 个人桌面端的本地 LLM 应用

在个人计算机上本地运行大型语言模型是 llama.cpp 最广为人知的应用场景之一。

在普通甚至低配置硬件上运行 LLM 的可行性

llama.cpp 的一个核心贡献在于它使得在各种个人计算机上运行 LLM 成为可能,即便是那些配置相对较低的设备也不例外 (1)。通过积极的量化策略,例如将模型量化到极低的比特率,甚至可以在树莓派 (Raspberry Pi) 这样的微型计算机上运行 LLM (3)。一般而言,拥有较新一代的 CPU(例如 Ryzen 系列或 Intel 第八代及更新的处理器)的用户可以获得不错的体验。如果配备有独立显卡,8GB 显存通常足以运行 70-80 亿参数规模的模型;若无独立显卡,则建议至少有 8GB 的空闲系统内存 (3)。

llama.cpp 及类似技术出现之前,运行能力较强的 LLM 通常局限于拥有强大计算能力的服务器或依赖云服务。llama.cpp 的出现无疑是 LLM 技术民主化进程中的一个重要里程碑。它不仅让普通用户能够在自己的设备上体验先进的 AI 技术,也延长了现有硬件在 AI 任务中的可用寿命。这种可及性的提升,促进了一个更广泛的用户和开发者社区的形成,他们能够亲手实验、理解并为 LLM 技术的发展做出贡献,从而催生更多样化的应用,并促进公众对 AI 技术的认知。

本地运行的优势:隐私、成本、离线访问与定制化

在本地计算机上运行 LLM 带来了诸多显著优势,尤其是在与依赖第三方云服务 API 的方式进行比较时。
首先是隐私保护:所有数据,包括用户输入的提示和模型生成的文本,都保留在用户自己的计算机上,不经过任何外部服务器 (3)。这对于处理敏感信息或仅仅是注重个人隐私的用户和企业而言,是一个至关重要的考量。
其次是成本节约:通过本地运行模型,用户可以避免使用商业云 LLM 服务(如 ChatGPT 或 Claude API)时可能产生的持续性费用 (3)。对于需要大量调用 LLM 的应用场景,本地化部署的成本效益尤为突出。
再次是离线访问:一旦模型文件下载到本地,llama.cpp 允许用户在没有互联网连接的情况下使用 LLM (3)。这对于网络环境不稳定或需要在完全离线状态下工作的场景至关重要。
最后是控制与定制化:用户对本地运行的模型、其配置参数以及运行环境拥有完全的控制权 (3)。这使得用户可以根据自己的需求自由实验不同的模型、量化级别、采样参数等,实现高度个性化的 LLM 应用。

这些优势的叠加,特别是隐私保护,随着公众对大型科技公司数据处理方式的关注度日益提高,其重要性也愈发凸显 (11)。llama.cpp 为那些对数据安全有严格要求或偏好将数据保留在本地的用户提供了技术上可行的替代方案。这种能力可以催生出全新的应用类别,这些应用可能因云 LLM 的隐私限制、网络连接问题或成本因素而难以实现,例如,一个能够适应学生个人学习数据并提供个性化辅导的 AI 助教。

典型任务示例

llama.cpp 使得在个人桌面上执行各种常见的 LLM 任务成为现实,其核心优势在于本地执行所带来的隐私和定制化潜力。

  • 交互式聊天与个人助理: 用户可以通过 llama-cli 工具在命令行进行对话式交互,或者使用如 llama-server 提供的 Web 用户界面获得更友好的聊天体验 (1)。这些本地运行的 LLM 可以用于回答问题、进行一般性对话 (3),甚至可以构建能够记忆特定事实、自动化本地任务的个性化 AI 助手 (11)。
  • 文本补全与内容创作: llama-cli 同样支持文本补全功能,例如,输入 “我相信人生的意义在于” (I believe the meaning of life is),模型便会生成后续文本 (1)。这一功能可广泛应用于创意写作、头脑风暴、起草博客文章、撰写营销文案等多种内容创作场景 (3)。
  • 编程辅助: LLM 作为编程助手的能力也日益受到重视。通过 llama.cpp 在本地运行编程模型,可以实现生成代码片段、解释代码逻辑、辅助调试、编写文档等功能 (3)。尽管 llama.cpp 本身不直接提供 IDE 集成,但它为这类集成提供了底层引擎。

这些任务在本地执行时,用户可以针对特定的个人助理角色或内容创作风格对模型进行微调,并享有完全的数据隐私,这是通用云 API 难以比拟的。随着用户逐渐习惯本地 LLM 带来的益处,未来可能会出现对离线优先、注重隐私的 AI 工具的更高期望,这或将影响未来软件应用的设计趋势。

快速上手:安装、模型获取与运行 (llama-cli 示例)

为了方便用户快速开始使用,llama.cpp 提供了多种安装途径。用户可以选择从 GitHub 克隆源代码并本地编译,也可以通过包管理器(如 macOS 的 Homebrew,Linux 的 flox 或 nix)进行安装,或者使用 Docker 镜像,甚至直接下载预编译的二进制文件 (1)。

获取模型文件是运行 llama.cpp 的前提。模型通常以 GGUF 格式存储。如果用户拥有 HuggingFace 格式的模型(如 .safetensors 文件),可以使用 llama.cpp 项目中提供的 Python 转换脚本(例如 convert_hf_to_gguf.py)将其转换为 GGUF 格式 (3)。

一旦拥有了 GGUF 模型文件,便可以使用 llama-cli 工具在命令行与其进行交互。一个典型的命令如下:

llama-cli -m./models/your_model.gguf -p "写一段关于长城的诗" -n 128

相关文章:

llama.cpp初识

Llama.cpp:赋能本地大语言模型推理的核心引擎及其应用场景 引言:Llama.cpp 是什么? 大型语言模型 (LLM) 的兴起正在深刻改变人机交互和信息处理的方式。然而,这些强大的模型通常需要巨大的计算资源,使得它们在云端之…...

【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解

EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解 一、什么是 EBNF? Extended Backus-Naur Form (EBNF)是一种形式化的语法,用于指定编程语言或其他形式化语言的结构。它是Backus-Naur形式(BNF)的扩展,最初…...

Go语言运算符详解

文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…...

MySQL用户管理

目录 一、用户用户信息创建用户删除用户从远端登录修改用户密码 二、数据库的权限给用户授权回收权限 与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。,如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表&#…...

视频编解码学习三之显示器续

一、现在主流的显示器是LCD显示器吗? 是的,现在主流的显示器仍然是 LCD(液晶显示器,Liquid Crystal Display),但它已经细分为多种技术类型,并和其他显示技术(如OLED)形成…...

VSCode1.101.0便携版|中英文|编辑器|安装教程

软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,设计得很人性化,旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…...

Scala 中累加器的创建与使用格式详解

1. 内置累加器的创建与使用格式 1.1 创建内置累加器 // 通过 SparkContext 创建 val acc sc.longAccumulator("累加器名称") // Long 类型(默认初始值 0) val accDouble sc.doubleAccumulator("累加器名称") // Double 类型&a…...

【DNDC模型】双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…...

深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践

一、缓存与数据库一致性问题根源 读写分离的架构矛盾 缓存作为数据库的“副本”,天然存在数据同步延迟。 高频读写场景下,缓存与数据库的更新顺序、失败重试等操作易引发不一致。 经典问题场景 场景1:先更新数据库,再删除缓存。…...

Anaconda环境中conda与pip命令的区别

文章目录 conda与pip的基本区别在Anaconda环境中的实际差异安装包环境管理依赖解决示例最佳实践建议 常见问题解答 conda与pip的基本区别 包来源与生态系统 conda:从Anaconda默认仓库或conda-forge等渠道获取包 不仅管理Python包,还能管理非Python依赖&…...

使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门

一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…...

每日c/c++题 备战蓝桥杯(P1002 [NOIP 2002 普及组] 过河卒)

洛谷P1002 [NOIP 2002 普及组] 过河卒 题解 题目描述 过河卒是一道经典的动态规划题目。题目大意是:一个卒子从棋盘左上角(0,0)出发,要走到右下角(n,m),棋盘上有一个马在(x,y)位置,卒子不能经过马所在位置及其周围8个位置。求卒…...

kubectl系列(十二):查询pod的resource 配置

在 Kubernetes 中,可以通过 kubectl 命令快速查询 Pod 的资源请求(requests)和限制(limits)配置。以下是多种方法实现这一目标: 1. 查看 Pod 的资源请求和限制(基础版) 使用 kubec…...

前端面试2

1. 面试准备 1. 建立自己的知识体系 思维导图ProcessOn框架Vue elementUI自查 https://zh.javascript.info/ 借鉴 https://juejin.cn/post/6844904103504527374http://conardli.top/blog/article/https://github.com/mqyqingfeng/Bloghttp://47.98.159.95/my_blog/#html 2.技能…...

使用 Java 反射动态加载和操作类

Java 的反射机制(Reflection)是 Java 语言的一大特色,它允许程序在运行时检查、加载和操作类、方法、字段等元信息。通过 java.lang.Class 和 java.lang.reflect 包,开发者可以动态加载类、创建实例、调用方法,甚至在运行时构造新类。反射是 Java 灵活性的核心,广泛应用于…...

基于Dockers的Bitwarden的私有本地部署

基于Dockers的Bitwarden的私有本地部署 文章目录 基于Dockers的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ ,连接不是很稳定,也没有安全感,所以我选择…...

spark-Schema 定义字段强类型和弱类型

在数据处理和存储中,Schema(模式)定义了数据的结构和字段属性,其中字段的强类型和弱类型是重要的概念,直接影响数据的验证、存储和处理方式。以下是详细解释: 1. 强类型(Strongly Typed&#x…...

【第35节 数据库设计】

本章目录: 一、节概述二、知识详解1. 数据库设计的基本步骤2. 用户需求分析3. 概念结构设计(E-R建模)4. 逻辑结构设计5. 物理结构设计6. 数据库实施7. 数据库运行维护8. 商业智能(BI)与数据仓库数据仓库的特点: 9. OLT…...

C++基本知识 —— 缺省参数·函数重载·引用

C基本知识 —— 缺省参数函数重载引用 1. 缺省参数2. 函数重载3. 引用3.1 引用的基础知识3.2 引用的作用3.3 const 引用3.4 指针与引用的关系 1. 缺省参数 什么是缺省参数?缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候,如…...

大数据基础——Ubuntu 安装

文章目录 Ubuntu 安装一、配置电脑二、安装系统 Ubuntu 安装 一、配置电脑 1、进入VMware 2、选择配置类型 3、选择硬件兼容性版本 4、当前虚拟机的操作系统 选择“稍后安装操作系统”(修改) 5、选择虚拟机将来需要安装的系统 选中“Linux”和选择…...

英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B

一、模型概述 OpenCodeReasoning-Nemotron-32B 是一个大型语言模型,基于 Qwen2.5-32B-Instruct 开发,专为代码生成推理任务进行了后续训练,支持 32,768 个标记的上下文长度,适用于商业和非商业用途。 二、性能表现 在 LiveCode…...

苍穹外卖-创建阿里云oss工具包

添加配置信息: sky:alioss:endpoint: ***access-key-id: ***access-key-secret: ***bucket-name: *** 把配置的内容转换成对象: Component ConfigurationProperties(prefix "sky.alioss") Data public class AliOssProperties {private St…...

代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历

589.N叉数的前序遍历: 状态:已做出 思路: N叉树的前序遍历和二叉树很像,我这里使用栈来实现。首先把根结点入栈,然后删除栈顶节点后把栈顶节点的所有子树都插入到栈,这里需要注意的是插入的方式是从最后一…...

鸿蒙跨平台开发教程之Uniapp布局基础

前两天的文章内容对uniapp开发鸿蒙应用做了一些详细的介绍,包括配置开发环境和项目结构目录解读,今天我们正式开始写代码。 入门新的开发语言往往从Hello World开始,Uniapp的初始化项目中已经写好了一个简单的demo,这里就不再赘述…...

面试中常问的设计模式及其简洁定义

🎯 一、面试中常问的设计模式及其简洁定义 模式名常被问到解释(简洁)单例模式✅ 高频保证一个类只有一个实例,并提供全局访问点。工厂模式✅ 高频创建对象的接口由子类决定,屏蔽了对象创建逻辑。抽象工厂模式✅提供多…...

关于 js:6. 网络与加密模块

一、AJAX AJAX(Asynchronous JavaScript And XML) 异步 JavaScript 与 XML(现在多为 JSON) 它允许网页在不重新加载整个页面的情况下,从服务器请求数据并更新页面内容。 主要用途: 提交表单时无需刷新页…...

量化交易系统开发经验分享--回测框架调研

一、前言 这段时间在集中做一个量化交易系统的开发任务,目前系统的MVP已经完成开发,后续会整理一些经验与成果和大家交流。刚好有一个前期做策略回测这块的调研,下面把调研的成果做一个整理总结先给大家分享一下,请批评指正。 在介…...

[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c

本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...

【ajax基础】

提示:文章为 学习过程中的记录实践笔记。有问题欢迎指正。 文章目录 前言一、实现步骤二、完整示例三、封装总结 前言 AJAX 不是编程语言,是一种从网页访问web服务器的技术。 可以实现不刷新页面更新网页 在页面加载后从服务器请求/获取数据 在后台向服…...

Nodejs核心机制

文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…...

Kubernetes 集群部署应用

部署 Nginx 应用 命令行的方式 1. 创建 deployment 控制器的 pod # --imagenginx:这个会从 docker.io 中拉取,这个网站拉不下来 # kubectl create deployment mynginx --imagenginx# 使用国内镜像源拉取 kubectl create deployment mynginx --imaged…...

【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战

深入理解线程池设计与应用:高效并发编程的秘密 一. 线程池1.1 什么是线程池1.2 线程池的优点1.3 线程池的应用场景 二. 线程池设计三. 单例模式3.1 什么是单例模式3.2 单例模式特点3.3 实现单例模式方法3.3.1 饿汉实现⽅式3.3.2 懒汉实现⽅式 四. 线程安全和重入问题…...

学习和测试WebApi项目限制客户端ip访问接口(基于中间件)

WebApi项目需要限制仅允许有限的客户端访问接口,百度相关内容,网上很多介绍WebApi接口IP限流的文章,稍微调整就能用于限制IP访问,微软官网中也有文章介绍客户端 IP 安全列表(参考文献1),可以通过…...

闲鱼智能客服机器人-实现闲鱼平台7×24小时自动化值守

专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感知对话。 🌟 核心特性 智能对话引擎 功能模块技术实现关键特性上下文感知会话历史存储轻量级对话记忆管理,完整对话历…...

Apache Ranger 2.2.0 编译

安装包下载: https://ranger.apache.org/download.html 编译环境: Linux centos7jdk 1.8maven 3.9.6gitpython 3 git 安装 yum -y install gitpython3安装 yum install epel-release -y yum install python3 python3-devel -y批量安装开发工具套件 …...

实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API

实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API 理论千遍,不如动手一遍!在前面几篇文章中,我们了解了 Serverless 的概念、FaaS 的核心原理以及 BaaS 的重要作用。现在,是时候把这些知识运用起来,亲手构建一个简单但完整的 Serverless 应用了。 …...

鱼眼相机生成-BEV鸟瞰图-入门教程

目录 原理介绍 1. ‌IPM与BEV转换的核心原理‌ 2. ‌尺度信息的来源‌ 3. ‌尺度信息的准确性限制‌ 4. ‌实际应用中的处理方法‌ 代码实现: 360 BEV环视拼接算法 一、核心算法流程‌ 三、实际应用挑战与优化‌ 四、开源实现参考 原理介绍 1. ‌IPM与BEV转换的核心…...

设计模式简述(十八)享元模式

享元模式 描述基本组件使用 描述 当内存中存在大量类似的对象时,可以考虑使用享元模式减少整体内存占用。 可以将相同的部分和不同的部分进行拆分,以达到多个对象共享相同部分内存的目的。 基本组件 通常享元对象通过共享的属性映射一个享元对象。 公…...

Google语法整理

以下是从整理出的 Google 语法: site:指定域名,如 “apache site:bbs.xuegod.cn”,可查询网站的收录情况 。 inurl:限定在 url 中搜索,如 “inurl:qq.txt”,可搜索 url 中包含特定内容的页面&a…...

【每日一题 | 2025年5.5 ~ 5.11】搜索相关题

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.5】P3717 [AHOI2017初中组] cover2. 【5.6】P1897 电梯里的尴尬3. 【5.7】P2689 东南西北4. 【5.8】P1145 约瑟夫5. 【5.9】P1088 [NOIP 2004 普及组] 火星人6. 【5.10】P1164 小A点菜7. 【5.11】P101…...

【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

C++ stl中的priority_queue的相关函数用法

文章目录 priority_queuepriority_queue定义方式priority_queue相关函数 priority_queue priority_queue 称为 优先级队列,默认使用vector作为底层存储数据的容器,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用…...

软件架构师知识点总结

一、综合知识 软件架构师综合知识总结-CSDN博客 二、案例 软件架构师案例知识点总结-CSDN博客 三、论文 1、题目类型:八大架构;系统开发(开发方法/模型、需求分析、测试等);系统可靠性、安全性、容错技术等&#…...

MySQL数据库常见面试题之三大范式

写在前面 此文章大部分不会引用最原始的概念,采用说人话的方式。 面试题:三大范式是什么?目的是什么?必须遵循吗? 假设有一张表(学号,姓名,课程,老师) 是…...

Scrapy 核心组件解析:Request Response 的深度应用与实战

Scrapy 是 Python 生态中最强大的爬虫框架之一,其核心组件 Request 和 Response 承担着数据抓取与处理的关键任务。本文深入解析 Scrapy 2.13.0 中 Request 和 Response 的高级用法,涵盖参数配置、回调函数、错误处理、子类扩展等,并结合 综合…...

mybatis执行sql过程

一、配置加载阶段​​ ​​1. 读取全局配置(mybatis-config.xml)​​ ​​入口类​​:SqlSessionFactoryBuilder.build()​​关键组件​​: XMLConfigBuilder:解析全局配置文件。Configuration:存储所有配…...

OceanBase 4.3版本向量数据库部署

OceanBase 4.3版本向量数据库部署 安装包准备最低资源配置重要的准备事项服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 部署OAT工具初始化OBServer服务器使用oatcli部署OB集群安装OceanBase软件初始化OceanBase集群 启用向量检索功能 OceanBase最新的V4.3版本开始支持向…...

LeetCode 941. 有效的山脉数组 java题解

https://leetcode.cn/problems/valid-mountain-array/description/ 双指针 class Solution {public boolean validMountainArray(int[] arr) {int lenarr.length;if(len<3) return false;int left0,rightlen-1;while(left1<len&&arr[left]<arr[left1]){left…...

基于Java和高德开放平台的WebAPI集成实践-以搜索POI2.0为例

目录 前言 一、高德搜索API简介 1、高德开放平台 2、搜索功能介绍 3、部分API介绍 二、Uniapi集成高德API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、常见问题与优化 四、总结 前言 在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff…...

Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航

创建Ubuntu22.04 容器 docker pull ubuntu:22.04 #下载22.04镜像 docker images #查看已下载镜像 #根据镜像创建容器 sudo docker run -it -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY:0 --nethost -e GDK_SCAL…...