Docker 安装Redis 项目实战(单机版)

一、docker pull 拉取镜像

Docker Hub中拉取Redis镜像,如果不指定版本,则拉取的版本为latest,最新版。

1
docker pull redis

阅读全文

LinkedList源码解析(一)

前几篇文章分析过 List 接口的一个重要实现 ArrayList,本篇博客开始介绍另一个重要实现 LinkedList。

一、与 ArrayList 的区别

ArrayList 使用数组存储数据,且数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,索引就变慢了,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

阅读全文

ArrayList源码解析之subList

ArrayList的 subList ( int fromIndex, int toIndex ) 方法执行结果是获取ArrayList的一部分,返回的是ArrayList的部分视图。《阿里巴巴Java开发手册》中对subList方法的使用有规定:
首先通过一个例子,初步了解subList的用法和易出错的地方:

阅读全文

ArrayList源码解析之remove,removeIf

remove() 方法用于删除集合中的元素,本篇主要解析ArrayList的remove(),removeAll(),以及JDK1.8中新增的removeIf()方法。

一、remove()

remove()方法有两个:
1、删除集合中指定位置元素的 remove(int index) 方法。
2、删除指定的、在集合正序遍历中第一次出现元素的 remove(Object o) 方法。

阅读全文

ArrayList源码解析之iterator、listIterator

ArrayList的遍历方式有多种,本文主要对Iterator、ListIterator两种迭代器的源码进行分析。

一、Iterator源码分析

1
2
3
public Iterator<E> iterator() {
return new Itr();
}

阅读全文

ArrayList源码解析之add方法

ArrayList是基于数组实现的,是一个动态数组,容量能自动增长。其扩容机制是在调用add()或者addAll()方法时发生的。

一、add(E e) 方法

1
2
3
4
5
6
7
public boolean add(E e) {
// 判断是否需要扩容
ensureCapacityInternal(size + 1);
// 将新元素追加到相应的数组中
elementData[size++] = e;
return true;
}

阅读全文

JDK1.8中遍历List集合的几种方式

本文大纲:
一、List集合循坏方式:for循坏、forEach循坏、迭代器Iterator以及Lambda表达式。
二、Iterator迭代器和ListIterator迭代器的比较

本文以ArrayList为例。

阅读全文

Spring Boot中Redis的使用

一、Redis的使用

关于Redis的使用和介绍,可以查看Redis中文网

阅读全文

Spring Boot全局异常处理

SpringBoot使用@ControllerAdvice、@ExceptionHandler、@ResponseBody进行全局异常处理,另外也有@RestControllerAdvice注解。本文使用@RestControllerAdvice。

一、全局异常处理

@RestControllerAdvice返回为Json格式,为@RequestMapping、@PostMapping、@GetMapping提供了@ExceptionHandler的功能。

阅读全文

Java 实现多线程的几种方式

Java 多线程的实现方式有:继承Thread类,实现Runnable接口。另外,使用内部类实现,Callable、Future组合实现(有返回值),使用线程池,定时器以及Java 8中Lambda表达式实现的方式,实际是对前两种方式的变形。

一、继承Thread类

继承Thread类,重写run()方法,Thread类也是Runnable接口的一个实现,启动线程的唯一方法是start()方法。

阅读全文