自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [从程序员到架构师] 微服务场景实战 - 注册发现

接下来咱们要聊点硬核又好玩的东西——微服务。放心,不急着“飞天”,咱还是老老实实从最接地气的场景开始,一步步拆解、慢慢铺开。带大家轻松搞懂几个核心组件的实现逻辑,最后笑着看透微服务架构那点儿“本质”。怎么样,准备好一起盘它了吗?😉

2025-12-26 21:08:44 457

原创 【大数据高并发核心场景实战】 设计秒杀架构必知必会的那些事

之前的文章中我们已经演练了缓存的三种“招式”:用读缓存化解数据库查询压力,靠写缓存扛住流量洪峰,再通过消息队列从容同步数据。这套组合拳——先缓冲、再异步、平稳落库——正是接下来面对真刀真枪的秒杀场景时,我们要继续运用的核心战术。

2025-12-04 15:37:59 986

原创 【大数据高并发核心场景实战】缓存层 - 日亿万级请求日志收集

上一章咱们给数据库装了个“写缓存”,相当于在市中心车库外建了个临时停车场。确实,车流(写操作)不堵门了。但问题是——这停车场是露天的,且只有三个车位。一旦遇上“双十一”式的高频数据洪流(想象一群饿疯了的吃货同时涌向自助餐厅),这方案立刻露出短板:缓存写满的速度比手机掉电还快,数据要么排队等到天荒地老,要么面临丢失风险。显然,临时方案扛不住持久战。接下来咱们关掉美颜,直面痛点,一步步拆解如何为持续的高频写入设计一个既扛得住、又稳得起的系统方案。道路就在前方,咱们开始铺路。

2025-12-04 10:52:06 881

原创 【大数据高并发核心场景实战】缓存层 - 写缓存

上一篇文章讲到我们通过读缓存以减少数据库读操作的压力,却也存在着不足,比如写操作并发量大时,这个方案不会奏效。那该怎么办呢?本篇就来讨论怎么处理写操作并发量大的场景。

2025-12-02 16:05:17 1070

原创 【大数据高并发核心场景实战】缓存层 - 读缓存

前面已经完成了数据持久层的讲解,接下来将围绕数据库数据频繁读写的问题探讨缓存层的实战,本篇文章,我们就来聊聊缓存界的“头号网红”——读缓存。这玩意儿大家常用到都快用出“包浆”了,所以基础操作就此掠过,着重对比下常见缓存方案的优劣。

2025-12-01 17:52:29 962

原创 【大数据高并发核心场景实战】 数据持久化层 - 分表分库

我们在上一章讲到,查询分离的方案存在三大不足,其中一个就是:当主数据量越来越大时,写操作会越来越缓慢。这个问题该如何解决呢?可以考虑分表分库。今天我们会先介绍一下真实的业务场景,而后依次介绍拆分存储时如何进行技术选型、分表分库的实现思路是什么,以及分表分库存在哪些不足。

2025-11-30 21:51:33 680

