mysql 记录一次线上sql优化 sql select 'false' as QUERYID, id, uid, order_id, start_position, end_position, reply_order_price, finish_order_price, member_level, scene_id, member_score_type, member_score, rob_result_time, record_type,
mysql mysql timestamp类型使用问题 表 CREATE TABLE `hy_goods_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型 0-goods 1-sku', `obj_code` varchar(64) NOT NULL
线上火焰图分析 log4j 根据火焰图发现有个写日志的操作非常慢,跟踪代码,发现具体为以下代码 根据includeLocation查询到日志配置文件中,配置的为true,修改为false 调整后效果 bean copy 具体代码 BeanMapper.copy(rpcData,result);使用的是DozerBeanMapper dozer = new DozerBeanMapper();调整为mapstruct 调整后效果 火焰图看到的是使用cpu的时间片,io阻塞过程中,通过火焰图观察不出来,所以并不能直观得与rt进行等同
流程实例process编排 模块 InstanceGroup public class InstanceGroup { /** * 将某几个组,打包为一个新的组 * * @param instanceGroups * @return */ public static InstanceGroup getInstance(InstanceGroup... instanceGroups) { InstanceGroup result = new InstanceGroup(); result.instanceGroups = Arrays.stream(instanceGroups).collect(Collectors.toList()); return result; } /** * 将某几个process打包为一个组 * * @param processClassList
dubbo filter使用介绍 结论 先把结论放最前面,可忽略后面的过程 org.apache.dubbo.rpc.Filter与com.alibaba.dubbo.rpc.Filter没区别 spring.dubbo.provider.filter: 无该配置,服务中的该配置是用于xml中配置provider的filter provider filter或service filter可具体给这个provider或service配置过滤器 如果想去掉某个filter,可在 provider filter或service filter配置的前面加- 排序在filter类上定义,order越小,优先级越高 @Activate(group = { CommonConstants.PROVIDER
java spring datasource多数据源配置 配置 mybatis.datasource.xxx.configLocation=classpath*:xxx-mybatis.xml mybatis.datasource.xxx.mapperLocations=classpath*:sqlmap/*/*.xml mybatis.datasource.xxx.type=com.alibaba.druid.pool.DruidDataSource mybatis.datasource.xxx.driverClassName=com.mysql.jdbc.Driver mybatis.
java redis cache抽象实现 概述 redis缓存在项目中经常用到,如果每个需要的地方独立实现,会有各种各样的问题,如实现的功能不健壮,代码冗余 本篇的宗旨是构建一个抽象的,功能完善,代码健壮的缓存模块,使得接入时,通够快速、便捷的使用缓存 重要的class Cache redis中缓存的对象 /** * @author liuk * 封装此对象的目的 * 1. 当从redis批量获取对象时,能够清楚获取到的value对应的key * 当然redis返回时,是与请求时的key的顺序是一致的,如果未取到会返回null,通过顺序的一致性也是可以确定获取到的value对应的key的 * 2. 如果该key确实不存在对应的对象,防止一直透过缓存查数据库,故该场景保存的value=null */ @Data public class
java java之简易bitmap实现 当需要用比较少的空间存储true和false时,不防考虑下通过bitmap实现。 bitmap用途还是非常广泛的,比如布隆过滤器等。 下面介绍如何用java实现一个bitmap用于存储状态数据(0/1、true/false) public class BitMap { /** * 二进制数据存储,存储内容为[0,0,1,1] */ char[] binaryChars = null; /** * 扩张因子,当binaryChars小时,以该值扩张 */ private static final double DILATATION_FACTOR = 1.3; /** * defaultChar
ScheduledThreadPoolExecutor 为什么不能指定maximumPoolSize ScheduledThreadPoolExecutor不能指定maximumPoolSize,这是因为其内部实现机制决定的。ScheduledThreadPoolExecutor的构造函数中,maximumPoolSize参数被硬编码为Integer.MAX_VALUE,这意味着无论我们如何设置maximumPoolSize参数,其实际最大线程数始终是Integer.MAX_VALUE,即理论上的最大整数值。这种设计选择背后的原因主要是为了确保延迟任务能够及时被处理,避免因为线程池大小限制而导致任务处理延迟。 ScheduledThreadPoolExecutor使用的是DelayedWorkQueue队列,这是一个无界队列,意味着其可以容纳无限多的任务。由于这个队列是无界的,因此设置maximumPoolSize实际上是没有意义的,因为队列本身不会成为限制因素。corePoolSize参数指定了线程池中的线程数量,而keepAliveTime参数定义了当线程池中的线程数量超过corePoolSize时,多余的空闲线程的存活时间。然而,由于maximumPoolSize被设置为一个极大的值,实际上线程池的大小主要受控于corePoolSize的设置,以及任务队列的处理能力。 此外,由于ScheduledThreadPoolExecutor主要负责调度延迟执行的任务,它并不直接处理业务逻辑。这意味着,即使设置了较大的corePoolSize,在实际应用中,如果并发任务较少,
maven maven基础命令 打印依赖树 mvn dependency:tree 将依赖树打印到文件中 mvn dependency:tree > a.txt 打印包含某些包的依赖树 mvn dependency:tree -Dincludes=com.alibaba:fastjson maven执行命令跳过单元测试 mvn install -DskipTests 这条命令会构建项目,但会跳过单元测试。 如果你想要在你的pom.xml文件中永久配置跳过测试,可以添加以下配置: <project> ... <build&
dubbo服务启动预热 在服务部署期间,服务预热时间较长,在第三批部署时,大量流量流入第一批节点,而第一批节点只有一个节点,导致触发服务限流(qps 200) 解决方案调整dubbo预热时间 <dubbo:service interface="com.xxx.EstimateService" ref="estimateService"> <dubbo:parameter key="warmup" value="180000&
maven 使用mvn deploy命令发布项目到仓库时将源码(source)一并发布 添加配置 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions>
mysql事务报错Communications link failure during commit(). Transaction resolution unknown. 问题 线上报错 exception=com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown. at sun.reflect.GeneratedConstructorAccessor400.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at
mysql mysql分区与分表 对区对于引擎来说,是多个表,但是对于server层来说是1个表 可以通过多维度进行分区,如范围分区、hash分区、list分区 分区表与用户分表相比,有两个问题 分区表在第一次访问时,需要访问所有的分区 分区表共用mdl锁
mysql mysql之自增id 自增id值的存储方式 innodb在5.8版本前是不对该值进行存储的,只是放在内存中,如果实例重启,则查询表的最大值+1,重新放在内存中。 在5.8以后会将自增值的变更记录在redo log中,重启后依靠redolog恢复重启前值。 自增id修改时机 当执行insert操作时,如果未指定id,或id为0,则会取自增id并将自增值+1;如果指定了id,则会计算指定的id与自增值的大小,如果小的话不会对自增值进行操作,如果大于自增值,则会将自增值修改为该id+1 严格来说并非+1,而是+auto_increment_increment的值 自增锁的范围 在5.1.
idea idea启动java服务报错OutOfMemoryError: GC overhead limit exceeded解决方法 在用idea开发java项目时,启动报内存溢出错误,致服务启动失败:Error:java: java.lang.OutOfMemoryError: GC overhead limit exceeded 报此错说明启动期间内存不够用了,把idea的启动进程堆内存值设大点就行了。 设置窗口:Settings --->Build,Execution,Deployment---> Complier 把 build process heap size 值改大点即可 如下图所示: 把此值改为1000,重新启动服务正常。
mybatics insert get id <insert id="insertDataErrorExtension" parameterType="com.xx.campaign.dataobject.DataErrorExtensionDO" useGeneratedKeys="true" keyProperty="id"> insert into data_error_extension (group_id, page_id, module_
mac home目录操作方法 首先vim /etc/auto_master查看home所在行是否被注释,如果被注释了,sudo vim /etc/auto_master把注释去掉,然后去根目录下执行sudo automount -vc 然后home目录就回来了,如果想在home目录写入东西,再把/etc/auto_master的注释加上,再去根目录执行sudo automount就好了。
redis redis set nxxx expx String set(String key, String value, String nxxx, String expx, long time); 从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改: EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key
wireshark使用问题 You do not have permission to capture on device "en0". ((cannot open BPF device) /dev/bpf0: Permission denied) 原因 当前用户无权限,为当前用户添加权限 解决方案 打开终端 输入命令 'whoami' di@bogon ~ % whoami di 进入 /dev
java 执行mvn compile报错 报错内容 程序包 javax.annotation找不到 原因 mvn命令对应的java版本不对 解决方案 修改mvn命令 vim apache-maven-3.6.3/bin/mvn 添加 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
计算经纬度距离 package com.didichuxing.dd596.lcl.order.common.util; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; import java.math.BigDecimal; public class DistanceUtils { private static double
delay retry 添加重试 delayQueueManager.add(DelayQueueTypeEnum.FEE_CANCEL, cancelFeeRetryMsg, 3); DelayQueueTypeEnum.FEE_CANCEL:重试的类型,消费消息时,根据该类型定位对应的handler cancelFeeRetryMsg:请求参数 3: retrytime 封装重试context&发送延时消息 DelayContext delayContext = new DelayContext(); delayContext.setKey(typeEnum.toString());//DelayQueueTypeEnum delayContext.setParam(JSON.
java gson处理泛型 public class DateTest { public static void main(String[] args) throws Exception { // object String cacheData = "{\"personId\":1111}"; Gson gson = new GsonBuilder().disableHtmlEscaping() .setDateFormat("yyyy-MM-dd HH:mm:ss") .create(
线上问题之数据导出少字段-countDownLatch time问题 问题描述 下载数据excel时,发现数据中有一列只有部分数据 伪代码 //获取Customer CustomerListModel customerListModel = new CustomerListModel(); List<Callable<CustomerListModel>> bonusGetDetailTasks = Lists.newArrayList(); for (GetCustomerListRequest customerListRequest : requests) { bonusGetDetailTasks.add(() -> { CustomerListModel model = this.getCustomerList(customerListRequest); if