自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群,RocketMQ 模式

2024-03-31 14:25:07 1123 2

原创 Spring @Async 原理

Spring @Async 原理

2024-01-24 15:22:08 534

原创 解决 rasa 中 slot 不能为中文的问题

解决 rasa 中 slot 不能为中文的问题

2024-01-09 13:56:33 435

原创 支持 input 函数的在线 python 运行环境 - 基于队列

支持 input 函数的在线 python 运行环境 - 基于队列

2024-01-05 09:58:42 721

原创 SortedMap、NavigableMap

SortedMap、NavigableMap 的方法

2024-01-03 18:24:31 409

原创 ipython、jupyter 在代码执行前修改待执行的代码

ipython、jupyter 在代码执行前修改待执行的代码

2023-10-26 17:54:05 127

原创 mysql polardb 集群结果集重复

mysql polardb 集群结果集重复

2023-07-24 13:21:43 206

原创 Thread.stop() 与 ThreadDeath 的理解、注意点以及误区

Thread.stop() 与 ThreadDeath 的理解、注意点以及误区

2023-04-07 09:32:15 625 1

原创 MySQL 普通查询、流式查询、游标查询以及使用 mybatis 如何实现

MySQL 普通查询、流式查询、游标查询以及使用 mybatis 如何实现

2023-03-18 14:54:33 4645

原创 docker kali 安装 xfce4 桌面 + tigervnc + novnc

docker kali 安装 xfce4 桌面 + tigervnc + novnc

2022-12-15 10:09:56 2634

原创 docker Centos 7 安装 xfce4 桌面 + x11vnc + novnc

docker Centos 7 安装 xfce4 桌面 + x11vnc + novnc

2022-11-05 15:46:05 2706

原创 命令行版 Centos 7 虚拟机安装 xfce4 桌面 + x11vnc + novnc

命令行版 Centos 7 虚拟机安装 xfce4 桌面 + x11vnc + novnc

2022-11-04 17:04:14 3943 1

原创 Java 集合及其线程安全的替代

Java 集合及其线程安全的替代

2022-07-11 15:35:50 219

原创 JDK 的原子类

JDK 的原子类

2022-07-11 11:39:50 432

原创 ArrayBlockingQueue、LinkedBlockingQueue 区别

ArrayBlockingQueue、LinkedBlockingQueue 区别

2022-07-06 17:45:56 439

原创 FeignClient 支持占位符及其原理

问题与解决方案在使用 FeignClient 的时候,测试环境和线上环境的域名是不同的,可以使用占位符来动态配置。如下@FeignClient(name = "test-feign", url = "${feign.url}")public interface TestFeignClient { ...}application.propertiesfeign.url=localhost:8080原理坑人的是 FeignClient 的注释中只说了 value、name 支持占位符

2021-12-13 17:55:44 2307 3

原创 SpringBoot 中怎么方便的使用 LocalDateTime

