Apache APISIX快速入门
本文将介绍Apache APISIX,这是一个开源API网关,可以处理速率限制选项,并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。
在深入讨论这个主题之前,让我们先讨论一下API网关。
API网关
API网关是所有客户机的单一入口点。它们位于客户端和后端服务之间。通过调用多个后端服务,将来自客户机的API请求代理/路由到适当的服务。然后将结果聚合并返回给客户机。
- 网关实现的难点
- 大多数API网关适合处理企业内网流量,无法承受数以万计的客户端请求。
- 一些网关依赖于关系数据库,这对弹性扩展具有挑战性。这些系统大多是老旧的,并且是在微服务出现之前开发的。
APISIX
Apache APISIX是Apache基础下的顶级项目。它是一个云原生API网关,可以处理云计算、金融科技、保险、市场、房地产、安全、语音识别和旅游等行业多个平台上的接口流量。
Apache APISIX只是一个动态的、实时的、高性能的API网关。与传统的API网关相比,APISIX提供了适合微服务系统下API管理的功能。这可以通过动态路由、身份验证、可观察性、插件热加载、gRPC协议转码等实现。
企业可以使用Apache APISIX快速管理API和微服务流量,使用流限制身份验证、日志安全性和对复杂自定义插件的支持等特性。
APISIX有一个管理仪表板,用户可以很容易地管理和配置插件、路由和其他组件。它可以与许多开源统计和监控组件(如Prometheus、Apache Skywalking和Zipkin)集成,以提高性能。
APISIX架构
Apache APISIX架构
Apache APISIX包括三个部分:
- 数据平面:动态控制请求流量,实现流量的处理和分配;
- 控制平面:存储和同步网关数据配置;
- AI平面(TODO):编排插件,以及实时分析和处理请求流量。
APISIX组件
**插件:**APISIX有70多个用Lua开发的内置插件,包括身份认证、限制速率、限制请求、安全性、日志、可观察性等。这些插件涵盖了用户在企业中可能遇到的所有功能。通过这些插件,用户可以将APISIX转换为其业务所需的各种网关。尽管受到Kong的启发,Apache APISIX插件的架构和设计是完全不同的。它支持热重新加载,所以你不必重新启动服务;它还减轻了编写代码的困难。
**路由:**APISIX使用自适应lua -rest -radixtree来组合路由的所有良好特征。lua -rest -radixtree单核可以达到每秒数百万次匹配。它支持Nginx的所有内置变量和自定义函数。
**模式:**Apache APISIX使用JSON模式,它为Lua/LuaJIT提供了JSON模式草案4、草案6和草案7验证器。这个JsonSchema负责API的描述,并促进个人与用户界面之间的合作。该验证标准几乎涵盖了C、Java、JS等主流语言。虽然APISIX使用JSON模式语义,但它并不局限于JSON。
**存储:**APISIX只依赖于etcd;因此,APISIX是为高可用性而设计的。它使用lua-resty-etcd从etcd获取配置。
与其他网关对比
- 它涵盖了Nginx的所有功能。
- 高性能:高性能是Apache APISIX的主要优势。
- Apache APISIX最重要的特性是它是完全动态的,包括路由、SSL证书、插件等。
- Hot-updated插件。在Apache APISIX内部,插件的构建类似于乐高积木。您可以轻松地修改,删除或添加插件,而无需重新启动服务。这使得在APISIX中控制外部工作负载变得简单和灵活得多。Apache APISIX还提供定制插件来处理业务边缘层中的定制处理。
- APISIX由两种重要的体系结构支持,X86和ARM64。它还支持OpenResty 和 Tengine运行环境,并在裸机上运行到公共云中的各种服务器上。
- APISIX提供多协议和多平台支持,如HTTP、TCP、UDP、HTTP到gRPC转码、Websocket、gRPC、Apache Dubbo和MQTT代理
- 支持版本控制。在使用APISIX时,如果新发布的版本出现错误,您可以轻松地退格旧版本,而不会在此过程中遇到任何缺点。
- 基于身份的零信任。外部身份验证可以通过新集成的Future实现。目前,实现零信任和使用外部身份验证提供者访问所有服务很简单。部署几个参数后,我们可以向API添加身份验证功能。
- 开源:Apache APISIX于2019年6月6日开源。从那时起,它在GitHub上获得了8700多颗星星和约287名贡献者。这是一个拥有2000多名成员的开发者社区,你可以通过Slack 或 Mailing list.加入社区。
APISIX快速开始
Apache APISIX有管理仪表板,可以方便管理员定义路由、Upstream和后端服务。要开始使用Apache APISIX,这里是快速入门步骤:
- 通过Docker安装Apache APISIX。
- 在Admin API的帮助下,为你的API网关创建一个路由、Upstream服务。
- 将路由与Upstream绑定。
- 通过Apache APISIX的Admin API验证结果。
简单的路由配置示例
假设你有一个后端服务运行在 http://localhost:8080
,想要通过 APISIX 对外暴露一个 API 接口,步骤如下:
- 启动 APISIX
首先确保已经安装并启动了 APISIX 服务(不同操作系统启动方式稍有不同,比如在 Linux 下可以通过对应的启动脚本启动)。 - 配置路由
可以使用 APISIX 的管理 API(通常通过http://127.0.0.1:9080/apisix/admin
访问,具体根据你的配置情况)或者使用 APISIX Dashboard(如果已经部署了可视化界面)来配置路由。
通过管理 API 使用 curl
命令示例如下:
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/test-api","upstream": {"type": "roundrobin","nodes": {"localhost:8080": 1}}
}'
上述配置创建了一个路由,当访问 APISIX 服务的 /test-api
路径时,会将请求转发到后端 http://localhost:8080
服务上。其中 X-API-KEY
需要替换为你实际设置的 API 密钥。
使用插件示例(以限流插件为例)
假设要对某个 API 接口进行限流,限制每分钟最多允许 100 次请求访问,基于前面的路由配置,添加限流插件步骤如下:
- 了解限流插件配置参数
APISIX 的限流插件有多个配置参数,比如count
(限制的请求次数)、time_window
(时间窗口,单位秒)等。 - 配置带限流插件的路由
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/test-api","upstream": {"type": "roundrobin","nodes": {"localhost:8080": 1}},"plugins": {"limit-count": {"count": 100,"time_window": 60,"key": "remote_addr","rejected_code": 429}}
}'
这里在路由配置中添加了 limit-count
插件,设置每分钟(time_window
为 60 秒)最多允许 100 次请求(count
),通过客户端 IP(key
为 remote_addr
)来区分不同请求源,当超过限制时返回 429
状态码表示请求过多被拒绝。
基于服务发现配置路由(以 Consul 为例)
如果后端服务众多且使用了服务发现机制(如 Consul),可以让 APISIX 自动发现后端服务并进行路由配置。
- 配置 APISIX 与 Consul 集成
修改 APISIX 的配置文件(通常是conf/config.yaml
),添加如下相关配置(示例,需根据实际情况调整):
discovery:consul:host: "127.0.0.1"port: 8500service_name: "your_service_name"tag: "your_service_tag"
这里配置了 Consul 的地址、端口以及要发现的服务名称和标签等信息。
- 创建基于服务发现的路由
curl -i http://127.0.0.1:9080/apisix/admin/routes/2 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/discovery-api","upstream": {"service_name": "your_service_name","type": "roundrobin"}
}'
这样 APISIX 会根据 Consul 中的服务信息自动找到对应的后端节点,并将访问 /discovery-api
路径的请求转发到相应的后端服务上。
这些只是 APISIX 开发中的基础示例,实际应用中还可以结合更多插件(如鉴权插件、日志插件等)以及应对更复杂的业务场景来灵活配置和开发。
相关文章:
Apache APISIX快速入门
本文将介绍Apache APISIX,这是一个开源API网关,可以处理速率限制选项,并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…...
【C++】继承
目录 1. 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承基类成员访问方式的变化 1.3 继承类模板 2. 基类和派生类间的转换 3. 继承中的作用域 3.1 隐藏规则: 3.2 考察继承作用域相关选择题 3.2.1 A和B类中的两个func构成什么关…...
设计模式详解(十):策略模式——Strategy
什么是Strategy设计模式? Strategy模式是一种行为型设计模式,它定义了一系列算法,将每种算法封装到独立的类中,使它们可以互换。使用该模式,可以在不修改客户端代码的情况下动态地改变算法的行为。 为什么需要Strate…...
B4X编程语言:B4X控件方法汇总
1、AddNode、AddView方法 AddNode(Node As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J控件 AddView(View As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J的B4XView …...
如何阅读一本书
阅读很重要,我们真的会阅读吗? 这本书的初版是 1940年,时隔 80年,其内容仍然不过时。第一次读这本书时,给我最大的影响就是主题阅读,每次学习一个新理论、技术,都入手多本关于这项理论、技术的书籍,不同的作者,不同作者的写作背景、角度、目的,导致了风格不同的书籍,…...
vscode 排除文件夹搜索
排除的文件夹 node_modules/,dist/...
1. Flink自定义Source
一. Source 简介 DataStream是Flink的低级API,用于进行数据的实时处理,Flink编程模型分为Source、Transformation、Sink三个部分,如下图所示。 默认Flink提供了大量的内置Source,常见的Source如下: 基于文件的Sour…...
短信验证码burp姿势
首先声明,本文仅仅作为学习使用,因个人原因导致的后果,皆有个人承担,本人没有任何责任。 在之前的burp学习中,我们学习了图片验证码的突破,但是现实中还有很多短信验证码,在此我介绍几种短信验…...
scala的正则表达式3
贪婪模式与非贪婪模式 1.贪婪模式 贪婪模式是正则表达式的默认行为。在这种模式下,量词(如*、、?、{n,m})会尝试匹配尽可能多的字符。例如,正则表达式".*"会匹配任意数量的任意字符,包括空字符。 2非贪婪…...
Kotlin设计模式之中介者模式
中介者模式(Mediator Pattern)用于定义一个对象,该对象封装了一组对象之间的交互方式。中介者使各对象不需要显式地相互引用,从而使其耦合松散,并可以独立地改变它们之间的交互。以下是Kotlin中实现中介者模式的方法&a…...
Android 车载虚拟化底层技术-Kernel 5.10 -Android12(multi-cards)技术实现
详细代码实现见 Android Display Graphics系列文章-汇总Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 本文主要包括部分: 一、Android12的Kernel 5.10版本 1.1 Kernel 5…...
ZZNUOJ_1726:算法提高 选择排序(C/C++/Java)
题目描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序。形式化描述如下:有n个元素a[1],a[2],…,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]<a[i[2]]<…<a[i[n]] i[k]为这个新顺序。 选择排序的思想极其简单,每一步都把一个最小…...
Python+OpenCV系列:模版匹配
文章目录 1. 模板匹配基本原理2. cv2.matchTemplate() 函数函数原型: 3. 模板匹配步骤4. 单目标模板匹配示例5. 多目标模板匹配多目标模板匹配示例代码解析: 6. 多模板匹配多模板匹配示例代码解析 7. 总结 模板匹配是一种在图像中寻找模板的位置的方法。…...
AWS云计算问答式知识库系统的实现
AWS平台上建立一个生成式人工智能专业文文档问答式网站,前端用Flask框架,后端用Fast API,前端调用后端的唯一API来完成大模型文档搜索的功能,使用AWS Bedrock里的Titan和Llama3模型,以及OpenAI 4.0 API来调用模型并提供…...
【C语言】库函数常见的陷阱与缺陷(4):内存内容操作函数
目录 一、memcmp函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 比较范围限制问题 1.2.2. 数据类型兼容性隐患 1.2.3. 其它 1.3. 安全使用建议 1.4. 代码示例 二、memcpy函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.2.1. 缓冲区溢出风险 2.2.2. 重叠内存区域处理隐患 …...
Java 类与对象的详细讲解
引言 在Java中,类(Class)和对象(Object)是面向对象编程(OOP)的核心组成部分。通过它们,我们可以创建复杂的数据结构,并实现代码的重用性和可维护性。本文将深入探讨Java…...
Python爬虫之使用BeautifulSoup进行HTML Document文档的解析
BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库,它为开发者提供了一种简单的方式来查找、遍历和修改文档树。BeautifulSoup 特别擅长处理不规则或格式不佳的标记语言,可以自动更正无效的 HTML,因此在网页抓取(Web Sc…...
vue2 纯前端实现像chatGpt一样的文字流式输出
1、先展示一下效果啦 文字流输出 2、首先确定接口返回的是字符串,那就先调取接口 // 由于需求关系 有很多个文本需要一起逐字输出 所以这里就采用了Promise.all的形式 async getThreeTextarea() {let taskArray [ "重点项目文本","应用领域文本&qu…...
基于PHP课堂签到系统的设计与实现
摘 要 随着教育业的迅速发展和学生人数的不断增加,导致在班级登记制度中传统的“点到”方式不能适应学校的实际需要。从而需要设计一个好的课堂签到系统将会对课堂签到管理工作带来事半功倍的效果。文章着重介绍了基于实践应用的班级签到系统的开发流程,…...
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…...
51c深度学习~合集9
我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里叶特征 (Fourier Feature)与核回归 位置编码背后的理论解释 本文探讨了位置编码背后的理论基础,特别是傅里叶特征(Fourier Feature)与核回归(Kern…...
前端流式播放TTS语音:技术细节与实现
摘要 本文将介绍如何在前端实现流式播放文本到语音(TTS)的语音,并加入确保语音播放不重叠的改进方案。我们将探讨使用Web Audio API和WebSocket进行实时语音播放的技术细节,并提供相应的代码示例。 一、引言 在之前的讨论中&am…...
数据结构面试题整理
1. 简述什么是数据结构? 数据结构就是一种组织和存储数据的方式,使得我们可以高效地访问和修改数据。就像你整理房间一样,不同的物品有不同的收纳方式,数据也有不同的存储和管理方法。 比如,数组就像一个排成一排的抽…...
前端实现浏览器自定义滚动条
前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结ÿ…...
Oracel 统计信息收集
1. 常规的通过PLSQL客户端进行统计信息收集,需要指定用户名和表名 begin dbms_stats.gather_table_stats(ownname > &owner, tabname > &tablename, estimate_percent > DBMS_STATS.AUTO_SAMPLE_SIZE, cascade > TRUE, degree > 4, m…...
openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection
文章目录 openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection概述笔记环境光最好弱一些在设备标定时,吸嘴上不要装绿色屏蔽片如果吸嘴不在底部相机中间,先检查设置底部相机坐标调整底部相机坐标 吸嘴校验的细节底部相机坐…...
Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决
在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。 想要在Windows上安装Docker(实际上是基…...
光伏电站建设成本利润估算
截至2024年9月底,全国光伏发电装机容量达到7.7亿千瓦,同比增长48.4%。其中集中式光伏4.3亿千瓦,分布式光伏3.4亿千瓦。2024年前三季度,全国光伏发电量6359亿千瓦时,同比增长45.5%。全国光伏发电利用率97.2%,同比下降1.1个百分点.早在今年2月份,中国光伏行业协会名誉理…...
TimesFM(Time Series Foundation Model)安装(2)
TimesFM(Time Series Foundation Model)安装简介 readme TimesFM(Time Series Foundation Model)安装简介(1)-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144359861?spm1001.2014.3001…...
【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
并发模式 下例重新对 channel 的用法进行回顾: package mainimport ("fmt""math/rand""time" )func msgGen(name string) chan string {c : make(chan string)go func(name string) { // 在这个 goroutine 当中向外发送数据i : 0fo…...
Blue Ocean 在Jenkins上创建Pipeline使用详解
BlueOcean是Jenkins的一个插件,它提供了一套可视化操作界面来帮助用户创建、编辑Pipeline任务。以下是对BlueOcean中Pipeline操作的详细解释: 一、安装与启动BlueOcean 安装:在Jenkins的“系统管理”->“插件管理”->“可选插件”中搜索“BlueOcean”,然后点击“Ins…...
【数字花园】个人知识库网站搭建:②本地部署数字花园
目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案数字花园网站的本地部署方案数字花园网站本地手动部署方案1. 获取网站源码2.2 安装 Node.js 3. 项目部署3.1 安装项目依赖3.2 构建项目3.3 启动http服务器 4. 本地预览5. 在笔记更新后:更新本地源码…...
监听H5页面在微信浏览器异常退出
参考文章 onBeforeUnmount(() > {unNormalExit(); });//---------------------------异常退出---------------------- function unNormalExit() {enterOrExitRoom({type: 37,roomId: roomId.value,userId: userId.value,nickName: name.value,loginUserType: 2, //0 专家 1…...
【汽车】-- 常见的汽车悬挂系统
汽车悬挂系统是车辆的重要组成部分,其主要功能是连接车轮和车身,减缓路面颠簸对车身的影响,提高行驶的平顺性、舒适性和操控性。以下是常见的汽车悬挂系统类型及其特点: 1. 独立悬挂系统 每个车轮可以独立上下运动,不…...
路由器、二层交换机与三层交换机的区别与应用
路由器、二层交换机和三层交换机是常见的网络设备,常常协同工作。它们都可以转发数据,但在功能、工作层级以及应用场景上存在差异。 1. 工作层级 三者在OSI模型中的工作层级不同: 路由器: 工作在 网络层(第三层&#…...
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测 目录 CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测任务中实现…...
xss原理分析与剖析
001 URL编码 URL只允许用US-ASCII字符集中可打印的字符(020—0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用。这里有个需要注意的,加号代表URL编码的空格,%20也是。 URL编码最长见的是在用GET/POST传输时&…...
如何使用PageAdmin CMS网站管理系统搭建网站?
一、什么叫CMS? CMS,即内容管理系统,是一种位于网站前台界面与后台数据库之间的软件系统。它能够实现网站内容的发布、编辑、管理、维护等操作,使得非专业人员也能轻松进行网站内容的更新与维护。 二、如何使用PageAdmin CMS网站管…...
Linux: shell: bash: set -x;调试使用
man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...
高级排序算法(二):归并排序与堆排序详解
引言 在上一章中,我们探讨了高效的快速排序及其分治思想。这一次,我们将继续探索两种同样重要的排序算法:归并排序(Merge Sort) 和 堆排序(Heap Sort)。 它们与快速排序一样,都是O(…...
doxygen–自动生成文档工具
原文地址:doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档,解析类、函数、参数相关信息,并生…...
5G学习笔记之SNPN系列之ID和广播消息
目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…...
登录授权的实现:json web token + redis + springboot
文章目录 引言I token实现思路传统JWT TOKEN认证方式改进的JWT TOKEN认证方式redis设计II java代码实现登录接口退出登录接口登录之后接口(token解析和校验)III 常见问题400引言 应用场景: 登录认证 I token实现思路 传统JWT TOKEN认证方式 RESTful API TOKEN认证方式:…...
AlexNet:开启深度学习图像识别新纪元
一、引言 在深度学习的璀璨星空中,AlexNet 无疑是一颗极为耀眼的明星。它于 2012 年横空出世,并在 ImageNet 竞赛中一举夺冠,这一历史性的突破彻底改变了计算机视觉领域的发展轨迹,让全世界深刻认识到深度卷积神经网络在图像识别任…...
鸿蒙面试-----鸿蒙组件生命周期详解
不同颜色的是必须要会的,黑色的参考一下,只写了一些用过的还有很多组件的生命周期都没写 组件的生命周期有那些? 我了解的有、系统组件的生命周期、页面和自定义组件的生命周期、UIAbility组件的生命周期,Navigation组件生命周期…...
Meta Llama 3.3 70B:性能卓越且成本效益的新选择
Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...
asp.net老项目运维,出现的问题6之数据库
数据库会有很多张表,表内一般会有自增列,如果想统一管理这个自增数值,可以使用如下方法,放在一个存储过程中,想用的时候调用存储过程即可生成数据库层面的全局唯一值: create procedure [dbo].[P_getSeqID…...
WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里
背景 升级过程中发现有很多新的知识点,虽然未来可能永远都不会再遇到,但是仍然是一次学习的好机会,可以让自己知道,打包软件的进化之路,和原来 Webpack 4 版本的差异在哪里。 移除的依赖记录 babel/register: 在 Nod…...
什么是JVM即时编译
什么是JVM即时编译 即时编译是JVM的核心功能,他让java在性能上不输于C/C JVM(Java Virtual Machine)即 Java 虚拟机,是一种用于执行 Java 字节码的虚拟计算机。它是 Java 程序的运行核心,提供了一个独立于底层操作系统…...
《经验分享 · 软考系统分析师》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...