自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM-垃圾回收

堆内存采用了分代结构,包括新生代和老年代。新生代又分为:Eden区, From Survivor区(简称S0),To Survivor区(简称S1区),三者的默认比例为8:1:1。另外,新生代和老年代的默认比例为1:2堆内存之所以采用分代结构,是考虑到绝大部分对象都是短生命周期的,这样不同生命周 期的对象可放在不同的区域中,然后针对新生代和老年代采用不同的垃圾回收算法,从而 使得 GC 效率最高。

2022-11-28 17:45:30 611

原创 线程池总结

创建线程数为1的线程池,并且使用了LinkedBlockingQueue,核心线程数和最大线程数都为1,满了就放入队列中,执行完了就从队列取一个。核心线程数是0,最大线程数是Integer.MAX_VALUE,所以当有新任务时,任务会放入SynchronousQueue队列中,SynchronousQueue只能存放大小为1,所以会立刻新起线程。带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素(规则可以通过实现Comparable接口自己制定),内部是使用平衡二叉树实现的,遍历不保证有序。

2022-11-25 15:29:36 635

原创 生产事故总结篇(2) 接口响应超时优化方案

在使用上门取件功能时, 在调用下单接口会出现一定比例的接口超时, 超时原因是在调用第三方下单接口服务响应时长>5s, 成功响应后执行入库操作时, 因为超过了当前切面事务最大执行时间5s, 会抛出事务超时异常, 导致的问题是上门取件在服务商那边创建成功了, 但是在我们系统却找不到对应的订单, 后期用户也无法支付运费, 对平台造成一定的损失。有些接口业务很复杂, 调用了很多的远程调用, 偶尔就会不明原因的超时, 这时候可以去阿里云后台开一下接口整体执行时间, 看下到底是哪个接口执行耗时导致的。

2022-11-22 16:17:02 2199

原创 生产问题总结(1)->死锁问题

经过分析: 该方法更新库存时更新缓冲区销量本身逻辑存在不合理的情况, 产生了一定的耦合性, 所以吧更新t_item 操作统一放在定时任务批量操作,不再耦合在更新库存方法中, 这样就解决了 两张表不按照顺序更新时产生的死锁。如果不加索引, 锁的是整张表 , 针对这张表的任何更新操作都要等待锁释放,所以不要因为表数据量小就不加索引, 针对于频繁更新的字段更要加索引, 降低锁的粒度。事务 1 的等待锁 : t_product , 证明在其他事务中有对 t_product表的修改,还未提交。

2022-11-22 15:55:48 773

原创 JVM-类加载

1 JVM的内存布局?堆:堆Java虚拟机中最大的一块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为Yound区年轻代和Old区老年代,其中年轻代又分为Eden、S0、S1 3个部分,他们默认的比例是8:1:1的大小。栈:栈是线程私有的内存区域,每个方法执行的时候都会在栈创建一个栈帧,方法的调用过程就对应着栈的入栈和出栈的过程。每个栈帧的结构又包含局部变量表、操作数栈、动态连接、方法返回地址。局部变量表用于存储方法参数和局部变量。当第一个方法被调用的时

2022-01-06 14:27:10 283

原创 分布式锁总结

1 概念对于一个单机的系统,我们可以通过synchronized或者ReentrantLock等这些常规的加锁方式来实现,然而对于一个分布式集群的系统而言,单纯的本地锁已经无法解决问题,所以就需要用到分布式锁了2 锁的属性分布式锁要保证互斥性、不死锁、可重入等特点。互斥性 : 对于同一个资源,任意时刻,都只有一个客户端能持有锁。 不死锁 : 必须要有锁超时这种机制,保证在出现问题的时候释放锁,不会出现死锁的问题。 可重入 : 指的是对于同一个线程,可...

2021-12-30 14:44:45 335

原创 Spring总结

1Spring 里用到了哪些设计模式?单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数...

2021-12-21 15:55:06 115

原创 Java基础总结

