SpringAI介绍及本地模型使用方法
博客原文地址
前言
Spring在Java语言中一直稳居高位,与AI的洪流碰撞后也产生了一些有趣的”化学反应“,当然你要非要说碰撞属于物理反应也可以,
在经历了一系列复杂的反应方程后,Spring家族的新成员——SpringAI,就此诞生。
需要注意的是,springai目前仍处于试验阶段,可能会出现许多不稳定因素,希望各位使用者能放平心态面对BUG(或者去issues里发表自己的见解)
简介
Spring AI 项目为开发 AI 应用程序提供了 Spring 友好的 API 和抽象类。
其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI 领域,并将使用 POJO 作为应用程序的构建块推广到 AI 领域。
github仓库:spring-projects/spring-ai: An Application Framework for AI Engineering
目前该项目已经集成了OpenAI、Azure OpenAI、Hugging Face、Ollama等API。
我们一般对于AI类项目嵌入JAVA的做法为:
-
开发java后端和前端部分代码
-
确定功能需求,如文本生成类项目,即接收部分参数,返回一个String文本
-
确定模型主题,如BERT/T5等等
-
对模型进行训练或微调,并编写使用方法代码
-
使用web框架(如:FastAPI/Flask)开放接口,规范接参收参格式
-
java使用webclient(也可以用别的)请求接口调用AI服务
-
测试联调(你也可以选择一步一测试,都可以)
对于具体的模型对接代码可以参考我的Transformers文章中有详细的对于模型使用和训练的代码:transformer库 | ADulcimer Blog
所以SpringAI也就相当于是集合了大部分厂商的API接口,提供调用,再进行一些java适配和代码优化等等。最终也是通过接惨(文本和key等等)然后传参,被java接收
请注意:springai的API调用并不能让你在离线模式进行大模型的访问,如果你是AI开发人员,那么springai可以让你在java中离线运行本地torch或其他模型,但是相比于python还是较为局限,但如果你只是通过此技术调用大模型API,那么离线模式下是无法实现对话功能的
应该足够清楚的表明了: springAI到底是个什么技术,总结一下:
Spring AI 是一个强大的工具,适合那些已经在使用 Spring 框架的开发者,并且希望将 AI 能力集成到他们的企业级应用中。它的优势在于与 Spring 生态系统的无缝集成和企业级支持,但对于初学者或者需求较简单的 AI 项目来说,它可能过于复杂
Python开AI接口区别
SpringAI在解决复杂问题时,会比传统的AI开接口更加优秀,请注意,这里说的是复杂的业务逻辑,如果是复杂的AI功能,比如,需求不断微调,训练,或者更换模型,对模型进行更改等等等等,Python开接口的方式还是会更加灵活,如果说业务复杂,但AI需求功能单一,则使用SpringAI,如果业务逻辑简单,则都可以使用python接口的方式,因为SpringAI是一个很重的框架
1、企业级架构与可扩展性
-
Spring AI 是构建在 Spring 框架 上的,Spring 本身就是为企业级、分布式、高并发系统设计的框架。因此,如果你的需求涉及到复杂的业务逻辑、大规模的用户交互或者高可用、高并发的环境,Spring AI 提供的 可扩展性 和 可靠性 将使得系统更加稳定。
-
Spring Cloud 和 Spring Boot 等工具,使得它在微服务架构中的表现非常出色,这对于那些需求复杂的系统(如需要多个模块、服务和组件的系统)来说,是一个很大的优势。
2. 集成能力
-
Spring AI 能够无缝集成 Java 生态系统中的其他工具和技术,比如数据库、消息队列、缓存系统、认证与授权、安全等模块。如果你的系统已经在使用 Spring 框架,这使得 Spring AI 能够与现有的基础设施进行更好的集成。
-
如果需要和传统的 Java 后端服务、企业级应用 或 第三方服务(如支付、ERP 系统) 进行集成,Spring 提供的成熟的解决方案和丰富的生态系统使得这种集成更加顺畅。
3. 高并发和高可靠性
-
Spring 框架和相关工具(如 Spring Boot、Spring Cloud)具有极强的 高并发 支持和 高可用 设计。对于大规模用户请求、海量数据处理等需求,Spring 框架能够通过 多线程、异步处理、负载均衡、服务容错、分布式系统管理等技术 来确保系统的稳定性和高效运行。
-
在这些场景下,Spring AI 提供的 性能优化 和 容错机制 使得系统更加可靠,而 Python 写的模型可能需要通过额外的优化和工具来应对这些挑战。
4. 生产环境的成熟度与稳定性
-
Spring 框架已经在 生产环境 中得到了广泛的应用,尤其是在 大型企业级应用 中,具有非常高的稳定性和可靠性。Spring 提供了很多企业级功能,如 事务管理、缓存、日志记录、调试工具 等,这些功能对于复杂需求的应用至关重要。
-
对比之下,传统的 Python 接口通常更多用于 原型开发、快速部署 或 中小规模应用,虽然在灵活性和开发速度上有优势,但在大规模生产环境中的稳定性和可维护性上可能没有 Spring 那么强。
5. 安全性
-
在涉及到 敏感数据、权限管理、认证与授权 的复杂需求时,Spring 提供了丰富的 安全机制。通过 Spring Security 等工具,可以高效地管理和控制用户权限、进行身份验证、数据加密等,确保系统的安全性。
-
Python 虽然也有相关的库(如 Flask-Security、Django Security 等),但在集成和管理方面可能没有 Spring 的安全框架那么成熟和全面。
6. DevOps 支持与自动化部署
-
Spring 在 DevOps 和自动化部署方面也有很强的支持,Spring Boot 和 Spring Cloud 的集成功能使得部署、监控、日志管理和版本管理等任务更加自动化,极大地提高了运维效率。
-
Python 部署方面也可以使用 Docker、Kubernetes 等工具,但由于 Spring 提供的微服务架构和生产环境支持更加丰富,Spring AI 在大规模应用部署和运维上表现更佳。
7. 维护与支持
-
对于 大型团队 和 长期项目,Spring 框架提供了成熟的企业级支持,文档和社区也非常强大。对于一些需求复杂、时间长的项目,使用 Spring AI 可以更容易进行 长期维护 和 团队协作。
-
Python 的开发者社区虽然庞大,但在企业级开发、集成和维护方面,可能不如 Spring 框架在行业中的积淀和支持那么全面。
代码部分
根据官方文档,分为两种方式调用,一种是springboot项目,交给spring管理
参考官方文档:transforms(我们以它为例)
(ONNX)变形金刚 ((ONNX) Transformers) _ Spring AI 1.0.0-SNAPSHOT 中文文档(官方文档中文翻译) —— CADN开发者文档中心
参考maven文档:
repo.spring.io
1、Springboot管理
1、引入依赖:
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-transformers-spring-boot-starter</artifactId>
</dependency>
2、编写application.yml配置文件
spring:ai:embedding:transformer:onnx:model-uri: https://huggingface.co/intfloat/e5-small-v2/resolve/main/model.onnxtokenizer:uri: https://huggingface.co/intfloat/e5-small-v2/raw/main/tokenizer.jsoncache:directory: /tmp/ai-embedding-transformerenabled: true
部分的配置详情如下:
Property
Description
spring.ai.embedding.transformer.enabled
启用 Transformer Embedding 模型。
spring.ai.embedding.transformer.tokenizer.uri
Transformer分词器地址
spring.ai.embedding.transformer.tokenizer.options
模型的一些参数,max_length这些
spring.ai.embedding.transformer.cache.enabled
是否启用缓存
spring.ai.embedding.transformer.cache.directory
缓存路径
spring.ai.embedding.transformer.onnx.modelUri
Transformers预训练模型地址
spring.ai.embedding.transformer.onnx.gpuDeviceId
GPU设备ID
这些是一些常用的,具体请参考官方文档
3、搭建controller和service层
import com.adulcimer.ai.service.ToxicityService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
class MyController {@Resourceprivate ToxicityService toxicityService;@PostMapping("/test")public String test() throws Exception {toxicityService.modelTest();return "Hello, World!";}
}import jakarta.annotation.Resource;
import org.springframework.ai.transformers.TransformersEmbeddingModel;
import org.springframework.stereotype.Service;import java.util.Arrays;@Service
public class ToxicityService {@Resourceprivate TransformersEmbeddingModel transformersEmbeddingModel;public void modelTest() throws Exception {float[] embed = transformersEmbeddingModel.embed("Hello World");System.out.println(Arrays.toString(embed));}
}
4、结果
我们已经得到模型的返回值了,成功使用springboot调用了AI模型
具体的业务逻辑也可以轻松嵌入,是不是很轻松?
2、自定义配置
当然你也可以不使用spring的管理
TransformersEmbeddingModel embeddingModel = new TransformersEmbeddingModel();embeddingModel.setTokenizerResource("classpath:/onnx/all-MiniLM-L6-v2/tokenizer.json");embeddingModel.setModelResource("classpath:/onnx/all-MiniLM-L6-v2/model.onnx");embeddingModel.setResourceCacheDirectory("/tmp/onnx-zoo");embeddingModel.setTokenizerOptions(Map.of("padding", "true"));embeddingModel.afterPropertiesSet();List<List<Double>> embeddings = this.embeddingModel.embed(List.of("Hello world", "World is big"));
然后正常使用架构搭建即可
最后
以上部分内容和图片来自于官方文档,本文中已声明原作地址。
相关文章:
SpringAI介绍及本地模型使用方法
博客原文地址 前言 Spring在Java语言中一直稳居高位,与AI的洪流碰撞后也产生了一些有趣的”化学反应“,当然你要非要说碰撞属于物理反应也可以, 在经历了一系列复杂的反应方程后,Spring家族的新成员——SpringAI,就…...
空指针异常的触发
面向对象分析: 当你要吃饭,饭是对象,提供吃饭这个功能,所以饭为null时,你去调吃饭这个功能,就是去操作饭这个抽象模型,但这个模型是null,就是空指针异常了,但如果有了饭…...
尚硅谷爬虫note15n
1. 多条管道 多条管道开启(2步): (1)定义管道类 (2)在settings中开启管道 在pipelines中: import urllib.request # 多条管道开启 #(1)定义管道类 #(2)在setti…...
基于SSM+Vue的汽车维修保养预约系统+LW示例
1.项目介绍 系统角色:管理员、员工、用户功能模块:用户管理、员工管理、汽车类型管理、项目类型管理、维修/预约订单管理、系统管理、公告管理等技术选型:SSM,vue(后端管理web),Layuiÿ…...
【商城实战(13)】购物车价格与数量的奥秘
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
在线json转ArkTs-Harmonyos
轻松将 JSON 数据转换为类型安全的 ArkTs 接口。快速准确地生成代码,提升开发效率,告别手动编写,让您的开发流程更加流畅! gotool...
Cannot resolve symbol ‘view‘ Androidstudio报错解决办法
报错原因 出现 Cannot resolve symbol view 错误是因为代码中的 view 变量未正确定义或不在当前作用域内。以下是常见场景和解决方法: 场景 1:在 点击事件监听器 中获取 view 如果代码在 OnClickListener 的 onClick 方法中,view 是方法的参…...
三级缓存架构
三级缓存架构是一种通过分层缓存设计来优化系统性能、降低数据库负载、提高数据访问效率的解决方案,尤其适用于高并发、高吞吐量的业务场景(如电商、社交平台、实时推荐等)。其核心思想是通过多级缓存逐层过滤请求,减少对底层存储…...
webshell一些上传心得
我们以upload-labs为基础 一、前端拦截: 如第一关 工作方式: 直接在前端拦截 绕过方式: 因为没有限制后端,所有可以用bs 绕过前端修改格式即可 将需要上传的php文件改成jpg格式 使用burp suite 拦截上传后,使用re…...
doris:阿里云 MaxCompute
MaxCompute 是阿里云上的企业级 SaaS(Software as a Service)模式云数据仓库。 什么是 MaxCompute 连接 MaxCompute 示例 -- 1. 创建Catalog。 CREATE CATALOG mc PROPERTIES ("type" "max_compute","mc.default.projec…...
MyBatis-Plus 分页查询接口返回值问题剖析
在使用 MyBatis-Plus 进行分页查询时,很多开发者会遇到一个常见的问题:当分页查询接口返回值定义为 Page<T> 时,执行查询会抛出异常;而将返回值修改为 IPage<T> 时,分页查询却能正常工作。本文将从 MyBatis-Plus 的分页机制入手,详细分析这一问题的根源,并提…...
【面试】框架
框架 1、介绍一下Spring 的 IOC2、将一个类声明为 Bean 的注解有哪些3、Bean 的作用域有哪些4、Spring 框架中的 Bean 是线程安全的吗5、Spring 容器对象的懒加载6、Spring 容器中的 bean 生命周期7、谈谈自己对于 Spring DI 的了解8、注入 Bean 的注解有哪些9、Spring Boot 如…...
MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU
2025年世界移动通信大会(MWC 2025)期间,紫光展锐联合移远通信,正式发布了全面支持5G R16特性的模组RG620UA-EU,以强大的灵活性和便捷性赋能产业。 展锐芯加持,关键性能优异 RG620UA-EU模组基于紫光展锐V62…...
《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)
目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…...
Mysql内置函数
日期函数: 例如: select current_date();---打印日期 select current_time()----打印时间 select current_timestamp();打印时间戳 select now(); ----日期时间 select date(‘2020-10-01 00:00:00’); ----提取日期进行打印: 也可以配合…...
一文了解汽车图像传感器
2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…...
cocos creator使用mesh修改图片为圆形,减少使用mask,j减少drawcall,优化性能
cocos creator版本2.4.11 一个mask占用drawcall 3个以上,针对游戏中技能图标,cd,以及多玩家头像,是有很大优化空间 1.上代码,只适合单独图片的,不适合在图集中的图片 const { ccclass, property } cc._decorator;c…...
面向高质量视频生成的扩散模型方法-算法、架构与实现【附核心代码】
目录 算法原理 架构 代码示例 算法原理 正向扩散过程:从真实的视频数据开始,逐步向其中添加噪声,随着时间步 t 的增加,噪声添加得越来越多,最终将原始视频数据变成纯噪声。数学上,t 时刻的视频数据与 t…...
vue3框架的响应式依赖追踪机制
当存在一个响应式变量于视图中发生改变时会更新当前组件的所以视图显示,但是没有视图中不写这个响应式变量就就算修改该变量也不会修改视图,这是为什么?我们能否可以理解宽泛的理解为vue组件的更新就是视图的更新,单当视图中不存在…...
Ubuntu本地部署Open manus(完全免费可用)
目录 1.介绍 2.环境搭建 3.更改配置 4.运行 1.介绍 关于由于邀请码的限制,导致很多用户无法顺利体验manus带来的ai agent体验,但是最近开源的open manus是另一个不错的选择。 先来看看运行的结果: 我让open manus帮我打开小米的主页&am…...
MacOS Big Sur 11 新机安装brew wget python3.12 exo
MacOS Big Sur 11,算是很老的系统了,所以装起来brew有点费劲。 首先安装brew 官网: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 官网加速: 按照官网的方法࿰…...
基于USB Key的Web系统双因素认证解决方案:构建安全与便捷的登录体系
摘要 在网络安全威胁日益严峻的背景下,传统的“用户名密码”认证方式已难以应对钓鱼攻击、密码窃取等风险。上海安当基于USB Key技术,推出了一套面向Web系统的双因素认证解决方案,通过硬件与密码学的深度融合,实现用户身份的高强度…...
项目工坊 | Python驱动淘宝信息爬虫
目录 前言 1 完整代码 2 代码解读 2.1 导入模块 2.2 定义 TaoBao 类 2.3 search_infor_price_from_web 方法 2.3.1 获取下载路径 2.3.2 设置浏览器选项 2.3.3 反爬虫处理 2.3.4 启动浏览器 2.3.5 修改浏览器属性 2.3.6 设置下载行为 2.3.7 打开淘宝登录页面 2.3.…...
数据安全_笔记系列12:数据访问控制中的三个管理员权限划分
数据安全_笔记系列04:数据访问控制中的“三权分立”机制详解 文章链接:https://blog.csdn.net/fen_fen/article/details/145852242 数据安全_笔记系列12:数据访问控制中的三个管理员权限划分 这三个角色的职责和权限划分。 系统应具有相互独…...
通义千问本地配置并实现微调
通义千问本地配置并实现微调 最小Qwen模型大小942mb from modelscope import snapshot_download model_dir = snapshot_download(“qwen/Qwen2.5-0.5B”, cache_dir=“./models2.5”) Qwen2.5-0.5B:942MB from modelscope import snapshot_download model_dir = snapshot_d…...
文件上传漏洞(upload靶场)
目录 Pass-01:前端绕过 方法一:浏览器禁用js 方法二:直接修改或删除js脚本 方法三:修改后缀绕过 Pass-02:服务器检测 Pess-03:黑名单绕过 Pass-04:.htaccess文件 Pass-05:windows特性和user.ini 方法一:php.自动解析为ph…...
Leetcode 刷题记录 05 —— 普通数组
本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答。 目录 01 最大子数组和 方法一:动态规划(卡达尼算法) 方法…...
随机过程的核心概念与Matlab实现
摘要 本文系统讲解随机过程的核心理论与Matlab实现,涵盖随机变量分布、蒙特卡罗仿真、信息熵计算及平稳过程特性。通过高斯、瑞利分布的生成代码、蒙特卡罗积分估计、窄带信号仿真等案例,结合功率谱分析与自相关函数推导,演示随机过程建模与…...
git worktree的使用
git worktree 是 Git 提供的一个强大功能,允许你在同一个仓库中同时创建多个工作目录,每个目录对应一个分支,从而实现并行开发。以下是 git worktree 的常用命令和使用方法: 1. 创建新的工作目录(Worktree)…...
delphi 正则提取html中的内容
function ExtractTextFromHTML(const HTML: string): string; var RegEx: TRegEx; begin Result := HTML; // 移除<script>标签及其内容 Result := TRegEx.Replace(Result, <script.*?>.*?</script>, , [roIgnoreCase, roSingleLine]); // 移除<s…...
深度学习系列79:Text2sql调研
参考 https://github.com/topics/text-to-sql 这里是一些资源:https://github.com/eosphoros-ai/Awesome-Text2SQL/blob/main/README.zh.md 这里是综述文章:https://zhuanlan.zhihu.com/p/647249972 1. 数据集 Spider: 一个跨域的复杂text2sql数据集&a…...
分布式锁—5.Redisson的读写锁一
大纲 1.Redisson读写锁RedissonReadWriteLock概述 2.读锁RedissonReadLock的获取读锁逻辑 3.写锁RedissonWriteLock的获取写锁逻辑 4.读锁RedissonReadLock的读读不互斥逻辑 5.RedissonReadLock和RedissonWriteLock的读写互斥逻辑 6.写锁RedissonWriteLock的写写互斥逻辑…...
【AI热点】Manus技术细致洞察报告(篇2)
针对大家对Manus产品褒贬不一的现象,基于近期对Manus的多方实测、公开信息与开源竞品的比对分析而撰写,旨在为从业者、技术爱好者以及潜在用户提供一个较为系统、专业的视角。报告将围绕Manus的核心原理、功能特点、技术亮点、常见应用场景与不足&#x…...
虚幻基础:动画层接口
文章目录 动画层:动画图表中的函数接口:名字,没有实现。动画层接口:由动画蓝图实现1.动画层可直接调用实现功能2.动画层接口必须安装3.动画层默认使用本身实现4.动画层也可使用其他动画蓝图实现,但必须在角色蓝图中关联…...
C#的简写技巧
在C#中,有许多简写技巧可以让你的代码更加简洁高效,以下是一些常见的: 1. 变量声明与初始化 使用 var 关键字 :当你能从初始化表达式中推断出变量类型时,可以使用 var 关键字代替显式的类型声明。例如: va…...
【js逆向】
地址:aHR0cHM6Ly93d3cud2VpYm90b3AuY24vMi4wLw f12进入 debugger,过debugger 查看预览数据 全局搜索 请求网址中的 api.weibotop.cn 在下方疑似找到了加密和解密的函数 断点调试 控制台输出 那个n就是 常见的 cryptoJs库 const cryptoJs require(cry…...
汽车一键启动按钮更换注意事项
汽车一键启动开关更换教程 一键启动开关是现代汽车中常见的便捷配置,但随着时间的推移,这个部件可能会出现失灵的情况。当一键启动开关发生故障时,许多车主选择自行更换。以下是整理的一键启动开关更换教程: 更换前的准备 选择匹…...
为wordpress自定义一个留言表单并可以在后台进行管理的实现方法
要为WordPress添加留言表单功能并实现后台管理,你可以按照以下步骤操作: 1. 创建留言表单 首先,你需要创建一个留言表单。可以使用插件(如Contact Form 7)或手动编写代码。 使用Contact Form 7插件 安装并激活Contact Form 7插件。 创建…...
Hive函数、外部表和分区表
目录 1. Hive自定义函数1.1 pom.xml中依赖配置1.2 Hive自定义函数示例代码1.3 打包并演示 2. 外部表3. 分区表参考 1. Hive自定义函数 Hive中简单的自定义函数需要继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF,并且实现其中的三个方法: 方法功…...
再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向
三年前我们通过 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的内部实现,而时隔三年之后,如今Riverpod 的主流模式已经是注解,那今天就让我们来聊聊 riverpod 的注解有什么特殊之处。 前言 在此之前,我们需要先回忆…...
每日一题----------String 和StringBuffer和StringBuiler重点
本质:是一个char字符数组存储字符串 总结: 1.如果字符串存在大量的修改操作,一般使用StringBuffer或者StringBuilder。 2.如果字符串存在大量的修改操作,并且单线程的情况,使用StringBuilder。 3.如果字符串存在大…...
使用AI一步一步实现若依前端(5)
功能5:侧边栏菜单动态显示 功能4:首页使用Layout布局 功能3:点击登录按钮实现页面跳转 功能2:静态登录界面 功能1:创建前端项目前言 在若依中,侧边栏显示的菜单项,是根据登录用户的角色动态显…...
如何在需求分析阶段考虑未来扩展性
在需求分析阶段考虑未来扩展性的关键在于 前瞻规划、灵活架构、标准设计。其中,前瞻规划尤为重要,因为通过全面分析业务发展趋势与技术演进,能够在初期设计阶段预留足够扩展空间,降低后期改造成本,为企业长期发展奠定坚…...
平面机械臂运动学分析
平面机械臂运动学分析 一 整体概述1 研究步骤: 二 正向1 几何分析2 matlab 仿真模拟(1)实现效果(2)matlab代码: 3 DH矩阵计算法(1)计算公式(2)计算结果验证&a…...
1688店铺所有商品数据接口详解
一、接口概述淘宝开放平台提供 1688.items.onsale.get/taobao.item_search_shop 接口,可批量获取店铺在售商品列表,包含商品 ID、标题、价格、销量、图片等核心信息。该接口适用于商品库管理、竞品监控、数据分析等场景 二、接口调用流程 前期准…...
华为hcia——Datacom实验指南——三层交换和ARP的工作原理
什么是三层交换 三层交换是指连接在同一台三层交换机上,不同vlan用户,不同网段ip,通过vlanif接口进行数据交换。 什么是ARP协议 通过网络层的ip地址解析成数据链路层的mac地址。 说白了就是通过目标ip地址去问他对应的mac地址是多少。 A…...
手脑革命:拆解Manus AI如何用“执行智能体”重构生产力——中国团队突破硅谷未竟的技术深水区
第一章:Manus AI 的技术演进与行业背景 1.1 从工具到智能体:AI 技术的范式跃迁 人工智能的发展经历了从规则驱动(Rule-based)到统计学习(Statistical Learning),再到深度学习(Deep…...
【算法】二叉树的递归遍历
前序遍历 void preOrder(Node *node){if(node ! nullptr){cout << node->data_ << " ";preOrder(node->left_);preOrder(node->right_);}} 中序遍历 void inOrder(Node *node){if (node ! nullptr){inOrder(node->left_);cout << n…...
中级网络工程师面试题参考示例(1)
一、基础理论 1. OSI七层模型与TCP/IP四层模型的区别是什么?请举例说明第三层(网络层)和第四层(传输层)的核心协议。 参考答案: OSI七层模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用…...
Java并发 vs 并行:本质区别与应用场景全解析(易混概念)
并发 vs 并行:本质区别与应用场景全解析(易混概念) 一、核心区别:从定义出发 在计算机科学中,并发(Concurrency) 和 并行(Parallelism) 是两种完全不同的任务处理模型&a…...