「安全认证」MD5算法加盐实现用户密码加密

1. MD5加密算法介绍

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法 第五版),经MD2、MD3和MD4发展而来的一种加密算法,是典型的消息摘要算法,属Hash算法一类。作用是让大容量信息在用数字签名软件签署私人密匙前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。通过MD5算法进行加密获得一个随机长度的信息并产生一个128位的信息摘要。如果将这个128位的二进制摘要信息换算成十六进制,可以得到一个32位的字符串,因此我们加密完成后的16进制的字符串长度为32位。

「并发编程」NIO、Netty及websocket实现

1. BIO/NIO/AIO演变

Java IO 方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。

IO类型 模型 客户端:线程数 API使用难度 调试难度 可靠性 吞吐量
BIO 流,同步阻塞 1:1 简单 简单 很差 非常低
伪异步IO 同步阻塞 M:N 简单 简单 较差 中等
NIO 同步非阻塞 M:1 复杂 复杂 较高
AIO 异步非阻塞 M:0,被动回调 复杂 复杂

「并发编程」JUC并发容器类

java.util.concurrent包中,提供了两种类型的并发集合:一种是阻塞式,另一种是非阻塞式。

  • 阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程将被阻塞,一直等到该方法可以被成功执行
  • 非阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程不会被阻塞,而是直接则返回null或抛出异常。

「深入JVM」内存模型JMM 与 锁机制

Java 内存模型(Java Memory Model)

Java Memory Model(JMM)描述了 Java 程序中各种变量(线程共享变量)的访问规则,以及在 JVM 中将变量存储到内存中和从内存中读取变量这样的底层细节(可见性,有序性,原子性)。

  • 所有的变量都存储在主内存中
  • 每个线程都有自己的独立的工作内存,里面保存该线程使用到的变量的副本(来自主内存的拷贝)
  • JMM 规定: + 线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写。 + 不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。

「深入JVM」 类文件结构 与 类加载机制

1. 类文件结构

Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据严格按照顺序紧凑的排列在 Class 文件中,中间无任何分隔符,这使得整个 Class 文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在。当遇到需要占用 8 位字节以上空间的数据项时,会按照高位在前的方式分割成若干个 8 位字节进行存储。
Java 虚拟机规范规定 Class 文件格式采用一种类似与 C 语言结构体的伪结构体来存储数据,这种伪结构体中只有两种数据类型:无符号数

「数据结构」常见JAVA集合类的数据结构分析

集合(Collection/Map)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Collection接口
|———— List接口
|———— ArrayList类
|———— Vector类
|———— LinkedList类
|———— Stack类
|———— Set接口
|———— HashSet类
|———— TreeSet类
|———— LinkedHashSet类
|———— Queue接口
|———— LinkedList类
Map接口
|———— HashMap类
|———— TreeMap类
|———— LinkedHashMap类
|———— Hashtable类