自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 Manim:动画制作背后的魔法

Manim是一个功能强大的动画制作工具,它通过代码的方式定义动画,使得动画的制作更加灵活和精确。通过深入了解Manim的内部工作机制,我们可以更好地掌握如何使用它来创建出令人惊叹的动画。如果你对Manim感兴趣,可以尝试自己动手编写一些简单的动画代码,体验一下Manim的魅力!

2025-05-18 16:00:04 351

原创 js作用域:小白探索之旅

最后的魔法咒语"不是变量在消失,而是作用域在生效;不是引擎太玄妙,而是规则未参透。从var的迷雾走向let的清明,便是从小白到法师的飞升之路!

2025-05-18 15:59:30 624

原创 MCP(Model Context Protocol)一篇入门-上(持续更新中)

通讯(标准输入输出通信)是指进程之间通过标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)进行的数据传递方式。这是一种常见的进程间通信(IPC)机制,尤其在 Unix/Linux 系统中,用于命令行工具组合(如。进程通讯,因此可以解耦,只要满足协议,不限制编程语言,使用如下命令可以模拟通讯过程,需要安装 node 、npm 以及 python3.10,管理 python 建议使用虚拟环境,)和子进程交互(如通过编程语言调用其他程序并处理其输出)。

2025-05-18 15:59:00 613

原创 Java访问HTTPS失败?看懂根证书支持与配置

下面用流程图对比一下JDK 10 之前与JDK 10 及以上版本在访问 HTTPS 地址时,证书验证和连接建立的关键步骤差异。bash体验AI代码助手代码解读复制代码JEP 319 虽然是一项“看不见”的增强,但对 Java 应用连接现代互联网 HTTPS 服务来说意义重大。它简化了证书管理流程,减少了很多因“不受信任证书”导致的连接失败问题。但与此同时,我们也要意识到,JDK 的选择直接影响到你的应用能否顺利访问 HTTPS 服务。

2025-05-18 15:58:10 796

原创 一文吃透K8s 网络策略 NetworkPolicy !别再裸奔了!

维度建议实践启用网络插件使用支持 NetworkPolicy 的 CNI 插件最小权限原则只允许必要的通信,默认拒绝其他访问Ingress + Egress 配合使用控制内外流量,提升安全性多策略组合一组 Pod 可匹配多个策略,注意覆盖顺序版本控制与 GitOps 管理推荐将 NetworkPolicy 纳入版本控制。

2025-05-16 14:56:24 621

原创 用 Rust 带你了解 TCP 和 UDP

互联网世界中两位至关重要的“信使”——TCP(传输控制协议)和 UDP(用户数据报协议)。这两个协议就像一对形影不离的兄弟,共同肩负着网络数据传输的重任,却又因其各自的特性而扮演着不同的角色。今天我们探寻一下 TCP 和 UDP 这两个兄弟的区别以及它们是如何高效可靠的传递信息的。相信通过今天的探讨,你将对这两个核心协议有更清晰、更深刻的认识。**本文会使用Rust 语言进行 TCP 和 UDP 网络连接代码演示。

2025-05-16 14:55:47 622

原创 【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)

有一张记录了电表缴费数据的表,缴费的时间间隔是不固定的。领导希望将这张表重新拆解按照月份来汇总,分析每月的日均使用电量等等。求助者的原始数据还有站点编码、电表号、供电类型等等,我这里将问题简化,省略这些信息,就假设只有一个电表。注:只有缴费区间的总电量,没有每日电量;利用平均值拆分到每天再根据不同区间汇总到自然月。针对最开始的日期和结束日期,如果不满整月,就按照实际存在的日期区间来计算(时间维度按日来处理,不考虑小时等更精细的级别 | 求助者给的数据也是精确到日期而不是小时)列名数据类型注释。

2025-05-16 14:53:39 648

原创 java语法

区别联系:类是抽象模板,对象是具体实例,类是对象的模板,对象是类的实例。内存 布局:对象在堆中分配空间,包含属性(成员变量),栈存放基本类型,方法区存常量与类加载信息。创建与访问: 创建对象,通过 访问属性。定义:,注意返回类型、形参列表规则。传参机制:基本类型传值,引用类型传地址(影响实参)。递归:方法自调,需向退出条件逼近,每次调用创建独立栈空间。重载:同名方法,形参列表(类型、个数、顺序)不同,返回类型无要求。可变参数:,本质数组,可与普通参数共存(放最后)。全局变量(属性) :作用域为类体,有默认

