自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (1)
  • 收藏
  • 关注

转载 【深入AQS原理】35张图让你深入 AQS

谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。我们先看下AQS相关的UML图:image.png思维导图:image.pngAQS实现原理AQS中 维护了一个volatile int state(代表共享资源)和一个FIFO

2021-01-25 15:29:31 959 1

转载 synchronized实现原理,以及JVM对锁性能的优化

线程安全,是Java并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要原因有两点:1,存在共享数据(也称临界资源)2,存在多条线程,共同操作共享数据。本文由浅入深,逐步整理了synchronized的相关知识,主要包括:应用场景 原理概要 原理详解 低层实现 锁的优化(JDK1.6引入) 锁的升级(在什么情况下会升级,以及锁只能单向升级)应用方式synchr...

2019-10-16 12:24:57 320

原创 lambda处理异常四种方式

最近对接第三方呼叫系统,第三方SDK的所有方法里都有异常抛出,因为用到了lambda,所以异常处理还是很必要的。本文主要用到了四种解决方案:直接代码块处理 自定义函数式接口,warp静态方法 通过Either 类型包装 通过Pair 类型进行再次包装方法一: 直接代码块处理: /** * 上线 * @param schoolId 学校id ...

2019-09-18 11:26:52 4405

转载 使用SpringBoot+Dubbo 搭建一个简单的分布式服务

Github 地址:https://github.com/Snailclimb/springboot-integration-examples(复制到浏览器访问),欢迎各位 Star。目录: 使用 SpringBoot+Dubbo 搭建一个简单分布式服务 实战之前,先来看几个重要的概念 什么是分布式? 什么是 Duboo? Dubb...

2019-08-22 16:58:12 243

转载 响应式编程中的Flux和Mono

响应式编程介绍反应式编程来源于数据流和变化的传播,意味着由底层的执行模型负责通过数据流来自动传播变化。比如求值一个简单的表达式 c=a+b,当 a 或者 b 的值发生变化时,传统的编程范式需要对 a+b 进行重新计算来得到 c 的值。如果使用反应式编程,当 a 或者 b 的值发生变化时,c 的值会自动更新。反应式编程最早由 .NET 平台上的 Reactive Extensions (Rx) ...

2019-08-20 11:18:42 8290 2

转载 Spring Retry重试机制

在调用第三方接口或者使用mq时,会出现网络抖动,连接超时等网络异常,所以需要重试。为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功。例如,由于网络故障或数据库更新中的DeadLockLoserException导致Web服务或RMI服务的远程调用可能会在短暂等待后自行解决。 为了自动执行这些操作的重试,Spring Batch具有RetryOperatio...

2019-08-20 10:28:06 175

转载 万万没想到,JVM内存结构的面试题可以问的这么难?

在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。那么,请大家尝试着回答一下以下问题:1、JVM管理的内存结构是怎样的?2、不同的虚拟机在实现运行时内存的时候有什么区别?3、运行时数据区中哪些区域是线程共享的?哪些是独享的?4、除了JVM运行时内存以外,还有什么区域可以用吗?5、堆和栈的区别是什么?6、Ja...

2019-08-09 14:08:47 144

转载 Java命令学习系列(七)——javap

javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码。一般情况下,很少有人使用javap对class文件进行反编译,因为有很多成熟的反编译工具可以使用,比如jad。但是,javap还可以查看java编译器为我们生成的字节码。通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作。实例javap命令分解一个class文件,它根据options...

2019-08-09 14:08:11 119

转载 Java命令学习系列(六)——jinfo

jinfo可以输出java进程、core文件或远程debug服务器的配置信息。这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64位虚拟机上,需要指明-J-d64参数,如:jinfo -J-d64 -sysprops pid另外,Java7的官方文档指出,这一命令在后续的版本中可能不再使用。笔者使用的版本(jdk8)中已经不支持该命令(笔者翻阅了java8中该命令的文档,其中已经明...

2019-08-09 14:07:24 245

转载 Java命令学习系列(五)——jhat

jhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令。之前的文章讲到过,使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况。jhat命令解析会Java堆dump并启动一个web服务器,然后就可以在浏览器中查看堆的dump文件了。实例一...

2019-08-09 14:06:23 208

转载 Java命令学习系列(四)——jstat

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包...

2019-08-09 14:05:30 137

转载 Java命令学习系列(三)——Jmap

Jmapjmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在Java命令学习系列(零)——常见命令及Java Dump介绍和Java命令学习系列(二)——Jstack中分别有关于Java Dump以及线程 Dump的介绍。这篇文章主要介绍Java的堆Dump以及jamp命令...

2019-08-09 14:04:27 166

转载 Java命令学习系列(二)——Jstack

jstack是java虚拟机自带的一种堆栈跟踪工具。功能jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事...

2019-08-09 14:02:13 172

转载 Java命令学习系列(一)——Jps

jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用java执行体的那种(例如,定制的启动 器)。另外,jps仅查找当前用户的Java进程,而不是当前系统中的所有...

2019-08-09 14:02:04 195

转载 Java命令学习系列(零)——常见命令及Java Dump介绍

一、常用命令:在JDK的bin目彔下,包含了java命令及其他实用工具。jps:查看本机的Java中进程信息。jstack:打印线程的栈信息,制作线程Dump。jmap:打印内存映射,制作堆Dump。jstat:性能监控工具。jhat:内存分析工具。jconsole:简易的可视化控制台。jvisualvm:功能强大的控制台。二、认识Java Dump:什...

2019-08-09 14:01:42 113

转载 挑战10个最难回答的Java面试题(附答案)

是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?一个...

2019-08-09 10:23:48 5290

转载 数据库两大神器【索引和锁】

前言只有光头才能变强索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的。本文力求简单讲清每个知识点,希望大家看完能有所收获声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎一、索引在之前,我对索引有以下的认知:索引可以加快数据库的检索速度 表经常进行INSERT/UPDATE/DELETE操作就不要建立...

2019-08-08 17:40:04 164

转载 透过现象看原理:详解Spring中Bean的this调用导致AOP失效的原因

前言在我们使用Spring时,可能有前辈教导过我们,在bean中不要使用this来调用被@Async、@Transactional、@Cacheable等注解标注的方法,this下注解是不生效的。那么大家可曾想过以下问题为何致this调用的方法,注解会不生效 这些注解生效的原理又是什么 如果确实需要调用本类方法,且还需要注解生效,该怎么做? 代理是否可以做到this调用注解就直接...

2019-08-07 15:55:12 535 1

转载 完全读懂Spring框架之AOP实现原理

深入分析Spring框架中AOP与动态代理的整合原理从本文可以了解到什么Spring的核心之一AOP具体是如何实现的 Spring AOP使用了哪些动态代理方式 如何使用Spring AOP创建代理对象 Spring有哪些代理切入方式,如何增加切面 在Spring之外有哪些代理方式 Spring的各类注解如@Async等,是如何生效的等等... 你想了解的内容,都会在本文进行呈...

2019-08-07 10:15:51 257

转载 CompletableFuture 使用详解

1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnab...

2019-07-18 16:19:06 185

转载 理解、学习与使用 JAVA 中的 OPTIONAL

从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但...

2019-07-17 14:18:06 235

转载 Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

原文出处:JavaDoop今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 Concurrent...

2019-07-08 15:46:27 131

转载 单例模式

https://mp.weixin.qq.com/s/8_E3pZRN-d3uF6zHxrCwOQ

2019-07-08 14:04:45 104

转载 HashMap 在高并发下引起的死循环

HashMap 基本实现(JDK 8 之前)HashMap 通常会用一个指针数组(假设为 table[])来做分散所有的 key,当一个 key 被加入时,会通过 Hash 算法通过 key 算出这个数组的下标 i,然后就把这个 <key, value> 插到 table[i] 中,如果有两个不同的 key 被算在了同一个 i,那么就叫冲突,又叫碰撞,这样会在 table[i] 上...

2019-07-04 15:38:09 587

转载 技术选型之Docker容器引擎

原文地址:https://segmentfault.com/a/11900000194623921. Docker出现的背景  在平常的研发和项目场景中,以下情况普遍存在:个人开发环境 为了做大数据相关项目,需要安装一套CDH集群,常见的做法是在自己电脑里搭建3台与CDH版本对应的虚拟机,把CDH集群装起来后,考虑到以后很有可能还要使用一个干净的CDH集群,为了避免以后重复安装环境,...

2019-07-04 10:18:09 215

转载 Hystrix vs Sentinel

原文链接:技术选型:Sentinel vs Hystrix Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本文集链接:微服务Sentinel 是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于今年7月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Se...

2019-06-28 19:15:24 712

转载 Hystrix线程隔离技术解析-线程池

转载请注明出处,并附上链接http://www.jianshu.com/p/df1525d58c20认识HystrixHystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。我们要构建稳定、可...

2019-06-26 15:40:46 245

转载 Java与线程

并发不一定要依赖多线程(如PHP的多进程并发),但在Java中谈论并发,大多数都与线程脱不开关系线程的实现线程是CPU调度的基本单位。Thread类与大部分的Java API有显著的差别,它的所有关键方法都是声明为Native的。 意味着这个方法没有使用或无法使用平台无关的手段来实现。内核线程(Kernel-Lever Thread,KLT)直接由操作系统内核(Kermel,下...

2019-05-27 16:23:43 81

转载 分布式事务——消息最终一致性方案

前言随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题;尽管很...

2019-04-26 15:44:17 168

转载 Future和CompletableFuture解析与使用

一、Future模式Java 1.5开始,提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future接口可以构建异步应用,是多线程开发中常见的设计模式。当我们需要调用一个函数方法时。如果这个函数执行很慢,那么我们就要进行等待。但有时候,我们可能并不急着要结果。因此,我们可以让被调用者立即返回,让他在后台慢慢处理这个请求。对于调用者来说,则可以...

2019-03-28 20:41:06 1346

转载 Spring Cache扩展:注解失效时间+主动刷新缓存

Spring Cache扩展:注解失效时间+主动刷新缓存Spring Cache 两个需求缓存失效时间支持在方法的注解上指定 Spring Cache默认是不支持在@Cacheable上添加过期时间的,可以在配置缓存容器时统一指定:@Beanpublic CacheManager cacheManager( @SuppressWarnings("rawtypes")...

2019-01-03 16:55:15 2889 2

转载 JVM 垃圾回收算法及回收器详解

原文出处: ZIWENXIE本文主要讲述JVM中几种常见的垃圾回收算法和相关的垃圾回收器,以及常见的和GC相关的性能调优参数。GC Roots我们先来了解一下在Java中是如何判断一个对象的生死的,有些语言比如Python是采用引用计数来统计的,但是这种做法可能会遇见循环引用的问题,在Java以及C#等语言中是采用GC Roots来解决这个问题。如果一个对象和GC...

2018-09-12 18:02:54 129

转载 缓存穿透,缓存击穿,缓存雪崩解决方案分析

前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致...

2018-09-12 17:15:32 125

转载 JVM内存堆布局图解分析

JVM内存堆布局图解分析 转载原文出处:http://www.codeceo.com/article/jvm-memory-stack.html JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢了,当然原因肯定不止这一个,如在JVM中没...

2018-09-11 17:09:32 164

转载 Java的三种代理模式

Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不...

2018-08-06 17:57:47 104

转载 深入解析spring中用到的九种设计模式

转载请注明出处,文章首发于:http://itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习中运用到“无形”。...

2018-07-23 19:18:15 175

转载 Spring中ioc的实现原理

Spring中ioc的实现原理学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解  首先要分享的是I...

2018-07-19 21:44:46 18412 2

转载 ServerSocket用法

ServerSocket用法

2017-12-20 21:38:06 300

转载 Java的三种代理模式

Java的三种代理模式

2017-09-18 11:56:28 355

转载 获取IP地址

获取IP地址

2017-09-04 11:35:04 280

jquery.editable-select

jquery.editable-select插件

2017-06-14

空空如也

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

TA关注的人

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