自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用JavaVisualVM排查FullGC问题

2.2 观察是否有本项目使用的类和对象,在dump文件中实例数或者内存占比额外大,有这种类或实例,和1中怀疑出现问题的地方互相印证,确定问题原因。在分析dump文件之前,我们可以先观察应用中接口的流量情况,或者根据一线反馈,去初步估计问题可能出现的位置,这样在后面的问题排查中更有目的性。根据问题出现场景和出现原因,以及问题产生的影响范围,记录开发过程中出现此问题的环节,在后续开发过程中避免此类问题再发生。2.3 如果不在之前怀疑出现问题的地方,去找使用这些实例多的方法以及这些方法的上下文,确定问题原因。

2024-02-21 18:20:24 645

原创 线上问题排查-dubbo-Dubbo client can not supported string message

修复问题时,有两条思路,一种是修改dubbo配置文件中payload 参数的设置,另一种是在调用查询接口时,分批调用,减小接口返回数据量。两种方案评估代码影响范围和测试范围后,决定采用第一种,先修改配置文件。线上值班时,收到告警通知dubbo 调用异常。主要修改payload 参数。修改以后,发现服务正常。

2023-07-23 16:49:07 728

原创 我们如何选择mock方案

1.背景:我们为什么需一个mock方案?我们需要对外提供稳定可靠的对外联调&测试环境,同时我们作为平台(或者叫前台)应用,会依赖大量的业务应用。当某些业务应用不可用的时候,会相应导致我们的业务不可用。同时依赖服务中,一些服务没有稳定可靠的使用环境,我们要提供一个解决方案,来保证我们环境的可用和稳定。2.可选方案提出需求,让我们的同志团队,为我们的服务来部署一套专门由我们团队使用的环境,独自使用下相应的稳定性也会更好。这个方案就需要考虑我们自己服务的优先级,因为搭建相应的环境需要申请额外

2022-03-14 19:00:00 831

原创 MVCC(Mutil-Version Concurrency Control)

MVCC(Mutil-Version Concurrency Control)多版本并发控制 - 省流量的说法就是“乐观锁”数据库并发问题首先我们要搞清楚相关的并发问题,脏读、不可重复读、幻读脏读事务A修改了数据a(3-> 5),还没有提交事务;这个时候,事务B读取数据a,读到的a是5;然后事务A发生回滚,数据a还是3,这称为脏读。不可重复读事务B读取数据a(3)。事务A修改了数据a(3-> 5),事务A提交了事务。事务B读取数据a(5),在同一个事务里面,两次读到的数

2022-01-10 19:11:00 595

原创 OAuth2.0 里面的 state 参数是干什么的?

OAuth2.0 里面的 state 参数是干什么的?是为了防止CSRF 攻击

2021-12-24 09:24:40 6004

原创 redis的使用

总结说是总结,谈不上是心得,最近学到的一个点,记录一下。我的一个数据是存在redis里面,数据比较大,需要都拿出来,这是前因。这个时候,会消耗比较长的时间,就有两种拿的方案,一种是一下子将数据全部取出来,这样io占用时间会比较长,还有一种是每一次都按照某个范围去拿,分批次去全部拿出来,这样的话需要多次使用网络连接。最后采用的是第二张,分多次去拿。这种总消耗时间比第一种多,但是有一个好处就是每个单次的耗时短,和其他系统公用redis时,对其他系统的影响相对小一些。还有一点,redis就是redis,

2021-04-24 20:45:00 135

原创 mapstruct的使用

mapstruct 优势    分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更,并不需要映射 DO 的全部属性。对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。    MapStruct 就是这样的一个

2021-04-24 20:14:15 663 1

原创 宜搭和钉钉审批流的比较

一、宜搭版本介绍 使用场景在宜搭的应用中,通过以下几类页面来配合完成完整的业务场景需求的解决:表单:存储或收集数据,通过权限配置实现不同角色人员能够拥有不同的数据增删改查、导入、导出等权限;流程表单:通过审批流程完成特定的业务,例如请假、报销等需要多级审批的场景;1.基本流程2.高级流程为满足丰富的流程需求,宜搭提供了高级的流程设计器,它不仅能满足普通设计器的几乎所有功能,还在此基础上增强了部分功能,例如增加了分支、聚合等组件;同时也对组件功能及设置进行了增强,区分基础和高级设置;执行人.

