自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (6)
  • 收藏
  • 关注

原创 SpringMVC统一异常处理源码解析

目录序言@ExceptionHandler 所处位置统一异常处理的使用初始化1.DispatcherServlet.initHandlerExceptionResolvers2.WebMvcConfigurationSupport对于异常处理器的配置异常处理序言在使用SpringMVC的过程中,应用系统通常都会有需要统一处理未捕获异常的需求,为了将异常处理的逻辑与业务逻辑代码分离开,SpringMVC提供了@ExceptionHandler 统一异常处理的方式。@ExceptionHandler 是配

2020-09-23 16:57:37 287

原创 SpringMVC对异步请求的支持

目录工具类 WebAsyncUtilsStandardServletAsyncWebRequest接下来看下它的抽象实现类:AbstractRequestAttributesServletRequestAttributesServletWebRequestStandardServletAsyncWebRequestWebAsyncManager超时处理异常处理请求完成SpringMVC中开启异步请求工具类 WebAsyncUtilspublic abstract class WebAsyncUtils

2020-08-19 15:46:51 415

原创 TLS/SSL/CA、数字签名、非对称加密之间的关系

数字签名(数字证书)签名:通常采用摘要+非对称加密算法,即:如果有原文content,首先对content取摘要(如md5),然后对md5结果采用非对称加密的算法进行加密,从而得到了数字签名。验签:用公钥对签名串进行解密得到摘要,对原文内容进行同样的算法取摘要,看得到的摘要是否相同。结论:数字签名没有对全文进行加密,只对全文的摘要进行加密。安全:签名的目的是验证数据的完整性和真实性,并不能防止信息被窃取。 如果要防止信息被窃取,则需要对全文加密啊,密钥可以用非对称加密方式进行加密,而原文可以用对称加

2022-04-21 20:50:38 905

原创 AbstractQueuedSynchronizer源码深度解析

#总体介绍基于队列的抽象同步器,它是jdk中所有显示的线程同步工具的基础,像ReentrantLock/DelayQueue/CountdownLatch等等,都是借助AQS实现的。Java中已经有了synchronized关键字,那么为什么还需要来这么一出呢?因为AQS能实现更多维度,更多场景的锁机制,例如共享锁(读锁)/基于条件的线程阻塞/可以实现公平和非公平的锁策略/可以实现锁等待的中断,而synchronized关键字由JVM实现,在代码使用层面来说,如果仅仅是使用独占锁,那synchronize

2021-12-30 10:25:56 564

原创 DelayQueue源码分析

延迟队列:往队列中放入的元素具有一定的延迟时间,延迟时间到期后,take或者poll方法才能获取到这些元素。先看以下延迟队列的构造://1.队列中的元素通过实现Delayed接口来实现延迟时间控制//2.队列实现BlockingQueue接口,实现了相应的阻塞功能public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E> {

2021-12-30 10:25:24 164

原创 JDK1.8 SynchronousQueue源码解析

同步队列:它继承了一般的AbstractQueue和实现了BlockingQueue接口。它与其它的BlockingQueue最大的区别就在它不存储任何数据,它的内部是一个栈(非公平)或者一个队列(公平策略)用来存储访问SynchronousQueue的线程,而访问它的线程有消费者和生产者,对应于方法put和take。当一个生产者或者消费者试图访问SynchronousQueue的时候,如果找不到与之能够配对的消费者或者生产者,则当前线程会阻塞,直到对应的线程将其唤醒,或者等待超时,或者中断。以下是它的p

2021-12-30 10:24:50 150

原创 LinkedTransferQueue源码解析

之前写了SynchronousQueue的源码解析,其内部实现有两个数据结构:一个是栈,一个是FIFO队列,在之前的文章中主要分析了栈(非公平模式)的实现思路而没有分析队列的实现,其实是因为JDK里面本身有LinkedTransferQueue这个队列的实现,所以今天单独来说下这个队列的实现思路,主要目的方便自己以后快速的回顾。首先我们回顾一下SynchronousQueue里面的TransferStack的实现方式:1.栈中节点通过0,1,2来标记节点是获取数据还是生产数据,或者是正在匹配。2.栈中

