自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Async 默认线程池真坑!

Async由 Spring 框架提供,被该注解标注的类或方法会由异步线程执行。因此,在项目中,需要异步执行的地方通过@Async指定非常方便,但正是因为这种便利性,让开发人员对底层流程没有任何感知。如果不了解底层原理,直接使用@Async,那就可能会导致在未来的某一时刻出现服务不可用的情况。因为@Async默认使用 Spring 的线程池会为每一个异步任务创建一个线程执行,有 1w 个任务就会创建 1w 个线程,不会对线程进行复用,开销巨大。

2024-12-26 17:30:00 1111

原创 爆肝万字,AQS 源码分析!

最近一周在写 AQS 源码分析,AQS 属于并发的核心内容,很多同步器都基于 AQS 实现。可能很多同学并不太了解 AQS 学习到什么程度好,以及 AQS 中的 Node 节点状态是在是太复杂,看的眼花缭乱!通过这一周看 AQS 源码的经验,我觉得学习 AQS 只要把它内部的执行流程捋顺就可以了。AQS 主要是管理线程的入队、出队,以及队列中线程等待获取资源这一过程,所以自己在学习的过程中也有必要画画图,来看一下在入队、出队的时候,节点的状态是如何变化。通过画图,可以很好地理清思路。

2024-12-23 15:28:26 981

原创 并发能力夯实:ReentrantLock 源码分析!

文章内容已经收录在,欢迎订阅专栏!从原理出发,直击面试难点,实现更高维度的降维打击!

2024-12-14 17:00:57 901

原创 多线程案例落地 - 库存扣减请求合并、库存一致性保证

文章内容已经收录在《高级技术专家成长笔记》,欢迎订阅专栏!从原理、系统设计出发,直击面试难点,实现更高维度的降维打击!海哥也给出了合并库存扣减请求的 Demo,是一个多线程的 Demo,对提升并发掌握很有帮助,这里也整理一篇文章进行分析!参考 B 站 up 主《极海Channel》,视频链接:https://www.bilibili.com/video/BV1Hv4y1P7ta对于库存扣减流程中的优化,最主要的优化就是库存扣减请求的合并,海哥也给出了 Demo,这里将整体设计、演进思路整理出来库存扣减请求

2024-11-28 16:03:26 1163

原创 高级专家性能调优手段,库存扣减场景,20 倍性能提升!

整体介绍了库存扣减优化思路,其中最核心的优化就是对库存请求进行合并,将性能瓶颈由数据库转移到合并算法的设计中,性能具体可以提升多少,取决于合并算法可以减少多少的数据库 IO 开销除了核心的请求合并优化,也进行了事务内部的 SQL 顺序调整,减少行锁持有时间并且将缓存更新由同步更新,改为异步更新,减少扣减库存接口的同步等待时间, 并且降低了 Redis 中库存数据的刷新频率。

2024-11-25 11:14:13 782

原创 超高流量多级缓存架构设计!

多级缓存架构在互联网电商场景中经常使用,因为读、写请求量级较大,RT 要求较低,这里讨论的多级缓存架构仅以读请求性能提升为目的为什么多级缓存架构可以提升读性能?缓存的本质就是数据冗余,通过将数据一层一层冗余,放在离用户更近、容量更小、价格更贵、速度更快的存储系统上,以此来提升系统的访问性能。

2024-11-21 12:49:49 2921

原创 电商服务-订单服务设计(万字长文分析)

对于分布式 ID 的生成方案,美团基础研发平台推出了 Leaf 作为分布式 ID 生成服务,已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门,因此直接学习美团的开源解决方案即可Leaf-segment:基于 MySQL 生成唯一 IDLeaf-snowflake:基于雪花算法优化更加常用的方案是方案一和方案三通过方案一可以满足从用户维度的订单查询通过方案三可以实现更多维度的查询操作。

2024-11-20 14:56:03 1178

原创 多数据源管理解决方案

类来实现,在 SpringBoot 项目中,使用 MyBatis 操作数据库时,最终 MyBatis 获取数据源会通过。

2024-11-20 14:55:03 666

原创 Java线程池的核心内容详解

