自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (1)
  • 收藏
  • 关注

原创 个人开发工具总结-持续更新

个人开发工具汇集

2023-08-11 20:23:37 143

原创 异步线程异常逃逸

由于异步线程池没有配置 UncaughtExceptionHandler,当异步线程执行过程中发生异常时将不会被捕获,造成异常逃逸现象。

2023-05-31 14:45:47 313

原创 Linux磁盘占用排查

Linux磁盘占用排查

2022-07-25 11:08:52 461 1

原创 arthas

arthas使用简介

2022-06-15 19:17:36 226

原创 浅谈网络基础架构

浅谈网络基础架构背景看一次网络请求主要过程1.URL解析2.DNS解析解析顺序服务器层次划分3.建立TCP连接HTTP请求为什么要用TCP协议建立连接?TCP 三次握手4.服务器处理请求5.浏览器接受响应6.渲染页面部署架构总览结构组成相关术语负载均衡(LB/SLB)为什么有LBLB分类二层负载均衡(mac)三层负载均衡(ip)四层负载均衡(tcp)七层负载均衡(http)LVS(四层LB)基础概念LVS集群NGINX(七层LB)四层与七层的区别负载均衡调度器NATFNATTUNDRLB算法统一接入层(AS

2022-04-15 20:32:11 12954 1

原创 MVN常用命令

cleanmvn cleancompile编译类文件mvn clean compiletestmvn clean testinstall包含mvn compile,mvn package,然后上传到本地仓库mvn clean installdeploymvn deploy包含mvn install,然后,上传到私服很多时候我们只需要发布父pom,对于子模块需要独立处理● 忽略递归子模块○ mvn clean package deploy -N // 在父p

2022-03-10 22:19:26 7183

原创 Maven发布轻量二方包

在公共项目开发了common模块,其中包含了发钉钉消息、时间处理等多种公共方法,现在想要发布到maven仓库给其他应用使用。其他应用使用过程中发现,引入common模块的依赖后还需要单独引用common内部的其他依赖。client如果要使用发消息模块的能力,需要引入如下依赖:pom.xml:<!-- common内部发消息的依赖 --><dependency> <groupId>com.dingtalk.open</groupId> <

2021-12-30 21:06:01 1702

原创 Maven打包生成包含所有依赖的jar包

使用插件maven-shade-plugin打包<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions&gt

2021-12-29 19:32:50 404

原创 Truncate or Delete table

背景最近在准备双12大促压测,为了更好的支持压测加之DB容量告急,所以准备清理一波影子表数据。清理表数据的方式有两种:DELETE FROM table_name;TRUNCATE TABLE table_name;那这两种方式有什么区别,适用的场景又是什么?不同点这里将使用两张测试表来验证结果:table1: distinct_testtable2: decimal_testSQL语言分类SQL四种语言:https://www.cnblogs.com/henryhappi

2021-12-01 14:03:21 415

原创 Metaspace GC 问题排查

背景描述查看应用JVM监控发现发生了连续两次 Full GC,导致 GC 的原因是什么?Full GC 监控:metaspace利用率监控:问题排查环境信息生产环境,JDK1.8关键JVM参数:-Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:MaxDirectMemorySize=1g -XX:SurvivorRatio=10 -XX:+UseConcMarkSweepGC -XX:CM

2021-11-11 21:48:30 3428 2

原创 insert on duplicate key update命令

这里写目录标题背景介绍实现方式先判断再操作insert on duplicateActioninsert on duplicate update 命令的原理,以及如何保证原子性?背景介绍有一批消息队列任务要执行,需要记录任务相关的数据,包括执行总数、成功数、失败数。这里采用mysql统计表的方式记录,每一批任务生成一条统计数据,但由于消息队列是无序的,所以生成统计记录的时候无法知道哪一个请求是第一次,也就不知道是 insert 还是 update。简单列一下统计表字段CREATE TABLE `t_

2021-11-03 16:25:18 2144

转载 内存溢出与内存泄漏

内存溢出概念内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。常见情况1.java.lang.OutOfMemoryError: PermGen space (持久带溢出)我们知道jvm通过持久带实现了java虚拟机规范中的方法区,而运行时常量池就是保存在方法区中的,因此发生这种溢出可能是运行时常量池溢出,或是由于程序中使用了大量的jar或class,使得方法区中保存的class对象没有被及时回收或者class信息占用的内存超过

2021-09-09 15:06:15 169

转载 git强制覆盖分支操作

有2种方法可以实现强制覆盖分支的操作。例如,要将 test 分支的内容完全覆盖掉主分支master。方法1// 将test分支强制(-f)推送到主分支mastergit push origin test:master -f方法2(假设当前位于test分支)// 将当前分支切换到主分支git checkout master// 将主分支重置为test分支git reset --hard test// 将重置后的master分支强制推送到远程仓库git push origin master

2021-09-02 14:48:16 3760

原创 BigDecimal进位

public BigDecimal volumeHandle(String value) { // 默认值为1 BigDecimal defaultValue = new BigDecimal(1); // 保留2位数,多的进1 BigDecimal volume = new BigDecimal(value).setScale(1, BigDecimal.ROUND_UP); // 如果值小于1则置为1 if

2021-08-31 14:17:45 1033

原创 CSV乱码 - UTF-8 Unicode (with BOM)

Unicode统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。 就是将世界上所有的文字用2个字节

2021-08-12 17:59:27 4960

原创 Linux多关键字grep和count

单个关键字grep:grep “xx” log_file.log多关键字grep:grep “xx” log_file.log* | grep “yy” | grep “zz”单关键字count:grep -c “xx” log_file.loggrep “xx” log_file.log | wc -l多关键字count:grep “xx” log_file.log* | grep “yy” | grep “zz” | wc -l用grep -c来统计匹配的行数gr

2021-07-16 11:50:02 3726

原创 MySql索引失效-联合唯一索引含null值

一.背景今天在测试过程中发现有数据重复的现象,想设计一个唯一索引达到幂等的效果,但是发现设置了唯一索引以后还是可以插入相同的数据,经过排查,发现联合唯一索引中含有null值会导致索引失效。二.问题复现现在我们来复现一下这个场景。2.1 首先创建一个 user 表,指定 user_name + address 为联合唯一索引CREATE TABLE `t_user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',

2021-07-13 01:07:50 6836 1

转载 MyBatis主键回填

方式一<insert id="insertBook" useGeneratedKeys="true" keyProperty="id"> insert into t_book (b_name,author) values (#{name},#{author});</insert>这种方式比较简单,就是在插入节点上添加 useGeneratedKeys 属性,同时设置接收回传主键的属性。配置完成后,我们执行一个插入操作,插入时传入一个对象,插入完成后,这个对象的 id

2021-07-02 13:57:07 445

原创 反射获取类的所有属性/方法(包括父类)

我们都知道可以通过 Class 类的方法获取类的所有属性和方法获取该类所有属性:java.lang.Class#getDeclaredFields获取该类所有方法:java.lang.Class#getDeclaredMethods但是当这个类是子类,我们又想获取所有属性时这两个方法能支持吗?答案是不行。通过这两个方法的注释可以看出,方法将返回 Field/Method 数组,包含这个对象所有的属性或方法(public, protected, default),但是不包含继承的属性或方法。那要

2021-06-16 22:24:05 3570 3

原创 Gitlab找回已经删除的分支

背景今天不小心删除了gitlab的开发分支,需要找回下,点开gitlab activity页面,看到如下信息恢复1.在项目代码文件夹中打开git,执行 git checkout -b branchname commitIdgit checkout -b code_optimze commitId2.push到远程分支,执行 git push origin branchnamegit push origin code_optimze这样就恢复完了...

2021-05-27 15:23:45 3403

原创 MyBatis resultType和resultMap的区别

问题表现今天遇到个很诡异的问题,自己写了一个查询sql,发现Order变量只有部分数据有值,其他都是null,对了好久字段是不是命名错了都没发现啥问题,最后才发现是用错resultType的锅。查询sql:mapper:<select id="selectByOrderNo" resultType="com.xxx.Order"> select <include refid="column_List"/> from t_order where

2021-05-08 17:07:52 4448

原创 ThreadLocal学习

是什么其作用是创建线程局部变量。通常情况下我们创建的变量可以被任意一个线程访问并修改,而 ThreadLocal 创建的变量只能被当前线程访问,其他线程无法访问和修改,所以就不存在线程安全问题。解决的问题每个线程都需要有属于自己的实例数据(线程隔离)实例需要在线程中的多个方法共享,不希望使用传参的形式ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。demo示例code // 初始化,并赋初始值:d

2021-03-29 15:23:53 185

原创 ThreadPool full问题排查

问题背景目前LEX业务场景包含两个模块:FM、LineHaulShuttle,都是通过ODPS离线同步然后通过Blink发送到gateway的MQ,两个QPS分别是:FM-1000/s,LineHaulShuttle-600/s,会对系统有个短暂的冲击,目前系统未经过压测,所以对于系统的抗压能力我们是不清楚的,如下就是接入LinHaul场景时发现的异常:线程池占满问题排查由于Lindorm入库、发风控是使用了线程池异步操作的,这样不仅能提高系统处理效率还能提高吞吐量,但是由于线程资源有限,所以就会发

2021-02-25 13:39:09 829

原创 Spring异步编程

简介Spring中用@Async注解标注方法成为异步方法。它会在调用方当前线程之外独立一个线程执行,相当于我们直接new一个线程去执行:new Thread(() -> System.out.println("new: " + Thread.currentThread().getName())).start();为什么要使用异步执行?很多时候我们需要调用一个耗时的或者非主链路的方法,它的执行结果并不重要,我们不需要阻塞等待它执行结束,再去执行后续的方法。同步的做法是任务依次执行,效率较低,

2020-12-29 17:09:43 321 2

原创 mybatis报错:Invalid bound statement (not found)

mybatis报错:Invalid bound statement (not found)语法错误Java DAO层接口public void delete(@Param("id")String id);Java 对应的mapper.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.or

2020-12-14 11:34:16 447

转载 Spring普通Java类获取bean

实现总览在初始化时保存ApplicationContext对象通过Spring提供的工具类获取ApplicationContext对象继承自抽象类ApplicationObjectSupport继承自抽象类WebApplicationObjectSupport实现接口ApplicationContextAware保存ApplicationContext对象ApplicationContext ac = new FileSystemXmlApplicationContext("applica

2020-12-04 17:02:04 321

原创 @Resource和@Autowired的区别

问题现象服务启动时,发现其他工程Dao层的SDK服务注入失败,报空指针异常。解决这个服务是通过@Autowired注解注入的,将注解替换成@Resource,问题就解决了。原因分析

2020-12-03 22:40:49 162

原创 MySql group by区分大小写

MySql的查询是不区分大小写的,当想根据字段进行分组的时候可能会遇到无法精确分组的问题。如:type = a, type = A,呈现的type都为a直入主题:通过binary达到区分大小写SELECT COUNT(1) as total, `type` FROM `table_name` GROUP BY binary(`type`);参考:https://my.oschina.net/xiangtao/blog/33983...

2020-11-20 09:15:47 3839 1

转载 jar包冲突

Jar包冲突的原因我们知道maven有传递性依赖机制,举例来说,当我们需要A的依赖的时候,就会在pom.xml中引入A的jar包;而A的jar包中依赖了B的jar包,这样Maven在解析pom.xml的时候,会依次将A、B 的jar包全部都引入进来。这样就会造成一个问题:A->B->C->G21(guava 21.0)E->F->G20(guava 20.0)假设pom.xml 文件中引入A与E两个依赖,按照上述的传递性依赖机制,与默认的依赖调解机制(第一:路

2020-09-29 15:08:33 151

转载 服务器性能指标(QPS/TPS/RT)

PVPV(page view)页面流浪量,作为评价网站流量最常用的指标之一。QPSQPS(Queries per second )每秒查询速率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,经常作为衡量服务器性能高低的标准之一。原理:每天80%的访问集中在20%的时间里,这20%叫做峰值时间。公式:(总PV数 * 80%)/(每天秒数 * 20%) = 峰值时间的每秒请求数(QPS)机器数:峰值时间的QPS / 单台机器的QPS = 需要的机器数(机器的QPS与其CP

2020-09-04 20:09:34 4108

原创 snapshot依赖无法更新

今天遇到个问题,菜鸟的同事升级了 jar 包版本,但是只发布了部分库(如只发布了common,没发布client),我本地升级了对应的 jar 包版本,发现 client 相关的工具类丢失了,之后同事补充发布了 client,我本地尝试了 reload / invalidate 都不行,最后在师兄的指导下勾选 maven 的配置 Always update snapshots 选项后解决了。可能的原因是,snapshot更新一次之后就存在本地缓存里了,即使发布了新的内容,reload/invalidate

2020-09-02 15:13:52 1869 1

原创 Spring Bean生命周期学习

目录1. 概述2. 相关注解3. Bean的生命周期流程图序列图4. 演示4.1 User.java4.2 MyBeanFactoryPostProcessor.java4.3 MyBeanPostProcessor.java4.4 MyInstantiationAwareBeanPostProcessor.java4.5 DemoApplication.java4.6 运行程序,查看运行结果文章参考地址,补充并优化了些内容1. 概述什么是Bean被称作 bean 的对象是构成应用程序的支柱

2020-08-24 16:22:31 157

原创 Spring自定义注解

目录Spring自定义注解1. 前言2. AOP3. 常用注解学习3.1 @Target3.2 @Retention3.3 @Documented3.4 @Order3.5 @Aspect4. 实现自定义注解4.1. 定义注解类4.2. 定义切面类4.3. 编写Controller4.4. 启动项目,查看结果Spring自定义注解1. 前言Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。Sp

2020-08-20 15:07:15 494

原创 二叉树所有路径

1. 二叉树的所有路径深度优先遍历(DFS),使用临时变量(这里使用StringBuilder,也可以使用String,但是String是不可变对象,+= 操作将new出多个String对象,影响效率)保存当前节点的值,当节点的左右子树不都为null时,递归调用,当节点左右子树都为null时,即递归到叶子节点,将临时变量的值保存。LeetCode链接public class LeetCode257 { public static List<String> binaryTreePath

2020-07-22 16:07:32 710

原创 写给自己看的设计模式之《观察者模式》

定义当对象之间存在一对多的关系时,被依赖的对象发生变化,需要通知到依赖它的所有对象。举个例子由于疫情的影响,各地的学校纷纷延迟了开学时间,延迟开学的消息由学校传达给老师和家长(不考虑由老师转发给家长的情况),具体的开学时间也是一样。这个例子中学校与老师和家长之间具有一对多的关系,学校的通知需要都通知到他们,结合观察者模式来code看看。首先定义被观察者:学校维护一个 Observer 的数组,老师和家长可以通过 registerObserver 方法注册;学校通过 publishNotice

2020-07-17 15:48:06 174

原创 初识RocketMQ

目录简介使用创建 Producer 用例简介RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件官网:http://rocketmq.apache.org/docs/quick-start/使用https://blog.csdn.net/autfish/article/details/89226461创建 Producer 用例package com.example.demo.service;import org.junit.Assert;import org.juni

2020-07-15 23:26:15 225

原创 MyBatis使用

demo 地址:https://github.com/DKAngel/MyBatisDemo简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。可以通过XML或注解的方式来配置和映射原始类型、接口和 POJO为数据库中的记录。详见 MyBatis官方文档各ORM框架对比 MyBatis/Hibernate/JPA

2020-07-14 22:07:32 316

原创 单元测试Transactional自动回滚

使用 junit 进行单元测试,发现如下用例操作成功,但是数据库里没有新增数据,查看运行日志 Rolled back transaction for test,发现事物自动回滚了,通过 添加 @Rollback(value = false)强制提交事物。@Test@Transactional// @Rollback(value = false)public void insert() { String name = "dkangel"; userMapper.insert(name, "

2020-07-13 10:50:26 1237 1

原创 UTF-8-BOOM

BOOM转自:https://www.cnblogs.com/flyingeagle/articles/9825302.htmlBOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF-16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型对于UTF-8来说,BOM并不是必须的,因为BOM是用来标记多字节编码文件的编码类型和字节顺序(big-endian或little-endian)带BOM和不带BOM的区别UTF-8 和带

2020-06-24 17:14:20 773

原创 Java字母与数字互转

26个字母abcdefghijklmnopqrstuvwxyza-z: 97 - 122A-Z: 65 - 90小写转大写: char - 32‘a’ - 32 -> A大写转小写: char + 32‘A’ + 32 -> a获取字母的ACSII对应数字: 强转int (int) char(int) ‘a’ -> 97数字转字母:强转char (char) int(char) 97 -> a...

2020-06-23 11:26:16 7249

Java语言实现9大排序

冒泡排序、选择排序、插入排序、归并排序、希尔排序、快速排序、基数排序、桶排序、堆排序

2017-10-01

空空如也

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

TA关注的人

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