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

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录

  • 1. 概述
  • 2. 核心目标
  • 3. 支持的脚本语言
  • 4. 主要接口
  • 5. 脚本引擎的使用
    • 执行JavaScript脚本
    • 执行groovy脚本
      • 1. Groovy简介
      • 2. Groovy脚本示例
      • 3. 如何在Java中集成 Groovy
      • 4. 集成注意事项
  • 6. 与Java集成
  • 7. 常见应用场景
  • 8. 优缺点
  • 9. 总结

在这里插入图片描述

1. 概述

JSR223(Java Specification Request 223),也称为 Scripting for the Java Platform,是一个Java平台的标准接口,旨在让Java应用程序能够灵活地集成和执行脚本语言。它定义了一种可以在Java应用中嵌入不同脚本语言的统一接口,允许Java程序调用、执行脚本,并且支持将Java对象传递到脚本语言中。


2. 核心目标

JSR223的目标是提供一种标准的API,以便Java应用能够:

  • 动态地执行脚本代码
  • 支持多个脚本语言
  • 将Java应用中的对象传递到脚本环境中

3. 支持的脚本语言

JSR223并没有指定哪些脚本语言必须支持,但它的设计理念是能够支持多种脚本语言。常见的支持脚本语言包括:

  • JavaScript (Nashorn / GraalVM)
  • Groovy
  • JRuby
  • Jython (Python)
  • Lua
  • BeanShell

不同的脚本语言通过JSR223接口进行集成,这些脚本引擎作为JSR223的实现进行交互。


4. 主要接口

JSR223定义了几个关键接口来实现Java与脚本语言的交互:

  • ScriptEngine: 这个接口代表了一个脚本引擎,允许Java代码与具体的脚本语言引擎进行交互。每个脚本引擎都实现了这个接口。
  • ScriptEngineFactory: 用于创建脚本引擎的工厂类。通过这个工厂类,Java程序可以获得可用的脚本引擎实例。
  • Bindings: 用于在Java和脚本之间传递变量和对象。Bindings允许在脚本执行期间使用Java对象。

常见的实现类:

  • Nashorn(从Java 8开始包含,用于执行JavaScript)
  • GraalVM(一个多语言执行环境,支持更多语言的集成)

5. 脚本引擎的使用

脚本引擎是JSR223的核心部分,接下来看几个例子

执行JavaScript脚本

样例一: 使用Nashorn引擎执行JavaScript代码的示例。

