Java双亲委派机制的妙用

最近在项目中看到一段通过easyexcel导出动态表头的实现,开始我以为是easyexcel官方的实现,其中有这样一段代码:

1
2
3
4
5
6
7
8
//将动态表头上传至ThreadLocal
saveToThreadLocal(clz, result);

private <T> void saveToThreadLocal(Class<T> clz, List<String> result) {
Map<Class,List<String>> paramMap = new ConcurrentHashMap<>();
paramMap.put(clz, result);
ThreadLocalUtil.FIELD_CACHE_MAP.set(paramMap);
}
阅读更多

同事问了我一个关于RocketMQ的问题

同事突然问我:RocketMQ的一个消息,多次消费重试,消息的msgId会不会变?哪怕已经进了DLQ。

刚开始出于经验,我说不会变。因为我之前每次排查问题的时候,用同一个msgId都能找到多次重试消费的日志。后来为了更加确定,我卷了一下源码,我看的是4.6.1,一是因为公司用的这个版本,二是我上次卷的就是这个版本。。。

消息重试

既然跟重试有关,那就从客户端消费失败的逻辑开始,看看能不能找到蛛丝马迹,下面是消费失败将消息发回broker的代码:

阅读更多

PDF转EPUB工具分享

首先说下,有经济条件的还是建议购买纸质书阅读啊!

前言

现在网上很多资料都是有在线版的,但是有时候到一些网络不好的地方就很尴尬了。不过同时大佬们也会提供PDF版本,但是个人觉得PDF的阅读体验实在太差了。

我一直觉得epub格式的阅读体验不错,适配各种显示设备。关于epub是什么,可以看看wiki上的介绍:

阅读更多

什么是IRIW和MCA(multi-copy atomicity)

最近又在卷八股文,直呼卷不动了啊。这个行业啥时候才能不这么卷???

Java volatile

说起八股文,volatile绝对是个老八股,随便拉个人来都能说上两句,什么内存可见性、内存屏障、指令重排序。。。真搞不懂调包侠整这些玩意有啥用。

既然卷就卷到底,看看这玩意底层到底是在干啥。

阅读更多

使用Python脚本自动订餐

公司员工餐选用的美餐平台,但是经常由于太忙忘记点餐,导致饿着肚子加班。反正菜品的可选项比较少,想着要是能自动点一个就好了。于是有了以下脚本。

接口分析

参数分析

自动点餐无非就是模拟人的行为,自动请求一些关键接口。于是分析了一下美餐网的web端接口,发现关键接口如下:

  1. 获取菜单接口:https://meican.com/preorder/api/v2.1/restaurants/show?tabUniqueId=???&targetTime=???&restaurantUniqueId=???&client_id=???&client_secret=???
  2. 下单接口:https://meican.com/preorder/api/v2.1/orders/add?client_id=???&client_secret=???

有了接口只是第一步,第二步开始分析、尝试接口的哪些参数是静态的,哪些是动态的。

阅读更多

关于Paxos那些点

世界上只有一种共识协议,就是 Paxos,其他所有共识算法都是 Paxos 的退化版本。

Paxos分为Basic Paxos、Multi Paxos、和其它演进版本。

Basic Paxos

前提:Basic Paxos 只能对单个值形成决议。

Paxos 算法将分布式系统中的节点分为三类:

  • 提案节点:称为 Proposer,提出对某个值进行设置操作的节点,设置值这个行为就被称之为提案(Proposal),值一旦设置成功,就是不会丢失也不可变的。请注意,Paxos 是典型的基于操作转移模型而非状态转移模型来设计的算法,这里的“设置值”不要类比成程序中变量赋值操作,应该类比成日志记录操作,在后面介绍的 Raft 算法中就直接把“提案”叫作“日志”了。
  • 决策节点:称为 Acceptor,是应答提案的节点,决定该提案是否可被投票、是否可被接受。提案一旦得到过半数决策节点的接受,即称该提案被批准(Accept),提案被批准即意味着该值不能再被更改,也不会丢失,且最终所有节点都会接受该它。
  • 记录节点:被称为 Learner,不参与提案,也不参与决策,只是单纯地从提案、决策节点中学习已经达成共识的提案,譬如少数派节点从网络分区中恢复时,将会进入这种状态。
阅读更多

博客用的图床挂了

之前不想把博客里面的图片也一同上传,用了utools里面一个默认的免费图床,结果今天发现好像图床挂掉了。之前写的博客里面的图片全挂了。。。果断换了gitee做新的图床。

这不会再挂了吧。。。


2022-05-20 更新

真是没想到,gitee关闭了public库,这下图床又挂了…已经申请了公开库的申请…不知道会不会通过.


2022-05-23 更新

gitee回复了,图床类的库不给公开.gg了.

Mybatis Mapper 源码分析

天天都在用的Mybatis,为啥调用一个Mapper接口就能执行SQL,你有没有想过这个问题?

这一切都得从 @MapperScan 这个注解开始说起。打开这个注解定义可以看到:

阅读更多

被Chrome一个bug坑了

1

相信Chrome浏览器开发者工具中的Preview你不陌生,但是就这玩意有一个bug。

事情是这样的,前端跟我说你接口有bug,返回的数据不正确。听到bug,我反手就是一个你会不会用。

阅读更多

Lambda应用与浅析

引入

在Java8之前创建一个线程的写法(之一):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class LambdaTest {



public static void main(String[] args) {

new Thread(new Runnable() {

@Override

public void run() {

System.out.println("hello inner class!");

}

});

}

}
阅读更多