三门问题

前几天有一个关注很久的公众号推送了一篇讲 “三门问题” 的文章。这不是我第一看到这个问题的分析,我一直觉得这个是个伪命题,后面两个门打开后面有大奖的概率都应该是1/2才对呀。直到我去看了一些分析,写了这篇文章。

阅读全文〉

聊聊 ConcurrentModificationException

今天有朋友突然在群里抛出一句,”java中使用foreach遍历时,为啥不让删除元素呢?设计ConcurrentModificationException的意义是什么目的呢?如果单线程操作,还需要吗?” 。今天我们就来聊一聊这件事。

阅读全文〉

如何构建一个正确的单例

单例模式是设计模式里面最常见的,也是在面试过程中面试官最容易考到的,通过单例模式还可以引申到其他的一些并发问题。今天我们来聊聊如何正确的构建一个单例。

阅读全文〉

线上死锁分析解决纪实

服务发生死锁,死锁检测时间较长,31s后死锁检测出来事务才得以回滚,期间不断有相同请求进来,造成死锁越来越复杂,并且服务端线程池中的所有线程都在等待锁,最后造成服务端线程池无空闲线程,拒绝服务。

注意:单条 SQL 也是一个事务,也会和其他事务发生死锁。

阅读全文〉

Aria2 GUI最佳实践

目前用的爽的下载工具,通过搭配 Chrome 和 自己写的一些脚本达到不输迅雷的用户体验。

本文在 MacOS 下可以通过所有步骤,其他平台需要自行修改相关步骤

阅读全文〉

Java类加载器的准备和初始化

好久没有更新博客了,昨天在浏览微信公众号的时候看到了一道面试题,给出一个包含 main 方法的类,一些输出语句,让读者判断这些语句的输出顺序,其实也就是考察读者的对于 Java 类的初始化的顺序,看到这道题目的时候,我也就按照自己的理解得出了一个顺序,可是和答案却大相径庭,原因就在于对于 Java 类加载器在加载类时候的两个阶段:准备 初始化 没有足够的理解。今天我们在本文中就来聊聊类加载的这两个阶段

阅读全文〉

Spring 中 Transactional 注解原理

利用 Spring 框架可以很容易的使用注解的方式来使用事务,为我们的开发带来了巨大的便利,这种便利的实现是通过 Spring 本身的一系列机制来实现的,主要包含动态代理和 Spring Bean 的加载过程。本文将深入源码,揭开层层面纱…

阅读全文〉

幂等设计

我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如

  1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;
  2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;
  3. 发送消息,也应该只发一次
  4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题等等很多重要的情况都需要幂等的特性来支持。
阅读全文〉