0%

一、背景介绍

ThreadLocal是线程提供的本地变量,因其线程特殊属性,被经常用于存储与线程相关的信息,如保存登录用户信息、数据库连接配置等。但我们忽略了一个关键点:ThreadLocal 只能用在同步线程中,而在异步线程或线程池中则不起作用。因此,本博文主要探讨如何在异步线程和线程池中传递 ThreadLocal 上下文。

阅读全文 »


最近在忙很多事,工作和生活都乱糟糟的,博客也停更了。写技术还是美食呢,当然是美食啦。

今天做萝卜丸子。边做边吃,忽然想起读初二的一天,同学们凑钱买了五斤萝卜丸子,然后在英语课上偷吃的故事。十五年过去了,但历历在目。

阅读全文 »


自从国内猪肉紧俏以来,市面上就经常买到进口猪肉。外国人养猪比较人性化,不给小猪做阉割,所以猪肉又腥又骚。今天抱着踩雷的心态,买了一份肉,并在叮咚上特意备注道:“只要中国猪肉!”。

今天来做个狮子头。

阅读全文 »

一、应用背景

在支付系统中,线程池在批量支付中有着十分重要的作用。随着业务量的增多,支付接口的处理能力越来越弱,甚至出现一个支付批次的处理时间超过5分钟的情况。这对于调用方来说,是无法容忍的。最简单粗暴的解决办法,便是增加线程数和阻塞队列容量。但至于怎么调整,才能做到既保证接口对支付请求的处理能力,又不浪费系统资源,好像只能凭感觉来了。Prometheus + Grafana 是目前比较流行的监控体系,在管理线程池方面的表现也十分出色。

阅读全文 »

一、需求背景

本周负责做调账线上化,其中一个业务需求比较棘手:提交调账申请后,需在数据表记录对应的调账类型;而在调账复核页面,列表筛选项-调账类型,需支持多选。简单枚举如下:

1
2
3
4
5
6
7
8
9
10
11
public enum AdjustTypeEnum {
/**
* 调账类型枚举; 一次调账申请可能对应多种调账类型,在数据表中枚举值之间以英文 , 分隔
*/
FINE(0, "应还罚息"),
TOTAL_REPAYMENT(1, "应还总额"),
FACT_REPAYMENT(2, "实还总额"),
FACT_PAYMENT_DATE(3, "实还日期"),
OVERDUE_DAYS(4, "逾期天数"),
PAYMENT_STATUS(5, "还款状态");
}

假如调账申请A的调账类型包括应还罚息和应还总额,则数据表相应字段值为0,1。在复核页面,若调账类型复选项中包含应还罚息或应还总额,则需查询到该申请。此时,我们发现SQL内置函数FIND_IN_SET只支持单选项查询,而无法灵活拆分筛选条件和存储数据。因此,有必要调整一下数据的存储规则和查询规则。

阅读全文 »

一、技术背景

实现发布订阅的中间件有许多,包括时下最热的Kafka、RabbitMQ、ActiveMQ,不太常见的Guava下的EventBus,以及Redis等。关于MQ之流的分析已经够多了,今天详细介绍下Redis的发布订阅机制及其实现。事实上,Redis的发布订阅机制在具体项目中的应用非常少,主要有两方面原因:其一,Redis的可靠性比较差,一旦出现断网等情况,则发布的消息便全部丢失;其二,Redis的消息处理方式是通过单线程循环遍历实现的,若存在大量的消息发布,则可能导致输出缓冲区膨胀,甚至服务崩溃。但对数据安全性和稳定性要求不高的场景来说,Redis不失为最佳的选择。

阅读全文 »



今天特别想吃我妈做的油馍,也就是大家常说的葱油饼。虽然出租屋的条件有限,但我打算尝试一次。


阅读全文 »