1 工作内存和主内存是什么? 1.1 主内存可以认为就是物理内存,Java内存模型中实际就是虚拟机内存的一部分。 1.2 工作内存工作内存就是CPU缓存,他有可能是寄存器也有可能是L1\L2\L3缓存,都是有可能的。2synchronized原理synchronized是java提供的原子性内置锁,这种内置的并且使用者看不到的锁也被称为监视器锁,使用synchron...

2021-12-07 13:55:34 176

原创 Dubbo原理总结

1 RPC 1 概念 RPC 就是 Remote Procedure Call,远程过程调用,它相对应的是本地过程调用。 2 RPC和Http区别RPC: 描述的是远程过程调用过程, 是一种技术实现方式 HTTP: 是通信协议 2 Dubbo的角色节点 角色说明 Consumer 需要调用远程服务的服务消费方 Registry 注册中...

2021-11-25 17:13:58 241

原创 MQ篇总结

1 使用MQ的目的 流量消锋,面对大量请求可以放到队列中执行 优化接口响应时间,异步处理其他逻辑 项目间解耦,避免项目间的依赖 2消息可靠性怎么保证 1MQ丢失消息丢失 触发场景:如果生产者保证消息发送到MQ,而MQ收到消息后还在内存中,这时候宕机了又没来得及同步给从节点,就有可能导致消息丢失。 解决方案:RocketMQ分为同步刷盘和异步刷盘两种方式,默认的是异步刷盘,...

2021-11-11 14:15:35 878

原创 MySQL算法篇总结

1 Hash算法1 定义哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行具体数据的数据结构。 2 查询原理 如果我们需要检索 id=7 的数据 哈希算法首先计算存储 id=7 的数据的物理地址 addr=hash(7)=4231, 而 4231 映射的物理地址是 0x77,0x77 就是 id=7 存储的额数据的物理地址, 通过该独立地址可以找到对应 user_name...

2021-11-06 15:56:07 1143

原创 Redis总结

1 缓存删除超时,导致数据库/缓存数据不一致问题先更新数据库,再删除缓存,缓存删除失败时,采用异步删除策略, 异步删除缓存脏数据流程如下所示(1)更新数据库数据;(2)缓存因为种种问题删除失败(3)将需要删除的key发送至消息队列(4)自己消费消息,获得需要删除的key(5)继续重试删除操作,直到成功2 Redis主从复制1 作用1 解决单机故障问题。当主节点也就是master出现问题时,可以由从节点来提供服务也就是slave,实现了快速恢复故障...

2021-11-03 17:50:14 128

原创 MySQL总结

1 缓存删除超时,导致数据库/缓存数据不一致问题先更新数据库,再删除缓存,缓存删除失败时,采用异步删除策略, 异步删除缓存脏数据流程如下所示(1)更新数据库数据;(2)缓存因为种种问题删除失败(3)将需要删除的key发送至消息队列(4)自己消费消息,获得需要删除的key(5)继续重试删除操作,直到成功2 数据库的隔离级别隔离级别 脏读 不可重复读 幻读 读未提交 1 1 1 读已提交 0 ...

2021-11-03 11:11:35 592 1

原创 命令总结(杂)

1 包版本修改mvn versions:set -DnewVersion=1.0.2.1026-RELEASE2 查看dubbo启动版本telnet 127.0.0.1 20882ls

2021-10-27 15:20:55 114

原创 mysql查询优化

1 针对大数据量的分页优化select * from trade_info where status = 0 and create_time >= '2020-10-01 00:00:00' and create_time <= '2020-10-07 23:59:59' order by id desc limit 102120, 20;

2021-07-05 17:19:21 156

原创 MySql常用语法(时间类)

1 获取当前时间戳(秒级)unix_timestamp(now()) = 13468369842 Mapper自动获取当前时间REPLACE(unix_timestamp(current_timestamp(3)),’.’,’’)3 时间戳转为日期格式FROM_UNIXTIME(ROUND(create_time/1000))

2021-03-23 10:07:12 192

原创 dubbo调用超时问题

1 消费者多次调用提供者服务原因 : 可能原因是dubbo配置中超时时间低于提供者服务响应时间,当消费未完成时抛出超时异常, 并多此重试直到响应完成解决方案 : 调大dubbo超时时间, 并将自动重试次数改为12 消费者调用提供者时间过长原因 : 消费者/提供者 在两个事务中update同一条数据,导致死锁解决方案: 避免发生死锁, 等提供者事务提交后再更新...