2025-05-15 14:51:03 783

原创 参数校验的 6 大神功!

有时候,Hibernate Validator框架或者其他校验框架定义的校验不满足需求,我们需要自定义校验规则。则可以自定义注解,实现ConstraintValidator接口,来实现具体的自定义的校验逻辑。自定义注解@Contact在字段上使用。具体代码如下:less体验AI代码助手代码解读复制代码。

2025-05-15 14:50:32 816

原创 Caffeine 缓存详解与 Redis 缓存一致性实践

Caffeine 是一个高性能的本地缓存库,广泛应用于 Java 应用程序中。它基于 Java 8 开发,提供了接近理论最优的缓存命中率,并且在并发场景下表现出色。Caffeine 是 Google Guava Cache 的升级替代品,优化了内存使用和性能。高性能:Caffeine 使用了 Window TinyLFU(W-TinyLFU)算法,结合了 LRU(最近最少使用)和 LFU(最少使用频率)的优点,提供更高的缓存命中率。多种淘汰策略:异步加载:支持异步缓存加载,适合高并发场景。统计功能:内置统计

2025-05-15 14:49:36 926

原创 grpc timeout 代码分析

单元测试是软件开发中最基础的测试类型之一,其目的是验证代码中最小可测试单元(如函数、类、方法等)是否按预期工作。在Java世界中,JUnit是最常用的单元测试框架,它提供了简洁的API来编写和运行测试用例。JUnit 是一个开源的测试框架,主要用于 Java 应用程序的单元测试。目前主流版本为 JUnit 5。在实际开发中,我们常常需要测试某个类或方法的行为,但这些行为可能依赖于其他复杂的外部对象(如数据库、网络服务等)。为了隔离这些依赖,我们可以使用Mock 对象。Mockito。

2025-05-13 14:41:28 385

原创 grpc timeout 代码分析

这两段代码通过调用底层的系统调用(和)操作 Linux 下 TCP socket 的用户超时时间。这些操作需要底层系统支持,并且只对 TCP 连接有效。提供了封装,方便上层 Go 代码设置或获取 TCP 特性。

2025-05-13 14:40:47 276

原创 Spring Security+OAuth2.0授权模式笔记

使用模拟工具的Authorization认证,类型选择为Basic Auth(必须为该类型,源码中规定死的),填写客户端信息,在请求接口时会在header中生成上面的key/value信息。授权码模式比较复杂,大体业务路程解释:用户user需要访问受保护的资源服务A,但是又不想注册服务A的账密,这时可以使用服务A提供的授权登录方式,如微信、支付宝登录,用户被引导至登录对应登录方式的登录业务,有两种方式可以携带客户端信息。,有些三方授权方式,还可以勾选授权范围,比如仅授权账号、头像信息,不授权手机号。

2025-05-13 14:33:56 906

原创 Java常用的API

任何字符\d 一个数字:[0-9]\D 非数字\s 一个空白字符:[\t \n \x0B \f \r]\S 非空白字符\w [a-zA-Z_0-9] 英文、数字、下划线\W 一个非单词字符。

2025-05-11 15:44:56 785

原创 Spring AI 入门之 嵌入模型和Redis向量数据库

与传统关系型数据库的精确匹配查询不同,向量数据库的查询操作执行的是相似性搜索。当给定一个向量作为查询时,向量数据库会返回与该查询向量"相似"的向量集合。通过计算两个文本对应向量之间的数值距离(例如余弦相似度),应用程序可以量化评估生成这两个嵌入向量的原始对象之间的相似程度。嵌入模型将文本转成向量之后,要保存到向量数据库中才方便使用,下面将使用Redis作为向量数据库做一个简单的demo。至此,在Spring AI框架中使用嵌入模型和向量数据库简单的demo就完成了,探索更多用法和配置请参考官网。

2025-05-11 15:44:17 1202

原创 Tomcat9 源码分析连接参数

本次基于Tomcat9 并且使用的 Http11NioProtocol 通过源码主要分析 Tomcat 四个配置参数:minSpareThreads,maxThreads,maxConnections,acceptCount 是如何在 Tomcat 中使用,以及实际的意义是什么?

