
Java
文章平均质量分 75
写文章的大米
↑↑↑ 欢迎大家点赞、关注、收藏!!!
10 年的 IT 行业老鸟,经历了多个重大项目上线!!!
将持续把 10 年的工作积累分享出来,结交更多志同道合的朋友!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Bean 核心知识点:定义、生命周期、面试要点
Spring Bean 基础摘要 本文介绍了Spring框架中Bean的核心概念和配置方法。主要内容包括: BeanDefinition:定义Bean配置元信息的接口,包含类名、行为配置、依赖关系等。 元信息配置:详细列举了9种Bean配置元素,如作用域、构造参数、属性设置等。并演示了通过BeanDefinitionBuilder和AbstractBeanDefinition构建BeanDefinition的两种方式。 Bean命名规范: 每个Bean必须有唯一标识符 支持XML配置中的id/name属性原创 2025-07-09 18:01:13 · 698 阅读 · 0 评论 -
01 | 谈谈你对 Java 平台的理解?
也就是常说的动态编译器,JIT 能够在运行时将热点代码编译成机器码。C1,client 模式,适用于对启动速度敏感的应用。书写一次,到处运行(Write once,run anywhere)Oracle JDK 提供的 Hotspot JVM,都提供了。C2,server 模式,适用于长时间运行的服务器端应用。包含了 JVM 和 Java 类库,及一些模块等。“-Xcomp”,关闭解释器,不要进行解释执行。类加载大致过程:加载、验证、链接、初始化。“Java 是解释执行”,这句话对吗?原创 2025-05-05 11:45:16 · 986 阅读 · 0 评论 -
游戏服务器数据存储策略和宕机保护
Redis借助了fork命令的copy on write机制在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。降低DB频率、区分重要数据(不频繁的数据价值越高/回写时间可能不同)、回写合并。共享内存 + 定时回写DB + 关键数据操作日志 + 工具回档关键数据。DB操作异步、回调、顺序、克隆(copy on write)DBProxy、逻辑和数据分开(解耦)、降低逻辑进程压力。内存、文件、redis、mongo的速度。逻辑进程即时异步 + 增量更新。原创 2025-04-15 22:46:57 · 447 阅读 · 0 评论 -
Java 项目中 mongo 问题总结
数据库本身是一个服务,对外提供网络服务,监听端口客户端访问数据库是一个c/s,socket交互数据库驱动本身实现可以是同步,可以是异步(网络层实现)同步的实现可以简单理解为一个连接一个线程处理异步的实现可以简单理解为一个线程可以处理多个连接扩展:nginx与apache,tomcat与netty,unix 5种i/o模型客户端访问则通常要设置数据库连接池最小、最大连接数最大空闲数超时数据库的瓶颈主要是cpu(不考虑磁盘和内存)所以数据库的线程数目设置很重要。原创 2025-04-15 22:41:05 · 611 阅读 · 0 评论 -
06-Spring IoC依赖注入(5~6):Setter 方法注入、构造器注入 [持续更新中...]
在Spring 框架中,注解配置和XML配置都是实现bean定义和依赖注入的不同方式。注解配置,基于Java注解,直接在代码中通过@PropertySource、@Component等注解实现bean的定义和依赖关联。XML配置,则是通过XML文件来描述bean及其依赖关系。无论是哪种方式,其底层原理都是将这些配置信息映射到特定的BeanDefinition上,进而完成依赖注入。原创 2025-04-14 23:50:44 · 1009 阅读 · 0 评论 -
01/02 数据结构与算法 开篇
广义数据结构指一组数据的存储结构。算法就是操作数据的一组方法。狭义本专栏要讲的,某些著名的数据结构和算法。数据结构是为算法服务的,算法要作用在特定的数据结构之上。原创 2025-04-14 22:50:18 · 245 阅读 · 0 评论 -
06-Spring IoC依赖注入(1~4) 持续更新中...
例如,Autowiring、JSR-330 @Inject 等注解方式,它们底层原理类似,都是通过注解实现依赖注入。自定义依赖注入注解在官方文档中没有明确说明,但可以通过实践和解读源码实现简单或复杂的自定义方法。这通常涉及到对现有实现的操作或者完全通过编程方式,在Spring的生命周期内进行操作。原创 2025-04-13 23:18:18 · 673 阅读 · 0 评论 -
09-Vert.x 的消息传递和事件流
摄取服务通过 AMQP 接收设备步数更新,确保消息持久化与可靠传输。:活动服务将每日步数事件写入 Kafka,祝贺服务消费事件并发送邮件。:将 JSON 数据转换为 Kafka 记录。实现并行消费与负载均衡。:监听主题并处理事件。原创 2025-04-11 15:47:38 · 799 阅读 · 0 评论 -
10-使用数据库进行持久状态管理
【代码】10-使用数据库进行持久状态管理。原创 2025-04-11 12:40:29 · 744 阅读 · 0 评论 -
08-Vert.x Web栈开发实战指南
基于 HTTP 方法和路径分发请求,支持链式中间件。:发起 HTTP 请求获取 JWT Token。串联多个处理逻辑(如身份验证、日志记录)。:调用内部服务(如用户服务、活动服务)。基于 RxJava 的响应式编程模型。支持 JSON 自动编解码(:通过 Vert.x 的。提供编译后的前端资源。:Vue 应用入口。原创 2025-04-11 12:20:54 · 975 阅读 · 0 评论 -
07-反应式应用设计与实现
构建一个健身追踪应用,支持用户步数统计、排名、实时仪表盘和邮件通知。反应式应用设计与实现。原创 2025-04-11 11:21:58 · 716 阅读 · 0 评论 -
06-Vert.x服务化与测试实战
客户端通过代理调用服务,自动序列化请求并监听响应。调用者只需调用接口方法,而无需关心消息的发送和接收。:服务端实现接口,处理事件总线消息并回调结果。Vert.x服务化与测试实战。原创 2025-04-10 23:55:18 · 726 阅读 · 0 评论 -
05-Vert.x 异步编程模型精要
回调嵌套导致代码可读性差(回调地狱),错误处理分散。复杂事件流处理(如合并多传感器数据)。将异步代码写成同步风格,避免回调嵌套。)缓解问题,但复杂逻辑仍难维护。Vert.x 异步编程模型精要。原创 2025-04-10 21:39:30 · 510 阅读 · 0 评论 -
04-异步数据和事件流
流模型:统一抽象读写操作,简化异步数据处理。背压:避免内存溢出的关键,优先使用pipeTo自动管理。解析器:通过灵活处理文本/二进制流。合理选择模式:推送(Push)适合实时流,拉取(Pull)适合批量处理。资源释放:及时关闭流(close())防止资源泄漏。原创 2025-04-10 21:03:28 · 860 阅读 · 0 评论 -
03-EventBus:Vert.x 应用程序的支柱
事件总线是 Vert.x 的核心通信机制,通过异步消息传递实现 Verticle 间的解耦协作。消息以 JSON 或字符串形式传输,支持本地和分布式通信。原创 2025-04-10 19:22:30 · 326 阅读 · 0 评论 -
02-Vert.x 的基本处理单元-Verticles
Verticle 是 Vert.x 的最小功能单元,封装异步事件处理逻辑(如HTTP请求、数据库操作、定时任务)。原创 2025-04-10 13:36:37 · 925 阅读 · 0 评论 -
01-vertx 基础知识
---- 来自Vert.x 网站 (https://vertx.io/)的介绍。Vert.x 应用程序是一个模块组合,提供您真正需要的东西,仅此而已。Vert.x 支持大多数流行的 JVM 语言:JavaScript、Ruby、Kotlin、Scala、Groovy 等。:它不为您的应用程序提供预定义的基础,因此您可以自由地将 Vert.x 用作更大代码库中的库。Vert.x 的重点是处理异步事件,主要来自非阻塞 I/O,线程模型在事件循环中处理事件。Vert.x 是一个。原创 2025-04-10 13:34:23 · 280 阅读 · 0 评论 -
记录一个线上 quartz 阻塞问题
debug 看一下 url,发现有时候是connect连接不上,直接超时;线上的错误是 connect连接上了,但是socket#read超时了,所以应该再加上一个socketTimeout。所以,即使类似调用 socket.read 时,线程会挂起 ,但此时状态还是 runnable。JVM 将I/O阻塞视为“等待资源”,与CPU调度无关,因此,统一归为。注意:此时线程阻塞,但是状态是 runnable。发现: 所有的 quartz 线程都在。简化了线程状态管理,牺牲了状态细粒度。原创 2025-04-09 09:48:07 · 221 阅读 · 0 评论 -
Redis lua脚本性能测试(记录下)
测试源码:RedisLuaScriptTest。原创 2025-04-08 12:53:38 · 241 阅读 · 0 评论 -
JVM 内存非典型术语介绍(shallow/retained/rss/reserved/committed)
在服务器性能优化内存这一项时,有一些现象很诡异。如top显示的RES很大,但是实际jvm堆内存占用很小,同时使用nmt发现committed更大。所以决定写这篇wiki大概介绍一下top 显示的res是指进程常驻内存。目前从经验上看这个常驻内存会比堆内存大 这个很容易理解 因为jvm除了堆内存外,还有metaspace、stack、jvm本身、堆外内存等使用 nmt工具可以看到committed size比较大 比rss要大。原创 2025-04-08 12:40:54 · 685 阅读 · 0 评论 -
深入理解 CMS GC(重点知识、优化方向、实践参数)
这个假设最终被证明是错误的,由于老年代空间的碎片化(或者,不太贴切的说,由于晋升实际要占用的内存超过了CMS收集器的判断),CMS收集器无法晋升这些对象。后台线程的收集没有赶上应用线程的分配速度。如果,观察 cms fgc,突然发现stw的时间很长,多达几秒甚至更多,一定是出现了异常情况,而这些情况的代价都十分昂贵,在做cms调优的时候要尽可能的避免。如果,浮动垃圾很多的话,也无法解决该问题,即cms并发回收期间,浮动垃圾越来越多,占用预留空间,多次的ygc的话,会有填满预留空间的可能,虽然概率较低。原创 2025-04-08 12:13:55 · 851 阅读 · 0 评论 -
重识 Spring Boot 的内部结构、核心机制、工作原理(5~8节)
在没有使用start起步依赖时,管理依赖非常繁琐,需要自行排查依赖冲突。为解决这个问题,可以使用Maven提供的来列出工程中的所有依赖,并以树状结构展示,便于发现可能存在的依赖冲突。另外,还可以使用等工具辅助排查。原创 2025-04-05 22:56:45 · 1251 阅读 · 5 评论 -
重识 Spring Boot 的内部结构、核心机制、工作原理(1~4节)
编写一个配置类(configure),通过条件注解实现想要的自动配置;在 spring boot 的上下文中声明,并注册这个自定义自动配置类;原创 2025-04-04 22:27:57 · 854 阅读 · 0 评论 -
思考题:用了分布式锁,影响并发怎么办?
我们拦截的都是一些不希望发生的异常并发。所以,正是因为我们拦了一些异常请求,系统才能有更多的资源,处理更多的正常请求,并发反而上来了。使用分布式锁的目的是什么?这里的并发是什么并发?是同一个用户的,同一个行为的重复操作!比如 重复下单,消息重投等等的。同一个用户的,也包含不同用户的。原创 2025-03-31 23:56:31 · 130 阅读 · 0 评论 -
分布式场景下,锁的粒度和事务的粒度,如何控制?
在事务中进行了外部调用(redis 锁),可能会拖长事务、占用数据库链接等问题。可以有效的避免数据库链接被占用、导致数据不一致等问题。优点:锁的时长比较短,并发度会更高一些。锁粒度变大,这个是可接受的。原创 2025-03-31 23:48:52 · 304 阅读 · 0 评论 -
不用Redis分布式锁?如何防止用户重复点击的解决方案!
服务端通过数据库(悲观锁 / 乐观锁)验证 Token 是否已使用,未使用则允许操作。控制单位时间内(如 1 分钟 / 1 秒)用户请求次数,限制重复点击频率。用户点击后禁用按钮,限制重复操作,但存在用户绕过置灰的情况。用户访问页面时后端生成 Token,提交时携带 Token。校验表单信息并存储,若重复提,交且时间间隔不足,拒绝请求。如果,命中时,再通过数据库幂等判断,实现快速失败校验。可以了解下 ruoyi 框架,快速校验操作是否执行过,如果,未命中时,则执行;原创 2025-03-31 23:25:43 · 332 阅读 · 0 评论 -
Spring 中 Bean 的作用域有哪些?
除了 Spring 官方提供的这些作用域以外,我们还可以自定义我们自己的作用域。要自定义一个 Spring 的作用域,需要实现接口。Scope接口实现 Scope 接口注册这个自定义的作用域。可以通过方法实现。使用这个自定义作用域。原创 2025-03-31 17:59:51 · 717 阅读 · 0 评论 -
Spring IOC 指南
在 IOC 中,控制关系发生了反转。控制权被转移到 Spring 容器中,容器负责创建和管理对象,并在需要的时候将它们注入到应用程序中。在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。在 Spring 的 IOC 中,Spring IOC 指南。,可以有不同的实现方式。原创 2025-03-31 15:21:13 · 252 阅读 · 0 评论 -
Java类加载全流程解析 2
这个Class对象作为程序中每个类的数据访问入口。类型的方法句柄,且句柄未初始化时,触发类初始化。初始化子类时,若父类未初始化,先触发父类初始化。包反射调用类,若类未初始化则触发。Java类加载全流程解析 2。类的实例来表示这个类。方法的主类会被初始化。加载过程:会创建一个。(设置静态字段值)、原创 2025-03-29 11:56:39 · 287 阅读 · 0 评论 -
Java类加载全流程解析
若父加载器为空,则默认使用启动类加载器(bootstrap)作为父加载器。如果父类加载失败,抛出ClassNotFoundException异常后,若没有加载过,则调用父加载器的loadClass()方法,最后,调用自己的findClass()方法进行加载。让子类自定义的去获取类定义的二进制文件。,如果该类已经被加载过,则不加载。找不到该类的定义,则会通过。loadClass 加载逻辑。先检查类是否已经被加载过。将二进制文件加载为类。模型,对该类进行加载。原创 2025-03-29 11:47:42 · 185 阅读 · 0 评论 -
JVM GC全流程解析:从Young GC到Full GC
若老年代空间不足(老年代剩余空间 < 预估晋升对象大小),则先触发。若某年龄对象总和 > Survivor区容量50%,直接晋升。若 To Survivor 区空间不足,触发担保机制;若老年代空间足够,允许执行 Young GC。,再执行 Young GC。上图 基于JDK 1.8。CMS并发标记阶段失败;或,G1混合收集阶段失败。也会触发 FullGC。原创 2025-03-29 11:35:34 · 576 阅读 · 0 评论 -
JVM垃圾回收算法全解析
参考:https://gitee.com/wtfocus/geek-java-notes/blob/master/Java%20%E8%AE%AD%E7%BB%83%E8%90%A5/01-JVM.md#gc-%E7%AE%97%E6%B3%95。对对象集合,进行一个标记。把可达对象和不可达对象区分开。把清除不可达对象后,剩下的所有碎片给整理好。然后,对不可达对象进行一个清除操作。形成一整片连续可用的空余的内存。与"标记-清除"算法一样。JVM垃圾回收算法全解析。原创 2025-03-29 10:51:23 · 329 阅读 · 0 评论 -
JVM运行时内存区域深度解析
堆上会发生 OutofMemoryError,栈上会发生 StackOverflowError。栈的大小比堆要小的多,一般是几百到几千字节。栈的存储速度比堆快,代码执行效率高。原创 2025-03-29 10:29:45 · 230 阅读 · 0 评论