自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 espipe并发编程应用

性能不够,线程来凑

2022-08-02 09:24:16 201

原创 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 971

原创 记一次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 909 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 180

原创 minus vs not exists

minus会对所有表进行全表扫描,除非where语句里的字段加了索引。minus需要两个查询拥有相同数量的列,每一列都得类型相同。minus会返回第一个查询的所有记录,列不一定和第二个查询的结果的列对应。minus默认对两个查询都进行排序。not exists每行都读一遍子查询,如果子查询的表的太大,不宜使用。如果关联字段加了索引,那么就只需要执行索引扫描。...

2020-11-04 16:28:45 492

原创 一个奇怪的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 695

原创 接口性能调优记录

最近项目需要性能调优:1. 使用postman添加响应时间200ms测试用例2. 逐个测试,找出有性能问题的接口,单个调优3. 在方法里加入时间戳或者Stopwatch,找出有性能问题的代码4. 一般都是SQL优化,执行计划看下是否走了索引,没有就加下索引,大的SQL看看能否拆成小的5. 代码优化,可以使用多线程,来处理一些可以异步解决的代码,例如保存查询的filter内容,不需要占用查询时间6. 延迟处理,使用事务发件箱的方式来将参与事务的事件保存,然后由定时任务来处理,例如.

2020-10-29 10:00:11 162

原创 quartz学习笔记七自带需求重新来造

其实学到这里,源码结构和工作原理已经基本了解了,但这时候的项目还不符合我们自己的需求。假设需求:1. 自带分布式解决方案,例:启动多个节点,只有一个节点可以工作,已经有了2. 自带监控接口,不能裸奔,例:spring-boot-actuator,待实现3. 自带定时任务管理的接口,最好再有个UI,待实现技术选型:1. 分布式解决方案,以spring-boot为基础框架,默认mysql作为存储,这时候内存数据库已经帮不上忙了2. 监控接口,以spring-boot-ac..

2020-10-10 15:54:28 163

原创 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 2769

原创 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 151

原创 quartz学习笔记五测试驱动源码阅读

好了,从前四篇就可以看出我们已经把Quartz删的删,改的改,保留了quartz-core下的部分原版和单元测试。下面我们就可以通过去跑每一个测试,来确定哪些是我们最终需要留下的功能,哪些还是要继续删掉。VersionTest从简单的VersionTest入手,这个测试简单几行,就做了一件事,检验版本号,它的版本号的实现有点意思,新建了个quart-build.properties文件,一行version=${revision}就可以自动获取到maven pom.xml里的versi..

2020-09-13 16:25:54 161

原创 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 120

原创 quartz学习笔记三阅读源码

看过前篇的朋友应该知道,作者给我们推荐了阅读的类org.quartz.core.QuartzSchedulerThread在使用层面,我们跟着教程已经可以满足开发需求,而我们学习源码的目的需求为了提高自己的代码水平,这包括实现原理,设计模式,实践经验等。QuartzSchedulerThread一眼就能看出它是个Thread,我相信一些问题立马就会涌上心头。立刻记下它们,带着问题看才有效果。1. 我对Thread类了解吗?不是很了解,那先查看一遍Thread类的源码,从上到...

2020-09-11 20:38:27 160

原创 quartz学习笔记二小试牛刀

好的,我们已经跑过例子了,是时候撸源码了,这样可以对这个项目有一个全面的理解。砍:下载项目,然后一如既往,掏出你的大刀,砍。不要觉得代码有多精贵,再好的架构过几年也是被砍的份儿。这个项目里很多是我们不需要的,只需要你对它有个了解即可,给我砍。每个目录浏览一遍,这里我砍得只剩quartz-core和distribution里的examples。跑:然后把examples里感兴趣的例子都跑一遍,丰富了对api实战的理解,到这里已经掌握单点到集群的使用能力了。再砍...

2020-09-03 22:09:17 100

原创 quartz学习笔记一小目标

最近开始要负责分布式事务调度这块儿的实现,原来想想就是加个分布式锁,很简单,但是看了quartz和elastic-job的代码,貌似不是那么简单,所以还是老样子,学习借鉴下。首先quartz的文档看一遍,有个大概的了解。然后给自己一个小目标:把它跑起来。首先按照教程,写个最简单的例子job trigger schduler咱都得有。然后,就是连接数据库,简单的在quartz.properties里配置下即可。# 定时任务信息org.quartz.scheduler.in..

2020-09-01 21:23:09 164

原创 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 111

原创 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 14689

原创 oracle parallel

最近优化一个report,首先是因为SQL关联太复杂,就新建了一个物化视图(materialized view),速度提升不少。直到有一天,有些用户又开始抱怨速度慢了。查看执行计划里,应该走索引的字段并没有走索引。重新看了下物化视图的SQL,里面有一行parallel 4引起了我的注意。于是测试了下:select /*+ PARALLEL (o, 4) */...

2020-03-18 16:04:53 261

原创 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 901

原创 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 1635 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 7034

原创 feign client class could not be found as a bean

指定下package, @EnableFeignClients(basePackages = {"cn.xa.api"})

2020-01-13 11:17:25 350

原创 feign decode404 = true

true时直接返回null,默认false,直接抛出异常

2020-01-13 11:12:44 1927

原创 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 470

原创 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 10002

原创 nested exception is org.hibernate.InstantiationException: No default constructor for entity