package com.artisan.jsr223;
import javax.script.*;public class JSR223Example {public static void main(String[] args) throws ScriptException {// 创建一个脚本引擎管理器ScriptEngineManager manager = new ScriptEngineManager();// 获取JavaScript引擎ScriptEngine engine = manager.getEngineByName("nashorn");// 执行JavaScript代码engine.eval("print('Hello, JSR223')");// 使用绑定传递变量Bindings bindings = engine.createBindings();bindings.put("name", "Artisan");engine.eval("print('Hello, ' + name);", bindings);}
}

在这个例子中,我们通过 ScriptEngineManager 获取Nashorn引擎,执行简单的JavaScript代码,使用 Bindings 传递变量。

在这里插入图片描述


样例二:

package com.artisan.jsr223;import javax.script.*;public class JSR223Example {public static void main(String[] args) throws Exception {// 获得JavaScript的脚本引擎ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript");// 进行脚本编译String script = "function process(){\n" +"var a=10;\n" +"var b=3;\n" +"return a*b-c;\n" +"}\n" +"process()";// 检查脚本引擎是否支持编译if (scriptEngine instanceof Compilable) {Compilable compilable = (Compilable) scriptEngine;CompiledScript compiledScript = compilable.compile(script);// 绑定Java的参数Bindings bindings = new SimpleBindings();bindings.put("c", 5);// 执行并打印结果Object result = compiledScript.eval(bindings);System.out.println(result);} else {System.out.println("当前脚本引擎不支持编译功能");}}
}

在这里插入图片描述


执行groovy脚本

1. Groovy简介

Groovy是一个基于Java平台的动态语言,它简洁、表达力强,并且与Java兼容性极高。Groovy可以作为Java的脚本引擎,直接在Java应用中使用。Groovy的语法简洁,支持面向对象、闭包、动态类型等特性,通常用于快速开发和扩展功能。

2. Groovy脚本示例

假设我们要编写一个简单的Groovy脚本,来计算一个人的年龄,并根据年龄判断是否符合某个年龄段(如成年)。

// 定义一个函数来计算年龄
def calculateAge(birthYear) {def currentYear = 2024return currentYear - birthYear
}// 定义一个函数来判断是否成年
def isAdult(age) {return age >= 18
}// 调用计算年龄和判断是否成年
def birthYear = 1990
def age = calculateAge(birthYear)println("Age: ${age}")
if (isAdult(age)) {println("You are an adult.")
} else {println("You are not an adult.")
}

解释:

  • def:用于定义变量或函数,Groovy是一种动态语言,变量和函数不需要显式声明类型。
  • calculateAge:该函数接受一个出生年份,返回计算后的年龄(2024年减去出生年份)。
  • isAdult:根据传入的年龄判断是否成年,成年为18岁及以上。
  • println:Groovy的内建方法,输出结果。

运行结果:

Age: 34
You are an adult.

3. 如何在Java中集成 Groovy

假设我们希望在Java代码中动态执行这个Groovy脚本,可以通过JSR223来实现。以下是如何在Java中嵌入并执行Groovy脚本的示例:


import javax.script.*;public class GroovyTest {public static void main(String[] args) throws ScriptException {// 创建一个脚本引擎管理器ScriptEngineManager manager = new ScriptEngineManager();// 获取Groovy引擎ScriptEngine engine = manager.getEngineByName("groovy");// 定义Groovy脚本String script ="def calculateAge(birthYear) { " +"    def currentYear = 2024; " +"    return currentYear - birthYear; " +"}\n" +  // 添加换行符"def isAdult(age) { " +"    return age >= 18; " +"}\n" +  // 添加换行符"def birthYear = 1990; " +"def age = calculateAge(birthYear); " +"println('Age: ' + age); " +"if (isAdult(age)) { " +"    println('You are an adult.'); " +"} else { " +"    println('You are not an adult.'); " +"} ";// 执行Groovy脚本engine.eval(script);}
}

步骤:

  1. 使用 ScriptEngineManager 获取Groovy引擎。
  2. 编写Groovy脚本并将其传递给引擎。
  3. 使用 eval() 方法执行脚本,并输出结果。

运行结果:

Age: 34
You are an adult.

4. 集成注意事项

  • Groovy的依赖:如果在Java项目中使用Groovy脚本,需要将Groovy的JAR包(例如 groovy-jsr223-x.y.z.jar)添加到项目的依赖中。

Maven依赖示例:

   <dependency><groupId>org.apache.groovy</groupId><artifactId>groovy-jsr223</artifactId><version>4.0.24</version></dependency>
  • 性能考虑:Groovy作为动态语言,性能可能不如纯Java代码,特别是在大规模或频繁执行的场景中,可能会引入一定的开销。

6. 与Java集成

  • 变量传递:JSR223允许将Java对象传递给脚本语言。通过 Bindings 接口,可以将Java对象存储在脚本的上下文中,脚本语言也能访问这些对象。

  • 动态执行:使用脚本语言可以动态地执行Java代码段,这对于快速开发和修改业务逻辑非常有效。例如,可以通过Java调用Groovy脚本来快速增加一些动态功能而无需重新编译整个应用。


7. 常见应用场景

JSR223可以广泛应用于多个领域:

  • 动态配置和脚本扩展:在Java应用中使用脚本来动态修改行为。例如,可以用Groovy编写自定义的配置文件解析器。
  • 自动化测试:集成脚本语言用于编写自动化测试脚本。
  • Web应用:在Web应用中,使用JSR223集成脚本语言来编写自定义插件或扩展功能。例如,支持JavaScript来扩展服务器端的业务逻辑。
  • 数据处理:在Java应用中使用脚本来处理数据或执行算法。

8. 优缺点

优点:

  • 灵活性:脚本语言的引入使得Java应用能够动态修改行为,增加了灵活性。
  • 简化开发:无需重新编译整个Java应用,可以动态执行脚本。
  • 多语言支持:能够使用多种脚本语言,适应不同开发者的需求。

缺点:

  • 性能问题:执行脚本语言可能比直接执行Java代码慢,尤其是当脚本频繁执行时。
  • 维护性问题:使用脚本时,可能会增加代码的复杂性,特别是当脚本代码没有很好地组织和文档化时。
  • 调试困难:脚本代码的调试相对困难,尤其是当脚本与Java代码紧密集成时。

9. 总结

JSR223提供了一个标准的接口来将脚本语言集成到Java应用中,支持多个脚本引擎和多种脚本语言的调用。它可以极大地提升Java应用的灵活性和扩展性,尤其适用于动态修改应用行为的场景。然而,使用JSR223时也要注意性能和维护性问题。

在这里插入图片描述

相关文章:

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223&#xff08;Java Spe…...

vue3 基本使用

Vue 3 提供了多种方式来构建用户界面&#xff0c;包括选项式 API 和 Composition API。下面我将详细介绍 Vue 3 的基本使用和语法&#xff0c;主要集中在选项式 API 上&#xff0c;因为这对于初学者来说更容易上手。 1. 创建 Vue 项目 如果你还没有一个 Vue 项目&#xff0c;…...

Redis自学之路—高级特性(实现消息队列)(七)

目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…...

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) code review! 参考笔记 1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本) 2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) 文章目录 ROS基本框架2——在ROS开发中创建并使用自定义…...

