0%

一、Docker的底层实现

​ Docker容器本质上是宿主机上的进程 ,核心技术包括Linux上的命名空间(namespace)、控制组(cgroups)、UnionFS(联合文件系统)和容器格式(Container format)。Docker通过namespace实现了资源隔离,通过cgoups实现了资源限制,通过写时复制机制实现了高效的文件操作。
容器就是一个与宿主机系统共享内核但与系统中的其他进程资源相隔离的执行环境。Docker通过对namespace、cgroups、capabilities以及文件系统的管理和分配来“隔离”出一个上述执行环境,这就是Docker容器。

阅读全文 »

SpringBoot项目中一般使用hibernate-validator来对请求参数进行校验,但hibernate-validator提供的注解有限,有时候需要根据具体业务扩展自定义注解对参数进行校验。

前言

在实际运用中,hibernate-validator的注解分为校验请求参数及请求体,两个校验的情况在处理上有一些差别,下面分开讲解。

阅读全文 »

synchronized的应用

synchronized关键字最主要有以下3种应用方式:

  • 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁
  • 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
  • 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
阅读全文 »

前言

在并发编程中,我们主要围绕着以下三个问题:

  • 原子性问题:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
  • 可见性问题:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
  • 有序性问题:程序执行的顺序按照代码的先后顺序执行
阅读全文 »

Servlet包中提供了Filter接口供我们实现自定义过滤器。

自定义拦截器可以参考我之前的文章

与之不同的是,拦截器是Spring框架提供的功能,而Filter过滤器是Servlet提供的。下面是拦截器与过滤器的一些主要区别:

  • Filter由Servlet包提供,只能用于Web应用,不能使用Spring容器资源;拦截器由Spring提供,既能用于Web应用,也能用于Application和Swing应用,能使用Spring容器资源。
  • Filter只能在Servlet的前后起作用;而拦截器能深入到方法前后、异常抛出前后。
阅读全文 »

SpringBoot中提供了HandlerInterceptorAdapter适配器供我们自定义拦截器,可以拦截自定义或所有的请求做相应的处理。

HandlerInterceptorAdapter中共有四个方法:

  • preHandle :在Controller方法被调用前执行
  • postHandle :在Controller方法调用后执行
  • afterCompletion :在整个请求处理完成之后执行
  • afterConcurrentHandlingStarted :用来处理异步请求,当Controller中有异步请求方法的时候会触发该方法。
阅读全文 »

在实际项目开发中,经常需要对前台发来的请求body进行处理,例如参数过滤,参数校验,不合法参数拦截,参数解密等等。Spring中提供了 @ControllerAdvice+RequestBodyAdvice 的解决方案 对请求进行全局统一处理,可以避免在controller层对业务代码入侵。

注意:该方法只对使用了@RequestBody注解的参数生效,本质上是AOP,获取的是在请求头中的属性,如果通过GET请求方式,例如http://localhost:8080/xx?id=1 此种方法,是无法获得id参数的,此处下面将用代码证明。

阅读全文 »