Russ Xia Blog

身处寒夜,把握星光。

SpringMVC中的异常处理流程

SpringMVC中几种常见的异常处理方式及异常处理流程分析

SpringMVC中的异常处理流程 本文搭建的项目基于spring-boot版本 1.5.2.RELEASE ,spring版本是 4.3.7.RELEASE 。源码分析也是基于 4.3.7.RELEASE 的spring版本。 Spring Boot项目可以通过 server.error.whitelabel.enabled 参数设置关闭Spring Boot默认提供的统一错误信息处理。...

Spring容器中的构造和销毁Bean的方法

init和destroy方法、@PostConstruct和@PreDestroy注解、InitializingBean/DisposableBean接口

Spring容器中的init和destroy方法 Spring Bean的生命周期大致如下: Spring提供了定义好的Spring Bean生命周期内的init和destroy方法,实现InitializingBean和DisposableBean方法即可。同时,Spring也支持自定义的初始化和销毁方法。 基于xml配置的方式,在配置bean的时候,我们可以指定init-method...

SpringMVC和Servlet

SpringMVC和Servlet的关系,ServletContext,Spring容器,SpringMVC容器的区别

SpringMVC和Servlet HTTP服务器将请求发到Servlet容器,Servlet容器会将请求转发到具体的Servlet,如果此Servlet尚未创建,则加载并实例化这个Servlet(init方法),然后调用这个Servelt的service方法,真正处理请求。 Servlet接口 public interface Servlet { void init(Servle...

HTTP协议入门

HTTP协议的发展历史、各个版本的特性

HTTP协议入门 HTTP协议是基于TCP/IP协议之上的应用层协议,默认使用80端口(HTTPS默认使用443端口)。HTTP协议是属于Client-Server模型,是无状态。 为什么说HTTP协议是无状态的呢,我的理解是,在协议层面HTTP协议是无状态的,请求没有记录上下文,请求之间不存在事物关系,每个HTTP请求都是完全独立的。请求的状态是靠Cookie和Session保持的。这样...

Java中的NIO

Java中的常见IO模型、NIO的使用

Java中的NIO Java中的几种常见的IO模型 同步和异步 同步:调用者请求被调用者,当一个调用发出后,需要等待返回消息(用户线程不断去询问),才可以执行后续 异步:调用者请求被调用者,当一个调用发出后,调用者不需要等待返回消息,请求处理完成后会通过回调来通知调用者。 阻塞和非阻塞 阻塞:当前线程不断轮询结果,知道结果返回 非阻塞:会立即返回(虽然还没得到结果)...

Java中的死锁检查

死锁检查:jstack、arthas

死锁检查 死锁demo代码: import static java.lang.System.out; /** * 死锁demo * Created by RuzzZZ on 2017/2/8. */ public class Deadlock implements Runnable { private Deadlock other; public void set...

JVM常见的几种GC算法

常见的GC算法及其实现算法

JVM常见的几种GC算法 什么是垃圾回收(GC) GC::Garbage Collection(垃圾收集)。JVM会自动对内存进行管理和垃圾清扫,这种行为称之为垃圾回收。 常见的垃圾回收算法有哪些 常见的垃圾回收算法有三种,它们各有优缺点: 标记-复制:将内存划分为大小相等的两块,当一块用完后,将还存活的对象copy到另一块上 优点:实现简单,效率高,不产生内...

Java中的invokedynamic和lambda表达式

lambda表达式和invokedynamic字节码方法的关系

Java中的invokedynamic和lambda表达式 关于invokedynamic和其他四种字节码方法调用指令 在Java7中,JVM新增了invokedynamic指令。在此之前,JVM就已经提供了四种不同的字节码方法调用指令: invokevirtual——对实例方法的标准分派 invokestatic——用于分派静态方法 invokeinterface——用于...

时间轮定时器

时间轮定时器算法及其实现

时间轮定时器 时间轮算法的基本架构 时间轮是基于一个循环链表(实际上就是个数组,通过下标控制)的数据结构。所以也因此得名WheelTimer。时间轮算法的复杂程度跟分级层数有关,最简单的就是一层的,复杂一点的就是分层时间轮(Hierarchical Timing Wheels)。对于一层的时间轮,添加/删除/取消任务的复杂度是O(1),过期/执行任务时,最差情况是O(n)(类似HashMa...

Java中Thread相关的一些小知识

Java中Thread相关的一些小知识

Java中Thread相关的一些小知识 Java使用进程执行shell命令 public static void main(String[] args) throws IOException, InterruptedException { String[] cmdline = {"sh", "-c", "echo $MYSQL_HOME"}; Runtime runtime...