计算机的错误计算(一百七十二)

摘要 探讨 MATLAB 对于算式 的计算误差。 例1. 在 MATLAB 中计算 的值。 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB 的输出中只有3位正确数字&#xff0c;有效数字的错误率为 (16-3)/16 81.25% . 因为16位的正确输出为 0.2971242332737277e-18&#xff08;ISReals…...

贵州大学oj平台高级语言第九次作业(四)

题目&#xff1a;链表的基础操作 题目描述 链表是软件中一种最基本的数据结构&#xff0c;它是用链式存储结构实现数据存储的线性表。它较顺序表(如数组)而言在插入和删除数据时不必移动其后的大批量元素。现在给你一些整数&#xff0c;然后会频繁地插入和删除其中的某些元素&a…...

手机卡限速丨中国移动5G变3G,网速500kb

以下猜测错误&#xff0c;又有新的猜测&#xff1a;河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起&#xff0c;中国移动集团内部将开启跨省流量结算” 在深圳四五年了&#xff0c;之前没有过&#xff0c;就从上个月开始。11月底解除限速&#xff0c;12月刚开…...

种花问题算法

假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xff0c;由若干 0 和 1 组成&#xff0c;其中 0 …...

Node.js-Mongodb数据库

MongoDB MongoDB是什么&#xff1f; MongoDB是一个基于分布式文件存储的数据库 数据库是什么&#xff1f; 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序&#xff08;软件&#xff09; 数据库作用&#xff1f; 对数据进行增、删…...

Nginx

目录 基本介绍 Nginx核心功能 Nginx下载&安装&启动 配置防火墙 Nginx常用命令 Nginx配置文件 全局块 events块 http块 http全局块 server 块 检查配置信息 快速入门 安装JDK 安装Tomcat 反向代理分析 Location语法规则 反向代理配置-Location实例 …...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)

通过网盘分享的文件&#xff1a;如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

HTML5系列(7)-- Web Storage 实战指南

前端技术探索系列&#xff1a;HTML5 Web Storage 实战指南 &#x1f5c4;️ 致读者&#xff1a;本地存储的新纪元 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 中的 Web Storage 技术&#xff0c;这是一个强大的本地存储解决方案&#xff0c;让我们能…...

RocketMQ: 保证消息的可靠性投递

