- 博客(58)
- 资源 (5)
- 收藏
- 关注
原创 JVM调优 - 带你无痛云排查解决K8s的Pod内存使用率接近99%告警(JVM堆分配参数-Xmx原理)
K8s Pod内存占用接近99%触发了告警,但实际并未出现问题!通过排查发现,JVM Heap内存使用正常,问题出在监控指标container_memory_working_set_bytes上。进一步分析发现,Linux的cache/buff缓存机制导致内存占用被高估,这部分内存实际上可以随时释放。JVM启动参数-Xms14g -Xmx14g规定了堆大小,导致buff/cache一直维持在16G左右,从而触发了告警。最终通过将-Xms和-Xmx调整为13G,解决了内存占用过高的问题,确保了系统的稳定运行。
2025-05-09 13:14:21
891
原创 Java线程池 - ThreadLocal底层原理与内存泄漏OOM(建议收藏=官方文档+源码+复现+可视化分析+解决方案+实验)
本文深入剖析Java中ThreadLocal的内存泄漏问题及其解决方案。通过解析JDK8源码,揭示ThreadLocalMap采用弱引用键,导致键回收后,值仍被强引用滞留的底层缺陷,结合线程池场景演示OOM现象,及MAT工具分析残留Entry。文章提出三大实战方案:规范使用remove()清理、采用Netty的FastThreadLocal自动回收机制,以及WeakReference防御策略,并通过代码复现对比验证效果。
2025-04-24 17:12:58
426
1
原创 Java线程池 - 深入解析ThreadPoolExecutor的底层原理(源码全面讲解一篇就够)
一阶段,可以优先用工作线程,这样处理的任务,直接用工作线程执行,工作线程本身存在,无需创建和销毁线程。二阶段,是超出工作线程数,可以用工作队列缓冲,后面还是工作线程处理,无需创建和销毁线程,只不过需要等待时间去消费。三阶段,是任务总量已经超出工作线程 + 队列容量 的总和,这时候在配置的最大线程数下去开启更多线程去压榨性能,超出部分的任务只能拒绝。
2025-04-18 23:02:04
747
1
原创 Spring源码 - Spring AOP底层逻辑详解(万字长文)
AbstractAutoProxyCreator#postProcessAfterInitialization 执行了 AbstractAutoProxyCreator#wrapIfNecessary 方法。if (StringUtils.hasLength(beanName) && this.targetSourcedBeans.contains(beanName)) { // 1. 检查是否为手动指定的 TargetSource Bean(例如通过 @Bean 自定义 TargetSource)
2025-04-17 19:29:05
638
原创 Spring源码 - 深度解析@Resource依赖注入的执行逻辑
若未指定 name属性,默认使用字段名或方法名作为 Bean 名称。名称匹配失败后,尝试按类型匹配,结果必须唯一。详细流程如下:1、处理器执行入口@Resource 注入,是在 populationBean 的时候,遍历处理 InstantiationAwareBeanPostProcessor(实例化感知Bean后置处理器)去执行 postProcessProperties,其中就有。
2025-04-15 16:39:35
827
原创 Spring源码 - 这才是Spring Bean生命周期
生命周期回调部分其实讲的很透彻,就是实现 InitializingBean#afterPropertiesSet()、DisposableBean#destroy() 就可以实现生命周期的初始化阶段、销毁阶段 控制,而 @PostConstruct、@PreDestroy 与以上两个是等价的,只不过解耦了(毕竟这两个注解是 javax.annotation 包下的,我们甚至可以不依赖 Spring 模块也能实现)。首先,研究是有先后顺序、前置知识的,要了解生命周期,得先知道 Bean 是如何被创建的。
2025-04-09 02:33:47
952
原创 Spring源码 - Spring IOC 如何解决循环依赖
我们回到我们的例子,我们先处理的是 1对象(为了直观,之后将 CircleDependent1 简化描述为 1对象) 的逻辑不存在于三级缓存,所以通过 singletonFactory.getObject() 回调到匿名函数(回到前文可看到该匿名函数),调用 createBean 去创建 bean(此时 create ,而不是 get,注意这个差别,意味着这时候才是真正的创建逻辑,毕竟从缓存中没有拿到现有的只能去创建,命名十分合理)。我们知道,递归调用就会有递归调用的算法思路。
2025-04-05 00:00:49
551
原创 springboot底层原理之 - @SpringBootApplication 源码精读
注解会被记录到文档;自动配置类本质是 Spring 的 @Configuration 配置类,通过 SpringFactoriesLoader 机制(以本类为键)加载。配置组件扫描规则,用于指定Spring容器在哪些包路径下扫描带有组件注解(如 @Component、@Service等)的类。当使用被 {@code @Inherited} 修饰的注解标注类时,若该类的子类未显式使用该注解,则会自动继承父类的注解。所以,@SpringBootApplication 的属性里都是当前注解的原注解的属性的覆盖。
2025-03-14 01:25:59
821
原创 推荐一个好用的在线文本对比网站 - diffchecker
推荐一个好用的,可以生成对比在线链接、支持回退历史、UI设计也很不错、响应也很快的网站。
2025-03-09 15:33:06
442
原创 《深入浅出数据索引》- 公司内部培训课程笔记
大参林信息中心内部培训课程《深入浅出数据索引》的笔记,记录一些索引底层原理、优化技巧等信息,供大家参考学习
2025-03-07 18:29:45
258
原创 DeferredResult 是如何实现异步处理请求的
最近遇到了一个问题,我们的一个接口需要去轮询另一个第三方接口,导致这个接口占用了太多工作线程,这些工作线程长时间 running,我们需要解决这个问题。于是,我们的方案是:用 DeferredResult 实现接口异步。全文就是探究其原理。
2024-08-02 21:41:38
1038
原创 springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step
Springcloud RocketMQ ,一个mq消息发送后,客户端是怎么一步步拿到消息去消费的?我们要从代码层面探究这个问题。
2024-07-25 10:59:47
595
原创 订单折扣金额分摊算法|代金券分摊|收银系统|积分分摊|分摊|精度问题|按比例分配|钱分摊|钱分配
一个金额分摊的算法,将折扣分摊按比例(细单实收在总体的占比)到各个细单中。此算法需要达到以下要求:折扣金额接近细单总额,甚至折扣金额等于细单金额,某些时候甚至超过细单总额,要保证实收不为负数。复杂度O(n)写这个算法的初衷,就是因为现在网上的分摊算法,都没有考虑到最后一项不够减、只循环一次、折扣金额接近总额…
2024-07-03 17:50:26
997
2
原创 谈谈跳台阶算法的记忆法和编程理念|青蛙跳台阶|递归|动态规划|算法|程序员面试|Java
为什么会写这篇文章?因为鄙人刷过此题多次,每次觉得自己会了,可下次还是不能一下子写出题解,故记录下我是如何记忆此题的,并且探索一些编程理念。
2024-06-20 11:55:54
476
原创 java数组ArrayList迭代修改的ConcurrentModificationException错误
java数组集合进行迭代修改时,不用迭代器内部方法容易报错!
2024-06-13 22:12:01
314
原创 mysql oceanbase数据库alter语句阻塞,解决方案
查一下这些阻塞的语句,判断哪个是所阻塞的表相关的。执行:kill processlist_id。
2024-05-08 15:57:55
408
原创 2022阿里巴巴全球数学竞赛 第4题 虎虎生威(盲盒问题、集卡问题)解决思路
盲盒问题、集卡问题,来自 2022阿里巴巴全球数学竞赛 第4题(单选题),参考了哔哩哔哩阿里达摩院的解题思路,加上自己的通俗理解。
2022-07-01 23:35:43
6968
4
原创 手写一个简单的Spring容器(原理+源码)
手写一个简单的Spring容器,用配置文件方式,在配置文件中写入我们想要的bean,工厂会自动创建一个仓库,bean实例被用到时注册,我们就可以直接根据bean的名字拿到这个bean的单例。
2022-07-01 14:19:32
807
原创 Learning Git Branching 题解(基础、高级、Git远程仓库)
Learing Git Branch是一个模拟git操作的网站,本文将解题的关键过程记录下来,方便后续复习和查阅
2022-06-30 19:26:39
1677
原创 C++实现wins后台监控键盘输入(Hook)
使用Wins的Hook技术,将键盘输入的消息的新处理挂载到消息处理链中去,实现简单的对键盘输入的监控。
2022-06-23 01:16:32
10020
4
原创 从源码和测试多方面深度解读Java的String类对象的内存分布
网上关于String对象内存分配的知识的分享比较零散不一,String的==、intern函数,以及在JVM内存中String到底在哪里,这篇文章会进行分析。
2022-06-15 18:36:53
369
原创 攻防世界(adworld) WEB Exercise area(练习区)10题解题思路
整理adworld中10道web攻击练习题,涉及http请求响应内容、密码爆破、编码解码、php语法、webshell等。
2022-03-15 16:20:54
3769
原创 整理PHP的一些比较突出的特点(PHP入门笔记)
作为一个Java开发者,第一次学习PHP,在查看了入门文档之后,整理了令我印象深刻的点。服务器脚本语言PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言。 纯 HTML 结果发送回浏览器<!DOCTYPE html><html><body><h1>My first PHP page</h1><?phpecho "Hello World!";?>.
2022-03-08 17:10:18
313
原创 SpringMVC静态资源发布流程(静态如何从文件加载到Resource,最后传给response,以及其专用处理器ResourceHttpRequestHandler源码深入追究)
SpringMVC 加载静态文件,最后又传给response,说完你可能不信,我追踪了一遍!
2022-03-02 20:26:44
1275
原创 HttpRequestHandlerAdapter——SpringMVC中的网络请求处理适配器
我们SpringMVC中,DispatcherServlet拿到请求,先去HandlerMapping找到handler链,然后获取支持这个handler的HandlerAdapter,拿得到的话就执行处理逻辑,然后得到模型视图,再解析视图,渲染。HttpRequestHandlerAdapter这个也是其中的一环。
2022-03-02 12:20:44
1218
原创 SpringBoot SpringBootServletInitializer启动原理,如何扫描添加Servlet、ServletContext,内置tomcat原理(源码深入解析)
现在主流的SpringBoot就是基于Servlet的,所以研究Servlet如何加载是很有必要的。
2022-03-01 23:10:58
2589
原创 SpringBoot中SpringMVC的DispatcherServlet工作流程?服务发布?源码解析?Servlet监听?Listener?注释翻译?代码详解?与Controller关系?
我们写一个Listener去监听什么是Listener?Listener 即监听器,是servlet 的监听器。随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。当被监视的对象发生情况时,立即采取相应的行动(观察者模式)。主要作用是做一些初始化的内容添加工作、设置一些基本的内容(比如一些参数或者是一些固定的对象)。通过监听器,可以自动激发一些操作。比如:监听在线用户数量等等。我们先实操:import javax.servlet.ServletContext;import ja
2022-03-01 17:32:49
520
原创 Java与SpringBoot内置Tomcat源码运行原理与Servlet放置原理解析(org.apache.catalina.startup.Tomcat)
简单使用可以参考这篇文章:https://blog.csdn.net/the_one_and_only/article/details/105177506基本原理就是将Tomcat对象中的Host和Connector中的port设置成相应的host:port,配置Tomcat上下文(环境配置),最后加入Servlet,然后跑起来。Tomcat是这样的:Tomcat源码注释:/** * Minimal tomcat starter for embedding/unit tests. * *
2022-02-28 21:15:44
800
原创 n步问题求解算法:斐波那契拓展|青蛙跳台阶拓展|三步问题拓展|多步问题拓展|高精度|大整数支持|自顶向下分析|自底向上求解
问题分析(自顶向下)首先看斐波那契数列,我们先自顶向下分析,f(n)其实是f(n-1)和f(n-2)的和,我们如果画成树,就会发现底层叶子节点都是 f(0)=0 和 f(1)=1。我们再看经典的青蛙问题,每次跳1~2步,跳一步的情况+跳两步的情况,f(n)=f(n-1)+f(n-2),其实本质也是斐波那契数列。(初始值及其含义不一样)最后看三步问题,每次跳1~3步,跳一步的情况+跳两步的情况+跳三步的情况,f(n)=f(n-1)+f(n-2)+f(n-3),很像斐波那契数列。(初始值及其含义不一样)
2021-06-24 18:56:54
386
原创 安卓AIDL跨进程调用技术实例(踩坑讲解)(两种方案)(max函数服务|音乐播放服务)
方法一:aidl接口+Service类main文件下创建aidl接口:创建之后:代码:interface GetMaxAidlService { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */// void basicTypes(int anInt, long aLong, boolean aBoole
2021-06-13 00:23:32
1837
6
ssm-demo.zip
2020-09-27
进程调度作业调度和内存块分配算法(含界面).zip
2020-07-26
多道批处理的两级调度.zip
2020-07-11
B树+B树实现的图书管理系统(C语言)(广东工业大学课程设计2019).zip
2020-01-11
广工数据结构anyview2019最新完整参考答案(含题目).docx
2020-01-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人