2025-05-11 15:42:42 561

原创 K8s采用Helm部署高可用Redis集群实战指南

为了更灵活地配置 Redis 集群,建议将 Chart 下载到本地进行修改。bash体验AI代码助手代码解读复制代码。

2025-05-09 14:43:13 1004

原创 一天一道Java面试题,坚持三个月,菜鸟变大佬(并发篇)

多个线程同时访问共享资源时,可能导致数据不一致或逻辑错误。例如在银行转账场景中,若两个线程同时对同一账户进行扣款和入账操作,且未进行同步处理,就可能出现账户金额异常的情况。这是因为线程在读取和修改数据时,可能会受到其他线程的干扰。Java 中的高并发问题复杂多样,需要开发者深入理解并发编程的原理,并结合实际场景灵活运用各种技术和工具。在解决高并发问题时,应从线程安全、性能优化、死锁避免等多个方面综合考虑。同时,多进行代码实践和性能测试,不断积累经验,才能在面对高并发挑战时游刃有余。

2025-05-09 14:42:38 859

原创 Spring Cloud Gateway笔记二之重要组件类梳理

如果把enabled配置成false再访问上面的路径,会发现404了,这时就需要手动显式配置routes路由规则了,通常我们也是需要显式配置的,默认的路由规则往往不能满足我们的需求,比如我们访问的路径中不包含微服务名这时就无法根据自动生成的路由规则路由了,再比如要求请求必须要断言Header包含某些参数,断言Path路径满足特殊条件等。当然如果enabled设置为了true,并且还手动配置了routes,肯定是手动配置的会覆盖掉自动生成的路由规则。一个是choose,负载均衡的实现逻辑。

2025-05-09 14:41:56 841

原创 SpringBoot3整合SpringSecurity6(三)基于数据库的用户认证

上一篇文章中,我们了解了怎么基于内存进行用户认证。但这还远远不够,在实际开发中。用户往往都存在于数据库,所以从这篇文章开始,我们就要开始学习基于数据库的用户认证。

2025-05-07 15:41:22 722

原创 ruoyi-vue ,ruoyi-vue-plus ,ruoyi-vue-pro 谁才是真正的王者

从职业生涯伊始,笔者一直是微服务架构的坚定拥趸,这很大程度上源于长期深耕互联网行业,习惯了高并发、分布式架构下的开发模式。然而,去年在优化某航空公司核心用户中心系统时,笔者的技术认知受到了不小的冲击。因为航空公司用户中心是一个典型的单体应用——尽管业务量不小,但稳定的业务模型和有限的扩展需求,使得单体架构反而比微服务更高效、更经济。事实上,单体应用在 IT 领域始终占据着不可替代的生态位。甚至可以说,在大多数业务场景下,单体架构不仅完全够用,甚至可能是更优解。它的价值主要体现在:开发效率高、运维复杂度低,尤

2025-05-07 15:39:58 701

原创 如何用WebSocket完成Http完成不了的功能,实时消息,实时进度条

我们了解了其相对于传统 HTTP 请求的优势,以及如何在实际项目中实现和使用 WebSocket 进行实时通信。WebSocket 作为一种高效的双向通信协议,已经在现代 Web 应用中得到了广泛应用,特别是在需要实时更新数据的场景下,如聊天应用、在线游戏、金融交易平台和协作工具等。

2025-05-07 15:39:14 968

原创 【Java】BigDecimal引发事故大揭秘,这“雷区”你踩过没?

你以为用了BigDecimal就能高枕无忧?Naive!这货就像个傲娇的学霸,用错姿势分分钟让你见识什么叫「代码刺客」。今天狗哥就带大家扒一扒。

2025-05-07 15:38:31 276

原创 一文读懂计算机网络两大模型:OSI与TCP/IP

ISO/OSI参考模型和TCP/IP模型是计算机网络的两种核心架构理论。ISO/OSI模型七层架构理论完善,但实现复杂,主要用于教学和理论研究;TCP/IP模型四层架构简洁高效,基于实际需求发展,是互联网的基石,广泛应用于实际网络工程。两者互补,OSI模型为理论学习提供框架,TCP/IP模型为实践应用提供解决方案。

