「学习笔记」安全认证 - MD5算法加盐实现用户密码加密

1. MD5加密算法介绍

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

「学习笔记」并发编程 -- 阻塞队列 与 线程池

  • 池和队列的关系
    • 线程池或者数据库连接池,都有最大限制。如果超出了限制数量,则新进来的申请连接都要放入额外的队列里,等到池空出来时,从队列中取出连接放进池里。

1. BlockingQueue(阻塞队列)

Queue接口
    |———— BlockingQueue接口
        |———— ArrayBlockingQueue类
        |———— DelayQueue类
        |———— LinkedBlockingQueue类
        |———— PriorityBlockingQueue类
        |———— SynchronousQueue类
  • BlockingQueue继承了Queue接口,提供了一些阻塞方法,主要作用如下:
    • 当线程向队列中插入元素时,如果队列已满,则阻塞线程,直到队列有空闲位置(非满);
    • 当线程从队列中取元素(删除队列元素)时,如果队列为空,则阻塞线程,直到队列有元素;
  • BlockingQueueQueue方法基础上增加了两类和阻塞相关的方法:put(e)take()offer(e, time, unit)poll(time, unit)
操作类型 抛出异常 返回特殊值 阻塞线程 超时
插入 add(e) offer(e) put(e) offer(e, time, unit)
删除 remove() poll() take() poll(time, unit)
读取 element() peek() / /
  • **put(e)take()**方法会一直阻塞调用线程,直到线程被中断或队列状态可用;
  • **offer(e, time, unit)poll(time, unit)**方法会限时阻塞调用线程,直到超时或线程被中断或队列状态可用。
  • 阻塞队列主要用在生产者/消费者的场景
1.1 ArrayBlockingQueue

ArrayBlockingQueue是一个有边界的阻塞队列,它的内部实现是一个数组。

「学习笔记」并发编程 -- JUC并发容器类

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

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

1. 线程安全相关容器

1.1 线程安全-同步容器:
  1. ArrayList –> Vector,Stack
  2. HashMap –> HashTable(key、value不能为null)
  3. Collections.synchronizedXXX(List/Set/Map) //本质是对相应的容器进行包装,通过在方法中加synchronized同步锁来实现
  • 同步容器的同步原理就是在方法上用synchronized修饰。性能开销大
  • 单独使用里面的方法的时候,可以保证线程安全,但是,复合操作需要额外加锁来保证线程安全。
1.2 线程安全-并发容器:
  1. ArrayList –> CopyOnWriteArrayList:保证**最终一致性,写时复制,适用于读多写少**的并发场景
  2. HashSetTreeSet –> CopyOnWriteArraySetConcurrentSkipListSet
  3. HashMapTreeMap –> ConcurrentHashMapConcurrentSkipListMap
1.3 安全共享对象策略
  1. 线程限制:一个被线程限制的对象,由线程独占,并且只能被占有者修改
  2. 共享只读:一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问,但不能修改
  3. 线程安全对象:一个线程安全的对象或者容器,在内部通过同步机制来保证线程安全,其他线程无需额外的同步就可以通过公共接口随意访问它
  4. 被守护对象:被守护对象只能通过获取特定的锁来访问

2. CopyOnWrite机制

CopyOnWrite(简称COW),是计算机程序设计领域中的一种优化策略,也是一种思想–即写入时复制思想

0%