2021-12-30 10:24:10 190

原创 CountDownLatch源码解析

目录#总体介绍一个同步器:能够让一个或者多个线程等待等待某个条件的到来再继续执行。大家可以把CountDownLatch初始化的值认为是有N道门,刚开始是线程调用await方法发现门关着的,所以就只有等待。而外界条件的变化是通过countDown来实现,可以认为countDown一次就是打开一道门,当countDown的次数为N时,则全部的门打开,则刚才在await处等待的线程将继续执行任务。看下具体的代码实现:public class CountDownLatch { private

2021-12-30 10:22:05 122

原创 CyclicBarrier源码解析

一个多线程协同器,它可以让一组线程相互等待,当等待的数量达到预设数量时这组线程通过等待继续工作。说得形象点,CyclicBarrier就好比汽车站滚动发车的模式,把客车看着CyclicBarrier,乘客看着是各个任务线程,当乘客到达客车时,需要等待另外的乘客,当乘客到齐后自动发车,如果等待乘客超时了,则将乘客全部赶下车(司机太凶残了),然后重新安排依次上车(是否要上车由乘客自己决定);每个上车的乘客都需要判断自己是否是这辆车的最后一个乘客,如果不是,则上车后立即开始睡觉,如果是最后一个,则他需要叫醒所有乘

2021-12-30 10:16:42 122

原创 kafka生产与消费

生产者1.ISR(in-sync replica set)同步副本由于kafka是一个分布式系统,每一个分区都会有相应的副本来保证系统的高可用,即在leader副本挂掉后,follow副本能够重新选举成为leader对外提供服务。要实现这一个功能就必须要保证副本数据与leader数据保持一致。通常的做法是让全部的副本同步完成数据后再返回请求给生产者。 这样的实现能保证数据一致性,但是会导致效率低下,可用性低(因为只要一个节点发生故障就会导致无法返回ACK),所以kafka设置了一个ISR的概念。每

2020-11-17 14:57:23 796

原创 SpringMVC静态资源处理源码分析

目录概述请求处理流程代码分析概述当我们在浏览器发起一个请求时,例如http://xxxx/home 跟http://xxxx/home.html时,后者会直接访问到相应的资源,而前者则会走Controller处理逻辑,最后再经过视图渲染(详情见:SpringMVC视图View解析源码分析)返回视图真正的资源,那么这其中的差别是什么?是哪里的代码来分别处理了这种不同的请求的?资源放置的位置又应该在哪里?这一系列的问题在接下来的源码分析中将会得到解答。请求处理流程所有的被SpringMVC管理的资

2020-10-21 10:42:20 429

原创 SpringMVC视图View解析源码分析

开始

2020-10-17 17:08:32 321

原创 Springboot关于JPA的初始化过程

目录一、HibernateJpaAutoConfigurationHibernateJpaConfiguration前言:在使用Springboot的过程中,由于Springboot为我们做了大量的初始化配置工作,所以我们在使用的时候只需要进行少许的配置就能达到我们想要的目的, 但是也正因为如此,对于很多不了解其中原委的同学而言一旦配置有问题或者确实配置而报错,从何处开始排查问题便成为了一个困难,甚至当业务需求要求打破springboot的默认配置的时候时候,我们自定义的配置应该如何进行也会难到一

2020-09-17 18:11:35 1495

原创 SpringMVC从配置初始化到HTTP请求全流程解析

这里是目录启动SpringBoot中DispatcherServlet的配置请求过程RequestMapping过程HandlerAdapter过程ViewResolver过程扩展点启动于SpringMVC来说其实没有启动一说,因为它属于SpringFrameWork的一部分,在Spring启动过程中(ApplicationContext初始化过程)就会同时初始化SpringMVC所需要的组件。而这里我要说的启动其实是说的SpringMVC的原理,其原理也非常简单,即配置并初始化DispatcherS