2020-09-19 15:29:16 1496

原创 项目打包成可单独执行jar包

1 Spring 打包方式<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.1</version> <configuration> <createDependencyReducedPom&gt

2020-09-02 15:23:07 275

原创 BigDecimal 使用

1 构造BigDecimal.valueof(52.5)2 判断是否为0bigDecimal.compareTo(BigDecimal.ZERO) == 03 比较大小bd1.compareTo(bd2) = -1 bd1 < bd2bd1.compareTo(bd2) = 0 bd1 = bd2bd1.compareTo(bd2) = 1 bd1 > bd24 运算 //减法bigDecimal1.subtract(bigDecimal2);

2020-05-28 19:31:09 152

原创 MyBatis常用语法

1 将查询出的结果为null 的转换为0 SELECT COALESCE(SUM(s.num),0) FROM 表2 对二进制位判断位数status : 二进制字段 AND s.status &amp; 1 > 0 ( 第一位为1) AND s.status &amp; 2...

2020-04-16 21:40:14 456

原创 maven 打包命令

问题场景 : jar包放在本地仓库idea maven还是爆红, 需要手动打包到本地仓库前提 : 在jar包当前文件夹下执行打包命令命令 :mvn install:install-file -DgroupId= < groupId> -DartifactId=< artifactId> -Dversion= < version> -Dpackagi...

2020-04-15 20:37:41 239

原创 ES基本语法

1 Query语句1.1 Term : 单一精确查询 =GET pps_test_pre/product/_search{ "query": { "term": { "productId": { "value": "711" } } }}1.2 Terms : 复合查询1 多条件精确查询 IN()2 排序 O...

2019-11-15 14:20:37 1767

原创 Java中根据Vo动态生成SQL

注意 : 使用该中方式生成SQL时, dao + Mapper 需要正常编写 //命名空间( NameSpace+id ) private final static String DATAEXPORT_NAME_SPACE = "com.weidiango.service.supplier.operation.dao.DataExportMapper.exeDataExport";...

2019-05-20 16:03:36 1170

原创 OSS列举文件

1 列举文件解析OSS中指定文件夹下 .txt 文件为Java对象注意 : ObjectListing 列表中会有一个文件为null ,注意从集合中清除 /** * 文件列举 * 查看OSS指定目录下所有文件 * 并将文件解析为Java对象 * * @return 文件对象集合 */ private List&...

2019-05-15 22:04:49 1523

原创 TableStore工具类

清空全表数据SearchQuery searchQuery = new SearchQuery(); searchQuery.setQuery(new MatchAllQuery()); searchQuery.setGetTotalCount(true); SearchRequest searchRequest = new...

2019-05-08 18:41:27 419

原创 Mybatis源码解析(3) 代理类的select()方法分析

1 查询功能User user = mapper.selectByID(1);2 调用代理类的invoke()方法类 : MapperProxy方法 : invoke()作用 : 被代理类调用方法时,都会执行代理类的involve()方法public Object invoke(Object proxy, Method method, Object[] args) ...

2019-02-27 20:51:55 222

原创 Mybatis源码解析(2) 获取 MapperProxy 代理对象

1 获取代理对象上一篇已经讲述了配置文件加载到 configuration 对象中,并创建了 SqlSessionFactory 对象,此处省略了 SqlSession 对象的获取,直接看获取代理对象的源码过程//从sqlSession中获取代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);2 封装的获取代理对...

2019-02-25 14:59:34 792

原创 Mybaits源码分析(1) 构建SqlSessionFactory

1 读取 Mybatis-config 配置文件InputStream inputStream = new FileInputStream (&amp;amp;amp;amp;amp;quot;D:\\Users\\Administrator\\IdeaProjects\\mybatis_demo\\src\\main\\resources\\Mybatis-config.xml&amp;amp;amp;amp;amp;quot;);2 构建

2019-02-21 21:22:16 252

空空如也

空空如也

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

TA关注的人

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