- 博客(56)
- 问答 (8)
- 收藏
- 关注
原创 java中获得类路径
this.getClass().getResource("/") 获得类根路径this.getClass().getResource("") 获得 当前类 的路径this.getClass().getClassLoader().getResource("") 获得类根路径第一条和第三条 效果一样,因为Class.getResource() 会对参数进行转换,最终调用。如果传相对路径,如"",会增加成类所在包的相对路径,再调用classLoader.getResource()如果绝对路径,如.
2021-12-03 10:35:47
2516
原创 mysql sql 优化
排查瓶颈慢sqlprofilesql优化减少扫描函数加合适的索引。如组合索引如何避免索引失效?避免 索引字段的运算、避免null筛选、避免前置通配、避免反向计算(not in、not like)减少join表的循环行数小表驱动大表避免内存排序用索引来优化排序。如 select避免回表操作如用聚集索引查询数据。如 count(*) 和 count(id) 的区别...
2021-04-21 15:10:19
180
原创 分布式事务(记录)
分布式事务常见的实现方案2PC(3 phase commit)3PC(3 phase commit)分为以下3个步骤canCommit,协调者 询问 执行者 是否可以执行事务。个人理解为是试探性的,如果有执行者无法响应,能及时中断事务。preCommit,执行事务,记录undo、redodoCommit,执行提交。疑问:在doCommit阶段,部分执行者已经提交事务(单点的事务已经完成),此时再发送中断请求,能回滚事务吗?参考分布式事务的实现方式...
2021-03-24 13:27:37
180
原创 常用排序算法整理
排序算法思路分析比较排序冒泡n个元素,每轮由左到右比较相邻元素,大的左移每轮得出最大的一个元素放右边,比较 n-1 轮每轮只需比较 n-1- i 次,i 为右边已经比较完成的元素个数。参考十大经典排序...
2021-03-10 20:21:41
91
原创 阿里云镜像服务 vpc地址 无法 pull
背景ecs已经加入了vpc网络,可以ping通镜像仓库地址问题docker pull registry-vpc.cn-hangzhou.aliyuncs.com 提示授权失败原因镜像仓库的密码被更改了或者过期了,且公网地址registry.cn-hangzhou.aliyuncs.com、vpc地址registry-vpc.cn-hangzhou.aliyuncs.com需要分别执行docker login执行 cat ~/.docker/config.json可以看到镜像仓库的登陆信息解决
2021-02-01 10:52:57
1596
原创 Springboot 配置注入校验(参数校验 类似)
实现效果通过org.springframework.boot.context.properties.ConfigurationProperties注入配置,并校验配置的正确性。方法组织结构: A 持有 B类型的 成员变量 b。在A上加ConfigurationProperties注解注入配置在A上加org.springframework.validation.annotation.Validated,启用校验在A中的成员b上 加注解javax.validation.Valid,启用嵌套校验在
2020-12-17 11:37:59
298
原创 阿里云日志服务采集 ecs 上日志的 配置流程
背景需要采集一台独立esc上docker容器的标准输出步骤启动logtail在ecs上创建logtail 容器,启动命令需要3个参数region名日志服务阿里云主账号Id。自定义机器组名字。后面会在 日志服务上配置一个 同名的机器组,名字对上才会接收日志数据。具体参考 官方教程创建相应的机器组在阿里云日志服务创建机器组,如果上一步配置成功,日志服务会收到logtail的心跳。在logstore中修改配置修改左侧logtail的配置文件,并加入新的机器组...
2020-12-08 15:44:17
825
原创 mybatis-plus + dynamic-datasource-spring-boot-starter 遇到的问题
背景springboot项目,使用ORM层面使用 mybatis-plus,并且集成了 dynamic-datasource-spring-boot-starter 实现多个数据源的切换。问题描述yml文件中 按照格式 配置了2个数据库 ds1、ds2 ,在Mapper接口 标记上 @DS(“ds2”),但实际执行时,却使用了 ds1的数据库,导致了sql报错。原因分析经过调试发现,获取数据库链接的 调用链路大致如下org.springframework.jdbc.datasource.Dat
2020-10-17 15:54:50
2192
原创 重构:将类 拆分成多个类 碰到的问题
目的A类 功能太多,代码不简洁,需要拆分成 A1、A2 两个类问题 及 解决手段在拆分过程中,由于一些公用方法,在A1、A2中都用到,需要将A类作为类A1、A2的类成员。如何消除A1、A2对A的依赖?如果可以将A的方法转为static,则可以不用依赖A类的实例。如果不能转为static,则为A1、A2抽取一个公共父类,将对A类方法的调用放在父类中统一调用。转变为 BASE_A1andA2 依赖 A。再通过一些重构手段 转移函数,摆脱对A的依赖。...
2020-06-23 11:36:00
1567
原创 Spring源码梳理
ioc容器的初始化核心方法是 AbstractApplicationContext#refresh(),调用了抽象方法AbstractApplicationContext#refreshBeanFactory(),由改方法完成ioc容器的初始化工作。如果是XmlWebApplicationContext ,则会使用XmlBeanDefinitionReader类来实现从xml中读取、解析bean的定义信息。以XmlWebApplicationContext为例,BeanDefinition的定位、加载、
2020-06-20 12:21:13
177
原创 ThreadPoolExecutor coreSize、maxPoolSize 的一个理解误区
发现问题coreSize=0、maxPoolSize=10,队列长度=100投递了50个任务(队列未满),但是只有一个线程在运行,而不是预期的10个。参数的定义查阅资料,maxPoolSize > coreSize 的部分,在2个时机下会创建:coreSize=0,且池中线程数=0 。至少得有一个线程去执行。队列已满,size=coreSize 并且 size<maxPoolSize,新建线程(maxPoolSize - coreSize)去执行。...
2020-06-09 15:00:29
2537
原创 记一次 内存泄漏 排查
发现问题进入容器,使用jstat -gcutil 观察到 发生频繁的full gc,jmap -histo:live 发现有 很多理应 被回收的对象。当时程序中的任务已经处于停止状态,但仍有大量对象未被回收,判断发生了内存泄漏。排查过程在线上将对内存 dump成文件,文件2.5g。根据以往的经验,导入分析工具会比较卡。于是在本地将程序运行了一次,使用jvisualvm对内存进行分析。观察...
2020-05-07 15:04:38
231
原创 测试通过,但上线出错?
问题描述运行测试用例,结果没问题。部署到线上后,运行出错排查调试发现,测试用例通过继承重写,覆盖了父类方法行为,导致方法中的异常没有被测试出来。总结测试、线上情况不同,可能有以下情况测试用例覆盖了代码行为。测试用例的数据不具有代表性。因此,测试用例不应该覆盖代码行为,导致bug被隐藏。...
2020-04-13 10:53:01
700
原创 记一次 gradle 构建失败
问题描述推代码,触发jekins构建。在compileJava阶段,报错error: cannot find symbol线索使用比较低效的排除法,将最近加的代码逐个注释掉。最后定位到一个类,将该类注释,则不会出现gradle任务失败。...
2020-04-02 11:30:40
415
原创 idea 项目编译后没有class文件
问题idea项目突然无法运行,提示找不到某个类。查看了编译输出目录out,发现没有class文件。尝试解决尝试删除out、重新导入项目、在gradle面板点击刷新,都没能解决问题。问题解决最后,点击Build->Rebuild Project解决。不明原因,先做下记录。...
2020-03-23 21:42:08
7742
6
原创 mybatis 程序启动失败
问题描述添加了xml文件,但没有写对应的接口,程序 启动发生 空指针异常。分析mybatis初始化,为xml中的可执行标签(select、update)寻找对应的接口,没找到则保存。而接口没有特定的xml实现或注解实现,却只会在代码执行时才保存。...
2020-03-06 19:27:32
330
原创 我对 Gson 源码的理解
核心类com.google.gson.Gson - 核心功能逻辑实现com.google.gson.internal.Excluder - 协助实现排除字段的功能,内部代理了另一个TypeAdapter实现序列化逻辑。com.google.gson.internal.bind.ReflectiveTypeAdapterFactory - 通过Type不能直接找到Adapter时,由该类实现。...
2020-02-08 17:14:24
185
原创 gradle 出现 Connection refused (Connection refused) 问题
问题描述更新build文件中的依赖后,无法刷新成功。解决经过排查,是应为idea中设置了代理。将代理设置为 No proxy即可。
2020-01-10 13:55:46
3971
1
原创 由 serverTimezone 产生的一个疑问
参数设置连接在 jdbc url 后加上参数serverTimezone=UTC查询结果执行show variables like '%time_zone%',返回system_time_zone CSTtime_zone SYSTEM执行select now(),返回的时间 比当前时间 快了8 小时。...
2019-12-23 20:48:26
950
原创 mysql count、sum 函数在统计null值时的结果
count函数情况结果0行0多行,包含null值0多行 ,全是null值0count函数会自动忽略null值sum函数情况结果0行null多行,包含null值不为null多行 ,全是null值null必须只有有一行不为null的数值,结果才不为null...
2019-11-12 09:48:10
2249
原创 docker 部署 mysql 无法开启binlog的问题排查
问题描述基于 mysql:5.6镜像,将宿主机的/etc/mysql/mysql-cnf目录挂载至 容器的/etc/mysql/conf.d。宿主机/etc/mysql/mysql-cnf内有config-file.conf作为配置文件,内容如下[mysqld]log-bin = /var/lib/mysql/mysql-binbinlog_format = ROWexpire-logs...
2019-10-18 11:10:03
1539
原创 mysql中的各种锁
锁的分类隔离级别:共享锁(S锁)、排他锁(X锁)。粒度:行级锁、表级锁。意向锁:获得行级 S锁、X锁 的前提是获得意向锁。在锁整张表的事务中,可以根据是否有意向锁进行快速判断,而无须检查每行数据是否被上锁。间隙锁、next-key lock:用索引进行范围查询,会将范围内的记录加锁(行级锁),范围内**不存在的值(间隙)**也会被加上锁(间隙锁),防止事务中发生幻读。测试各种情况下的...
2019-09-28 21:58:41
253
原创 mybatis 缓存 造成数据加锁失败
问题描述在事务中,为保证数据的唯一性,按以下步骤执行:给字段加唯一索性先条件查询没有则尝试insert如果insert失败,说明其他事务已经成功insert。则执行select for update锁住记录,再进行更新。但从执行的结果来看,第4步的select for update加锁失败了,造成了数据并发更新的问题。问题原因打开debug日志,再执行select for up...
2019-09-28 15:50:12
463
原创 ConfigurationProperties与 lombok的注解 编译时 栈溢出
在执行 ./gradlew assemble时 ,出现了java.lang.StackOverflowError的异常。启用 --stacktrace参数,异常栈如下> java.lang.StackOverflowError* Try:Run with --info or --debug option to get more log output. Run with --scan ...
2019-09-26 18:54:18
1042
原创 java运行时优化(要点)
优化作用将热点代码编译成与本地平台相关的机器码,提高执行效率。这部分工作由即使编译器完成,即Just In-Time Compiller。优化对象被多次调用的方法被多次执行的循环体如何探测热点代码基于采样。定期检查各个线程栈顶的方法,出现次数多的则很可能是热点代码。基于计数器。用方法调用计数器、回边计数器分别来记录方法的调用次数以及循环体的执行次数。我们聊一下后者——基于计...
2019-09-22 21:49:02
729
原创 ObjectMapper 读数据异常的问题(未解决)
public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping(NON_FINA...
2019-09-10 14:49:43
805
原创 mysql redo、undo 简介
undo日志undo日志用来实现事务的回滚。当发生insert、update、delete时,会将插入前的数据记录写入undo日志,用于将数据回滚至事务开始前的状态。redo日志记录事务的日志。若机器崩溃后,重新运行mysql需要进行数据的修复。保证机器崩溃后的数据一致性。已完成、未提交的事务:进行事务重放。未完成的事务:事务回滚。...
2019-09-08 16:10:33
191
原创 mysql 的排序
索引排序要求排序列处于同一个索引中,且符合左侧优先原则。可以参考另一篇关于索引文章 https://blog.csdn.net/DaiZZZZZ/article/details/100024707内存排序在sort buffer中进行排序。单路排序全字段排序,即将数据全部放入sortBuffer,排序完成后返回数据集。双路排序仅将表的主键、排序字段 存入sort buffer,排序...
2019-09-08 15:36:49
181
原创 mysql 的 in 操作 无法使用索引?
select * from table where status=1 and p_id in (1,2,3,4,5)mysql 会将 in 列表中的筛选条件与 其他条件进行排列组合,转化成等值筛选,如select * from table where status=1 and p_id = 1select * from table where status=1 and p_id = 2…...
2019-08-25 00:15:48
1837
1
原创 如何使用 mysql 的索引
索引的类型常见的索引类型 有哈希索引 和 b+tree 索引哈希索引:存放列的哈希值,只能用于全值匹配b+tree索引:将列的值按照树的结构有序的组织在一起。因为 存储原值、有序 等特点,b+树索引可以用于 范围查询、排序、前缀匹配( where col like 'xxx%')下文的内容主要针对 B+树 索引。建立索引单列索引、多列索引、列前缀索引(add index INDEX...
2019-08-24 23:26:15
176
原创 mysql 的 update select 语句
以下是udpate select 语句的例子,结构与select 比较相似UPDATE table1 INNER JOIN table2 ON table1.id = table2.fk_idSET col1 = table2.col1, col2 = table2.col2
2019-08-02 13:35:48
10367
原创 gradle 依赖冲突,导致 gradlew assemble 命令失败
执行gradlew assemble提示符号找不到(找不到类),推测是依赖包的冲突参考https://www.jianshu.com/p/c602e6c493ce,用exclude将冲突的依赖排除后,解决
2019-07-28 21:16:18
844
原创 如何删除gradle缓存
gradle 命令刷新缓存gradle build --refresh-dependencies -x test,但是刷新会比较耗时。直接删除本地文件mac下执行命令 cd ~/.gradle/caches/modules-2/files-2.1/进入缓存jar文件的目录,根据group名+module名找到对应的文件夹删除。...
2019-06-20 10:34:42
11894
1
原创 我对 mysql 的 mvcc 的理解
mvcc的作用及原理mvcc 即 multiversion concurrency controller,多版本并发控制,是数据库隔离事务的一种实现方法,不同的事务读取的逻辑上的同一行,但实际上是同一行的多个不同版本。一行数据还有几个隐含字段,标记行号,事务号,上一个版本的记录号(回滚指针)不可重读 的mvcc事务开始,执行第一条语句后,即建立了当前数据的快照(应该是逻辑上的快照)。读取到一...
2019-04-13 23:41:29
625
原创 虚拟机 的方法调用
方法调用语句 在字节码文件中是什么样的?jvm有5条调用方法的指令:invokestatic:调用静态方法invokespecial:调用构造方法,私有方法,父类方法invokevirtual:调用虚方法。虚方法指的是非静态、非构造、非私有、非父类的方法,父类方法就是通过supper关键字调用的方法。invokeinterface:调用接口方法invokedynamic如下是调用...
2019-03-30 12:43:49
275
原创 jvm 知识点整理(内存区域、垃圾回收)
jvm 知识点整理内存划分(虚拟机内存的各个区域)垃圾回收什么样的对象是垃圾?(如何确定对象是否存活)如何回收?(垃圾的回收算法)问题排查命令行工具gc日志功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公...
2019-03-27 08:40:03
261
原创 git项目导入eclipse,无法运行
用git导入项目,但是无法运行。原因缺少了.settings文件夹,导致项目编译异常。尝试出一种方法,记录一下。1)导入项目从git import 项目![这里写图片描述](http://img.blog.csdn.net/20171221203117840?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRGFpWlpaWlo=/font/5a6L5L2
2017-12-20 20:47:59
5148
原创 JAVA 基础学习(个人记录)
接口 接口内的方法默认访问权限为public 接口中的变量默认自动隐含是public static final (http://www.cnblogs.com/java07/archive/2010/01/26/3124639.html)
2017-07-04 09:58:34
397
1
空空如也
ConfigurationProperties与 lombok的注解 编译时 栈溢出
2019-09-26
ObjectMapper 读数据异常的问题
2019-09-10
为什么 子查询用 覆盖索引+limit 扫描行数非常大。
2019-09-01
idea+ springboot 运行后 没有 out文件夹
2019-08-06
java 泛型 没有起作用?
2019-06-21
jdk 动态代理 发生了一个问题,求解答
2019-06-13
mysql 授权 多个库 的同一个表
2019-06-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人