在线程池中可以自己去定义拒绝策略,如果线程池无法处理更多的任务了,可以在自定义的拒绝策略中,将拒绝的任务异步持久化到磁盘中去,之后再通过一个后台线程去定时扫描这些被拒绝的任务,慢慢执行保证严格的任务不丢失:如果线上机器突然宕机,线程池的阻塞队列中的请求怎么办?如果宕机,重启之后,线程池阻塞队列中的任务就会全部丢失如果想要解决这种情况的话,有这么一个解决方案。

2024-11-04 13:47:52 1230

原创 JDK、CGLIB 动态代理对比

文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!

2024-11-04 13:47:11 850

原创 面试官:线上服务压测时,压测标记丢失,如何解决?

该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!

2024-10-31 14:13:05 515

原创 面试官:Elasticsearch 为什么能实现灵活的查询?

ES 中灵活的查询主要依赖于分词和倒排索引,通过这两个核心技术,实现了根据关键词搜索对应文档,并且可以对搜索结果的相关性进行排序除此之外,ES 还提供了高级查询 Query DSL(Domain Specified Language,领域专用语言),DSL 允许用户构建更加复杂的查询条件。

2024-10-31 14:12:27 405

原创 美团面试:Elasticsearch 深分页问题如何解决?

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!

2024-10-30 13:11:16 1040

原创 JDK 下的高性能计数器 LongAdder 实现原理

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!

2024-10-30 13:09:39 854

原创 写时复制(CopyOnWrite)落地实现

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!

2024-10-21 13:37:29 1143

原创 指令重排导致的单例在并发场景下出现问题!

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,包含底层原理解析,带你冲破面试迷雾。

2024-10-21 13:36:14 1204

原创 【MySQL核心面试题】MySQL 核心 - Explain 执行计划详解!

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,包含底层原理解析,带你冲破面试迷雾。

2024-10-20 21:06:05 789

原创 高性能无锁内存队列-Disruptor

缓存行的概念为了提升 CPU 速度,CPU 会有一个高速缓存(Cache),该缓存由很多个 cache line 组成,每个 cache line 通常是 64B,并且可以有效地引用主内存中的一块地址。Java 中 long 类型变量是 8B,因此一个 cache line 可以存储 8 个 long 类型变量CPU 每次从主存中拉取数据时,会把相邻的数据也存入同一个 cache line,那么在访问一个 long 数组时,如果数组中的一个值被加入缓存中,那么也会加载另外 7 个伪共享问题。

2024-10-20 15:36:39 936

原创 【MySQL核心面试题】面试官:不可重复读和幻读了解吗?MySQL如何解决对应问题?

在互联网公司面试中,MySQL 相关问题的出现频率相当之高,作为后端研发人员,几乎人人都要掌握 MySQL 底层原理,否则在面试第一关八股文就会被拦住,对应的内容也收录在了中,可以关注文章底部扫码关注公众号(11来了),即可领取。

2024-10-19 15:56:07 1060

原创 面试:了解 ThreadLocal 内存泄漏需要满足的 2 个条件吗?

ThreadLocal 用于存储线程本地的变量,如果创建了一个 ThreadLocal 变量,在多线程环境下访问这个变量的时候,每个线程都会在自己线程的本地内存中创建一份变量的副本,从而起到线程隔离的作用当 ThreadLocal 被定义为方法中的局部变量,那么当线程进入该方法的时候,就会将 ThreadLocal 的引用给加载到线程的栈中。

2024-10-19 15:53:17 1115

原创 【MySQL核心面试题】索引结构

在 Java 语言的 HashMap 中,当链表中的节点过多时,就会将链表转为红黑树来提升查询性能,HashMap 会经常的增加、删除节点,而红黑树的插入、删除效率较高。

2024-10-18 14:47:01 767

原创 【MySQL核心面试题】InnoDB 的自适应哈希索引

自适应哈希索引使得 InnoDB 在恰当的工作负载以及充足的 Buffer Pool 内存系统中,可以表现得更加像一个内存数据库,并且无需牺牲事务特性以及可靠性基于观察到的搜索模式,哈希索引是使用索引 key 的前缀来构建的,前缀可以是任意长度,并且可能只有 B 树中的某些值才出现在哈希索引中,哈希索引是根据需要为需要经常访问的索引页构建的。

2024-10-18 14:42:40 939

原创 【MySQL核心面试题】MyISAM 和 InnoDB 存储引擎的区别

