
Java 宝藏
文章平均质量分 94
Java 技术领域的知识宝藏,这里汇聚与 Java 相关的各类精华干货,无论是深度学习的前沿应用,还是基础架构的深度剖析,亦或是开发实战中的巧妙诀窍,皆能为您呈现。深度融合多元知识,带您突破技术瓶颈,开启 Java 进阶新征程,不容错过!
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
码到π退休
CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。技术合作请加本人wx(注明来自csdn):foreast_sea
展开
-
Linux面试题
Linux 常用命令我自己常用的 Linux 命令有 top 查看系统资源、ps 查看进程、netstat 查看网络连接、ping 测试网络连通性、find 查找文件、chmod 修改文件权限、kill 终止进程、df 查看磁盘空间、free 查看内存使用、service 启动服务、mkdir 创建目录、rm 删除文件、rmdir 删除目录、cp 复制文件、mv 移动文件、zip 压缩文件、unzip 解压文件等等这些。原创 2025-04-12 11:28:40 · 793 阅读 · 42 评论 -
高并发场景下,到底先更新缓存还是先更新数据库?
缓存机制作为提升系统性能的关键手段,被广泛应用于各类大型系统中。它通过将频繁访问的数据存储在内存中,有效减少了对数据库的直接查询压力,从而大大提高了数据的读取速度。然而,缓存的引入并非一帆风顺,随之而来的是缓存与数据库之间数据一致性的难题。在高并发的复杂环境下,缓存与数据库的数据同步变得异常棘手,稍有不慎就可能导致用户获取到旧数据,影响用户体验,甚至可能引发业务逻辑错误。本文将深入探讨在高并发场景下,更新缓存与更新数据库的先后顺序这一关键问题。我们将详细剖析各种常见的缓存更新策略原创 2025-04-08 11:28:36 · 936 阅读 · 35 评论 -
JS用ES6和ES5分别实现:8字节长整数和字节数组的互转
JavaScript作为Web开发的通用语言,在物联网边缘计算、Node.js服务端等场景的应用日益广泛。但由于其动态类型和数值精度的特殊性,处理二进制数据时面临独特挑战: 精度局限:JS的Number类型采用IEEE 754双精度浮点格式,仅能安全表示±253±253范围内的整数,超出范围将丢失精度 字节序控制:现代CPU架构多采用小端序,而网络协议通常要求大端序,需要显式控制字节排列 类型差异:Java/C#等语言的byte类型为有符号数(-128 至127),而JS的Type原创 2025-04-04 22:14:06 · 1413 阅读 · 57 评论 -
微服务面试题:服务网关和链路追踪
API 网关(API Gateway)是一种中间层服务器,用于集中管理、保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口来管理和控制 API 的访问。路由转发:API 网关根据请求的 URL 路径或其他标识,将请求路由到相应的后端服务。通过配置路由规则,可以灵活地将请求分发给不同的后端服务。负载均衡:API 网关可以在后端服务之间实现负载均衡,将请求平均分发到多个实例上,提高系统的吞吐量和可扩展性。安全认证与授权。原创 2025-04-12 11:28:09 · 1056 阅读 · 28 评论 -
HTTP 黑科技
在 HTTP 中,内容协商是一种用于在同一 URL 上提供资源的不同表示形式的机制。内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准。一旦资源存储在缓存中,理论上就可以永远被缓存使用。但是不管是浏览器缓存还是代理缓存,其存储空间是有限的,所以缓存会定期进行清除,这个过程叫做缓存回收(cache eviction)(自译)。另一方面,服务器上的缓存也会定期进行更新,HTTP 作为应用层的协议,它是一种。原创 2025-04-04 11:28:32 · 1150 阅读 · 38 评论 -
操作系统之文件系统
所有的应用程序都需要存储和检索信息。进程运行时,它能够在自己的存储空间内存储一定量的信息。然而,存储容量受虚拟地址空间大小的限制。对于一些应用程序来说,存储空间的大小是充足的,但是对于其他一些应用程序,比如航空订票系统、银行系统、企业记账系统来说,这些容量又显得太小了。第二个问题是,当进程终止时信息会丢失。对于一些应用程序(例如数据库),信息会长久保留。在这些进程终止时,相关的信息应该保留下来,是不能丢失的。甚至这些应用程序崩溃后,信息也应该保留下来。原创 2025-04-07 11:28:13 · 851 阅读 · 24 评论 -
Spring AOP 扫盲
一个切点由两部分组成:包含名称和任何参数以及切入点表达式的签名,该表达式能够确定我们想要执行的方法。在@AspectJ注释风格的AOP中,切入点表达式需要用@Pointcut注解标注(这个表达式作为方法的签名,它的返回值必须是 void)。@Pointcut("execution(* transfer(..))") // 切入点表达式private void definePointcut() {}// 方法签名切入点表达式的编写规则如下:现在假设我们需要配置的切点仅仅匹配指定的包,就可以使用。原创 2025-04-10 11:28:06 · 1253 阅读 · 21 评论 -
PostgreSQL:逻辑复制与物理复制
PostgreSQL的复制体系就像生物进化的活化石,记录着数据同步技术从简单镜像到智能分发的演化轨迹。在物理复制的确定性世界与逻辑复制的概率宇宙之间,我们看到了数据库技术应对不同场景的智慧平衡。随着PostgreSQL 16引入的逻辑复制并行应用(max_logical_replication_workers)和双向逻辑复制实验特性,这场复制革命正开启新的篇章。掌握这些技术,就如同获得在数据洪流中冲浪的智慧桨板,助您在数字时代的浪潮中破浪前行。原创 2025-04-12 09:52:50 · 1741 阅读 · 52 评论 -
操作系统必知面试题
操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层,使应用软件和硬件进行分离,让我们无需关注硬件的实现,把关注点更多放在软件应用上。通常情况下,计算机上会运行着许多应用程序,它们都需要对内存和 CPU 进行交互,操作系统的目的就是为了保证这些访问和交互能够准确无误的进行。用户态和内核态是操作系统的两种运行状态。内核态。原创 2025-04-07 11:28:45 · 1064 阅读 · 52 评论 -
Java虚拟机面试题:内存管理(中)
在堆内存分配对象时,主要使用两种策略:指针碰撞和空闲列表。①、指针碰撞(Bump the Pointer)假设堆内存是一个连续的空间,分为两个部分,一部分是已经被使用的内存,另一部分是未被使用的内存。在分配内存时,Java 虚拟机维护一个指针,指向下一个可用的内存地址,每次分配内存时,只需要将指针向后移动(碰撞)一段距离,然后将这段内存分配给对象实例即可。②、空闲列表(Free List)JVM 维护一个列表,记录堆中所有未占用的内存块,每个空间块都记录了大小和地址信息。原创 2025-04-05 11:28:43 · 909 阅读 · 41 评论 -
MySQL 入门大全:运算符
MySQL 入门大全:运算符MySQL 中有多种运算符,下面对 MySQL 运算符进行分类 算术运算符 比较运算符 逻辑运算符 位运算符下面那我们对各个运算符进行介绍算术运算符MySQL 支持的算术运算符包括加、减、乘、除和取余,这类运算符的使用频率比较高 + 用于获得一个或多个值的和 - 用于从一个值减去另一个值 * 用于两数相乘,得到两个或多个值的乘积 / 用一个值除以另一个值得到商 % 用于一个值除以另一个值得到原创 2025-04-02 11:28:18 · 1071 阅读 · 12 评论 -
Java虚拟机面试题:引言
JVM,也就是Java虚拟机,它是Java实现跨平台的基石。Java程序运行的时候,编译器会将 Java 源代码(.java)编译成平台无关的Java字节码文件(.class),接下来对应平台的JVM会对字节码文件进行解释,翻译成对应平台的机器指令并运行。也就实现了 Java 一次编译,处处运行的跨平台性。原创 2025-04-02 11:28:49 · 521 阅读 · 17 评论 -
Java 类加载机制详解
Java的类加载机制通过类加载器和类加载过程的合作,确保了Java程序的动态加载、灵活性和安全性。双亲委派模型进一步增强了这种机制的安全性和类之间的协调性。JVM 运行 Java 代码的时候,JVM 需要将编译后的字节码文件加载到其内部的运行时数据区域中进行执行。这个过程涉及到了 Java 的类加载机制(面试常问的知识点),所以我们来详细地讲一讲。原创 2025-04-03 11:28:10 · 1170 阅读 · 23 评论 -
使用 Spring Boot 和 GraalVM 的原生镜像
因此,我们需要为每个支持的目标系统构建一个版本,当我们使用 Docker 等容器技术时,这会更容易,我们可以将容器构建为可以部署到任何 Docker 运行时的目标系统。的目标是 AOT 处理(即,不是 AOT 编译自身,而是为 AOT 编译器收集元数据,例如,在代码中注册反射的使用)和构建可与 Docker 一起运行的 OCI 映像。然后,要使用 GraalVM 的原生映像构建器构建原生映像,我们需要使用 GraalVM 本身提供的 Maven 或 Gradle 插件来扩展我们的构建。这将使构建平台相关。原创 2025-04-03 11:28:41 · 1310 阅读 · 36 评论 -
深入理解JVM的运行时数据区
本文深入探讨Java虚拟机的内存数据区,程序计数器、Java虚拟机栈、本地方法栈、堆、方法区与元空间!Java 源代码文件经过编译器编译后会生成字节码文件,经过加载器加载完毕后会交给执行引擎执行。在执行的过程中,JVM 会划出来一块空间来存储程序执行期间需要用到的数据,这块空间一般被称为运行时数据区原创 2025-04-04 11:28:01 · 1032 阅读 · 20 评论 -
全球地理数据库 GeoNames
GeoNames 作为联合国推荐使用的开放地理数据库,以其独特的架构设计给出了完美答案。这个包含1200万地理实体的知识图谱,不仅提供WGS84坐标系下的精准空间数据,更收录了涵盖287种语言的名称变体,其行政层级关系网更是贯穿国家、省、市、镇四级结构。与商业地图API相比,GeoNames 的本地化部署特性可为金融风控、舆情监控等场景提供完全自主可控的地理数据服务。原创 2025-03-30 11:25:52 · 1154 阅读 · 25 评论 -
微服务面试题:配置中心
1. 为什么微服务需要配置中心?微服务架构中的每个服务通常都需要一些配置信息,例如数据库连接地址、服务端口、日志级别等。这些配置可能因为不同环境、不同部署实例或者动态运行时需要进行调整和管理。微服务的实例一般非常多,如果每个实例都需要一个个地去做这些配置,那么运维成本将会非常大,这时候就需要一个集中化的配置中心,去管理这些配置。原创 2025-03-28 11:28:44 · 961 阅读 · 49 评论 -
Java并发编程面试题:线程池&Fork/Join(19题)
线程池,简单来说,就是一个管理线程的池子。①、频繁地创建和销毁线程会消耗系统资源,线程池能够复用已创建的线程。②、提高响应速度,当任务到达时,任务可以不需要等待线程创建就立即执行。③、线程池支持定时执行、周期性执行、单线程执行和并发数控制等功能。原创 2025-03-29 11:28:45 · 837 阅读 · 19 评论 -
Java面试必问的CAS原理剖析
CAS(Compare-And-Swap)是比较并交换的意思,它是一条 CPU 并发原语,用于判断内存中某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。下面用一个小示例解释一下。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,计算后要修改后的新值B。(1)初始状态:在内存地址V中存储着变量值为 1。(2)线程1想要把内存地址为 V 的变量值增加1。这个时候对线程1来说,旧的预期值A=1,要修改的新值B=2。原创 2025-03-28 11:29:15 · 970 阅读 · 37 评论 -
Java 8 Stream API:传统实现和流式编程的范式对比
声明式编程:聚焦"做什么"而非"怎么做"不变性:避免副作用带来的风险可组合性:通过操作组合实现复杂逻辑延迟执行:优化计算过程并行透明:轻松实现并发处理代码密度:减少60%以上的样板代码可维护性:业务逻辑显式表达。原创 2025-03-17 00:15:00 · 3955 阅读 · 94 评论 -
IP段转CIDR:原理&Java实现
需要确认CIDR是什么?CIDR表示的是无类别域间路由,通常形式是IP地址后跟一个斜杠和数字,比如192.168.1.0/24。这个数字表示网络前缀的位数,剩下的位数用于主机地址。CIDR的作用是更高效地分配IP地址,减少浪费。我们现在要实现,将给定的起始IP和结束IP转换为CIDR块。那么,如何从两个IP地址中找到覆盖它们的CIDR呢?可能需要分解成多个CIDR块,因为单个CIDR可能无法覆盖整个范围,尤其是当范围不是连续的2的幂次方时。原创 2025-02-28 14:38:20 · 1499 阅读 · 35 评论 -
CIDR转IP段:原理&Java实现
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种用于高效分配和管理 IP 地址的网络编址方法。它取代了传统的 IP 地址分类(A/B/C 类),通过灵活的网络前缀长度(子网掩码)实现更精细的地址划分和路由聚合,显著提高了 IP 地址的利用率,并减少了路由表规模。1. 传统 IP 分类的局限性 A/B/C 类地址:传统方式将 IP 地址划分为固定类别(如 A 类:/8,B 类:/16,C 类:/24)。 问题:地址分配不灵活。例如,一个需要 5原创 2025-02-28 14:54:48 · 2291 阅读 · 94 评论 -
为什么需要虚拟线程?
虚拟线程是一项已经开发多年的技术,Loom 项目已经工作了大约 10 年,为 Java 中的虚拟线程提供支持。终于,Java 21 引入了该概念的现成实现。2. 为什么需要虚拟线程?大多数业务应用程序都受 I/O 限制。与受处理器速度限制的 CPU 限制应用程序不同,I/O 限制应用程序受输入/输出操作(例如磁盘读写或网络通信)的限制。原创 2024-09-01 06:00:00 · 1009 阅读 · 17 评论 -
虚拟线程与 WebFlux:谁赢了?
随着 Spring Boot 3.2 的发布,对虚拟线程的支持已正式添加!因此,我想对两个 Spring Boot 应用程序运行负载测试,一个使用反应式范式,另一个使用虚拟线程。我创建了两个执行常见操作的简单应用程序;从数据库检索数据和对外部服务的 REST 调用。具体来说,这两个应用程序在 GET 中具有以下 REST API:/users?。原创 2024-08-30 06:00:00 · 1629 阅读 · 13 评论 -
Java虚拟线程全解:Java中的最重要的创新
虚拟线程长期以来一直是 Java 中最重要的创新之一。它们是在Project Loom中开发的,从Java 19开始作为预览功能包含在 JDK 中,从Java 21开始作为最终版本(JEP 444)包含在 JDK 中。为什么需要虚拟线程?什么是虚拟线程?它们如何工作?如何使用虚拟线程?如何创建虚拟线程,以及可以启动多少个虚拟线程?如何在 Spring 和 Jakarta EE 中使用虚拟线程?虚拟线程有什么优点?虚拟线程不是什么它们的局限性是什么?2. 为什么我们需要虚拟线程?原创 2024-08-26 06:15:00 · 2159 阅读 · 36 评论 -
Java虚拟线程:【Webflux】反应式编程时代 或将结束
反应式编程为什么不受开发人员的欢迎,并且随着 Java 虚拟线程的引入,它最终可能会消亡。原创 2024-09-01 06:00:00 · 2252 阅读 · 7 评论 -
Java-21推崇的虚拟线程到底有好快?一起来看这个实验
与本地线程不同,虚拟线程并不有操作系统控制,虚拟线程是一个有JVM管理的用户态线程。对比于本地线程的高资源占用,每个虚拟线程只需要。是的,你没看错,运行近20秒后,直接内存崩溃了,要知道,我本机内存可是32G的物理机啊!没有对比就没有伤害,我们一起再来看看用原生线程池的效果,大家先不要着急看结果,先猜测下,下面这段代码会发生什么呢?,甚至可以创建一百万个,因为虚拟线程并不需要来自内核的系统调用。,例如本地线程变量,同步块,线程中断,等等。,只需要在需要的时候尽情创建虚拟线程就好。是的,你没看错,就只花了。原创 2024-07-29 10:18:00 · 1052 阅读 · 9 评论 -
虚拟线程:Future(未来)已经成为过去了吗?
虚拟线程可以以所有开发人员熟悉的形式直接提供这些调试信息。另一方面,虚拟线程的当前限制是它们只能在 JVM 公共池(ForkJoinPool 的一个实例)中的 OS 线程上运行。这会强制应用程序中的所有虚拟线程在同一个池中运行,从而降低了灵活性。随着虚拟线程的发展,也许它们将伴随着强大的命令式功能未来形式以及在单独线程池上更灵活的调度。原创 2024-08-30 06:00:00 · 1343 阅读 · 51 评论 -
什么是虚拟线程?
虚拟线程是轻量级线程,可以减少编写维护和调试高吞吐量并发应用程序的工作量。线程是可以调度的最小处理单元。它与其他此类单元同时运行,并且在很大程度上独立于其他单元。它是的一个实例。线程有两种:平台线程和虚拟线程。虚拟线程是由 Java 运行时而不是操作系统实现的 Java 线程。虚拟线程与传统线程(我们称之为平台线程)的主要区别在于,我们可以在同一个 Java 进程中轻松运行大量甚至数百万个活动虚拟线程。原创 2024-08-31 06:00:00 · 1665 阅读 · 23 评论 -
Kubernetes 正在弃用 Docker?Docker将何去何从?
首先因为容器镜像格式已经标准化(OCI规范,开放容器计划),Docker镜像在K8s中还是可以正常使用的,原有的开发测试、CI/CD流程不需要改变,我们仍然可以pull Docker Hub,或者写一个Dockerfile来打包应用。到目前为止,一个相当流行的选择是使用 Docker 作为容器运行时。整体来看,Docker 虽然在容器编排大战中落败,被 K8s 挤到了墙角,但它依然拥有强大的生命力,多年积累的众多忠实用户和大量应用镜像是它最大的资本和后盾,足以支撑它走上另一条不与 K8s 硬碰硬的道路。原创 2024-07-28 12:26:53 · 2447 阅读 · 17 评论 -
使用kubeadm搭建K8s多节点集群
容器运行时是指用于直接对镜像和容器执行基础操作(比如拉取/删除镜像和对容器的创建(使用镜像)/查询/修改/获取/删除等操作)的软件。最开始的K8s版本只支持Docker作为容器运行时,但为了更好与底层容器技术解耦(同时也是为了兼容其他容器技术),K8s在v1.5.0就引入了容器运行时接口(CRI)。CRI是K8s与第三方容器运行时通信接口的标准化抽象,它定义了容器运行时必须实现的一组标准接口,包括前面所说的针对镜像和容器的各项基础操作。原创 2024-09-01 10:25:48 · 2457 阅读 · 19 评论 -
Kubernetes 基础:Job 和 CronJob的使用
中的Job和CronJob是两种管理批处理任务的资源对象,分别用于控制短暂一次性任务和定时执行的周期性任务。Job和CronJob在Kubernetes中扮演着重要的角色,分别用于管理短暂一次性任务和定时执行的周期性任务,通过创建和管理Pod来执行这些任务,并提供了灵活的配置选项以满足不同的使用场景需求。Job:负责运行一个或多个Pod,并确保指定数量的Pod成功完成。Job可以创建多个Pod实例来并行处理任务,加速处理过程。原创 2024-09-08 02:00:00 · 1333 阅读 · 3 评论 -
【Kubernetes】 它是什么?为什么要拥抱它?
Kubernetes构建容器化应用程序为提高效率和可扩展性打开了大门,尤其是对于希望简化工作流程的开发人员而言。Kubernetes 是容器编排领域的变革者,它使开发人员可以更轻松地管理这些应用程序。Kubernetes是一个开源的容器集群管理系统,旨在自动化部署扩展和管理容器化应用程序。 它由Google开发,并现已成为云原生计算基金会(CNCF)管理的项目,是首个从CNCF毕业的项目,同时也是历史上增长最快的开源项目之一。原创 2024-08-20 05:00:00 · 1261 阅读 · 2 评论 -
Kubernetes 基础:Ingress的高可用部署
我们很少**直接使用**这些方式来对外暴露服务,因为它们都有一个比较严重的问题,那就是需要占用节点端口。`Ingress` 就是为了解决这些问题而设计的,它允许你将 Service 映射到集群对外提供的某个端点上(由域名和端口组成的地址),这样我们就可以在 Ingress 中将多个 Service 配置到同一个域名的不同路径下对外提供服务,避免了对节点端口的过多占用。`Ingress` 还支持路由规则和域名配置等高级功能,就像 Nginx 那样能够承担业务系统最边缘的反向代理+网关的角色。原创 2024-09-10 02:00:00 · 1088 阅读 · 23 评论 -
使用minikube安装k8s单节点集群
当我们启动pod时,引用的镜像会从远程拉取到本地,存入minikube自身的本地镜像库中管理,而不是由docker管理。再启动deployment,也可以启动的,因为minikube会去远程镜像库Pull,除非远程仓库也删除了这个镜像。minikube是本地Kubernetes环境(单节点),专注于让Kubernetes易于学习和开发。删除的镜像是不会影响minikube的镜像库的。启动(minikube要求较新的docker版本)删除了本地的一个minikube管理的镜像,再次看到被删除的镜像又出现了。原创 2024-09-01 10:36:37 · 1577 阅读 · 17 评论 -
Kubernetes 基础:Pod和Deployment的使用
Kubernetes 的名字来自古希腊语,意思是“飞行员”或“舵手”(掌舵的人),其历史通常可以追溯到 2013 年,当时谷歌的三位工程师 CraigMcLuckie,Joe Beda 和 BrendanBurns 提出了一个构建开源容器管理系统的想法。这些技术先驱正在寻找将谷歌内部基础设施专业知识引入大规模云计算领域的方法,并使谷歌能够与当时云提供商中无与伦比的领导者亚马逊网络服务(AWS)竞争。Kubernetes。原创 2024-09-07 02:00:00 · 2122 阅读 · 5 评论 -
Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O
Docker 正在逐步淘汰,取而代之的是使用为 Kubernetes 构建的容器运行时接口 (CRI) 的运行时。由于 Docker 将从 K8s 1.24 开始弃用,因此您必须过渡到其他兼容的容器运行时之一,例如 containerd 或 CRI-O。这只是意味着 Docker 将不再被用作 Kubernetes 中的默认引擎,这完全取决于您在选择特定容器运行时时的需求,因为它们每个都有自己的优点。尽管 Docker 是该运行时的流行选择,但它并不打算集成到 Kubernetes 中,这会带来问题。原创 2024-07-20 08:31:48 · 1231 阅读 · 4 评论 -
Kubernetes 基础:不同类型Service及其使用
在前面的内容中,我们通过的临时方式来访问pod,需要指定某个pod名称,而如果pod发生扩容或重启,pod名称就会变化,那如何获取稳定的pod访问地址呢?deployment通常会包含多个pod,如何进行负载均衡?Service就是用来解决上述问题的。Kubernetes提供了一种名叫Service的资源帮助解决这些问题,它为Pod提供一个可稳定访问的端点(以作为虚拟域名的形式)。Service位于 Pod 的前面,负责接收请求并将它们传递给它后面的所有 Pod。原创 2024-09-09 02:00:00 · 1050 阅读 · 5 评论 -
Kubernetes 基础:Namespace、ConfigMap和Secret的使用
恭喜🎉🎉🎉!!!到这里,你已经看完了本篇 K8s 基础教程学习。如果你完成了教程中的大部分练习,那你已经能够使用 Kubernetes 进行日常开发工作了。如果你的工作需要深度使用 K8s(比如运维人员)亦或你想要深度掌握 K8s的使用,那请允许我向你推荐[Kubernetes 进阶教程][Kubernetes 进阶教程],预祝下一旅途愉快!原创 2024-09-11 02:00:00 · 1407 阅读 · 9 评论 -
Spring Boot 3 + GraalVM Hint API
Java 是一种静态类型语言,它包含运行时发生的动态操作,例如反射、资源管理、代理和序列化。GraalVM 将管理这些操作所需的数据归类为可达性元数据。GraalVM 致力于仅包含必要的可达性元数据,以优化可执行文件的大小和构建速度。确定运行时哪些可达性元数据是必需的是一项复杂的任务,通常超出了编译器的自动辨别能力。因此,开发人员需要在应用程序代码中明确指定这一关键信息,以确保所有必要元素都已纳入最终的本地映像中。此输入通过 Spring 框架提供的运行时提示 API) 实现。原创 2024-08-23 08:42:21 · 819 阅读 · 15 评论