2021-03-21 21:20:07 6120 2

原创 @RequiresPermissions 生效

@RequiresPermissions 生效org.apache.shiro.authz.aopPermissionAnnotationHandler public void assertAuthorized(Annotation a) throws AuthorizationException { if (!(a instanceof RequiresPermissions)) return; RequiresPermissions rpAnnotation

2021-03-21 21:18:27 243

原创 使用钉钉扫码完成第三方登录

package com.chs.mydingtalk.controller.demo;import com.alibaba.fastjson.JSONObject;import com.chs.mydingtalk.model.auto.Access;import com.chs.mydingtalk.service.IUserService;import com.dingtalk.api.DefaultDingTalkClient;import com.dingtalk.api.DingTalk

2021-02-28 16:00:38 3196 9

原创 题目(一)

1. 问题:启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20....以此类推, 直到打印到75. 程序的输出结果应该为: 线程1: 1 线程1: 2 线程1: 3 线程1: 4 线程1: 5 线程2: 6 线程2: 7

2021-01-27 21:54:16 157

原创 List集合增强for循环时产生的异常

List集合增强for循环时产生的异常1.介绍在List 集合使用增强for循环遍历时,我们如果改变了集合的长度,会抛出异常。下面举个例子: public static void main(String[] args){ List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); f

2020-12-09 20:58:40 2138 10

原创 Spring中 @EventListener 在消息服务和日志服务的使用

@EventListener 在消息服务和日志服务的使用@EventListener介绍在@EventListener出现之前,是通过实现ApplicationListener接口来实现Spring的监听-通知的。@EventListener出现之后,可以更方便的来使用这个功能。我们是在日志和消息功能的实现过程中,使用到了这个注解。相比于其他方式,使用建通-通知这种方式,代码模块间的耦合度降低。@EventListener使用定义事件public class MyEvent exte

2020-11-10 09:12:28 657

原创 Spring中使用@Async来实现异步调用

Spring中使用@Async用法来异步调用1.关于异步调用同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。2.@Async的使用开启@Async使用@EnableAsync注解可以在项目中开启@Async。具体使用@

2020-10-18 11:54:30 790 2

原创 SpringCloud Feign:使用ApacheHttpClient代替默认client

ApacheHttpClient和默认实现的比较Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connection。ApacheHttpClient实现了连接池,同时它封装了访问http的请求头,参数,内容体,响应等等,使客户端发送 HTTP 请求变得容易。ApacheHttpClient 使用maven 依赖 <dependency>

2020-10-09 09:10:23 2149

原创 HTTP Basic Auth:使用和Postman 测试

1.HTTP Basic Auth百科介绍Basic Auth是开放平台的一种认证方式,简单点说就是每次请求API时都提供用户的username和password。优点:使用非常简单;开发和调试工作简单;没有复杂的页面跳转逻辑和交互过程;更利于发起方控制;缺点:安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能;同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题; 开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用

2020-09-27 09:16:28 5815 5

原创 源代码分析 spring.factories 的使用原理和实现自动装配

spring.factories文件的使用

2020-09-14 20:35:36 1292

原创 Java8 Duplicate key 异常解决

Java8 Duplicate key 异常解决1.在我们使用Java8中提供的list 转换map方法时,可能回出现下面的问题:java.lang.IllegalStateException: Duplicate key...    产生这个问题的原因时我们参与转换的list中,作为key的属性有重复,没有办法确定使用哪个元素来作为转换后map中的value,下面的例子可以复现这个场景: @Test public void duplic.

2020-09-07 22:43:44 55600 3

原创 MySQL查询最大值、最小值所在行

SQL查询最大值所在行

2020-09-06 17:49:44 7990 2

原创 @RequestPart解决同时提交文件和其他字段的问题

@RequestPart解决同时提交文件和其他字段的问题对于同时提交文件和其他内容的时候,可以考虑使用 @RequestPart 注解来解决问题。 @ApiImplicitParams({ @ApiImplicitParam(name = "description", value = "描述", required = true, dataType = "String"), @ApiImplicitParam(name = "file", value =

2020-08-28 21:05:42 1785

原创 Spring Security PasswordEncoder 的使用

Spring Security PasswordEncoder 的使用1.依赖 <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.1.7.RELEASE</version> </de

2020-08-24 21:20:43 3576

原创 面试-4.索引失效问题

索引失效的情况:###1.有or必全有索引;如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因)。注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引2.复合索引未用左列字段;(索引的最左前缀原则)B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录。假设我们有(name,age)这样一个联合索引。可以看到,索引项是按照索引定义里面出现的字段顺序排序的。     因为可以支持最左前缀,

2020-07-26 19:07:02 1548

原创 面试-3.MyBatis中#与$的区别,PrepareStatement

MyBatis中#与$的区别1.MyBatis中使用parameterType向SQL语句传参,parameterType支持的类型可以是基本类型int,String,HashMap和java自定义类型。在SQL中引用这些参数的时候,可以使用两种方式:#{parameterName}${parameterName}...

2020-07-26 16:29:50 943

原创 面试-阿里社招笔试题两则(二)----基于hashMap实现LRU缓存

基于HashMap实现LRU缓存单线程环境下,实现LRU缓存,不可以通过 LinkedHashMap 来实现。LinkedHashMap 本身实现了LRU存储方式,可以通过定义初始容量和重写boolean removeEldestEntry(Map.Entry<K,V> eldest) 方式来实现,这里不采用这种方式。我感觉需要考虑比较多的地方就是各种边界值吧,本身的算法实现来说,没有太高的复杂度。代码实现:package com.lhc.cache;import java.ut

2020-07-19 20:20:54 906

原创 面试-阿里社招笔试题两则(一)----Excel列号转数字

Excel列号转数字根据excel列号计算列数以及根据列号计算列数,excel中的列数是使用字母表示的,即A,B,C…Z,AA…,ZZ…这种情况,假设我们输入A,那么输出结果为1,输入27,输出结果为AA,以此类推。解答:考虑和十进制转二十六进制联系起来,本质上是一样的问题。package com.lhc.translate;import org.junit.Test;/** * @description: * @author: hjt * @create: 2020-07-19 15:

2020-07-19 18:17:02 1125

原创 面试-2.Java基本数据类型问题

Java基本数据类型Char的总结在设计之初的时候被用来存储字符,可是世界上有那么多字符,如果有1个字节,那么就意味着只能存储256中,显然不合适,而如果有两个字节,那么就可以存储65536种。这个数量符合大多数国家的语言字符的个数。于是Java团队默认使用unicode作为编码,一个char作为2个字节来存储。  这里就有两个问题了?    1. java的char一定会有两个字节吗?    2. 中文字符可以存储在char里面吗?  先来回答第一个问题。char一定是两个字节吗?不是的,这

2020-06-27 17:30:22 650

原创 面试-1.HashMap问题

HashMap问题HashMap的默认初始容量是16.如果你使用构造方法时,传入的不是2的幂,会转化成大于这个数的2的幂HashMap的默认初始负载因子是0.75.hashmap扩容分为两步:扩容:创建一个新的Entry空数组,长度是原数组的2倍。ReHash:遍历原Entry数组,把所有的Entry重新Hash到新数组。HahMap1.7为头插法,1.8改进为尾插法。    1)Hashmap在插入元素过多的时候需要进行Resize,Resize的

2020-06-27 17:15:06 714

原创 Java并发编程实战笔记2.0

1.用锁的最佳实践1.永远只在更新对象的成员变量时加锁 2.永远只在访问可变的成员变量时加锁 3.永远不在调用其他对象的方法时加锁2.信号量模型信号量模型可以简单概括为:一个计数器,一个等待队列,三个方法。init():设置计数器的初始值。down():计数器的值减 1;如果此时计数器的值小于0,则当前线程将被阻塞,否则当前线程可以继续执行。up():计数器的值加...

2020-05-11 08:45:07 664

原创 Java并发编程实战笔记1.0

1.并发编程领域可以抽象成三个核心问题:分工、同步和互斥分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。2.并发编程领域问题的产生原因:源头之一:缓存导致的可见性问题    一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。源头之二:线程切换带来的原子性问题    我们把一个或者多个操作在CPU执...

2020-05-11 08:44:23 584

原创 Oracle:ROWNUM介绍和分页使用

1.ROWNUM介绍ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可以生产一些原先难以实现的结果输出。最常被用到的场景就是分页。但因为它是伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。2.ROWNUM使用介绍    因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一...

2020-04-27 13:40:25 820

原创 JVM学习笔记1.0

1.Java 虚拟机需要将字节码翻译成机器码    在 HotSpot 里面,有两种形式:第一种是解释执行,即逐条将字节码翻译成机器码并执行;第二种是即时编译(Just-In-Time compilation,JIT),即将一个方法中包含的所有字节码编译成机器码后再执行。前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。HotSpot默认采用混合模式,综合了解释执行和即时编译两者的优...

2020-03-31 20:46:53 681

原创 JVM学习笔记2.0

1.运行时数据区域    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。程序计数器    程序计数器(Program Counter Register)是一块较小的内存空向,它可以看作是当前线程所执行的字节码的行号指示器...

2020-03-31 20:46:17 661

原创 MySQL学习笔记2.0

1.主备延迟来源:有些部署条件下,备库所在机器的性能要比主库所在的机器性能差。备库的压力大。大事务。由于主备延迟的存在,所以在主备切换的时候,就相应的有不同的策略:可靠性优先策略和可用性优先策略。2.读写分离    客户端直连方案,因为少了一层 proxy 转发,所以查询性能稍微好一点儿,并且整体架构简单,排查问题更方便。但是这种方案,由于要了解后端部署细节,所以在出现主备切换、...

2020-02-22 17:17:48 618

原创 MySQL学习笔记1.0

1.两种日志(binlog 和 redo log)1.这两种日志有以下三点不同。redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。2.redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑。3.redo log 是循环写的,空间固定会用完;binlo...

2020-02-22 17:14:46 598

原创 消息队列学习笔记(二)

1.消息复制的问题    RocketMQ 提供新、老两种复制方式:传统的主从模式和新的基于 Dledger 的复制方式。传统的主从模式性能更好,但灵活性和可用性稍差,而基于 Dledger 的复制方式,在 Broker 故障的时候可以自动选举出新节点,可用性更好,性能稍差,并且资源利用率更低一些。Kafka 提供了基于ISR的更加灵活可配置的复制方式,用户可以自行配置,在可用性、性能和一致性这...

2020-02-14 20:13:19 709

原创 消息队列学习笔记(一)

1.消息队列常用场景    消息队列最常被使用的三种场景:异步处理、流量控制和服务解耦。    消息队列的适用范围不仅仅局限于这些场景,还有包括:作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;连接流计算任务和数据;用于将消息广播给大量接收者。    简单的说,我们在单体应用里面需要用队列解决的问题,在分布式系统中大多都可以用消息队列来解决。同时我们也要认识到,消息队列也有它自身的...

2020-02-14 20:10:59 726

原创 类加载中的属性问题

类加载中的初始化问题举三个例子来说明:要准备的代码package com.lhc.load;public class SuperClass { static { System.out.println("SuperClass init"); } public static int value = 123;}package com.lhc....

2020-01-18 09:14:20 618

原创 @ConfigurationProperties注解的使用

@ConfigurationProperties的使用####在Springboot中,使用@ConfigurationProperties注解来加载配置文件中的属性,注入配置Bean特别方便,下面来介绍一下@ConfigurationProperties的使用相关。主要有两块内容:1.@ConfigurationProperties的使用2.@ConfigurationPropertie...

2019-12-11 19:39:35 2075

原创 mysql:关于case-when的使用

mysql中关于case-when的三种使用场景在数据库中,case when常用来做条件判断,在一些场景下十分方便。开始之前数据准备:参加某一次竞赛时的学生成绩第一种第二种第三种...

2019-12-06 10:57:13 720

原创 poi实现excel级联下拉框

poi功能很强大,这里用来实现一个excel级联的下拉框package poiExcel;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddressList;import org.junit.Tes...

2019-11-14 20:19:35 1993

空空如也

空空如也

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

TA关注的人

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