MyISAM 存储引擎由于不支持事务,并且只有表锁没有行锁,导致了它如果执行发生错误容易丢失数据,并且锁的粒度太大了,导致无法承载高并发的写操作但是 MyISAM 可以支持很好的查询性能,因为它的索引和数据是分开存放的,因此可以缓存更多的索引,查询性能较好,在大量查询操作的场景中,MyISAM 可以有很好的性能表现InnoDB相对于 MyISAM 来说,更适合写操作比较多。

2024-10-18 14:41:58 718

原创 【MySQL核心面试题】为什么 mysql 删了行记录,反而磁盘空间没有减少?

欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取。

2024-10-18 14:41:33 424

原创 线程池扩展 - 快速定位异常任务的提交位置

线程池执行任务出现异常,会遗漏异常任务在哪里提交的日志打印,因此可以对线程池做扩展,在提交线程任务的时候,自己创建一个异常,保存调用的堆栈信息,如果任务执行失败,就将调用的堆栈信息也同时打印出来即可。

2024-10-18 12:20:33 464

原创 隐蔽的并发错误

对 cnt 加锁,看似逻辑上没有问题,但最终却出现了并发问题,是因为 JDK 将 java 代码编译为字节码指令,编译后的字节码指令与我们的预期不符,导致出现并发问题,虽然工作中也不会碰到,但是可以借此进一步了解 JVM 中的字节码指令字节码为了计算方便,为通过栈进行操作数的计算,在第 15 行通过 getstatic 获取 cnt 的 int 值压入栈中,在 25 行将常数 1 压入栈中,在 26 行将栈顶两个整数相加,执行完成cnt ++

2024-10-17 15:40:38 645

原创 订单冗余表的设计

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-15 15:40:40 928

原创 线上全链路压测

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-14 15:21:45 1119

原创 多级缓存架构设计

应用 Nginx 本地内存Redis 缓存JVM 内存DB接入层 Nginx:处理入口流量,用作流量分发应用层 Nginx:接近业务层,处理业务逻辑,用作热点缓存的读取Nginx 作为高性能的 Web 服务器,经常被作为反向代理服务器用作负载均衡,这里多增加了一层应用层 Nginx,用来处理热点缓存数据,相比于 Tomcat 集群的本地内存来说,可承接的流量更高。

2024-10-14 15:20:50 1015

原创 微博 Feed 系统缓存架构设计

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-12 14:38:51 745

原创 用户“关注”系统设计方案

方案的设计是从无到有的过程,如果直接给出优化后的方案,缺少中间的思考过程是得不偿失的,因为在工作中碰到相同场景的几率是很小的,所以学习具体场景的解决方案对研发人员来说是性价比很低的,要学习其中对每一步方案的优缺点分析,以及如何优化!先介绍单表实现方案,通过 DB 表来完成用户关注关系的查询,使用 表来存储,如下:直接将用户的关联关系插入到表 表中单表方案存在问题: 将所有用户的关联关系都存储在单表中,会导致单表数据量大,存在性能问题单表数据量太大,因此分库分表进行存储,那么要考虑分片键的设定,有两种选择

2024-10-11 20:30:05 799

原创 缓存数据一致性保证通用方案

综上,介绍了 3 种保证缓存一致性的解决方案,在真正使用场景中,需要从业务场景对数据不一致时间、实现成本、维护成本等多个方面进行评估,选择适合的方案不过既然使用缓存,肯定就没办法保证绝对的一致性比如在 Linux 内核中,使用了 PageCache(在内存中) 来优化 IO 性能,所有的 IO 操作,数据并不是直接写入到磁盘中,而是先放入到了 PageCache 中,再统一时间将 PageCache 的数据刷入到磁盘中,以此来提升磁盘 IO 的效率。

2024-10-10 11:13:35 996

原创 MySQL 内部优化特性:索引下推

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-06 14:54:49 529

原创 面试官:MySQL 什么时候会出现死锁问题?为什么不推荐使用RR隔离级别?

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-06 14:53:17 1517

原创 【MySQL面试高频误区】不可重复读和幻读到底有哪些区别?

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-10-04 14:36:32 831

原创 【MyBatis 源码拆解系列】MyBatis 插件底层设计原理