2025-05-07 15:35:52 870

原创 Redisson 如何实现一个线程解除另一个线程的锁?

Redisson 的分布式锁通过 Redis 和 Lua 脚本实现了灵活的解锁机制,允许一个线程解除另一个线程的锁。结构和 Lua 脚本实现了分布式锁的解锁机制,允许一个线程解除另一个线程的锁。中,一个线程无法直接释放另一个线程的锁,因为锁与线程绑定,具有严格的所有权机制。然而,在分布式锁场景中,锁通常存储在 Redis 中,锁的状态与线程无关,而是通过键值对和标识符管理。数据结构存储锁信息。锁的键包含锁名称,而值通常是一个哈希表,记录锁的持有者(线程标识)、重入次数等信息。Redisson 的分布式锁(

2025-05-06 15:53:11 898

原创 Go 泛型

2016 年 Go 用户调查:83% 开发者认为缺少泛型是主要痛点。

2025-05-06 15:52:23 265

原创 手把手教你用 Sa-Token 实现登录鉴权和权限控制(入门实战篇)

是一个轻量级的 Java 权限认证框架,核心功能包括:对比 Spring Security,它更轻量、配置更简单、API 更易用,非常适合快速开发场景。后台管理系统小程序接口后端独立中台服务上手快,API 简单直观支持多端登录、单点登录、Token 续签等高级功能适配 Spring Boot 无缝集成。

2025-05-06 15:51:53 317

原创 深入分析dubbo的优雅停机

合理配置停机参数、优化业务逻辑响应时间,并结合容器化部署策略,可最大限度减少服务重启对业务的影响。若提供者提前关闭连接,触发失败重试(需配置重试策略)。若业务逻辑包含同步阻塞调用(如数据库长事务),需优化代码或拆分任务。(Graceful Shutdown)是指在服务关闭时,系统能够。若超时仍有未完成请求,记录日志并强制终止(防止无限等待)。,避免直接停机导致的请求中断或数据不一致问题。检查所有正在处理的请求(如线程池中的任务),(默认等待 10 秒,可配置)。),需确保异步任务在停机前完成。

2025-04-28 14:31:07 667

原创 Go Context 最佳实践

虽然全局字符串键的方法乍看起来可能更简单,但使用结构化上下文值在类型安全性、可维护性和开发体验方面有很多好处,可以更好的支撑不断增长的代码库,并有助于防止出现常见的运行时错误。请记住:上下文值应用于传输 API 请求生命周期内的数据,而不是用于向函数传递可选参数。请将上下文值的重点放在用户身份验证、请求跟踪和截止日期等横向问题上。通过遵循这些实践,将会有助于创建更健壮、更易维护的 Go 应用程序,而且更容易调试和扩展。

2025-04-28 14:29:16 313

原创 Java并发编程:优雅的关闭钩子(Shutdown Hook)

当程序即将退出时(例如释放资源、关闭数据库连接等),可以通过预先注册一个或多个**关闭钩子线程(Shutdown Hook)**来执行相关操作。当 JVM 进程准备退出时,这些钩子线程会被触发并运行。示例代码:typescript代码解读复制代码。

2025-04-28 14:28:25 447

原创 Tortoise_orm与Aerich 迁移

有时数据库表是已经创建好了的,需要将其转为模型类,再通过ORM去操作数据库。aerich也有相对应的命令来帮助我们将数据库表映射成模型类。上面的migrate只是追踪模型类有什么变化,然后生成一个迁移文件,但这时候具体的改变还没有应用到数据库。Aerich是用于TortoiseORM的数据库迁移工具,通过这个工具可以根据模型类来对数据库做出改变。在您的项目中,您需要配置 Tortoise-ORM 的初始化。文件夹,并在其中定义您的数据库模型。,初始化数据库,重新生成迁移文件,执行迁移。

2025-04-26 16:29:10 395

原创 多继承出现的菱形继承问题

类Parent_B,类Parent_C 分别继承类GrandParent_A,然后GrandSon_D同时继承了Parent_B,Parent_C。这就形成了菱形继承,这时候发现GrandParent_A会进行两次构造将内容复制两份。这时候就只会出现一次构造,内存里也只会有一份GrandParent_A内容,3、为了避免多继承问题出现,要么多使用virtual,要么使用接口多实现来代替。如下图,查看输出发现GrandParent_A进行了两次构造,GrandParent_A进行了两次构造。