原创 [源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅

“在AI可以自动生成代码的今天,为什么还要读源码?因为理解原理才能让我们从代码的’使用者’变成’创造者’!” 最近AI的崛起确实让技术圈发生了翻天覆地的变化,博主之前的源码解析栏目也因此沉寂了一段时间。不过,在经历了更多生产问题复盘和真实架构设计的实战后,我愈发觉得:理解底层原理才是应对技术变革的不变法宝。

2025-11-26 23:48:51 481

原创 【大数据高并发核心场景实战】 数据持久化层 - 查询分离

上一章中我们介绍到冷热分离,旨在快速交付。但是他仍存在一些问题,并不是完美的方案,比如限制了业务的操作,必须再特定的业务场景下(冷数据不允许修改、冷数据查询慢、不适合复杂查询)。本章将介绍新的方案,支持千万数据的快速查询

2025-10-29 11:41:52 905

原创 一个字符串替换引发的性能血案:正则回溯与救赎之路

凌晨2:15,钉钉监控告警群疯狂弹窗——文档导入服务全面崩溃,IDEA Profiler 火焰图直指真凶

2025-06-24 10:57:35 598

原创 【大数据高并发核心场景实战】 - 数据持久化之冷热分离

摘要:大数据场景下的冷热数据分离实战 本文针对工单系统日均10万增长、数据量超1.5亿导致的性能问题,提出了冷热分离解决方案。核心痛点在于热数据(最近3个月)仅占20%却承担80%访问。通过分析数据库分区方案的缺陷,详细阐述了冷热分离实施策略:采用定时扫描触发迁移、批量处理与并发控制相结合、设计精妙的锁机制确保数据一致性,最终实现查询响应从2.1s降至0.2s。对于亿级冷数据,进一步介绍了迁移至HBase的优化方案,包括RowKey设计和存储架构。文章还总结了冷热分离的适用场景与实施原则,为高并发大数据系统

2025-06-20 16:05:09 893

原创 当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系

那次OOM事故教会我们:系统设计就像在雷区跳华尔兹,单纯提升某个组件的并发能力,相当于给舞者换上火箭助推器——除非你确定他的舞伴也能同步进化成钢铁侠。最后分享一个防秃小贴士:每当想要优化组件时,请先对着架构图唱一遍《爱我中华》——“五十六个组件,五十六支花,五十六个兄弟姐们是一家…”(毕竟架构师的头发就是这样一根根掉光的)本文不承诺根治系统故障,但保证能让您在报错日志中找到黑色幽默。毕竟,能用段子解决的故障,何必动感情呢?

2025-03-27 11:21:11 862

原创 客户端“自废武功”背后的深层秘密——CORS跨域是怎么回事?

你一定遇到过这样的情景:你在写一个 Web 应用,开发得有声有色,一切都很完美,直到你开始发送跨域请求,突然间,客户端给你抛出了一个“CORS 错误”。

2024-11-29 15:30:41 717

原创 [每日算法 - 阿里机试] leetcode739. 每日温度

给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

2024-04-07 13:56:42 1005 1

原创 [每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点 「 详细图释一看就懂!」

使用快慢指针的方式,快指针与慢指针相差n-1,即快指针比慢指针超前了n个节点。 两个指针同时遍历链表,当快指针指向null时,此时慢指针正好指向倒数第n个元素的前一个元素。

2023-10-06 22:57:27 1083 1

原创 [源码系列:手写spring] AOP第一节:切点表达式

在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP。AOP即切面编程是Spring框架中的一个关键概念,它允许开发者在应用程序中优雅地处理横切关注点,如日志记录、性能监控和事务管理。在切面编程中,切点表达式是一项关键技术,它定义了在何处应用切面的逻辑。本章将深入探讨Spring切点表达式的实现原理,为读者提供对这一重要概念的深刻理解。

2023-09-24 18:28:00 847 2

原创 [源码系列:手写spring] IOC第十四节:容器事件和事件监听器

现实中的观察者(Observer)往往是主动方,这是由于目标主题(Subject)缺乏主观能动性造成的,其状态的更新并不能主动地通知观察者,这就造成观察行为的持续往复。而在软件设计中我们可以将目标主题作为主动方角色,将观察者反转为被动方角色,建立反向驱动式的消息响应机制,以此来避免做无用功,优化软件效率,请参看观察者模式的类结构,如图所示。

2023-09-10 19:11:44 1678 8

原创 [源码系列:手写spring] IOC第十三节:Bean作用域,增加prototype的支持

在Spring中,Bean的作用域(Scope)定义了Bean的生命周期和可见性。包括单例和多例,在本章节中我们将为Bean添加多例的支持,下面是PrototypeBean的prototype作用域表示每次从容器中获取该Bean时都会创建一个新的实例。每个请求或依赖注入都会导致创建一个全新的Bean对象。prototype作用域的Bean实例不受Spring容器的管理,容器在创建Bean之后不会再跟踪它。这意味着Spring容器不会负责释放或销毁prototype作用域的Bean。

2023-09-06 18:14:07 746

原创 [源码系列:手写spring] IOC第十二节:FactoryBean

在getBean方法中添加BeanFactory的逻辑,当bean属于BeanFactory类型的,就拿他的getObject方法返回的对象,并根据isSingleton()方法返回时决定是否加入缓存。....用于缓存单例的BeanFactory提供类try {//singleton作用域bean,从缓存中获取}else{//prototype作用域bean,新创建beanreturn obj;....

2023-09-05 23:16:59 441

原创 [源码系列:手写spring] IOC第十一节:Aware接口

...//执行BeanPostProcessor的前置处理........@Override//创建BeanFactory,并加载BeanDefinition//添加ApplicationContextAwareProcessor,让继承自ApplicationContextAware的bean能感知bean....

2023-09-05 01:00:17 491

原创 [每日算法 - 华为机试] leetcode690. 员工的重要性

当遇到一个问题描述中涉及到多个个体之间存在层级关系,且这些关系可以看作是一个从顶层到底层的结构时,很可能你正在处理一个树结构问题。例如公司的组织结构、文件系统、家谱等等。这道题就是一个典型的树结构问题...

2023-08-21 23:49:34 280

原创 [每日算法 - 华为机试] leetcode463. 岛屿的周长

解题思路:通过遍历每个陆地格子,然后检查它的上、右、下、左四个相邻格子,🌟​​​​​​​🌟​​​​​​​🌟如果越界或者相邻格子是水域,就认为当前格子的周长增加了1 🌟🌟🌟

2023-08-20 19:38:51 315

原创 [每日算法 - 华为机试] leetcode680. 验证回文串 II

回文字符串定义:"正读和反读都一样,中心对称的字符串"。贪心思想的最优子结构:贪心字符串边缘两个位置的字符串相同与否,相同可以继续运算,不同则非回文字符串。

2023-07-21 11:39:06 266

原创 [每日算法 - 华为机试] leetcode172. 阶乘后的零

解题思路:可以直接想到的是当一个数字*10的时候,乘积的结果必然包含一个0,当和两个10相乘那么乘积肯定包含两个0.

2023-07-12 16:13:36 355

原创 [每日算法 - 华为机试] 剑指 Offer 57 - II. 和为s的连续正数序列 「滑动窗口」

解题思路:用两个指针代表窗口的左右边界,指针移动代表窗口滑动,记录窗口内的数字和sum,窗口滑动同时更改sum。

2023-07-12 15:12:53 316

原创 [每日算法 - 华为机试] LeetCode 475. 供暖器

思路:对一每一个房间,要么利用左边的取暖器,要么利用右边的取暖器,利用二分查找的方式查询出距离房间最近的左右两边的取暖器,取两者的最小值即当前房间取暖所需取暖器最小半径,最后取所有的房间所需最小半径的最大值即可!

2023-07-06 15:05:54 422

原创 [每日算法 - 华为机试] LeetCode1160. 拼写单词

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。输入:words = ["cat","bt","hat","tree"], chars = "atach"输出:6。

2023-07-04 13:55:56 583

原创 [每日算法 - 华为机试] 剑指 Offer 10- II. 青蛙跳台阶问题

简单递归缺点: 多了很多重复计算(如红框圈出来的地方),记忆递归的讲每次计算结果存储,不再重复计算。

2023-07-03 16:36:59 431

原创 [每日算法 - 华为机试] leetcode53 :最大子数组和 「算法中的哲学」

解题思路:「阿德勒心理学中的目的论 」我不会受过去影响,我选择了现在的我,只有过去是正向的,才会是我的一部分!

2023-07-03 14:54:20 414

原创 [每日算法 - 华为机试] leetcode20 :有效的括号 「栈」

[每日算法 - 华为机试] leetcode20 :有效的括号 「栈」方法一解题思路...

2023-06-28 23:39:59 111

原创 [每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」

方法一:双指针 思路与算法 我们可以使用两个指针 i 和 j 对字符串相向地进行遍历...

2023-06-28 22:37:10 205 1

原创 [源码系列:手写spring] IOC第十节:bean的初始化和销毁方法

自动注册的beanDefinition工厂类添加方法,支持注册有销毁方法的bean(即继承自DisposableBean或有自定义的销毁方法并在xml定义的Bean。当用户没有实现DisposableBean接口但是注册了自己的销毁方法在xml时,将利用此方法将beanDefinition中的方法名称提取,通过上面定义的DisposableBeanAdapter的方式在创建bean的时候存入单例beanFactory的容器中。...try {//填充属性。

2023-06-28 15:38:46 713 1

原创 [源码系列:手写spring] IOC第九节:应用上下文ApplicationContext

在Spring中应用上下文ApplicationContext是相较于BeanFacotry更为先进的IOC容器,BeanFacotry是Spring实现IOC最基础最核心的接口,使得Spring管理不同Java对象成为可能。而ApplicationContext是建立在ApplicationContext的基础上,提供了更多面向应用的功能。

2023-06-13 11:01:11 391

原创 [源码系列:手写spring] IOC第八节:BeanFactoryPostProcessor和BeanPostProcessor

内容介绍:BeanFactoryPostProcessor和BeanPostProcessor是spring中具有重量级地位的两个接口,理解了这两个接口的主要作用,基本就理解Spring的核心原理了。为了便于理解将分成两篇文章介绍。BeanFactoryPostProcessor: BeanFactoryPostProcessor是spring容器的后置处理器,是spring提供的容器扩展机制,它的调用时机是在spring容器实例化任何一个bean之前,也就是说在容器完成BeanDefinition读取之

2023-04-22 18:47:41 514

原创 [每日算法 - 华为机试] leetcode45 :跳跃游戏 II 「动态规划神器推荐」

45. 跳跃游戏 II。

2023-04-10 15:17:44 260

原创 [源码系列:手写spring] IOC第七节:加载xml文件中定义的Bean

核心代码BeanDefinitionReader、AbstractBeanDefinitionReader、XmlBeanDefinitionReader上一节加入了资源管理器,令框架具备了读取配置文件的能力。在该篇文章中将为我们的框架加入xml格式的配置文件,在配置文件中声明式的定义bean信息,利用资源加载器读取xml配置文件,进而解析出bean信息,注入进bean容器。BeanDefinitionReader:读取bean定义...

2023-04-09 19:26:51 587

原创 [源码系列:手写spring] IOC第六节:资源和资源加载器

对java.net.URL进行资源定位的实现类。定义对资源的抽象和访问,并且添加三个Resource接口的。classpath下资源的实现类。文件系统资源的实现类。ResourceLoader接口。Resource接口。

2023-03-22 00:12:57 175

原创 [源码系列:手写spring] IOC第五节:Bean注入Bean

添加BeanReference类,包装一个bean对另一个bean的引用。如beanA引用beanB,那么在实例化beanA时,如果ProperValue.value是BeanReference类型,引用beanB,那么先实例化beanB。在这里为了便于大家理解暂时不引入三级缓存解决循环依赖,三级缓存会在后面高级篇单独讲解。

2023-03-20 22:31:23 157

原创 [源码系列:手写spring] IOC第四节:Bean属性注入

主要内容:1.添加PropertyValue类表示Bean的属性。 2. 为Bean定义对象BeanDefinition添加PropertyValues列表用来存储Bean的各种属性...

2023-03-19 17:37:44 184

原创 [框架应用系列:Quartz快速上手] Java定时任务解决方案之Quartz集群

Leader-follower线程模型中每个线程有三种模式,leader,follower, processing。在Leader-follower线程模型一开始会创建一个线程池,并且会选取一个线程作为leader线程,leader线程负责监听网络请求,其它线程为follower处于waiting状态,当leader线程接受到一个请求后,会释放自己作为leader的权利,然后从follower线程中选择一个线程进行激活,然后...

2023-03-12 20:40:28 3176 2

原创 [每日算法] leetcode第88题:合并两个有序数组

我们可以利用当前数组1中空闲的空间,节省解法二中额外数组拷贝的空间。参数分别代表源数组,源数组起始索引,目标数组,目标数组位置,元素个数。没有用到连个数组正序的条件,复杂度取决于排序算法。也可以使用System.arraycopy方法。数组1有足够的空间放置所有合并后的数据。System.arraycopy图解。利用到了两数组有序的条件,并且。利用到了两数组有序的条件。利用了数组1的空闲空间,

2023-02-23 13:33:06 413

空空如也

空空如也

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

TA关注的人

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