自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 feign远程调用丢失头,Feign异步情况丢失上下文问题

1、feign远程调用丢失头解决:设置feign的求情拦截器@Configurationpublic class MyFeignConfig { @Bean("requestInterceptor") public RequestInterceptor requestInterceptor(){ RequestInterceptor requestInterceptor = requestTemplate -> { //RequestC

2021-02-04 16:36:50 671

原创 本地事务失效问题

同一个对象内事务方法互调默认失效,原因:绕过了代理对象事务使用代理对象来控制的解决:使用代理对象来调用事务方法1、引入aop的starter2、@EnableAspectJAutoProxy3、用过代理对象调用public class EmployeeService{ @Transactional public void save(){ try { EmployeeService proxy =(EmployeeService) AopContext.

2021-02-04 16:33:55 237

原创 SpringSession

Session共享问题1、Session问题Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。第一次访问服务器进行登录,浏览器会保存一个与Session关联的cookie,每次访问都会带着这个cookie,浏览器关闭,cookie清除。下一次再访问重新创建cookie。问题:1、同一个服务复制多份(集群),Session不同步问题:2、不同服务,Session不同步,子域session不共享2、问题解决统一存储优点:没有安全隐患可以

2021-01-14 17:36:05 136

原创 JvisualVm提示无法监视本地Java应用程序,jps不能列出Java程序解决办法

JvisualVm提示无法监视本地Java应用程序解决办法方法一、操作系统的临时文件目录所在的磁盘格式不是NTFS(可以通过echo %TMP%命令查看),将临时文件目录移到NTFS格式的磁盘方法二、操作系统用户名含有下划线underscore(可以通过echo %username%查看),去除下划线方法三、1、要先关闭IDEA,并且关闭所有的Java程序;2、按Win + R,然后输入:%TMP%;3、找到 hsperfdata 开头的文件夹4、按用户名修改一下这个文件名,即hsperfda

2020-12-01 22:16:28 490

原创 7种join

2020-10-29 17:18:33 142

原创 git分支的理解

git分支的理解

2020-10-28 15:07:23 114

原创 尚硅谷JUC#线程池

线程池介绍第四种获取线程的方法:线程池。线程池提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。通常使用 Executors 工厂方法配置。线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。线程池的体系结构工具类 : Executors为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子 (hook)。但是,强烈建议程序

2020-09-20 14:27:24 118

原创 尚硅谷JUC#线程8锁

判断打印的 “one” or “two” ?两个普通同步方法,两个线程,标准打印, 打印结果?新增 Thread.sleep() 给 getOne(),打印结果?新增普通方法 getThree() , 打印结果?两个普通同步方法,两个 Number 对象,打印结果?修改 getOne() 为静态同步方法,打印结果?修改两个方法均为静态同步方法,一个 Number 对象,打印结果?一个静态同步方法,一个非静态同步方法,两个 Number 对象,打印结果?两个静态同步方法,两个 Number

2020-09-15 21:03:53 117

原创 尚硅谷JUC#ReadWriteLock 读写锁

ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性 可以完全不需要考虑加锁操作。写写/读写 需要“互斥”读读 不需要互斥public class Tes

2020-09-06 15:53:36 140

原创 尚硅谷JUC#线程按序交替

要求:编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印,要 求输出的结果必须按顺序显示。 如:ABCABCABC…… 或ABBCCCABBCCC…依次递归public class TestABCAlternate { public static void main(String[] args) { AlternateDemo ad = new AlternateDemo(); new Thread(new Runnable()

2020-09-06 15:27:40 116

原创 尚硅谷JUC#Condition 控制线程通信

Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是 await、signal 和 signalAll。Condition 实例实质上被绑定到一

2020-09-05 16:21:01 132

原创 尚硅谷JUC # CountDownLatch(闭锁)

概念CountDownLatch(闭锁)——一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDown(倒数)latch(锁)用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。== 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。==闭

2020-09-04 16:31:57 90

原创 尚硅谷JUC # Lock 同步锁

在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制但并不是一种替代内置锁的方法,而是当内 置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。但相较于 synchronized 提供了更高的处理锁的灵活性。解决多线程安全问题的三种方式jdk 1.5 前:synchronized:隐式锁1.同

2020-09-04 16:27:01 130

原创 尚硅谷JUC # 实现 Callable 接口

Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口。Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁。创建线程的四种方式无返回:1、实现Runnable接口,重写run();2、继承Thread类,重写run();有返回:3、实现Callable接口,重写call(),利用FutureTask包装Callable,并作为task传入Thread构造函数;4、利用线程池;Callable

2020-09-04 15:12:53 90

原创 尚硅谷#ConcurrentHashMap 锁分段机制

ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用==“锁分段”==机制替代 Hashtable 的独占锁。进而提高性能。锁粒度减小锁粒度是指缩小锁定对象的范围,从而减小锁冲突的可能性,从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段,这种技术典型的应用是 ConcurrentHashMap(高性能的HashMap)类的实现。对于 HashMap 而言,最重要..

2020-08-24 15:21:33 332 1

原创 尚硅谷JUC#原子变量与CAS算法

1、原子变量JDK1.5后,java.util.concurrent.atomic 包下提供了一些原子操作的常用类: 类似包装类核心方法:boolean compareAndSet(expectedValue, updateValue)1.1 i++的原子性问题i++的操作实际上分为三个步骤:读-改-写int temp = i;i = i +1;i = temp;public class CASTest { public static void main(String[] args)

2020-08-23 15:47:22 201

原创 垃圾回收器

1、GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可

2020-08-13 15:20:48 131

原创 垃圾回收相关概念的概述

1、System.gc()的理解在默认情况下,通过System. gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System. gc ()调用附带一个 免责声明,无法保证对垃圾收集器的调用(不能确定每次都调用成功)。JVM实现者可以通过System. gc ()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况

2020-08-07 16:39:04 214

原创 垃圾回收相关算法

1、标记阶段:引用计数算法2、标记阶段:可达性分析算法3、对象的finalization机制4、MAT与JProfiler的GC Roots溯源5、清除阶段:标记清除算法6、清除阶段:复制算法7、清除阶段:标记-压缩算法8、小结9、分代收集算法10、增量收集算法、分区算法...

2020-08-04 16:51:34 174

原创 垃圾回收概述

1、什么事垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2、为什么需要GC防止内存被消耗完以便JVM将整理出的内存分配给新的对象。随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。3、早期垃圾

2020-08-03 15:41:53 245

原创 volatile 关键字

1、Java JUC简介在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 系统,包括线程池、异步 IO 和轻量级任务框架。 提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。2、volatile 关键字-内存可见性2.1内存可见性Java 内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程只能访

2020-08-03 08:52:54 77

原创 StringTable

1、String的基本特性String:字符串,使用一对" "引起来表示。String声明为final的, 不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[ ] value用于存储字符串数据。jdk9时改为byte [ ]String:代表不可变的字符序列。简称:不可变性。当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的val

2020-07-31 17:40:58 121

原创 执行引擎

1、执行引擎概述执行引擎内部结构图执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是-一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面.上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅

2020-07-24 13:24:32 681 1

原创 对象的实例化、对象的内存布局、对象的访问定位

1、对象的实例化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的Class类对象首先计算对象占用空间大小,接着在堆中划分一

2020-07-23 13:22:54 69

原创 运行时数据区之方法区(元空间)

1、栈、堆、方法区的交互关系1.1运行时数据区结构图从线程共享与否的角度来看1.2栈、堆、方法区的交互关系2、方法区的理解2.1方法区在哪里《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。但对 于HotSpotJVM而言,方法区还有一个别名叫做Non- Heap (非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程

2020-07-15 15:03:02 930

原创 本地方法接口、本地方法库

怎么是本地方法?简单地讲,一个Native Method就 是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C++编译器去调用一个C的函数。如:public native void Native1(int x);没有方法体,因为方法体由其他语言实现。...

2020-07-10 15:59:20 339

原创 运行时数据区

Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一- -对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的为单独线程私有的,红色的为多个线程共享的。即:每个线程:独立包括程序计数器、栈、本地栈。线程间共享:堆、堆外内存(永久代或元空间、代码缓存)JDK1.8运行时数据区结构图:每个JVM只有一个Runtime实例。即为运行时环境,相当于内存结构的中间的那个框框:运行时环境。1、线..

2020-07-05 15:22:35 246

原创 虚拟机与java虚拟机

1、虚拟机所谓虚拟机(Virtual Machine), 就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的Visual Box, VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚

2020-07-03 11:26:16 400

原创 JSR303自定义校验

参考参考分组校验1、编写一个自定义的校验注解@Documented@Constraint(validatedBy = {ListValueConstraintValidator.class})@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})@Retenti

2020-06-07 01:57:46 250

原创 分组校验(多场景的复杂校验)

先参考JSR303后台数据校验,统一异常处理使用MVC提供的@ControllerAdvice1、给校验注解标注什么情况进行校验group指定分组,AddGroup和UpdateGroup均为空接口@Data@TableName("pms_brand")public class BrandEntity implements Serializable { private static final long serialVersionUID = 1L; /** * 品牌id */ @N

2020-06-05 10:56:45 937

原创 统一异常处理使用MVC提供的@ControllerAdvice

因为每个controller都要编写数据校验过于繁琐,所以可以编写一个统一处理异常的类/** * 集中处理所有异常 */@Slf4j@ResponseBody@ControllerAdvice(basePackages = "com.liang.gulimall.product.controller")public class GulimallExceptionControllerAdvice { /** * 处理精确的异常MethodArgumentNotValidExce

2020-06-05 01:00:50 110

原创 JSR303后台数据校验

1、给实体的属性添加检验注解。import javax.validation.constraints包下,并定义自己的提示如:@NotBlank,@URL,@NotEmpty /** * 品牌名 */ @NotBlank(message = "品牌名必须提交") private String name; /** * 品牌logo地址 */ @NotEmpty @URL(message = "logo必须是一个合法的url地址") private String logo;

2020-06-05 00:11:55 117

原创 Mybatis-Plus实现逻辑删除

SpringBoot 配置方式:application.yml 加入配置(如果你的默认值和mp默认的一样,该配置可无):mybatis-plus: global-config: db-config: logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)实体类字段上加上@TableLogic注解/** * 是否显示[0-不显示,1显示] */

2020-06-02 13:39:53 2566 1

原创 三级分-类查询-递归树形结构数据获取

@Service("categoryService")public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService { @Autowired CategoryDao categoryDao; @Override public List<CategoryEntity> listWithTree(..

2020-06-01 16:58:11 1020 1

原创 配置网关路由和路径重写

// api接口请求地址 window.SITE_CONFIG['baseUrl'] = 'http://localhost:88/api'; #路由 gateway: routes: - id: admin_route uri: lb://renren-fast predicates: - Path=/api/** filters: - Rewrite..

2020-06-01 16:50:59 1335 1

原创 解决跨域问题

在网关项目中编写配置文件/** * 解决跨域 */@Configurationpublic class CorsConfig { @Bean public CorsWebFilter corsWebFilter(){ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration =

2020-06-01 16:38:45 129

原创 微服务概述

1、微服务是什么?微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。2、微服务与微服务架构微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面的一个个微服务工程/或者Module微服务架构微服务架构是种架构模式,它提倡将单应程序划

2020-05-11 13:59:28 108

原创 高级特性和大厂常考面试题

1.引入消息队列之后该如何保证其高可用性答:事物,签收,持久化和zookeeper+replicated-leveldb-store的主从集群都是高可用性的体现2.异步投递Async Sends对于一个Slow (慢)Consumer(消费者),使用同步发送消息可能出现Producer堵塞等情况,慢消费者适合使用异步发送。异步发送如何确认发送成功?达:正确的异步发送方法是需要接收回调函数...

2020-05-07 15:13:53 131

原创 ActiveMQ多节点集群

引入消息队列之后该如何保证其高可用性?基于Zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能,避免单点故障。三种集群方式:基于sharedFileSystem共享文件系统(kahaDB默认)、基于JDBC、基于可复制的LevelDB本次案例采用zookeeper+Replicated LevelDB Store从ActiveMQ5.9开始,Act...

2020-05-07 14:41:07 412

原创 ActiveMQ的消息存储和持久化

MQ服务器down机了,消息不会丢失的机制。1、AMQ Message Store:基于文件的存储方式,是以前的默认消息存储,现在不用了2、KahaDB消息存储(默认):基于日志文件,从ActiveMQ5.4开始默认的持久化插件。kahadb在消息保存目录中只有4类文件和一个lock3、JDBC消息存储:消息基于JDBC存储的4、LevelDB消息存储(了解5、JDBC Message ...

2020-05-07 14:12:16 127

空空如也

空空如也

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

TA关注的人

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