2025-04-26 16:28:21 295

原创 线程池隐患解析:为何阿里巴巴拒绝 Executors

Executors 方法使用的队列和线程数风险场景替代方案无界 LinkedBlockingQueue固定线程数任务堆积导致 OOM有界 ArrayBlockingQueue + 自定义线程池无限制最大线程数瞬时高并发导致线程爆炸限制最大线程数 + 合适队列大小无界 LinkedBlockingQueue单线程任务堆积 + 无法调参核心线程=1 的可配置 ThreadPoolExecutor无限制最大线程数定时任务太多导致线程暴增。

2025-04-26 16:27:19 635

原创 《Quarkus+GraalVM:云原生Java微服务的性能核爆与百万级降本实战》

Quarkus与GraalVM的技术共振,不仅解决了Java在云原生时代的生存危机,更开创了性能与开发效率兼得的新范式。当传统框架还在追赶云原生浪潮时,Quarkus已经站在下一个技术革命的潮头,指引着Java开发者走向更广阔的云上疆域。

2025-04-25 20:02:58 922

原创 颠覆认知的MySQL全解析:安装、连接到SQL三大核心语句全掌握

MySQL 是目前最流行的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发(现属于 Oracle)。它使用结构化查询语言(SQL)进行数据的访问和管理,具备高性能、高可靠性和易使用等特点,广泛应用于 Web 开发、数据分析、ERP 系统等各种场景。DQL语句主要用于从数据库中查询数据,常见的查询操作包括选择列、添加条件、排序、分组、限制结果等。通过灵活使用SELECT语句和不同的子句,可以实现各种复杂的数据查询需求。

2025-04-25 20:02:19 625

原创 搞定 PDF“膨胀”难题:Python + Java 的超实用压缩秘籍

用 Python 把 PDF 拆开,再用 Java 给它“瘦身”,最后再用 Python 把它合起来,这个方法是不是很绝?以后要是再遇到 PDF 文件太大这种烦心事,就可以用这个套路轻松解决啦!而且呢,这个方法也可以根据自己的需要调整,比如在 Java 压缩的时候,把图像质量调高一点或者调低一点,或者在 Python 拆分的时候,把页数改改,这样就能灵活应对各种情况啦!是不是感觉办公技能又提升啦?赶紧试试吧!

2025-04-25 19:58:40 293

原创 Elasticsearch 堆内存使用情况和 JVM 垃圾回收

探索 Elasticsearch 堆内存使用情况和 JVM 垃圾回收,包括最佳实践以及在堆内存使用过高或 JVM 性能不佳时的解决方法。堆内存大小是分配给 Elasticsearch 节点中 Java 虚拟机的 RAM 数量。从 7.11 版本开始,Elasticsearch 默认会根据节点的角色和总内存自动设置 JVM 堆内存大小。对于大多数生产环境,推荐使用默认配置。然而,如果你希望手动设置 JVM 堆内存大小,一般规则是。较大的堆内存可以为节点提供更多用于索引和搜索操作的内存。

2025-04-23 16:00:55 867

原创 Git 往远程仓库推送大文件时候报错

今天往GitHub提交代码时候出现了报错,错误信息以及解决办法如下。

2025-04-23 15:59:29 173

原创 查漏补缺:Seata分布式事务的使用

在分布式系统下,一个业务跨越多个服务或数据源,每个服务都是一个分支事务,要保证所有分支事务最终状态一致,这样的事务就是分布式事务。在Seata中有三个重要的概念概念含义TC 事务协调器(Transaction Coordinator)管理全局事务的状态,协调各个分支事务的提交或回滚。TM 事务管理器(Transaction Manager)管理本地事务,负责开启、提交、回滚本地事务。RM 资源管理器(Resource Manager)管理分支事务的资源,负责提交、回滚分支事务。

2025-04-23 15:58:43 684

原创 2025年最新590道大厂 Java 八股文面试题整理

对于 Java 后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了 BATJ 等大厂的 offer,这个仓库也已经帮助了很多的 Java 学习者,希望也能帮助到你。

2025-04-21 13:46:58 821

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除