芒枸公社

懂同学的博客

使用授权方法进行授权配置

每一个 Spring Security 控制授权表达式(以下简称为表达式)实际上都在 API 中对应一个授权方法,该方法是请求的 URL 权限配置时的处理方法。例如:

1
2
3
4
5
6
7
8
9

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.DELETE, "/user/*").hasRole("ADMIN")
.antMatchers("/index").permitAll()
.antMatchers("/pay").hasAnyRole("WE_CHAT_PAY", "ALI_PAY")
.antMatchers("/debug").hasIpAddress("192.168.1.0/24");
}
阅读全文 »

相信 “迭代” 对于 Java 程序员来说并不陌生(当然,其他语言的程序员也是如此),在处理数据时,不可避免地会存在对数据的大量遍历操作。对于我自己而言,学习使用Java语言两年时间,对于“迭代”的概念还停留在 for:each,for:i的遍历阶段。今天用到了JDK 提供的迭代接口进行 Java 集合的迭代,便决定作以笔记,留作以后学习。

普通 Java 集合迭代(遍历)

迭代可以简单理解为遍历,在没有 JDK 并未提供迭代器时,我们对于数据的遍历处理如下:

  • 对于数组的遍历处理:
1
2
3
4
5
6
Bean[] beans = new Bean[5];

for (int i = 0; i < beans.length; i++) {
beans[i] = new Bean();
// todo something
}
  • 对 ArrayList 的遍历处理:
1
2
3
4
5
ArrayList<Bean> beanArrayList = new ArrayList<Bean>();
for (int i = 0; i < beanArrayList.size(); i++) {
beanArrayList.add(new Bean());
// todo something
}
阅读全文 »

HashMap

HashMap 的数据结构

HashMap 的底层实现是 Entry数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public HashMap(int initialCapacity, float loadFactor) {
//初始容量不能<0
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: "
+ initialCapacity);
//初始容量不能 > 最大容量值,HashMap的最大容量值为2^30
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
//负载因子不能 < 0
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: "
+ loadFactor);

// 计算出大于 initialCapacity 的最小的 2 的 n 次方值。
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
this.loadFactor = loadFactor;
//设置HashMap的容量极限,当HashMap的容量达到该极限时就会进行扩容操作
threshold = (int) (capacity * loadFactor);
//初始化table数组
table = new Entry[capacity];
init();
}
阅读全文 »

散列表

散列表(Hash table,也叫哈希表),是根据关键字值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

散列表的思想其实很简单,就是把 Key(任意长度)通过一个固定的算法函数,即所谓的哈希函数转换成一个整型数字(固定长度),然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在该下标的数组空间里。

而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。

散列算法。

根据 key(数据特征) 计算出对应数据的存储位置的算法叫做散列算法(position=hash(key);,又称哈希算法。

阅读全文 »