概述 在分布式系统中&#xff0c;消息队列作为异步通信的重要组件&#xff0c;其可靠性和稳定性至关重要RocketMQ 是阿里巴巴开源的一款高性能、高可靠性的分布式消息中间件&#xff0c;广泛应用于各种场景&#xff0c;如交易订单处理、日志收集、流计算等 RocketMQ 的可靠性…...

消息传递神经网络(Message Passing Neural Networks, MPNN)

消息传递神经网络&#xff08;Message Passing Neural Networks, MPNN&#xff09; 一、引言二、消息传递框架概述1.消息传递阶段&#xff08;1&#xff09;消息生成与传播-message&#xff08;2&#xff09;消息聚合-aggregate&#xff08;3&#xff09;消息更新-update&#…...

Python干货总结篇:列表、字典、集合、元组的区别与用途

前言&#xff1a; 更详细知识点&#xff0c;搞懂列表、字典、集合、元组到底是什么&#xff0c;可关注主页文章&#xff1a;Python知识点精汇&#xff01; 目录 一、特点与用途 1.列表&#xff1a;a[ ] 2.集合&#xff1a;a{ } 3.字典&#xff1a;a{key:value} 4.元组&am…...

vue.js学习(day 18)

实例&#xff1a;面经基础版...

【Gitlab】CICD使用minio作为分布式缓存

1、安装minio 下载适合自己系统版本的安装文件https://dl.min.io/server/minio/release/windows-amd64/ yum install xxx.rpm 2、配置/etc/profile export MINIO_ACCESS_KEYroot [ui登录账号] export MINIO_SECRET_KEYminioDev001 [ui登录密码] export MINIO_OPTS"…...

医院管理系统

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 医院管理系统 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计…...

编译器优化技术

方法内联 逃逸分析 公共子表达式消除 数据边界检查消除...

高斯消元——acwing

题目一&#xff1a;高斯消元解线性方程组 883. 高斯消元解线性方程组 - AcWing题库 分析 代码 #include<bits/stdc.h> using namespace std;const int N 110; const double eps 1e-6; // 注意了double, 和1e-6 ,,这样才是double的0 int n;double a[N][N];int guass…...

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…...

