JDK和CGLIB动态代理
Java中动态代理代理包括JDK动态代理和CGLIB动态代理。前者通过实现目标类的接口,和反射技术实现。后者不需要实现接口,而是通过继承目标类,并通过方法拦截技术实现。Spring的AOP技术则是集成了这两种动态代理。本文对两种代理的使用方法做一个简要介绍。 代理模式 首先介绍下设计模式中的代理 ...
阅读更多
JDK源码分析系列--HashMap
java.util.HashMap源码一直是面试必问的项目,包括底层数据结构、扩容机制,以及为什么线程不安全等。本文作为JDK源码分析系列的开端,首先从HashMap开始,对其源码进行剖析。源码基于JDK1.8 关于红黑树的部分,本文由于篇幅有限,不再展开。 数据结构 在介绍具体方法前,有必要说明 ...
阅读更多
Linux部署系列--RabbitMQ
RabbitMQ的部署有很多坑,有时候项目要求搭建个MQ测试环境,没有经验的话会浪费很长时间。记录下来,以备不时之需。 目前RabbitMQ最新版本已经迭代到3.10.7,部署过程可能已有区别。本文仅供参考。 版本 RabbitMQ是Erlang语言编写的,所以在安装RabbitMQ之前,需要先安 ...
阅读更多
Linux部署系列--Ruby
初次接触Ruby是因为Redis4.0集群搭建需要依赖Ruby环境。 Ruby 是一种面向对象、指令式、函数式、动态的通用编程语言,由松本行弘在1995年设计并开发。想了解更多可以去官网ruby-lang.org查看。 安装ruby有多种方式,本文主要讲解源码方式安装ruby,不推荐使用yum安装 ...
阅读更多
Linux部署系列--Redis
本文主要记录了Redis单机、集群模式安装步骤,及操作过程所踩的坑。记录一下,也供大家参考。 另外,学习Redis,推荐阅读大神黄健宏的《Redis 设计与实现》,这本书让我受益良多。 环境 Linux版本是CentOS 7.7,redis版本为4.0.14 版本可以使用./redis-serve ...
阅读更多
Linux部署系列--Mysql
网上Mysql部署相关的博客虽然很多,但要么是系统有差异,要么MySQL版本不同,要么有些博客本身就有错误,导致每次部署都难免要浪费一些时间。所以想着记录下部署步骤与遇到的问题,提升工作效率。 部署环境:Linux版本是CentOS 7.7,Mysql版本是5.7.32,使用rpm方式部署 下载 ...
阅读更多
这是2016年春节期间,在皖南老家写的。自从外出上学后,便很少回到这里。每回来一次,陌生感便更增一分。年轻人多在外务工,小孩子都已长大,老年人陆续湮没于黄土。熟悉的石板路、老房子、水田都已消失,玩耍的小孩子也不再是熟悉的那些面孔。于是想着记录下这些。如今,又是六年过去,庆幸自己当初写下这篇,才不至于 ...
阅读更多
JDK源码分析系列--排序
排序是Java中十分基础的功能。尽管平时经常用到,但都没关注具体怎么实现。本文以最常用的集合排序为切入点,分析下Java中集合排序、数组排序的用法,以及引用类型和基本类型排序的实现细节。梳理一遍才发现,底层排序算法比想象中要复杂的多。真应了《道德经》中说的,学之愈多,愈觉知之不足。 集合排序 Ja ...
阅读更多
JDK源码分析系列--随机
本文以 java.util.Random 类为切入点,简单的探讨了一下Random对象构造原理、成员方法的使用,以及常用随机功能的实现。旨在对随机数有个浅显的认识。水平有限,理解不到之处,还请斧正。 获取随机数 Java获取随机数有两个主要途径,分别是java.util.Random 类和 ja ...
阅读更多
valid参数校验方法
项目中经常需要对请求参数进行校验。不仅麻烦,冗长的 if 判断语句使代码显得十分臃肿。本文介绍使用 @Valid 注解方式配置校验,直接定义在字段处,方便又简洁。 javax.validation.Valid 底层是通过AOP技术,对请求拦截,若请求参数不满足要求,则直接抛出异常,统一处理后响应给前 ...
阅读更多