![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java技术深度剖析
文章平均质量分 60
Java技术深度剖析
_夜半钟声到客船
永远保持对技术的热情
展开
-
【面试】Java最新面试题资深开发-Spring篇(1)
问题八:Spring原理解释一下什么是Spring框架以及它的核心思想是什么?Spring中的IoC(控制反转)是什么,它如何实现?什么是DI(依赖注入)?Spring是如何支持依赖注入的?原创 2023-12-15 23:56:32 · 133 阅读 · 0 评论 -
【面试】Java最新面试题资深开发-Java中的并发集合类
Java提供了许多并发集合类来处理多线程环境下的数据共享和同步。你能列举一些Java中常用的并发集合类,并简要说明它们的特点和使用场景吗?原创 2023-12-12 10:41:03 · 63 阅读 · 0 评论 -
知识积累:PageHelper分页问题,页码小于总页数和大于总页数返回数据问题,PageHelper分页失效
知识积累:PageHelper分页问题,页码小于总页数和大于总页数返回数据问题,PageHelper分页失效原创 2022-09-07 23:05:56 · 1716 阅读 · 0 评论 -
学习提高:spring-data-elasticsearch-4.0.9数据刷新策略RefreshPolicy使用,Elasticsearch数据延迟解决方案
【学习提高】spring-data-elasticsearch-4.0.9数据刷新策略RefreshPolicy使用,Elasticsearch数据延迟解决方案原创 2022-06-28 16:46:09 · 2191 阅读 · 0 评论 -
【面试】MyBatis的DefaultSqlSession是不是线程安全的?SpringBoot项目中Spring是怎么处理的?
MyBatis的DefaultSqlSession是不是线程安全的?答案:DefaultSqlSession类是不安全的SpringBoot项目中Spring是怎么处理的?原创 2022-05-17 10:50:47 · 1213 阅读 · 0 评论 -
知识积累:Spring中使用@Transactional注解的事务未完成,MQ消息发出去了,导致出现问题,事务未提交mq消息发出去解决方案
最近项目当中有个场景问题,需要在数据更新完成之后,发送mq消息通知周边系统进行操作。但是周边系统需要用到当前事务更新完成的数据。经常出现mq消息处理过程中拿不到更新之后的数据。经过排查日志,查看sql执行情况,代码逻辑。还跟组内成员反复查看代码执行逻辑。就是没发现问题点在哪里!然后只能跟踪debug代码执行过程,终于发现在事务执行过程中,没看到commit的时候,mq就把消息发出去了。然后查看源码,发现在事务提交后,提供了afterCommit的方法,需要我们自己来实现。解决方案:1、把mq发消息放原创 2022-05-06 07:29:04 · 2682 阅读 · 2 评论 -
知识积累:JDK1.8的parallelStream使用问题,ThreadLocal失效解决
parallelStream是创建一个并行的Stream,而且他的并行操作是不具备线程传播性的,ThreadLocal失效。原创 2022-03-31 09:57:15 · 2769 阅读 · 0 评论 -
知识积累:Java SpringBoot 多线程 Job 透传header解决方案,解决header丢失问题,SpringCloud Feign透传header
知识积累:Java SpringBoot 多线程 Job 透传header解决方案,解决header丢失问题,SpringCloud Feign透传header原创 2022-01-26 22:46:42 · 2028 阅读 · 0 评论 -
知识积累:java.io.FileNotFoundException: class path resource [templates/] spring-cloud-netflix-eureka-ser
注册中心Eureka启动后报错,根据报错信息查看源码是由于Freemarker默认加载,然后找不到对应的模版文件 “templates/” 所在路径。报错如下:java.io.FileNotFoundException: class path resource [templates/] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Desktop/m2/r原创 2021-12-06 14:03:00 · 1736 阅读 · 0 评论 -
微服务注册中心,服务手动剔除,Eureka、Nacos
日常工作中,排查问题时通常需要将注册中心的服务手动剔除掉,将请求不在路由到某个服务。Eureka:通过Postman发起Delete请求http://eureka注册中心地址/eureka/apps/服务名/实例IP:实例端口Nacos通过Postman发起Delete请求http://nacos注册中心地址/nacos/v1/ns/instance?serviceName=服务名&ip=实例IP&port=实例端口-------------欢迎各位留言交流,如有不正确的原创 2021-11-02 11:04:15 · 718 阅读 · 0 评论 -
知识积累:缓存Redis分页,Java内存分页。附代码
项目中经常需要用到redis缓存分页和java内存分页的场景,下面例子redis缓存分页:统一封装的redis工具类主要使用下面两个方法:redisTemplate.opsForList().range();redisTemplate.opsForList().size(key);@Autowired private RedisTemplate<String, Object> redisTemplate; /** * 获取list的size,作为total使用 *原创 2021-10-21 13:57:03 · 1696 阅读 · 2 评论 -
知识积累:SpringBoot-data-Redis的RedisTemplate的opsForList,操作List<Object>集合的leftPushAll和rightAll问题;分页查询list
最近项目在用RedisTemplate的opsForList进行对象集合的存储并进行分页查询;可是当使用supportRedisTemplate.opsForList().rightPushAll(key, lists);默认走了Long rightPushAll(K var1, V… var2);试了很多种方式,将lists类型强转为Collection,将lists转为String[],最后都没有成功。只会存储一个整体的对象,无法使用range(),来进行分页查询。只能采取曲线救国的方案原创 2021-10-15 22:34:15 · 2786 阅读 · 0 评论 -
Spring中多个service处理同一行数据多次,出现事务互相等待超时问题,Lock wait timeout exceeded;try restarting transaction
Spring中多个service处理同一行数据多次,出现事务互相等待超时问题遇到的问题:某service的一个方法handleMethodA举例子1:@Transactional(value="transManager")public void handleMethodA(){ ... @Transactional serviceB.handleMethdB();// 操作的数据表是order,同一行数据 sericeC.postMethodC(xxx);原创 2021-08-19 14:16:38 · 1137 阅读 · 0 评论 -
【SpringCloud 微服务】微服务通信
基于SpringCloud的微服务之间通信采用RestTemplate调用,现在通常用Feign 和 Open Feign 封装的Rest调用,服务调用通过负载均衡算法选择某个服务的实例发起Feign 调用。什么是Feign?Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请原创 2021-06-07 08:48:59 · 675 阅读 · 0 评论 -
【SpringCloud 微服务】 Eureka架构原理及源码分析
Eureka架构及源码分析服务注册: Eureka Client会通过发送HTTP REST请求的方式向Eureka Server将自己注册为服务,提供自身的元数据,比如 IP 地址、端口、运行状况指标的URL、主页地址等信息。Eureka Server接收到注册请求后,就会把这些元数据信息存储在一个ConcurrentHashMap中。服务续约: 在服务注册后,Eureka Client会维护一个心跳来持续通知Eureka Server,说明服务一直处于可用状态,防止被剔除。Eureka Clien原创 2020-06-03 17:30:13 · 1091 阅读 · 0 评论 -
SpringCloud open feign too many bytes written问题处理
当SpringCloud中使用open feign调用其他服务时出现IO Exceptiontoo many bytes written的问题,首先通过查看源码知道HttpURLConnection#StreamingOutputStream具体的报错地方:@Override public void write (byte[] b, int off, int len) throws IOException { checkError(); .原创 2021-05-26 23:05:49 · 4162 阅读 · 0 评论 -
最新2023面试--Java资深研发面试题(附答案和思路)
由于近期本人和朋友进行了一些公司的面试,坐标江浙沪城市。现在整理和分享一下大概的题目。希望对各位读者提供一些帮助!!!大部分企业为互联网公司,主要是面试官围绕项目聊技术栈,然后深度和广度扩展,也含有一些简单算法题,毕竟没面字节。Java类1、JVM内存结构,内存模型,对象创建过程;2、JVM垃圾收集器原理,JVM调优,CMS的过程;3、类加载机制,是否遇到违反双亲委派的场景?4、并发同步的知识点,synchronize和lock的区别,使用场景。 volatile的底层实...原创 2021-05-10 11:16:58 · 4766 阅读 · 0 评论 -
Spring 如何解决循环依赖?原型模式,构造器是否解决?
面试中常见Spring的面试题系列:Spring 如何解决循环依赖?通常大部分人能说出来通过三级缓存来处理的。但如果深入点问,三级缓存的流程以及能否改为二级或者一级缓存处理 就无法说的很明白。先来放一张图来举例循环依赖的场景:代码示例:https://gitee.com/zhengliang2015/spring-learn代码示例目前采用的是xml+setter注入;后面增加field和构造器注入示例。大致步骤为:对象A进行实例化; 对象A实例化过程中,添加到单例工厂中; 对象原创 2021-02-22 16:50:24 · 1127 阅读 · 0 评论 -
深入理解SPI机制
一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC、SpringCloud中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。代码示例:// 1、定义接口package com.liang.spi;/** * SPI接口 * @autho原创 2020-10-20 16:59:44 · 366 阅读 · 0 评论 -
Java的反射机制以及常用案例
反射是Java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个Java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。(来自Sun)要想解析一个类,必须先要获取到该类的字节码文件对象。而解析使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class原创 2020-09-09 15:17:46 · 197 阅读 · 0 评论 -
Java中Servlet过滤器和Spring拦截器的关系以及区别
最近项目在用过滤器和拦截器,顺便整理下这两个组件的关系以及区别;前言先说下这两个组件在项目中的使用场景吧,我们的项目采用的微服务架构。网关层采用的javax.servlet的Filter过滤器进行统一登录认证和鉴权或者IP、URL黑白名单验证;各个服务层通过Spring的Interceptor拦截器进行用户信息的解析绑定到当前请求线程应用程序上下文的BaseInfo以便后续的业务逻辑使用;当前请求参数和响应的格式化打印;直接上图这两个组件的关系区别点:过滤器是基于J2EE标准Ser原创 2020-09-09 11:57:37 · 733 阅读 · 0 评论 -
springsecurity-oauth2集成,jwt生成token,源码解析
springsecurity-oauth2集成,jwt生成token认证@Configuration@EnableAuthorizationServerpublic class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { @Autowired private DataSource dataSource; @Autowired private JwtAccessToke原创 2020-08-14 18:57:45 · 1313 阅读 · 0 评论 -
SpringCloud集成seata实现分布式事务管理,apollo配置中心,eureka注册中心
SpringCloud集成seata实现分布式事务管理,apollo配置中心,eureka注册中心原创 2020-08-14 15:04:27 · 759 阅读 · 0 评论 -
SpringBoot集成 Spring Security出现UserNotFoundException 不抛出问题
最近项目中在使用Spring Security的token;在做退出和验证时,出现UserNotFoundException 不抛出问题;当用户不存在时,只会抛出BadCredentialsException,而不是UsernameNotFoundException;首先debug断点跟踪进入该断点行中,根据断点信息已知 providers 一共只有1个,当前的 providers 是 DaoAuthenticationProvider代码1:protected final U..原创 2020-08-05 11:56:53 · 1721 阅读 · 0 评论 -
spring事务失效- 某个业务调用未提交 另一业务方法查询问题以及常见场景
最近项目中遇到一个问题。就是我们的业务订单申请退款的场景。由于申请退款需要先更新订单的状态为退款中;然后发起了第三方支付平台的退款请求,第三方回调回来的时候,前一步的更新订单为退款中未完成事务。导致了退款回调处理失败。先发下之前的存在问题的调用关系图:修改后的关系图:产生上面的问题原因,我们经过分析后,是在订单服务的订单更新方法添加了spring事务注解@Transactional;在这个方法内先更新订单,然后发起第三方调用;最后方法结束,事务完成。基于上面的分析,我们定的修改方.原创 2020-07-09 11:44:06 · 1483 阅读 · 0 评论 -
JDK的Unsafe类的一些用法总结
JDK的rt.jar包中的Unsafe类提供了硬件级别的原子性操作,Unsafe类中的方法都是native方法,它们使用JNI的方式访问本地C++ 实现库。错误代码示范:/********* * 直接下面这种方式会报错:原因是我们自己写的类是由AppClassLoader类加载器加载; * 而UnSafe类的getUnsafe()为了保证rt包的安全;Unsafe类可以直接操作内存; * 不让开发人员在正规渠道使用Unsafe类,而是在rt.jar包里面的核心类中使用Un原创 2020-06-12 10:59:21 · 898 阅读 · 0 评论 -
volatile实现细节-JVM层面+CPU层面
volatile可以保证多线程访问的变量的可见性以及禁止指令重排序。JVM层面的实现细节: StoreStoreBarrier LoadLoadBarrier volatile写操作 volatile读操作 StoreLoadBarrier LoadStoreBarrierCPU层面的实现细节:是采用lock 汇编指令操作,lock add dword ptr [rsp],0h为了更好的...原创 2020-06-10 21:35:39 · 821 阅读 · 2 评论 -
由feign调用报错引起的分析和调试
认证项目的 feign调用用户服务出现的错误:Caused by: org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.x.y.MsgResult] and content type [application/octet-stream]根据上面的错误可以了解到原创 2020-06-08 23:54:46 · 2999 阅读 · 0 评论 -
AQS源码研究
AQS:Abstract Queue Synchronize;抽象队列同步器。JDK里juc的Lock相关的api里有采用。核心:状态值state 和 等待队列。通过CAS(compare and swap)维护一个状态值state=0;当线程获取到锁时修改state 加1;可重入时state会一直加1;另外就是一个等待队列,存放其他来获取锁但是没有成功的线程。当拥有锁的线程执行完后,state置为0时,会唤醒等待队列的头结点来获取锁;如果是非公平锁,唤醒头结点线程的同时是允许其他新加入的线程原创 2020-06-05 16:15:06 · 227 阅读 · 0 评论 -
Alibaba nacos 本地构建以及源码研究
首先通过github pull源码到本地,git clone https://github.com/alibaba/nacos.git但是启动会报错:分析报错原因,根据报错的提示可以看到ServerMemberManager类;直接点进去看ServerMemberManager的源码;下面是跟踪步骤:1. init();3. // Initializes the lookup mode initAndStartLookup(); 3.this.lookup = LookupFact原创 2020-06-05 16:11:04 · 2179 阅读 · 6 评论 -
深入研究Java的synchronized以及四种锁状态的升级
在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先尝试加锁。加锁可以使一段代码(类实例,方法,代码块)在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级。注意:锁可以原创 2020-06-04 10:03:55 · 387 阅读 · 0 评论 -
springboot2.X openfeign 报异常IOException Incomplete output stream
问题描述:最近项目进行springboot1.x 升级到2.x;升级之后,服务之间的调用出现fallback异常;仔细查看调用过程,feign客户端请求正常,服务提供方接收和响应正常;feign客户端响应接收异常(直接进入fallback具体异常:Caused by: java.io.IOException: Incomplete output stream);查看源码发现,openfeign底层使用的是rt.jar的HTTPUrlConnection进行的请求,//异常://sun.原创 2020-05-08 18:11:19 · 2404 阅读 · 0 评论 -
SpringCloud-Feign原理研究1(扫描、反射、实例化)
SpringCloud-Feign原理研究总结:扫描路径下所有class,获取到有@FeignClient声明注解的接口类;反射获取:url、path、参数信息;通过FeignClientFactoryBean提供getObject() 实例化对象。/* * Copyright 2013-2016 the original author or authors. * * Lice...原创 2020-04-29 18:16:41 · 627 阅读 · 0 评论