2020-07-24 17:59:40 614

原创 ForkJoinPool源码深度解析

先看下ForkJoinPool构造方法: /**** parallelism: 并行度 factory: 创建工作线程的工厂实现 handler: 内部工作线程因为未知异常而终止的回调处理 asyncMode: 异步模式(对于任务的处理顺序采用何种模式),true表示 采用FIFO模式,false表示采用LIFO模式 ***/ public ForkJoinPool(int parallelism,

2020-06-17 14:44:20 1999 2

原创 二进制数的一些玩法

目录非负整数的乘法用二进制位移如何表达取小于某个数的偶数在看JDK的源码的过程中,难免会碰到一些二进制的操作,如果对这些操作不太熟悉就不明白作者到底想做什么事情,从而导致不能理解代码,那么二进制有哪些玩法呢,本文尝试着将这些玩法总结出来。非负整数的乘法用二进制位移如何表达取小于某个数的偶数...

2020-06-17 13:16:26 416

原创 Semaphore源码解析以及与CountDownLatch的对比

写在前面信号量,源码中的注释是这样写的 :A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each {@link #acquire} blocks if necessary until a permit is available, and then takes it. Each {@link #release} adds a permit, potentially releasing a blo

2020-06-03 18:12:03 547

原创 AbstractQueuedSynchronizer源码深度解析和思考

目录写在前面总体介绍主体结构节点类的构造图形化同步队列和condition队列锁实现写锁(独占锁)获取锁节点加入同步队列同步队列中的节点尝试获取锁或者睡眠获取锁或者睡眠过程中线程被中断(取消获取锁)取消节点需要唤醒后继节点的情况释放锁共享锁获取共享锁node节点状体变化图释放锁带中断的获取锁公平/非公平同步器ConditionObject条件等待await方法signal唤醒等待线程总结写在前面AQS是整个JDK并发包的核心,要想理解其它的锁、同步器、并发容器等的实现必须先过AQS这个坎,由于Doug

2020-05-30 15:18:11 302

原创 CountDownLatch源码解析

目录总体介绍同步器的实现await方法countDown方法总结总体介绍一个同步器:能够让一个或者多个线程等待等待某个条件的到来再继续执行。大家可以把CountDownLatch初始化的值认为是有N道门,刚开始是线程调用await方法发现门关着的,所以就只有等待。而外界条件的变化是通过countDown来实现,可以认为countDown一次就是打开一道门,当countDown的次数为N时,则全部的门打开,则刚才在await处等待的线程将继续执行任务。看下具体的代码实现:public class

2020-05-30 10:48:37 571

原创 CyclicBarrier源码解析

总体介绍一个多线程协同器,它可以让一组线程相互等待,当等待的数量达到预设数量时这组线程通过等待继续工作。说得形象点,CyclicBarrier就好比汽车站滚动发车的模式,把客车看着CyclicBarrier,乘客看着是各个任务线程,当乘客到达客车时,需要等待另外的乘客,当乘客到齐后自动发车,如果等待乘客超时了,则将乘客全部赶下车(司机太凶残了),然后重新安排依次上车(是否要上车由乘客自己决定);每个上车的乘客都需要判断自己是否是这辆车的最后一个乘客,如果不是,则上车后立即开始睡觉,如果是最后一个,则他需要

2020-05-30 10:36:13 182

原创 生动形象的CAS

文章开始之前首先要吐槽一下现在的网络环境,只要你在网上搜索一个具体的问题,搜索出来的基本上都是千篇一律,各种转载各种抄袭,很难找到一点自己原创且能把东西说清楚的。 最近工作之余回顾了一下CAS的原来,发现其中有一些概念让刚接触这个东西的人真的会是一头雾水,于是想在现实生活中找一个类似的场景来说明这样的事情,并将其记录于此。首先放一张网上到处转载处可以找到的图:如果你看了这幅图能完全

2016-07-14 15:27:06 456

原创 一图看明白JVM内存分布

新生对象大部分在Eden创建,当发生一次minor GC时,如果这个对象没有被回收,则进入survivor区,同时对象age +1, 发生一次minor GC时,将当前Eden 和 survivor中存活的对象复制到另外一个survivor中,然后清空Eden 和刚才使用的survivor空间。 当然minor GC的时候也有对象进入老年代,一些是age达到进入老年代的值,一些是因为老年代作为内存

2015-09-07 16:18:19 457

原创 关于tomcat启动web时classloader加载el实现类报错的解决方式

1.严重: Servlet.service() for servlet [jsp] in context with path [/web] threw exception [java.lang.LinkageError: loader constraint violation: when resolving interface method 2."javax.servlet.jsp.JspAppl

2015-03-31 12:57:36 4511 1

原创 Spring WebApplicationContext 准备刷新过程

Spring 框架WebApplicationContext 准备刷新的过程做了什么事情 ?之前粗略的看了下Spring web这块初始化的过程,当时的重心是放在了容器的初始化过程,如果解析配置文件,以及如何初始化FactoryBean, 今天则是把重心放在了初始化过程中的一些小细节上。 下面看看问题的引出:图为WebApplicationContext刷新的整个过程,但是今天

2014-11-30 10:29:38 1712

原创 red5配置说明

说明:这篇文章是我翻译的一篇外文,作者:Paul  Gregoire这篇文献描述了怎么将Red5部署到Tomcat中,就像普通的web应用需要的WAR一样。标准的Red5部署由运行在作为系统服务器的嵌入式J2EE容器(如:Jetty或者Tomcat)中的单独java应用组成,然而WAR版本的部署则是运行在J2EE容器内部。                  WAR版本的部署 (re

2012-03-23 19:24:10 1925

原创 BlazeDS的安全

后台hibernate,spring前台flex如何使用Blazeds安全,请看下文什么是Blazeds安全?Blazeds安全用来控制对服务器端destination的访问(destination的配置在后台的remoting-config.xml文件中),Flex客户端只有通过服务端验证才能连接到一个destination,Blazeds使用底层J2EE应用服务器安全框架来支持身份验证和授权。你可以定义自己的逻辑执行身份验证和授权。在后台我们限制对一个destination的访问是通过为destinat

2011-04-03 20:36:00 1190

转载 BlazeDS的功能及配置

<br /> <br />BlazeDS Test Drive里面示例了主要的功能:<br />HTTPService <br />Web Services <br />Remote-Object <br />Messaging <br />其实现是基于一个叫flex.messaging.MessageBroker的Servlet。各种消息通道的配置都存在于WEB-INF/flex/services-config.xml及其包含的3个XML文件中。下面简单介绍这四种不同的功能。<br /> <br /> <

2011-04-03 19:40:00 706

转载 关于Flex的MessageBroker Endpoints channels的配置运用

<br /><br />MessageBroker <br />        MessageBroker 我们称他为信息经纪人,它职责就是把messages 发给到services 就是我们的程序服务,它是BlazeDs在服务器上的核心。endpoint 处理完一个request,也即是把messages 从request抽取出来,然后传给MessageBroker ,然后MessageBroker 就检测这个消息的destination ,接着把它传给它想到的服务目的地。假若我们的服务有安全保护,Mes

2011-04-03 17:11:00 1156

JAVA nioJAVA nio

nio;

2014-10-01

activeMQ reference

学习activeMQ必备资料。学习activeMQ必备资料。学习activeMQ必备资料。学习activeMQ必备资料。

2014-10-01

red5部署到tomcat需要的jar包

red5部署到tomcat需要的jar包red5部署到tomcat需要的jar包red5部署到tomcat需要的jar包

2011-10-22

数据结构 C语言版 严蔚敏 吴伟民 源码

源代码源代码源代码源代码源代码源代码源代码源代码

2011-10-22

空空如也

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

TA关注的人

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