java
文章平均质量分 51
乐乐Java路漫漫
热衷于互联网JAVA开发,对新技术的探索孜孜不倦,对问题的研究废寝忘食,希望大家一起探索
展开
-
jmap导出快照和分析
导出jvm内存快照到指定目录jmap -dump:live,format=b,file=/data/simpleWebServer/xxxx.hprof 1用jvisualvm进行快照分析jvisualvm 使用文件装入,进行对应的分析原创 2022-01-28 09:12:33 · 1191 阅读 · 0 评论 -
springboot访问接口自动跳转到登陆页面问题排查
1.怀疑是某个filter进行了拦截人工排查了各个Filter,怀疑可能是漏了,使用jvisualvm对该程序进行dump分析其中的filter相关的对象,但是没有找到然后想一下,一个http请求的过程,tomcat -> engine -> host -> context -> wrapper -> ApplicationFilterChain(各种filter) ->springframework.web.servlet(DispacherServlet.原创 2021-09-09 23:03:52 · 2167 阅读 · 0 评论 -
rocketmq部署-保证消息不丢失的实操
1.我们都知道要保证消息不丢失需要从以下三个方面去保证1)保证发送端必须发送成功,最好是broker端给了ack之后才表示发送成功,不然就需要重试发送。2)保证broker端保存成功,一方面是master节点持久化成功,另一方面是follower节点也要持久化成功,不然master节点挂了消息就丢失了3)保证消费者短消费成功,如果消费者刚接收到消息还没进行业务处理就挂了,然后broker就认为消息成功消费了,那么消息也丢失了。rocketmq部署操作https://github.com/apa原创 2021-09-03 10:01:50 · 491 阅读 · 0 评论 -
秒杀活动系统简单分析
问题点:1.高并发:时间短,瞬间并发量大,考虑缓存雪崩,缓存击穿,缓存穿透。2.超卖:3.恶意请求:搞很多服务器脚本疯狂请求。4.链接暴露:相信是个开发同学都对这个画面一点都不陌生吧,懂点行的仔都可以打开谷歌的开发者模式,然后看看你的网页代码,有的就有URL,但是我写VUE的时候是事件触发然后去调用文件里面的接口看源码看不到,但是我可以点击一下查看你的请求地址啊,不过你好像可以对按钮在秒杀前置灰。不管怎么样子都有危险,撇开外面的所有的东西你都挡住了,你卖这个东西实在便宜得过分,有诱惑力,你能原创 2021-08-31 16:57:04 · 243 阅读 · 0 评论 -
Java内存模型与JVM内存结构
Java内存模型在JVM内存结构的描述中,我们知道了堆和方法区是线程共享的。而局部变量,方法定义参数和异常处理器参数就不会在线程之间共享,他们不会有内存可见性问题,也不受内存模型的影响。Java线程之间的通行由Java内存模型(简称JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存原创 2021-08-31 13:50:51 · 414 阅读 · 1 评论 -
分库分表要注意选型和流程
数据库到了需要分库分表的时候,那么公司的数据也是发展到了一定的量了,需要考虑高可用了。但是分库分表需要考虑哪些因素,拆分过程是复杂的,提前计划,不要等真正开工,各种意外的工作接踵而至,以至失控。本文介绍数据库中间件的广度而不是深度。切入层次,一下范围限定在mysql和java中,我们先说下分库分表切入的层次1.编码层在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。Spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource原创 2021-08-26 08:34:41 · 393 阅读 · 1 评论 -
shardingjdbc源码之结果合并
1.首先入口是这行代码result = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());org.apache.shardingsphere.core.merge.dql.DQLMergeEngine#merge 方法如下所示@Override public MergedResult merge() th原创 2021-08-24 17:36:30 · 456 阅读 · 0 评论 -
shardingjdbc源码解析
入口分析:org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement#executeorg.apache.shardingsphere.core.BaseShardingEngine#shard3. org.apache.shardingsphere.core.PreparedQueryShardingEngine#route4. org.apache.shardingspher原创 2021-08-24 11:29:10 · 1344 阅读 · 0 评论 -
JWT了解并使用
1. JSON Web Token是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。2.什么时候你应该用JSON Web Token下列场景中使用JSON Web Token是很有用的:Authorization (授权) :这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。原创 2021-08-18 08:02:38 · 252 阅读 · 0 评论 -
2021 java 最新面试总结
cpu -> 占用过多 怎么排查redis cluster集群: client端 进行redirect -> mastermysql联合索引怎么存储, 单个索引,一个节点存放的是单个索引的字段内容,联合索引存放的是多个索引字段的内容。netty 为什么怎么快? 基于主从reactor多线程模型设计。 mainReactor 负责客户端连接请求,并将请求转交给subReactor,subReactor负责读写io,非io操作直接放入队列等待worker threads进行处理。项目:re原创 2021-08-05 21:49:11 · 362 阅读 · 1 评论 -
nacos配置数据库加载
### Connect URL of DB:# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC# db.user=nacos# db.password=nacos原创 2021-08-05 16:49:02 · 1196 阅读 · 0 评论 -
threadLocal为什么会导致内存泄露
每个线程都有一个ThreadLocalMap, 该ThreadLocalMap 中有许多entry,每个entry的key就是当前的threadLocal的弱引用,value是填入的值当系统发生gc的时候,当没有地方强引用该threadLocal,那么这个弱引用的key就会被回收,但是这个entry仍旧被threadLocalMap强引用,threadLocalMap被当前线程强引用,因此无法回收,导致内存泄露所以每次用完threadLocal之后都需要去remove它,并且threadLocal在.原创 2021-07-28 22:33:26 · 393 阅读 · 0 评论 -
rocketmq事务消息
传统发送消息模式:先执行本地事务,成功之后,后发送消息给第三方,问题1.发送消息失败:第三方就没有收到消息,例如发送消息失败了(异常情况:mq宕机,网络异常),但是本地事务又成功了,就需要人工处理了。人工重发消息等传统发送消息的模式存在的问题是,无论你先发送消息再执行事务,还是先执行事务再发送消息,都存在问题。1.先发送消息,然后再执行事务,如果中间出现异常,事务执行失败,则出现了不一致2.先执行事务,再发送消息,如果中间出现异常,消息发送失败,也会导致不一致,因此:我们需要一个凭..原创 2021-07-21 17:23:43 · 324 阅读 · 0 评论 -
springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect解析
想着把各个aop的实现功能排个顺序,filter -> interceptor -> controllerAdvice -> aspect -> controller2 拦截器与过滤器之间的区别从上面对拦截器与过滤器的描述来看,它俩是非常相似的,都能对客户端发来的请求进行处理,它们的区别如下:拦截机制有三种:过滤器(Filter)能拿到http请求,但是拿不到处理请求方法的信息。拦截器(Interceptor)既能拿到http请求信息,也能拿到处理请求方法的信息,原创 2021-07-20 08:25:41 · 257 阅读 · 0 评论 -
cpu持续高起,如何定位问题
1.首先top查看进程列表,查找cpu占用率很高的进程top150882.然后再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程的已运行时间ps -mp 15088 -o THREAD,tid,time3.进制转换,3b4c再将这3个TID转为16进制,为等会在jstack中查找方便printf "%x\n" 1518015180 3b4cjstack查看线程信息whereis java./jstack 15088 |grep 3b4c5原创 2021-07-19 10:35:26 · 596 阅读 · 0 评论 -
zookeeper分布式锁
/** * 在指定时间内尝试获取锁 * zookeeper 尝试获取锁,首先获取可重入锁对象,然后尝试获取锁, * 若当前线程已获取该锁,则将该锁的lockCount + 1并返回获取锁成功 * 若不是当前线程,则首先在/mylock目录下创建一个临时顺序节点,然后获取该目录下的所有临时节点, * 判断当前节点是否获取到锁(即是否是最小的节点),若是则返回获取锁成功,若不是则创建一个watcher监听它的上一个节点, * 若直到有效时间截止还没原创 2021-07-18 11:38:43 · 69 阅读 · 0 评论 -
面试题:一个consumer订阅两个topic,其中一个topic消息过多堆积了,会影响另一个topic消费吗
问题:一个consumer订阅两个topic,其中一个topic消息过多堆积了,会影响另一个topic消费吗答案:不影响。为什么呢?因为rocketmq首先对消息进行负载均衡(rebalance),就是将topic中的队列按照consumer进行分配之后,将pullRequest(里面存放了topic,brokerName,queueId)放入到一个linkedBlockingQueue中,这个时候已经排好了后面消费的顺序。例如100个request中有大概50个是TopicTest1, 另外50个是原创 2021-07-15 11:28:49 · 2527 阅读 · 1 评论 -
动态代理模式&Spring AOP源码阅读
1.清楚jdk和cglib这两种动态代理模式创建代理对象的原理和代码2.要搞清楚jdk和cglib这两种代理模式产生的代理对象被调用时的执行原理和代码3.要搞清楚xml方式中aop标签底层时如何被解析及解析的结果是什么(十个BeanDefinition)4.通过画图去说明上一步解析出来的十个BeanDefinition的作用5.清楚创建aop代理对象的入口在哪及相关的类是哪个?6.清楚创建aop代理对象的流程7.清楚aop代理对象的执行流程(连接器链–MethodInterceptor/Meth原创 2021-07-12 10:23:00 · 146 阅读 · 1 评论 -
spring循环依赖问题
spring循环依赖问题:循环依赖是针对成员变量—单例才可以解决setter方法循环依赖,多例是无法解决循环依赖的- 构造器方法依赖—无法解决 - setter方法依赖—可以解决循环调用针对方法是无法解决的。@Componentpublic class CommonService { public CommonService(UserAService userAService) { this.userAService = userAService; }原创 2021-07-12 09:42:20 · 103 阅读 · 0 评论 -
aop核心概念及动态代理
spring循环依赖解决问题分息&spring aop核心概念解析&动态代理课程目标:1.明白什么是循环依赖?2.明白Spring中的循环依赖是如何解决的?3.明白Spring中的循环依赖是如何解决的?4.Spring aop核心概念详解(通知、切面、切入点等等)5.要明白aop到底是什么回事?6.要明白aop的底层原理是如何结合动态代理去实现的7.掌握动态代理的两种方式的写法三级缓存获取对象的顺序先从一级缓存中查找再从二级缓存中查找最后没有则从三级缓存中获取(Ob原创 2021-07-11 14:44:27 · 153 阅读 · 0 评论 -
spring refresh详解
@Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. // 容器状态设置,初始化属性设置,检查必备属性是否存在 prepareRefresh(); // Tell the subclass to原创 2021-07-10 10:00:56 · 335 阅读 · 0 评论 -
spring创建bean对象三步走
1.第一步org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean // bean初始化第一步:默认调用无参构造实例化Bean // 构造参数依赖注入,就是发生在这一步 if (instanceWrapper == null) { instanceWrapper = createBeanInstance(beanName, mbd, args); }2.第二原创 2021-07-09 18:41:33 · 215 阅读 · 0 评论 -
ConcurrentHashMap 1.7与1.8的区别
1.锁结构不同在JDK1.7中,ConcurrentHashMap基于Segment+HashEntry数组实现的。Segment是Reentrant的子类,而其内部也维护了一个Entry数组,这个Entry数组和HashMap中的Entry数组是一样的。所以说Segment其实是一个锁,可以锁住一段哈希表结构,而ConcurrentHashMap中维护了一个Segment数组,所以是基于分段锁实现的。 而JDK1.8中,ConcurrentHashMap摒弃了Segment,而是采用synchroniz原创 2021-07-08 14:11:45 · 11390 阅读 · 0 评论 -
Error:java: 无效的标记: -parameters
Error:java: 无效的标记: -parameters需要将这里面的东西删掉即可原创 2021-07-08 10:44:37 · 791 阅读 · 2 评论 -
分布式服务接口的幂等性如何设计(比如不能重复扣款)?
判断redis中是否有订单记录,有则返回已支付完成查询数据库判断没有订单,先插入订单,支付中【单号是唯一索引】有订单,判断是支付中,进入下一步如果是完成,则返回开启事务,加悲观锁:再次判断状态是支付中:然后下一步,不然返回支付完成支付完成,修改状态为支付完成提交redis:设置为已支付set order_id payd...原创 2021-07-05 15:20:34 · 166 阅读 · 0 评论 -
intern方法解析-字符串常量池
String str3 = new String("ab");// falseSystem.out.println(str3.intern() == str3);String e = new String("jo") + new String("hn");// intern 在常量池中寻找john,// 如果没有,则将e在堆中的内存地址放入到常量池中的stringtable中,并返回// 如果有,则直接返回在常量池中的地址// trueSystem.out.prin原创 2021-05-13 21:46:56 · 139 阅读 · 0 评论 -
@DateTimeFormat 和 @JsonFormat 注解
1.在Content-type为form表单的情况下Spring 的 @DateTimeFormat 注解格式化参数public class DateVo { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date date; public void setDate(Date date){ this.date = date; } public Date getDate(){原创 2021-04-13 11:21:02 · 135 阅读 · 0 评论 -
解决双重校验锁的线程安全问题
package com.example.springdemo.test.serlize;import com.example.springdemo.domain.Student;/** * 解决双重校验锁的线程安全问题 * 当前代码有安全问题,有三种解决方法 * 1)在方法签名上添加synchronized, 使方法变为同步方法 * 2)在存在线程安全问题的成员变量声明前添加volatile * 3)若在线程安全问题的成员变量为Integer、Long、Boolean等,可以将他们定义为A原创 2021-04-12 22:39:55 · 312 阅读 · 0 评论 -
消息摘要、数字签名与数字证书的区别
文章目录前言一、消息摘要(Digest)二.数字签名(digital signature)前言一、消息摘要(Digest)什么是消息摘要?对一份输入数据进行一个不可逆的 Hash计算,生成一个固定长度的 Hash 值,这个值就是这份数据的摘要(Digest),也称为指纹。摘要算法(Digest)又称 哈希算法(Hash)摘要算法常见的摘要算法有 MD5、SHA-1、SHA-256等特点:同一个摘要算法,无论输入的数据是什么,输出都是相同长度的值。 如: MD5,无论数据有多大,输转载 2021-04-07 17:39:01 · 1101 阅读 · 1 评论 -
获取真实ip代码
public class IPUtils { private static final Logger LOGGER = LoggerFactory.getLogger(IPUtils.class); private static final String LOCAL_HOST_V4 = "127.0.0.1"; private static final String LOCAL_HOST_V6 = "0:0:0:0:0:0:0:1"; private static f原创 2021-04-01 10:50:36 · 881 阅读 · 0 评论 -
maven scope
Maven Scope就是用来控制依赖和三种classpath(编译classpath,测试classpath、运行classpath)的关系,Maven有如下几种依赖范围:compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-code,在编译、测试和运行的时候都需要使用该依赖。test:测试依赖范围。使用次依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码原创 2021-04-01 09:31:33 · 168 阅读 · 0 评论 -
cxf报错 Cannot find any registered HttpDestinationFactory from the Bus
错误信息:Cannot find any registered HttpDestinationFactory from the Bus.报错主要是因为缺少jetty依赖一般添加如下依赖即可<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <原创 2021-01-13 16:17:33 · 2411 阅读 · 0 评论 -
缺少org.apache.commons.collections.CollectionUtils?
也许你正在寻找的jar是apache commons-collections: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency>要么&l原创 2021-01-08 13:46:39 · 7224 阅读 · 0 评论 -
JVM调优,基本思路是什么
jvm调优主要是针对垃圾收集器的收集性能优化,令运行在虚拟机上的应用能够使用更少的内存以及延迟获取更大的吞吐量。1、性能定义要查找和评估器性能瓶颈,首先要知道性能定义,对于jvm调优来说,我们需要知道以下三个定义属性,依作为评估基础:吞吐量:重要指标之一,是指不考虑垃圾收集引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。延迟:其度量标准是缩短由于垃圾啊收集引起的停顿时间或...原创 2020-03-15 13:02:49 · 3314 阅读 · 2 评论 -
JAVA垃圾收集器详解
1.基于HotSpot虚拟机1.6版Update22,包含的虚拟机如下新生代收集器(采取复制算法):Serial:(1)单线程收集器(只会只用一个CPU或一条手机线程去完成垃圾收集工作,并且在进行垃圾收集的时候,必须暂停其他所有的工作线程“Stop The World”:这一点用户体验恶劣)(2)优点:在单个CPU环境下,简单而高效缺点:用户体验差(比如每工作1小时暂停响应5分钟)p...原创 2020-03-15 12:56:12 · 507 阅读 · 0 评论 -
Queue集合之PriorityBlockingQueue详解
集合系列文章文章目录集合系列文章前言1、PriorityBlockingQueue是什么?2、查看类图接口3.源码解析3.1 构造器3.2 offer操作3.2.1 扩容3.2.2 建堆算法3.2.3 图文解释3.3 poll操作3.3.1 dequeue出队源码3.3.2 siftDownComparable堆调整源码总结前言1、PriorityBlockingQueue是什么?集合中无界优先队列 priorityBlockingQueue内部使用堆算法保证每次出队都是优先级最高的元素,元素入原创 2021-01-05 16:58:09 · 3523 阅读 · 1 评论 -
Reactor模型详解
文章目录前言一、经典的同步阻塞模型二、单reactor单线程设计1.代码示例三、单reactor多线程设计四、多reactor多线程设计五、Reactor模型结构图总结前言说到NIO、Netty,Reactor模型一定是绕不开的,因为这种模式架构太经典了,但是好多人在学习的时候,往往会忽视基础的学习,一上来就是Netty,各种高大上,但是却没有静下心来好好看看Netty的基石——Reactor模型。本文就带着大家看看Reactor模型,让大家对Reactor模型有个浅显而又感性的认识。一、经典的同转载 2020-09-30 10:18:42 · 16588 阅读 · 5 评论 -
HashMap之1.7和1.8的区别
HashMap是我们开发中经常使用到的集合,jdk1.8相对于1.7底层实现发生了一些改变。1.8主要优化减少了Hash冲突 ,提高哈希表的存、取效率。底层数据结构不一样,1.7是数组+链表,1.8则是数组+链表+红黑树结构(当链表长度大于8,转为红黑树)。JDK1.8中resize()方法在表为空时,创建表;在表不为空时,扩容;而JDK1.7中resize()方法负责扩容,inflateTable()负责创建表。1.8中没有区分键为null的情况,而1.7版本中对于键为null的情况调用putFo转载 2020-12-30 17:10:33 · 5809 阅读 · 0 评论 -
jdk1.7下HashMap的头插法问题
jdk1.7,hashmap才用的是头插法,虽然hashmap并不是线程安全的容器,但是在并发情况下,使用hashmap会带来一个问题:并发情况下,如果插入元素的两个线程都调用了rehash方法,即扩容方法,会导致链表成环的问题。hashmap成环原因的代码出现在transfer代码中,也就是扩容之后的数据迁移部分(如下):/** * Transfers all entries from current table to newTable. */ void transfer原创 2020-12-30 14:41:34 · 2808 阅读 · 1 评论 -
kafka集群搭建和操作详解
1.kafka官网https://kafka.apache.org/2.下载地址wget https://mirror.bit.edu.cn/apache/kafka/2.7.0/kafka_2.12-2.7.0.tgz3.解压并复制三个kafkatar zxvf kafka_2.12-2.7.0.tgzcp -r kafka_2.12-2.7.0 kafka01cp -r kafka_2.12-2.7.0 kafka02cp -r kafka_2.12-2.7.0 kafka034.修原创 2020-12-27 14:58:46 · 453 阅读 · 0 评论