- 博客(177)
- 资源 (8)
- 收藏
- 关注
原创 java版CRC16计算redis的key槽点
背景Redis Cluser采用虚拟槽分区,所有的键根据哈希函数映射到0~16383个整数槽内,计算公式:slot=CRC16(key)&16383。redis的key如果是数字自增,例如group01, group02, group03是否会全部落在相邻的点槽点上,从而打到同一台redis机器上?结论java的hash算法,对group01, group02, group03这种得到的hash值是相邻的redis用的是CRC16算法,对group01, group02, group03
2022-05-26 17:34:08
1043
原创 Spring Devtools源码解析
看别人的源码解析自己不上手的话其实并没有真正掌握源码官方使用说明使用文档中文翻译源码在Spring boot项目中Spring Devtools 源码初步解析核心流程1.spring.factories中定义了很多需要被初始化的类,程序启动的时候会扫描spring.factories并注册事件监听者RestartApplicationListener# Application Initializersorg.springframework.context.ApplicationContext
2022-05-10 10:20:16
753
原创 Springloaded源码解析
spring-loaded Spring官方的热更新agentSpring Loaded allows you to add/modify/delete methods/fields/constructors评价使用asm进行字节增强,速度较快,但是字节增强的代码比较难懂,可以将增强后的类保存下来反编译查看增强的结果不依赖于DCEVM,可以直接在开发的jdk中使用自己实现的类更新监控,一个类只能监控一个文件,不能监控自定义目录,如果想要实现远程热部署不是很理想,没有使用nio系统文件监控,自己启
2022-05-08 17:49:51
1908
原创 HotswapAgent源码解析
HotwapAgentJava unlimited redefinition of classes at runtime使用方法按照github和官网说明操作即可, 依赖于DCEVM如果自定义监控外部文件,需要将hotswap-agent.properties添加到src/main/resources中,并且配置extraClasspath属性源码解析评价代码非常优雅,没有一个过长的类,每一个类源码都值得学习字节码操作使用的是javassit, 可以非常直观的在某个方法的前面或者后面插
2022-05-06 22:56:38
2552
5
原创 spring boot websocket服务当做跳板机实现远程jvm remote debug
功能本地IDE可以通过连接B端管理系统实现对远程线上java服务进行调试背景很多时候线上服务出现了故障,希望能够对线上服务器进行本地调试。jrdwp实现了这个功能,原理其实很简单:本地IDE(tcp连接)本地jrdwp client(用tcp协议和ide通信,websocket和远端nginx通信)远端ngiinx(代理websocket)远端jrdwp server (提供websocket服务,并且用tcp和远端java服务通信)远端java服务然而没有权限接触公司的ngin
2022-03-12 13:22:37
2387
原创 Spring手动创建bean并注册工具类SpringBeanUtil
import org.springframework.beans.factory.config.BeanDefinition;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.beans.factory.suppor
2021-10-09 17:26:27
1442
原创 多线程读单线程写文件工具类ReadWriteTaskUtil
背景经常有需求读取一个文件用多线程处理,将处理结果保存到另外一个文件,如果等待全部处理完成再保存容易内存溢出,所以写了一个工具类用单线程写入文件。使用方法 String inputPath = "/data/test.txt"; String outputPath = "/data/out.txt"; int valid = ReadWriteTaskUtil.startCompute(inputPath, outputPath, 30,
2021-10-09 16:30:47
358
原创 Spring懒加载妙用
开启 Spring 全局 bean 懒加载的好处可以加快启动速度,当服务依赖很多的时候,增速非常明显。服务启动时不用考虑依赖,不需要满足所有的依赖就可以启动服务建议 在 test, qa, dev 等环境酌情开启,在自己本机调试测试时可以只测试部分功能,只需要保证需要测试的功能依赖满足即可生产环境一般不建议开启本机单元测试的时候使用全局懒加载和 @mock 结合开启 Spring 全局 bean 懒加载的坏处屏蔽了启动时对 bean 的依赖检查,当 bean 不满足生成条件的时候需要等待
2021-09-29 12:10:49
810
原创 iterm2,tmux使用笔记
标题iterm2 有时候鼠标滚动变为了历史命令滚动,而看不到历史界面老外解决方案1.Preferences–> Profiles —> Terminal ----> 去掉 Save lines to scrollback in alternate screen mode2.vi tmpfile,:q, 先用vi随便编辑一个文件,然后再直接退出vi就可以切换到历史界面了...
2021-08-13 14:59:58
492
原创 服务器配置相同服务性能不一样排查
背景查看响应时间日志,新增加的两台GPU机器服务器响应时间要比老的机器要快3倍qps 相似,机型一模一样,同一个服务和同样的模型排查htop 查看老机器开启了 swap, 新机器关闭了swap,于是将老机器的 swap 关闭,然而并没有效果prometheus 比对两台机器的运行差异,除了老机器CPU使用率和负载都比新机器高以外其余的指标全部都接近,排除磁盘、网络等问题export -p 对比环境变量一样,排除环境变量问题lsof -p 进程ID| grep mem 拿到p
2021-07-22 19:54:22
1266
2
原创 hive使用笔记
踩过的坑order by 失效下面两种情况下order by 无效INSERT INTO table1 SELECT * FROM table2 ORDER BY create_time descCREATE table table1 AS SELECT * FROM table2 ORDER BY create_time desc
2021-07-20 16:09:24
268
原创 hive-jdbc的默认超时时间被mysql超时时间覆盖
现象hive-jdbc.2.1.1版本在循环遍历查询数据,并且同时处理发现偶尔会出现SocketException异常,推测异常是由于超时导致的,结果验证果然超时时间被设置为了mysql的30sError retrieving next rowjava.sql.SQLException: Error retrieving next row at org.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:3
2021-07-13 20:51:30
5647
原创 LANG环境变量导致Ansj分词不生效
现象有一台生产环境Ansj分词词库没有生效,jar包一模一样,并且日志也已经将字典加载了排查先确定是否 jar 包有问题,拷贝一模一样的包,size 也一模一样,问题还是存在jdk 版本有差异,安装一模一样的 jdk 版本,问题还是存在export -p 查看不同机器的环境变量差异,发现分词出问题的机器 LANG=“C”,分词正常机器LANG=“en_US.UTF-8”,于是 export LANG="en_US.UTF-8" 再来重启程序,发现分词正常了,确定就是环境变量导致查看/etc/p
2021-07-13 10:43:13
183
原创 ThreadPoolExecutor核心线程数和RocketMQ消费线程调整
背景Rocketmq 消费者在高峰期希望手动减少消费线程数,通过DefaultMQPushConsumer.updateCorePoolSize方法可以调用内部的ThreadPoolExecutor.setCorePoolSize设置多线程核心线程数。那么是否能够通过调整参数动态调整Rocketmq消费者呢。结论和实现方案可以通过调整核心线程数减少RocketMQ 消费线程数先挂起消费者consumer.suspend()然后休眠至少1分钟以上,等任务全部消费完成,1分钟是基于Consume
2021-07-09 17:05:05
3515
原创 TensorRT多线程下运行
TensorRT多线程背景TensorRT 在主线程速度比 tensorflow 快了很多,30-60倍的提升。TensorRT 官方多线程的demo,是一个显卡启动一个线程实际生产环境中用的thrift RPC,每个连接都是用 threading.Thread 跑的,也就是需要在多线程下运行解决方案threading.lock加锁可以在多线程下限制单线程可以运行起来,平均一次计算耗时4.5ms左右,表现比单线程慢了2-3倍,但是比tensorflow要快了很多coding如下,也可以用th
2021-06-21 14:16:38
4848
原创 node-sass安装失败
参考整理 node-sass 安装失败的原因及解决办法方法一:npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/方法二:vi .npmrcphantomjs_cdnurl=http://cnpmjs.org/downloadssass_binary_site=https://npm.taobao.org/mirrors/node-sass/registry=https://registry.
2021-06-09 15:12:08
175
原创 mongodb埋点监控的坑
背景公司中间件团队使用了 com.mongodb.event.CommandListener 来对mongodb 打点监控。当我们使用 RocketMQ 调用 mongodb 保存数据的时候没有看到任何异常产生。在我们将 RocketMQ 改用中间件代理,产生了大量的DuplicateKeyException日志,一度怀疑是否中间件的 RocketMQ 代理有问题, 分析源码没有。分析原因消费消息的时候,异常如果自己不捕获打印的话,会被ConsumeMessageConcurrentlyServi
2021-04-28 10:28:08
579
原创 IDEA 中 Thrift 生成的类引用异常问题解决
现象解决方案先编译整个工程mvn -DskipTests clean package将 thrift 生成的目录标记为 Mark Directory as --> Generated Sources Root如果做了上述步骤以后问题解决了,这一步可以不用进行由于 idea 默认的类大小是 2500(2.5m),导致无法导入包打开 idea 的 help->edit custom properties创建一个 idea.properties,追加:ide
2021-04-01 11:01:43
2323
1
原创 spring-cloud-netflix-hystrix的/acutor/hystrix.stream错误UT005023
错误现象UT005023: Exception handling request to /actuator/hystrix.streamgithub上的issue解决方案查看github代码发现在master分支上已经将这个问题修复,但是当前maven中央仓库最新jar包1.5.18中并没有修复。解决方案: 自己打一个jar包覆盖掉原来的jar包我是自己打了包一个1.5.19版本的jar包放到公司私有的maven仓库<dependency> <groupId>
2021-03-18 12:00:34
7178
原创 Groovy动态编译类存储及其使用
目的业务规则是动态变化的,使用Groovy动态脚本实现。1.0版本并发不高,每次都是动态编译解析2.0版本现象:并发量大的时候CPU使用率特别高, 所有的方法执行速度都变的很慢原因:动态编译对CPU性能要求较高解决方案:将每次编译的脚本缓存下来3.0版本现象:第一次加载的时候如果规则特别多,打开速度会很慢解决方案:方案1. 提前预热,确保规则都被编译保存在缓存中了方案2. 创建规则的时候就编译保存为.class文件,使用的时候直接加载远程目录的.class文件4.0版本待实现(业
2021-03-05 12:40:22
1842
3
原创 ES客户端由5.6.12升级到7.10
TransportClient替换为RestHighLevelClientSearchRequestBuilder替换为SearchSourceBuilder原来searchRequestBuilder的所有动作都需要去掉动词, 例如searchRequestBuild.addAggregation需要修改为searchSourceBuilder.aggregation,searchRequestBuild.setSize需要修改为searchSourceBuilder.size等等发起请求修改原
2021-02-25 18:09:30
862
3
原创 OutOfMemory自动重启程序
OutOfMemory以后程序已经假死,无法再提供服务,最好的做法是dump内存,发送警告,然后重启服务我的方案:利用at命令延迟启动但有一个问题,at最多支持分钟操作,也就是说要1分钟以后才能启动,我的业务允许接受1分钟的延迟,总比收到警告然后等到人工去启动要好一点。 -XX:OnOutOfMemoryError="at -f /data/deploy/start.sh now +1 minutes;kill -9 %p;"at命令的安装和启动yum -y install atsystemc
2021-01-14 12:23:37
1269
原创 阿里云经典网络迁移VPC笔记
公司的运维负责迁移,我做一下笔记公司所有服务器都在经典网络华东1区域下,技术总监痛下狠心决定迁移到VPC阿里云资源:OSS-----不区分经典和VPCNAS------不区分经典和VPCRedis—区分经典和VPC,有混访模式,迁移后原经典网络仍然能够访问RDS-----区分经典和VPC,有混访模式,迁移后原经典网络仍然能够访问RDS临时混访方案(同时保留经典网络和专有网络地址)NAT-建立专有网络NAT-建立路由表NAT-建立交换机,可用区E,F,I都要建立一个交换机,IP段全部以1
2020-08-20 17:25:27
558
原创 Mybatis Plus使用笔记
mysql关键字在实体字段加上@TableFiled显示写出数据库字段,并且需要加一对反斜杠 /** * 来源 */ @TableField(value = "`from`") @ApiModelProperty(value = "来源") private String from;动态表名在PaginationInterceptor插件中可以实现动态表名,有两种方法从MetaObject对象中得到入参,官方demo没有介绍如何从MetaObject中得到入参来决定表名后缀
2020-08-16 11:08:09
897
原创 Ribbon使用笔记和问题
老的客户端是用服务端依赖swagger-codegen-maven-plugin在打包的时候自动生成的,服务接口调用本质上是用的restTemplate切换为微服务以后,只需要在restTemplate上面加一个@LoadBalanced注解即可根据服务名调用遇到的问题1.provider并发不足,会进入熔断短路状态:Hystrix circuit short-circuited and is OPENconsumer会一直重试,可能会让provider奔溃,所以consumer应该在provi.
2020-07-24 15:40:56
718
原创 Feign使用笔记和问题解决
Feign让客户端调用变得非常简单使用添加maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>增加注解@EnableFeignClients注意***@EnableFeignClients注解
2020-07-17 09:30:03
1536
2
原创 jenkins安装指南
用docker安装,官方建议使用jenkinsci/blueocean镜像我是按照网上别人命令安装的jenkins/jenkins镜像安装插件如果有异常Dependency errors:只能手动把插件依赖下载到本地,然后在界面上系统管理-》插件管理-》高级-》上传插件来安装插件,安装好插件依赖后重启就会自动安装失败的插件,我都重启了至少5次下载插件的地址我建议使用清华镜像...
2020-07-07 19:45:17
162
原创 Jackson使用笔记
使用Mybatis-plus的JacksonTypeHandler无法反序列化List<Bean>模拟JacksonTypeHandler类写了自定义ListTypeHandler来解析,目前需要给每个List<Bean>都写一个继承自ListTypeHandler的ListBeanTypeHandlerListTypeHandler类如下:import com.baomidou.mybatisplus.core.toolkit.Assert;import com.baomi
2020-07-07 14:38:15
1346
原创 LAMP和SAML
老外用LAMP存储用户账号,SAML做权限认证,以前都没听说过,记录一下入门LAMP建议看博客LDAP概念和原理介绍Spring LDAP的使用,使用spring ldap非常简单SAML建议看博客SAML2.0, 有一个包括sp和idp的demo,demo在idea下运行找不到静态配置我在博客的下面有评论如何修改此外可以参考spring-boot-security-saml-samplespring-security-saml官方docjava-saml, 老外写的一个sp工具,最开始研
2020-07-01 09:38:59
152
原创 java脚本表达式
java中的表达式有很多种,挑花眼睛,直接推荐使用QLExpress和GroovyQLExpress 被广泛应用在阿里的电商业务场景 ,速度较快, 扩展非常灵活,性能和Groovy相当Groovy 支持丰富的语法糖,集成简单,速度较快Drools, 可以将自定义的规则打成jar包,利用内置maven动态监控maven仓库的jar包变化,实现规则动态替换fel 通常情况下,Fel-0.7每秒可以执行千万次表达式(不包含编译时间)。速度是Jexl-2.0的20倍以上。目前还没有发现开源的表达
2020-06-29 17:50:30
1070
1
原创 Spring boot问题及其解决
自定义WebMvcRegistrations无效现象:问题出现在一个由spring-mvc老工程改造成spring boot项目中,在Application.java类中通过@ImportResource(“classpath:applicationContext-*.xml”)把xml的配置实例化,下面的自定义webmvc注入器无效 @Bean public WebMvcReg...
2020-05-06 16:34:54
2155
原创 java特殊符号处理
java去掉特殊符号文章有很多,这里汇总一下1.利用guaua去掉所有不可见字符com.google.common.base.CharMatcher.INVISIBLE.removeFrom(str);2.需要对字符串做情感分析,只保留中文英文和常见符号即可String reg = "[^\\u4e00-\\u9fa5a-zA-Z .,\"?!:'。,!“‘]";str.replace...
2020-04-03 15:10:25
2385
hystrix-metrics-event-stream-1.5.19.jar
2021-03-18
cerebro-0.9.0.zip
2020-05-13
gifview2或者gifview1.2
2015-08-12
手机快播文件合并利器
2013-12-20
Access表缩略图显示并快速转换为Excel
2013-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人