Executor:MyBatis 核心接口之一,定义了数据库的基本操作,最终数据库的操作都是交给 Executor 来完成的ParameterHandler:为 SQL 语句的占位符绑定实参数据ResultSetHandler:将从数据库中查询到的结果集进行处理StatementHandler:MyBatis 核心接口之一,在 Executor 内部会通过 StatementHandler 去完成 SQL 的执行。

2024-10-02 14:14:03 1235

原创 【MyBatis 源码拆解系列】JVM 级别缓存能力设计:MyBatis 的一、二级缓存如何设计?

最后在总结一下,MyBatis 设计了一级缓存、二级缓存,虽然二级缓存我们并不使用,但是可以了解他的一个设计原理,这里总结一下重点内容:二级缓存:二级缓存是跨 SqlSession 级别的,因此是在 MappedStatement 中存储,MappedStatement 是解析 xml 文件时构建的,因此生命周期和 MyBatis 是一直的,因此可以跨 SqlSession二级缓存的能力支持是通过来完成的,用到了装饰器模式,BaseExecutor 提供一些公有的一级缓存能力。

2024-10-02 14:12:58 1231

原创 【MyBatis 源码拆解系列】执行 Mapper 接口的方法时,MyBatis 怎么知道执行的哪个 SQL?

最后再总结一下,学完本节可以收获什么?MyBatis 内部是如何对 SQL 语句的信息进行解析和存储?MyBatis 针对这个功能设计了哪些类?每个类的职责如何划分?MyBatis 是一个 ORM 框架,作为后端应用和数据库之间的桥梁,目的是帮助研发人员管理和执行 SQL 语句,将 SQL 语句定义在 xml 文件之后,MyBatis 肯定需要存储起来,并且在执行 UserMapper 接口对应的方法时,可以找到对应的 SQL 语句以及对应的一些信息,包括参数类型、返回值类型等等。

2024-09-27 13:11:36 1237

原创 【MyBatis 源码拆解系列】MyBatis 运行原理 - 数据库操作最终由哪些类负责?

MyBatis 内部源码有个特点,每个方法都很短,在查看源码的时候会在不同的类之间不断跳转,为什么呢?

2024-09-27 13:09:54 791

原创 【MyBatis 源码拆解系列】MyBatis 运行原理 - MyBatis 中的代理模式

欢迎关注公众号,持续在我后台回复 「资料」 可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!

2024-09-25 10:03:42 728

Java面试PDF,涵盖面试中的技巧、答题思路,以及如何进行面试进阶

Java面试PDF,涵盖面试中的技巧、答题思路,以及如何进行面试进阶

2024-02-09

基于电商的高并发Redis专栏讲解

整本pdf1.3w字左右,该专栏是基于电商场景,先是通过内核级了解 Redis 运行原理,之后结合电商场景,实现了 分页缓存、购物车缓存、高并发读写分片优化等生产解决方案!

2024-01-26

Java春招面试突击pdf学习文档

我们大部分去准备面试的时候,可能会去看很多的八股文,觉得只要熟练掌握了这些答案,就可以面到很好的薪资,找到理想的工作 但是其实不是这样的,八股文只是你的 基础能力,稍微有一点水平的面试官都不会去像一个提问机器一样,一道一道题去问你,而是希望通过对话去了解你对项目、对技术的看法,以及你解决问题的能力,因此需要从面试底层的思维去了解面试,再针对性的学习,才可以有一个比较好的效果! 你可以这样想一下,假如你是面试官,你会怎样去考察面试者的一个综合能力呢?作为面试官,你肯定知道面试者背了许多的八股文,所以八股文只是你去找工作要过的第一关,接下来,面试官会通过某一个具体问题,一点一点追问细节,以及生产中所需要的一些问题,通过这些才可以真正看出来你是否真的掌握了这些积能,以及你在做项目中,是否有自己的思考! 这篇pdf文档从以上几个方面出发,解决不会面试的卡点!

2024-01-24

GC 日志信息,用于在 easygc 中查看 JVM 信息

GC 日志信息,用于在 easygc 中查看 JVM 信息

2023-12-12

计算机专业考研(408)思维导图

今天突然想起来考研期间为了方便记忆操作系统和计算机网络上边的知识点,费了很大力气整理了计算机网络、操作系统两本书知识点的脑图,想着放着也没啥用,分享出来给大家看看

2023-12-09

空空如也

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

TA关注的人

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