Spring 中主要有两种使用 LocalDateTime 的方式需要格式化,如下:LocalDateTime 作为 Controller 的参数LocalDateTime 是某实体类的字段,实体类作为 Controller 的参数LocalDateTime 作为 Controller 的返回值LocalDateTime 是某实体类的字段,实体类作为 Controller 的返回值@RestControllerpublic class TestController { @GetMap

2021-12-07 23:30:17 3480 1

原创 Redis 分布式锁的一些问题

无法释放锁,导致死锁如下,执行业务代码时如果宕机了,锁就无法释放,后续其他线程无法获取锁,导致死锁。doXXX() { if (!lock(key)) { reture false; } try { // 业务代码 } finally { unlock(key); }}lock(key) { return setNX(key, "");}解决办法:添加超时时间,如下lock(key, timeout) { if (setNX(key, "")) { // 10

2021-10-23 19:51:42 500

原创 Springboot、EasyExcel 发送带附件的邮件

主要依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.11</version></dependency><dependency> <groupId>org.springframework.boot</grou

2021-10-18 18:28:02 773

原创 springboot java mail 超时配置不生效

问题最近上线了定时发送电子邮件的功能,是基于 SpringBoot 的。但是经常出现卡死的情况,导致客户频繁咨询客服同志,使用 jstack 查看,发现线程每次都是卡在了如下的地方,很显然 SocketInputStream.socketRead0() 是在等待邮件服务器的响应,但由于某些原因一直没有响应,就会一直卡着。又因为是单线程的模型(xxl-job 的单机串行),所以一个卡着就会导致后面的都无法发送。"Thread-10" #54 prio=10 os_prio=0 tid=0x00005627

2021-10-08 21:51:03 1814

原创 定时任务异常终止 spring VS JDK

之前遇到过定时任务异常终止的问题,此次对 jdk 的 ScheduledThreadPoolExecutor 与 spring 的 @Scheduled 进行了测试以及源码的分析。测试每秒执行一次,当 count == 3 时抛出异常。JdkTestpublic class JdkTest { private static final ScheduledExecutorService EXECUTOR = new ScheduledThreadPoolExecutor(1); p

2021-10-06 16:43:11 939

原创 Iterator、ListIterator 使用时的注意点

Iterator 是集合框架的重要组成部分,用来封装集合的遍历。ListIterator 扩展了 Iterator,添加了一些针对 List 的方法,比如向前遍历、添加、更新。同时迭代器在使用时会有一些坑。Iterator简介、测试public interface Iterator<E> { /** * 迭代器没有到达末尾则返回 true */ boolean hasNext(); /** * 返回下一个元素,或者抛出异常 NoSuc

2021-09-14 00:33:08 401

原创 TemporalAdjusters 与 TemporalAdjuster

TemporalAdjuster 是调整时间对象的策略接口。有两种使用方式,更推荐第二种用法:temporal = thisAdjuster.adjustInto(temporal);temporal = temporal.with(thisAdjuster);public interface TemporalAdjuster { Temporal adjustInto(Temporal temporal);}TemporalAdjusters 实现了一些标准的调整器:本月的第一天

2021-08-14 15:14:32 404

原创 Collectors.toMap 报错 NullPointerException

最近线上偶尔会报一个 NPE,是 Collectors.toMap 导致的,这里小记一下,防止再次踩坑。场景:批量查询用户信息,查询结果为 List<User>,然后将其转换成 Map<Integer, String>,以供其他地方使用,但在 Collectors.toMap 时抛出了异常 NullPointerException。复现问题public class ToMapTest { public static void main(String[] args)

2021-08-12 21:15:15 3834 4

原创 MySQL 字符串类型

MySQL 中的字符串大体分为三类,这里不讨论第三类:长度以字符为单位的(character string 或 nonbinary string):CHAR、VARCHAR、TEXT(共四种:TINYTEXT、TEXT、 MEDIUMTEXT、LONGTEXT)长度以字节为单位(binary string):BINARY、VARBINARY、BLOB(共四种:TINYBLOB、BLOB、 MEDIUMBLOB、LONGBLOB)其他:ENUM、SET下表为各种类型的最大长度:单位25

2021-08-05 21:39:44 3903

翻译 Springboot 可执行 Jar 的格式

spring-boot-loader 模块让 Spring Boot 支持可执行的 jar 和 war 文件。如果使用 Maven 或 Gradle 插件,则会自动生成可执行的 jar,您通常不需要了解它们的工作原理。如果您需要从不同的 build 系统创建可执行 jar,或者您只是对底层技术感到好奇,本附录提供了一些背景知识。1. 嵌套 JARJava 没有提供任何标准的方法来加载嵌套的 jar 文件(jar 文件本身包含在另一个 jar 中)。如果您需要分发可以从命令行运行而无需解包的自包含应用程

2021-07-26 15:27:10 2261

原创 MySQL 触发器

前段时间在工作中踩到了关于触发器的两个坑,所以将触发器的相关知识撸了一遍,固有了此文。问题回顾命令行创建触发器报语法错误CREATE TRIGGER order_update AFTER UPDATE ON `order` FOR EACH ROWBEGIN IF old.state = 0 and new.state = 1 THEN update t1...; insert into t2 ...; insert into t3 ...; END IF;END;当时创建的

2021-07-17 15:53:54 318

原创 MySQL 聚合函数

名称描述介绍MAX()最大值MIN()最小值COUNT()行数SUM()总和AVG()返回参数的平均值GROUP_CONCAT()拼接字符串BIT_AND()按位返回 ANDBIT_OR()按位或返回BIT_XOR()返回按位异或JSON_ARRAYAGG()将结果集作为单个 JSON 数组返回5.7.22JSON_OBJECTAGG()将结果集作为单个 JSON 对象返回5.7.2...

2021-07-11 19:23:34 982

原创 MySQL日期时间函数

本节介绍可用于操作时间值的函数。有关每个日期和时间类型具有的值范围以及可以指定值的有效格式的说明,请参见 第 11.2 节“日期和时间数据类型”。这是一个使用日期函数的示例。以下查询会选择*date_col*过去 30 天内数据:mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;需要 date 的函数通常接受 datetime 并忽略时

2021-07-05 09:58:18 439

原创 IntStream 的方法

上一篇介绍了 Stream 的用法,为了简化基本类型流使用,以及消除频繁自动装箱、拆箱的性能损耗,JDK 提供了三种基本类型的流:IntStream、 LongStream、DoubleStream。本篇将介绍一下 IntStream 中区别于 Stream 的方法。IntStream 中的元素类型是基本类型的 int,所以对应的方法参数从 Predicate、Function、ToLongFunction、Consumer、Supplier… 变成了 IntPredicate、IntFunction、I

2021-06-27 19:34:27 1344

原创 Stream 的方法

Stream 中的方法分为三类:静态方法:用于创建流中间操作:通常是将一种流转换成另一种流终止操作:通常是对流中的元素进行计算,得出一个结果流是惰性求值的,只有执行终止操作时才会正在执行计算。创建流empty生成一个空的流public static void empty() { Stream.empty().forEach(System.out::println);}of生成包含指定元素的串行流public static void empty() { Strea

2021-06-26 16:13:35 2005

原创 Collections

排序 List:sort// 以自然顺序排序,元素必须实现 Comparable 接口public static <T extends Comparable<? super T>> void sort(List<T> list);// 使用传入的 Comparator 进行比较public static <T> void sort(List<T> list, Comparator<? super T> c);public s

2021-06-17 21:44:25 160

原创 Arrays 的方法

排序:sort、parallelSort两种方法都可以排序整个数组或某个范围,parallelSort 会使用 ForkJoin common pool。// 排序整个数组void sort(int[] a);// 排序某个范围,左闭右开void sort(int[] a, int fromIndex, int toIndex)// 数组元素必须实现 Comparable 接口void sort(Object[] a);void sort(Object[] a, int fromIndex

2021-06-13 16:39:36 230

原创 PageHelper 原理

本文来探寻一下 PageHelper 分页和 count 的原理,数据库是 MySQL。基本思路是:PageHelper向 Mybatis 注册处理分页和 count 的拦截器 PageInterceptor通过 PageHelper.startPage() 方法把分页相关的参数放到 ThreadLcoal 中Mybatis 执行 SQL 过程中会调用拦截器根据查询 SQL 构建 count SQL从 ThreadLcoal 拿出分页信息,在查询 SQL 后面拼接 limit ?, ?清空

2021-06-07 21:31:24 1456 3

原创 Collectors 中的各种方法

Collectors 中提供了很多好用的 Collector 实现,大大提高了我们的生产力,比如,将元素放入 Collection,一些聚合、汇总、分组操作。转集合:toCollection、toList、toSettoCollection() 可以转成任意的 Collection 实现类toList 转成 ArrayListtoSet 转成 HashSetpublic static void main(String[] args) { String[] arr = {"a", "b"

2021-06-04 22:25:49 2029 1

翻译 使用 JSON String 更新现有的对象

使用 JSON String 更新现有的对象ObjectMapper 的以下方法创建了 ObjectReader 实例,该实例可在反序列化传入 JSON 的同时更新现有对象。ObjectReader readerForUpdating(Object valueToUpdate)ObjectReader 有各种方法来读取输入 JSON 并返回更新后的对象。比如public <T> T readValue(String jsonInput) throws IOExceptionExam

2021-05-31 10:27:15 457

翻译 @JsonFilter 基于属性名过滤属性

@JsonFilter 可以按照属性名过滤要序列化的属性,它指定一个过滤器的 ID,真正的过滤器通过 ObjectMapper 注册,过滤器需要实现接口 com.fasterxml.jackson.databind.ser.PropertyFilter。通常直接使用 SimpleBeanPropertyFilter、SimpleBeanPropertyFilter。SimpleFilterProvider filterProvider = new SimpleFilterProvider();filte

2021-05-31 10:21:17 2356

翻译 @JsonIdentityReference 始终将对象序列化为 ID

@JsonIdentityReference 必须与 @JsonIdentityInfo 一起使用,@JsonIdentityInfo 在第二次遇到时才序列化为 Object Id,@JsonIdentityReference 可以强制使用 Object Id,而不是将第一个实例序列化为完整的 POJO。@JsonIdentityReference annotation:public @interface JsonIdentityReference{ // 返回 true 时始终使用 Obje

2021-05-31 10:18:19 608

翻译 @JsonManagedReference、@JsonBackReference 处理循环引用

@JsonManagedReference、@JsonBackReference 也能处理循环引用,它们是成对使用的:@JsonManagedReference :被其注解的属性可正常序列化。@JsonBackReference:被其注解的属性序列化时会被忽略掉,且只能用于普通 bean,不能是集合、Map、数组、枚举。与 @JsonIdentityInfo 的不同之处:@JsonIdentityInfo 会序列化对象标识符@JsonManagedReference、@JsonBac

2021-05-31 10:15:46 787

原创 JDK 1.8 Map 新增方法

getOrDefaultV getOrDefault(Object key, V defaultValue)当 Map 中不包含指定的 key 时,返回默认值。Map<String, String> map = new HashMap<>();map.put("k1", null);map.put("k2", "a");String v1 = map.getOrDefault("k1", "v1");String v2 = map.getOrDefault("k2"

2021-05-28 18:54:23 751

空空如也

空空如也

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

TA关注的人

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