java.util.concurrent.locks.ReentrantLock
提供了比synchronized提供更灵活的锁,可以设置为公平锁,非公平锁,能够带超时时间获取公平锁等等。
synchronized
Java默认提供,由JVM提供。但是因为JVM的黑盒子特性,锁特性会在运行中发生变化。
具体可以翻阅一下这篇文章
java.util.concurrent.locks.ReentrantLock
提供了比synchronized提供更灵活的锁,可以设置为公平锁,非公平锁,能够带超时时间获取公平锁等等。
synchronized
Java默认提供,由JVM提供。但是因为JVM的黑盒子特性,锁特性会在运行中发生变化。
具体可以翻阅一下这篇文章
简单而言就是JVM提供了一个钩子,能在JVM接受到关闭的信号量时候start一个线程,然后做一些清理工作,避免产生脏数据
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run()
{
scheduledExecutorService.shutdown();
}
});
第一种,简洁算法
根据矩阵运算中的可得
package com.liangyumingblog;
public class RollUpString
{
private String string;
public RollUpString(String s)
{
this.string = s;
}
public String rollup(int n)
{
StringBuilder s1 = new StringBuilder(string.substring(0, n));
StringBuilder s2 = new StringBuilder(string.substring(n + 1));
return s1.reverse().append(s2.reverse().toString()).reverse().toString();
}
}
基本实现是Array+Linked实现的,
如果发现某个支链太长会将其变成红黑树。(才发现红黑树这个事情是1.8才加进入的。。我们以前上算法可都说过这个基本优化吧。。)
哈希值:
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
ApplicationContext:
这是一个标准的Spring程序的入口,用来加载上下文其实现类是:AbstractApplicationContext:
这里实现了对Spring上下文的生命周期的管理
AbstractXmlApplicationContext
解析xml使之成为Spring的上下文
ClassPathXmlApplicationContext,FileSystemXmlApplicationContext
寻找到具体的xml所在的磁盘或者classpath所在的位置
一致性(Consistency):
分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(Availability):
集群出现故障节点后,是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(Partition tolerance) :
实际中通信产生延时。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C点和A点之间做出选择。
分成这些样子之外还要对同等级之间的相互访问进行限制,不同等级之间的尽可能在设计上就不要相互影响