[代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和

前言 哈希表是什么&#xff1f;一句话带你理解&#xff0c;简单来说我们对于杂乱的数据&#xff0c;怎么快速找到数据&#xff0c;如何做呢&#xff1f;一般的做法就是遍历复杂度为o(N)去找寻一个数据&#xff0c;但是吧&#xff0c;我们这样思考的话&#xff0c;还是花了大量时…...

linux网络抓包工具

linux网络抓包工具 一、tcpdump1.1 基本用法1.2 龙芯平台实例操作 二、wireshark2.1 主要功能2.2 龙芯平台实例操作 一、tcpdump tcpdump 指令可列出经过指定网络界面的数据包文件头&#xff0c;可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协…...

运维工程师.云计算工程师面试题.考试题

《(全国)运维自动化阶段第1套卷》 卷面总分 题号 单选题 90 题分 得分 一、单选题(每题2分,共计70分;得分____) 1. 下面哪个选项可以做变量名称?( ) A、if B、123abc C、for D、User_Name 2. 哪种数据类型可以做增,删,改相关操作?( ) A、字符串 B、列表 C、元…...

递归1——递归入门

目录 1.递归 2.递归的基本题目 2.1.题目一——P5739 【深基7.例7】计算阶乘 - 洛谷 | 计算机科学教育新生态 2.2.题目二——B2064 斐波那契数列 - 洛谷 | 计算机科学教育新生态 2.3.题目三——B2142 求 123...N 的值 - 洛谷 | 计算机科学教育新生态 2.4.题目四——B2144…...

XuperChain核心流程

04-XuperChain核心流程 0 XuperChain架构图 核心框架 Xuper Chain主要由 Xuper Core 这个核心引擎来构建。Xuper Core 分为三个部分&#xff1a; 基础组件&#xff1a;日志、存储、监控等关键组件&#xff0c;以及密码学库等基本组件。 核心组件&#xff1a;包括共识、合约、账…...

2024.12.2工作复盘

1.今天学了什么&#xff1f; 简单的写了一篇博客&#xff0c;是关于参数校验的问题&#xff0c;参数校验&#xff0c;一个是前后端校验到底一不一致&#xff0c;一个是绕过前端校验&#xff0c;看后台的逻辑到底能不能校验住。 2.今天解决了什么问题&#xff1f; 3.今天完成…...

关于Vscode配置Unity环境时的一些报错问题(持续更新)

第一种报错&#xff1a; 下载net请求超时&#xff08;一般都会超时很正常的&#xff09; 实际时并不需要解决&#xff0c;它对你的项目毫无影响 第二种报错&#xff1a; .net版本不匹配 解决&#xff1a;&#xff08;由于造成问题不一样&#xff0c;所以建议都尝试一次&…...

微信小程序——文档下载功能分享(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

长短期记忆网络 (LSTM) 简介

文章目录 一、说明二、传统 RNN 的问题三、为什么梯度消失&#xff1f;四、长短期记忆网络简介五、忘记门六、Update Gate (Input Gate)七、Output Gate八、数学上的内存九、从 LSTM 到 Transformer十、总结 一、说明 机器学习取得进步的领域之一是自然语言处理。对于用于机器…...

【电子通识】USB Type-C线缆为什么有的用到E-Marker芯片

USB Type-C接口具备数据传输、充电(基于USB PD协议)和音频视频传输能力。但是,上述功能都有强弱之别,并因此衍生出了无数种规格的USB Type-C线缆。 如下所示直接搜索就可以看到,虽然都是Type-C接口,但存在很多不同种类的线缆规格。 以数据传输为例,USB Type-C可选USB2.0…...

【故障处理系列--移动云云盘根目录在线扩容】

移动云云盘根目录扩容 **目的&#xff1a;**测试harbor仓库服务器的根目录能否在线扩容 1、移动云控制台系统盘扩容 这里以我自己的虚拟机演示 2、查看分区的文件类型 3、安装growpart工具 rootgitlab-cli:~# apt install cloud-guest-utils -y rootgitlab-cli:~# apt ins…...

混沌工程/混沌测试/云原生测试/云平台测试

背景 私有云/公有云/混合云等具有复杂&#xff0c;分布式&#xff0c;环境多样性等特点&#xff0c;许多特殊场景引发的线上问题很难被有效发现。所以需要引入混沌工程&#xff0c;建立对系统抵御生产环境中失控条件的能力以及信心&#xff0c;提高系统面对未知风险得能力。 …...

CQ 社区版 2024.11 | 新增“审批人组”概念、可通过SQL模式自定义审计图表……

CloudQuery 社区 11 月新版本来啦&#xff01;本月版本依旧是 CUG&#xff08;CloudQuery 用户组&#xff09;尝鲜版的更新。 针对审计模块增加了 SQL 模式自定义审计图表&#xff1b;在流程模块引入了“审批人组”概念。此外&#xff0c;在 SQL 编辑器、连接管理等模块都涉及…...

【maven-4】IDEA 配置本地 Maven 及如何使用 Maven 创建 Java 工程

IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;是一款功能强大的集成开发环境&#xff0c;广泛应用于 Java 开发。下面将详细介绍如何在 IDEA 中配置本地 Maven&#xff0c;并创建一个 Maven Java 工程&#xff0c;快速上手并高效使用 Maven 进行 Java 开发。 1. Maven …...

c语言结构体

c语言结构体 1. 结构体的定义 在C语言中&#xff0c;结构体是一种用户自定义的数据类型&#xff0c;它允许你将不同类型的数据组合成一个单一的实体。结构体的定义以struct关键字开头&#xff0c;后面跟着结构体标签&#xff08;可以省略&#xff0c;但为了方便后续引用&#…...

洛谷二分题

P1024 [NOIP2001 提高组] 一元三次方程求解 题目描述 有形如&#xff1a;&#x1d44e;&#x1d465;3&#x1d44f;&#x1d465;2&#x1d450;&#x1d465;&#x1d451;0ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数&#xff08;&#x1d44e;,&#x1d44…...

vue3的项目目录和关键文件

注意换插件 vue2的是 Vetur &#xff1b;vue3的是volar 这里注意volar插件已更名为Vue - Official vite.config.js 放跟vite配置相关的内容 区别于vue2&#xff1b;vue2是vue.config.js&#xff1b;vue2是基于webpack的&#xff0c;vue3是基于vite的 main.js import { creat…...

rabbitmq原理及命令

目录 一、RabbitMQ原理1、交换机&#xff08;Exchange&#xff09;fanoutdirecttopicheaders&#xff08;很少用到&#xff09; 2、队列Queue3、Virtual Hosts4、基础对象 二、RabbitMQ的一些基本操作:1、用户管理2、用户角色3、vhost4、开启web管理接口5、批量删除队列 一、Ra…...

洛谷 P1308 [NOIP2011 普及组] 统计单词数 C语言

题目&#xff1a; https://www.luogu.com.cn/problem/P1308 复制Markdown 展开 题目描述 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#xff0c;请你编程实现…...

vue基础之5:vue数据代理、事件处理、事件修饰符、键盘事件

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

RK3568平台开发系列讲解(PWM篇)sysyfs 操作 pwm 原理讲解

🚀返回专栏总目录 文章目录 一、高精度定时器介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢使用 sysfs 和内核 API 函数对硬件 PWM 进行控制, 而当硬件 PWM 不够用的时候, 可以使用 GPIO 来模拟实现 PWM, 也可以称之为软件 PWM, 软件 PWM 是通过软件编程实…...

python 练习题

目录 1&#xff0c;输入三个整数&#xff0c;按升序输出 2&#xff0c;输入年份及1-12月份&#xff0c;判断月份属于大月&#xff0c;小月&#xff0c;闰月&#xff0c;平月&#xff0c;并输出本月天数 3&#xff0c;输入一个整数&#xff0c;显示其所有是素数因子 4&#…...

SprinBoot整合KafKa的使用(详解)

前言 1. 高吞吐量&#xff08;High Throughput&#xff09; Kafka 设计的一个核心特性是高吞吐量。它能够每秒处理百万级别的消息&#xff0c;适合需要高频次、低延迟消息传递的场景。即使在大规模分布式环境下&#xff0c;它也能保持很高的吞吐量和性能&#xff0c;支持低延…...

CSS学习记录03

CSS背景 CSS 背景属性用于定义元素的背景效果。 CSS background-color background-color属性指定元素的背景色。 页面的背景色设置如下&#xff1a; body {background-color: lightblue; } 通过CSS&#xff0c;颜色通常由以下方式指定&#xff1a; 有效的颜色名称-比如“…...

在Java中使用Apache POI导入导出Excel(二)

本文将继续介绍POI的使用&#xff0c;上接在Java中使用Apache POI导入导出Excel&#xff08;一&#xff09; 使用Apache POI组件操作Excel&#xff08;二&#xff09; 14、读取和重写工作簿 try (InputStream inp new FileInputStream("workbook.xls")) { //Inpu…...

Vue3学习宝典

1.ref函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 <script setup> // reactive接收一个对象类型的数据 import { reactive } from vue;// ref用函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 import { ref } from vue // 简…...

Unity开发FPS游戏之完结篇

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏&#xff0c;感兴趣的朋友可以回顾一下。这个系列的文章如下&#xff1a; Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…...

基于BM1684的AI边缘服务器-模型转换,大模型一体机(二)

目标追踪 注&#xff1a;所有模型转换都是在docker环境中的 先进入docker 这里我们是要在docker环境里编译的&#xff0c;所以先进入docker :~/tpu-nntc# docker run -v $PWD/:/workspace -it sophgo/tpuc_dev:latest初始化环境 root2bb02a2e27d5:/workspace/tpu-nntc# s…...

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网&#xff0c;根据自己的操作系统下载对应的Apifox安装包&#xff0c;我是windows系统所以下载的是windows版。 下载 默认仅为我安装&#xff0c;点击下一…...