- 博客(91)
- 收藏
- 关注
原创 zookeeper3.6.2启动时遇到的坑
zookeeper3.6.2启动时遇到的坑1. 错误: 找不到或无法加载主类 org.apache.Zookeeper.server.quorum.QuorumPeerMain这里的zookeeper的Z和K是小写,我看的教程是大写的,淦还有万恶的空格,这加载类的代码都不能trim一下,也是醉了2. Caused by: java.nio.file.InvalidPathException: Trailing char < > at index 62这里是在路径末尾.
2021-03-10 23:41:56
1002
原创 记一次zipkin查不到数据,原因elasticsearch shard满了
这周性能调优,去Zipkin找找慢的api,发现最近几天的请求都找不到,奇怪。我们Zipkin的数据是存在elasticsearch里的,所以先去elasticsearch了确认数据。http://localhost:9200/_cat/indices?v&index=zipkin-span-2021*zipkin-span-2021-01-03好家伙,最新的数据是1月份的,这都3月份了。来到elasticsearch服务器,看下log。root@esqa:..
2021-03-04 12:29:28
958
1
原创 sql in被排序了
从这条简单的SQL里,我们的期望值是 4,2,3,但是结果却是2,3,4select * from TE_TEST where IX_id in (4, 2, 3);select * from TE_TEST where IX_id = 4 OR IX_id = 2 OR IX_id = 3;执行计划explain plan给出了解释,首先in在oracle里直接被转换成了or,还进行了排序,一直是2,3,4。可以断定是oracle的优化器将sql in 和 or的list先排序了,那.
2020-11-05 15:20:45
195
原创 minus vs not exists
minus会对所有表进行全表扫描,除非where语句里的字段加了索引。minus需要两个查询拥有相同数量的列,每一列都得类型相同。minus会返回第一个查询的所有记录,列不一定和第二个查询的结果的列对应。minus默认对两个查询都进行排序。not exists每行都读一遍子查询,如果子查询的表的太大,不宜使用。如果关联字段加了索引,那么就只需要执行索引扫描。...
2020-11-04 16:28:45
528
原创 一个奇怪的400错误 java.lang.IllegalArgumentException: Request header is too large
奇怪特征:1. 页面请求,返回400,接口测试,返回200可以排除代码部分的验证问题,从response里看出,返回的不是json,而是tomcat的一个400错误页面。那么问题基本锁定在tomcat身上。但是tomcat我们是默认设置,没做任何修改,只能翻看日志,elasticsearch里也没找到error级别的错误,尝试看了下INFO级别的,好家伙2020-10-29 22:44:05.243 INFO [quoteresource,,,] 1 --- [nio-8307-e.
2020-10-30 10:27:59
734
原创 接口性能调优记录
最近项目需要性能调优:1. 使用postman添加响应时间200ms测试用例2. 逐个测试,找出有性能问题的接口,单个调优3. 在方法里加入时间戳或者Stopwatch,找出有性能问题的代码4. 一般都是SQL优化,执行计划看下是否走了索引,没有就加下索引,大的SQL看看能否拆成小的5. 代码优化,可以使用多线程,来处理一些可以异步解决的代码,例如保存查询的filter内容,不需要占用查询时间6. 延迟处理,使用事务发件箱的方式来将参与事务的事件保存,然后由定时任务来处理,例如.
2020-10-29 10:00:11
177
原创 quartz学习笔记七自带需求重新来造
其实学到这里,源码结构和工作原理已经基本了解了,但这时候的项目还不符合我们自己的需求。假设需求:1. 自带分布式解决方案,例:启动多个节点,只有一个节点可以工作,已经有了2. 自带监控接口,不能裸奔,例:spring-boot-actuator,待实现3. 自带定时任务管理的接口,最好再有个UI,待实现技术选型:1. 分布式解决方案,以spring-boot为基础框架,默认mysql作为存储,这时候内存数据库已经帮不上忙了2. 监控接口,以spring-boot-ac..
2020-10-10 15:54:28
180
原创 java.sql.SQLException: Fail to convert to internal representation
message:"Error attempting to get column 'PARAM_NAME' from result set. Cause: java.sql.SQLException: Fail to convert to internal representation↵; uncategorized SQLException; SQL state [99999]; error code [17059]; Fail to convert to internal representat..
2020-10-10 09:16:01
2865
原创 quartz学习笔记六修改源码驱动源码阅读
下面我们就开始试试把derby换成H2,C3P0换成Hikari,把不想支持的derby和c3p0相关代码删掉,顺便阅读部分源码。替换Derby为H2搜索所有derby相关的代码,用H2替换,注:区别在于H2的mem是默认在connection close时候关掉数据库的,要加个;DB_CLOSE_DELAY=-1到connection url后面,不然刚创建的表,connection close就全丢失了。H2的Server类可以用来替换DerbyServer。H2无法像DerbyS.
2020-09-17 14:37:39
160
原创 quartz学习笔记五测试驱动源码阅读
好了,从前四篇就可以看出我们已经把Quartz删的删,改的改,保留了quartz-core下的部分原版和单元测试。下面我们就可以通过去跑每一个测试,来确定哪些是我们最终需要留下的功能,哪些还是要继续删掉。VersionTest从简单的VersionTest入手,这个测试简单几行,就做了一件事,检验版本号,它的版本号的实现有点意思,新建了个quart-build.properties文件,一行version=${revision}就可以自动获取到maven pom.xml里的versi..
2020-09-13 16:25:54
174
原创 quartz学习笔记四魔改
顺着Quartz作者提供的路径我们已经看完了Thread和ThreadPool。我们可以继续顺着他的思路往下去。下面我们来看看Job相关的,JobStore,Quartz采用的java的序列化,将Job对象序列化后保存到数据。查看实现类,有两实现类RAMJobStore和JobStoreSupport,JobStoreSupport的子类JobStoreCMT我们不准备支持java ee的container management transaction,果断删除,另外JTA,RMI的也可以果断.
2020-09-11 20:57:37
135
原创 quartz学习笔记三阅读源码
看过前篇的朋友应该知道,作者给我们推荐了阅读的类org.quartz.core.QuartzSchedulerThread在使用层面,我们跟着教程已经可以满足开发需求,而我们学习源码的目的需求为了提高自己的代码水平,这包括实现原理,设计模式,实践经验等。QuartzSchedulerThread一眼就能看出它是个Thread,我相信一些问题立马就会涌上心头。立刻记下它们,带着问题看才有效果。1. 我对Thread类了解吗?不是很了解,那先查看一遍Thread类的源码,从上到...
2020-09-11 20:38:27
175
原创 quartz学习笔记二小试牛刀
好的,我们已经跑过例子了,是时候撸源码了,这样可以对这个项目有一个全面的理解。砍:下载项目,然后一如既往,掏出你的大刀,砍。不要觉得代码有多精贵,再好的架构过几年也是被砍的份儿。这个项目里很多是我们不需要的,只需要你对它有个了解即可,给我砍。每个目录浏览一遍,这里我砍得只剩quartz-core和distribution里的examples。跑:然后把examples里感兴趣的例子都跑一遍,丰富了对api实战的理解,到这里已经掌握单点到集群的使用能力了。再砍...
2020-09-03 22:09:17
116
原创 quartz学习笔记一小目标
最近开始要负责分布式事务调度这块儿的实现,原来想想就是加个分布式锁,很简单,但是看了quartz和elastic-job的代码,貌似不是那么简单,所以还是老样子,学习借鉴下。首先quartz的文档看一遍,有个大概的了解。然后给自己一个小目标:把它跑起来。首先按照教程,写个最简单的例子job trigger schduler咱都得有。然后,就是连接数据库,简单的在quartz.properties里配置下即可。# 定时任务信息org.quartz.scheduler.in..
2020-09-01 21:23:09
188
原创 java.lang.OutOfMemoryError: Java heap space
今儿服务启动就来个OutOfMemoryError,也是厉害,一定是谁TM写了个BUG。看log基本确定是本地加载配置的时候,堆直接炸了。看了java配置Xmx=1024m,加大到2048,妥妥儿的起来了。但还是想要看看具体堆涨了多少。本人windows,打开jconsole,Local Process里并没有启动的java程序。一番查找,好嘛,大佬在命令里加了-Djava.io.tmpdir把临时路径换了,java命令都是默认从tmp目录下找的,所以显示不出来,windows可以.
2020-08-31 16:29:43
127
原创 Exception in thread main java.lang.AssertionError
最近用上了新的jdk11,报了个这么个错误,莫名其妙。Exception in thread "main" java.lang.AssertionError at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155) at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46) at jdk.
2020-07-24 13:24:05
15196
原创 oracle parallel
最近优化一个report,首先是因为SQL关联太复杂,就新建了一个物化视图(materialized view),速度提升不少。直到有一天,有些用户又开始抱怨速度慢了。查看执行计划里,应该走索引的字段并没有走索引。重新看了下物化视图的SQL,里面有一行parallel 4引起了我的注意。于是测试了下:select /*+ PARALLEL (o, 4) */...
2020-03-18 16:04:53
287
原创 mybatis处理joda datetime
mybatis处理joda datetime首先写一个处理DateTime的TypeHandler@MappedTypes(DateTime.class)public class DateTimeTypeHandler implements TypeHandler<DateTime> {}在<select>使用select * fr...
2020-01-21 15:10:14
914
原创 Error executing DDL type=MyISAM via JDBC Statement
异常:2020-01-09 19:22:42.347 WARN 13276 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "create table Rfe (id bigint n...
2020-01-13 11:23:19
1671
2
原创 com.atomikos.jdbc.AtomikosSQLException: Connection pool exhausted
异常: 2020-01-09 18:30:48.072 ERROR 10212 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request...
2020-01-13 11:21:21
7093
原创 feign client class could not be found as a bean
指定下package, @EnableFeignClients(basePackages = {"cn.xa.api"})
2020-01-13 11:17:25
360
原创 OpenFeign java.lang.IllegalStateException: Service id not legal hostname (spec client)
异常: java.lang.IllegalStateException: Service id not legal hostname (spec client)解决: 必须是一个连着的名字,不能分开,例如spec-client specClient xspecClient
2020-01-13 11:12:12
487
原创 constructor cannot be applied to given types;
异常: constructor Rfe in class cn.xa.rfesvc.Rfe cannot be applied to given types;[ERROR] required: no arguments[ERROR] found: java.lang.Long,java.lang.String,java.lang.String[ERROR] reason: actual...
2020-01-13 11:11:00
10140
原创 nested exception is org.hibernate.InstantiationException: No default constructor for entity
异常: nestedexceptionisorg.hibernate.InstantiationException:Nodefaultconstructorforentity解决: @NoArgsConstructor
2020-01-13 11:10:05
398
原创 org.hibernate.id.IdentifierGenerationException
异常: nestedexceptionisorg.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassignedbeforecallingsave()解决: @GeneratedValue
2020-01-13 11:09:18
511
原创 Spring单元测试如何显示完整的StackTrace
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <runOrder>alphabetica...
2020-01-03 11:18:46
151
原创 HashMap之面试官和你
面试官:简单介绍下HashMap?你:HashMap是用来存储KeyValue的容器类。它是由数组和链表组成的,当链表达到8的时候会转换成红黑树。数组的大小可以使用initialCapacity提前设置,默认16,减少插入数据时候扩容的消耗。扩容是基于负载因子loadFactor,默认为0.75。面试官:为什么loadFactor是0.75?你:因为负载因子越大,链表就会越长,节...
2019-12-19 15:25:31
121
原创 Java Stream之面试官和你
面试官:介绍下Java的Stream。你:Stream就是可以对一个集合类的数据进行聚合操作。可以是串行,也可以是并行的。面试官:那Stream具体是如何遍历数据的?你:Stream的遍历主要经过 数据源,中间操作,终结操作。中间操作不会处理数据,只是对每个操作进行记录并且返回一个流,终结操作才会进行计算。面试官:那你说的这个中间操作和终结操作指的是什么?你:中间操...
2019-12-18 14:52:03
676
原创 性能调优之面试官和你
面试官:你自我描述里写了有性能调优经验,具体是做了哪些调优?你:SQL,Java代码,JVM,Docker之类的。面试官:那你调优的标准是什么?你:就是看TPS, QPS越大越好,还有最好响应时间不要超过200ms,还有200的接口在高并发的时候出错率要低面试官:你说的TPS和QPS是什么?你: TPS就是Transaction Per Second, QPS就是Q...
2019-12-17 15:33:27
121
原创 并发编程之面试官和你
面试官:怎么样才算是线程安全?你:在多线程环境下,被多个线程同时操作的共享的,可修改的状态的正确性。面试官:如何保证线程安全?你:用锁synchronized 和 ReentranctLock包裹起来,或者状态自身不可变。面试官:介绍下synchronized 和 ReentranctLock?你:synchronized 和 ReentranctLock都是同步互...
2019-12-13 14:52:15
96
原创 设计模式之面试官和你
面试官:你都知道哪些设计模式你:单例,工厂,代理,观察者模式,适配器模式面试官:如果让你按 创建型 结构型 行为型 分类下,你会怎么分?你:创建型单例,工厂,原型,构建器(Elasticsearch,query)结构型代理,外观,组合,适配器,装饰器(IO,构造函数以相同的抽象类或者接口为参数),桥接,享元行为型观察者,策略,解释器,命令,迭代器,模版方法,访...
2019-12-12 16:01:38
208
原创 BIO NIO AIO之面试官和你
面试官:做个上传文件吧?你:嗯面试官:那就说说BIO NIO AIO的概念吧。你:BIO 同步阻塞 File,输入输出流,HttpUrlConnectionNIO 同步非阻塞 Channel Selector Buffer等新抽象,多路服务,提供更接近系统底层的数据操作。AIO/NIO2 异步非阻塞 基于事件和回调机制,任务完成时,系统回去通知相应的线程面试官:...
2019-12-12 14:33:38
454
原创 HashTable HashMap TreeMap之面试官和你
面试官:HashTable,HashMap,TreeMap介绍下。你:它们都实现了map接口,都是以key-value形式存储的。HashTable线程安全且不能存null key null valueHashMap非线程安全,并且可以存放null key null valueTreeMap是基于红黑树的可以排序的map。面试官:介绍下HashMap实现原理。你:Ha...
2019-12-12 10:47:09
102
原创 Vector ArrayList LinkedList之面试官和你
面试官:介绍下Vector ArrayList LinkedList你:三者都实现了List接口,都是有序集合,可以按照位置来插入删除查询。Vector是线程安全的动态数组实现。ArrayList是非线程安全的动态数组实现。LinkedList是基于链表实现的,也是非线程安全的。其中Vector,ArrayList适用于读多写少的操作,LinkedList适用于写多读少的操作。...
2019-12-11 16:47:12
238
原创 int 和 Integer之面试官和你
面试官:int和Integer的区别,说一下。你:int是基本类型。Integer是引用类型,是int的包装类,提供了很多数学计算的方法和字符串转int的方法等。jdk1.5提供了自动装箱,拆箱的功能,无需进行强转。面试官:那基本类型都有哪些?你:基本类型有:byte char int short long float double boolean面试官:Integer...
2019-12-11 14:49:02
147
原创 动态代理之面试官和你
面试官:动态代理了解过吗?你:嗯,JDK的动态代理是基于反射实现的,CGLib是基于asm来操作字节码实现的。JDK的动态代码强制需要实现接口,而CGlib是自动生成一个子类来实现的,性能上cglib要好一些。面试官:那你平时会在哪儿用到动态代理?你:日常的应用中有日志,安全校验,事务等。SpringAOP 两种都支持。面试官:你刚提到反射,介绍下?你:反射可以...
2019-12-11 14:23:37
144
原创 String StringBuffer StringBuilder
String是一串不可变的字符串StringBuffer是线程安全的,拼接字符串成一个stringStringBuilder是非线程安全的,拼接字符串成一个string小技巧直接拼接string会产生新的对象,所以首选用stringBuilder,如果字符串超过16个字符的话,为了较少扩容带来的性能损耗,可以先设置一个大的容量。字符编码String(Byte[]...
2019-12-11 13:50:19
92
原创 final finally finalize之面试官和你
面试官:介绍下final finally finalize的区别你:这特么有什么关系吗?面试官:没啥关系,就想这么问?说不说,不说滚!你:说说说,大佬息怒。final可以用来修饰类,字段,方法,可以用来限制类不被继承,字段值不被修改,方法不被重写。finally是用来保证代码必定被执行的一种机制,常用try-finally,try-catch-finally来close ...
2019-12-10 16:47:26
512
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人