异常: nestedexceptionisorg.hibernate.InstantiationException:Nodefaultconstructorforentity解决: @NoArgsConstructor

2020-01-13 11:10:05 386

原创 org.hibernate.id.IdentifierGenerationException

异常: nestedexceptionisorg.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassignedbeforecallingsave()解决: @GeneratedValue

2020-01-13 11:09:18 499

原创 Spring单元测试如何显示完整的StackTrace

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <runOrder>alphabetica...

2020-01-03 11:18:46 132

原创 HashMap之面试官和你

面试官:简单介绍下HashMap?你:HashMap是用来存储KeyValue的容器类。它是由数组和链表组成的,当链表达到8的时候会转换成红黑树。数组的大小可以使用initialCapacity提前设置,默认16,减少插入数据时候扩容的消耗。扩容是基于负载因子loadFactor,默认为0.75。面试官:为什么loadFactor是0.75?你:因为负载因子越大,链表就会越长,节...

2019-12-19 15:25:31 115

原创 Java Stream之面试官和你

面试官:介绍下Java的Stream。你:Stream就是可以对一个集合类的数据进行聚合操作。可以是串行,也可以是并行的。面试官:那Stream具体是如何遍历数据的?你:Stream的遍历主要经过 数据源,中间操作,终结操作。中间操作不会处理数据,只是对每个操作进行记录并且返回一个流,终结操作才会进行计算。面试官:那你说的这个中间操作和终结操作指的是什么?你:中间操...

2019-12-18 14:52:03 662

原创 性能调优之面试官和你

面试官:你自我描述里写了有性能调优经验,具体是做了哪些调优?你:SQL,Java代码,JVM,Docker之类的。面试官:那你调优的标准是什么?你:就是看TPS, QPS越大越好,还有最好响应时间不要超过200ms,还有200的接口在高并发的时候出错率要低面试官:你说的TPS和QPS是什么?你: TPS就是Transaction Per Second, QPS就是Q...

2019-12-17 15:33:27 112

原创 并发编程之面试官和你

面试官:怎么样才算是线程安全?你:在多线程环境下,被多个线程同时操作的共享的,可修改的状态的正确性。面试官:如何保证线程安全?你:用锁synchronized 和 ReentranctLock包裹起来,或者状态自身不可变。面试官:介绍下synchronized 和 ReentranctLock?你:synchronized 和 ReentranctLock都是同步互...

2019-12-13 14:52:15 88

原创 设计模式之面试官和你

面试官:你都知道哪些设计模式你:单例,工厂,代理,观察者模式,适配器模式面试官:如果让你按 创建型 结构型 行为型 分类下,你会怎么分?你:创建型单例,工厂,原型,构建器(Elasticsearch,query)结构型代理,外观,组合,适配器,装饰器(IO,构造函数以相同的抽象类或者接口为参数),桥接,享元行为型观察者,策略,解释器,命令,迭代器,模版方法,访...

2019-12-12 16:01:38 201

原创 BIO NIO AIO之面试官和你

面试官:做个上传文件吧?你:嗯面试官:那就说说BIO NIO AIO的概念吧。你:BIO 同步阻塞 File,输入输出流,HttpUrlConnectionNIO 同步非阻塞 Channel Selector Buffer等新抽象,多路服务,提供更接近系统底层的数据操作。AIO/NIO2 异步非阻塞 基于事件和回调机制,任务完成时,系统回去通知相应的线程面试官:...

2019-12-12 14:33:38 442

原创 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 93

原创 Vector ArrayList LinkedList之面试官和你

面试官:介绍下Vector ArrayList LinkedList你:三者都实现了List接口,都是有序集合,可以按照位置来插入删除查询。Vector是线程安全的动态数组实现。ArrayList是非线程安全的动态数组实现。LinkedList是基于链表实现的,也是非线程安全的。其中Vector,ArrayList适用于读多写少的操作,LinkedList适用于写多读少的操作。...

2019-12-11 16:47:12 229

原创 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 135

原创 动态代理之面试官和你

面试官:动态代理了解过吗?你:嗯,JDK的动态代理是基于反射实现的,CGLib是基于asm来操作字节码实现的。JDK的动态代码强制需要实现接口,而CGlib是自动生成一个子类来实现的,性能上cglib要好一些。面试官:那你平时会在哪儿用到动态代理?你:日常的应用中有日志,安全校验,事务等。SpringAOP 两种都支持。面试官:你刚提到反射,介绍下?你:反射可以...

2019-12-11 14:23:37 133

原创 String StringBuffer StringBuilder

String是一串不可变的字符串StringBuffer是线程安全的,拼接字符串成一个stringStringBuilder是非线程安全的,拼接字符串成一个string小技巧直接拼接string会产生新的对象,所以首选用stringBuilder,如果字符串超过16个字符的话,为了较少扩容带来的性能损耗,可以先设置一个大的容量。字符编码String(Byte[]...

2019-12-11 13:50:19 82

原创 final finally finalize之面试官和你

面试官:介绍下final finally finalize的区别你:这特么有什么关系吗?面试官:没啥关系,就想这么问?说不说,不说滚!你:说说说,大佬息怒。final可以用来修饰类,字段,方法,可以用来限制类不被继承,字段值不被修改,方法不被重写。finally是用来保证代码必定被执行的一种机制,常用try-finally,try-catch-finally来close ...

2019-12-10 16:47:26 505 1

空空如也

空空如也

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

TA关注的人

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