ConcurrentModificationException你真的了解吗?

我想很多人第一次遇到这个异常都是因为对List使用foreach遍历,然后删除元素的导致的。然后我们会在网上查到使用Iteratorfor倒序遍历来解决这个问题。那么ConcurrentModificationException是怎么出现的?为什么要使用Iterator或for倒序遍历来解决呢?

记一次MySQL统计查询SQL优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
SELECT
	COL_B,
	MAX( CASE COL_A WHEN 'a' THEN 1 ELSE 0 END ) AS 'a',
	MAX( CASE COL_A WHEN 'b' THEN 1 ELSE 0 END ) AS 'b',
	MAX( CASE COL_A WHEN 'c' THEN 1 ELSE 0 END ) AS 'c' 
FROM
	Table 
GROUP BY
	COL_B 
ORDER BY 
    COL_C DESC
LIMIT 10

COL_C上建立了一个普通索引。50w数据这个SQL的执行时间大概为3s

书籍阅读记录

有些书值得二刷,有些书第一刷都觉得浪费时间。记录下最近看的书,以前看的记不起就暂时不列了,后面如果再次二刷到再记录。

Spring Boot注解之@ConditionalOnProperty

1
2
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled",
				matchIfMissing = true)
  • 当配置文件中没有spring.mvc.favicon.enabled时,由于matchIfMissing = true,属于条件匹配
  • 当配置文件中spring.mvc.favicon.enabled时,此时配合havingValue,如下表。havingValue默认为“”spring.mvc.favicon.enabled=true时属于条件匹配(yes), spring.mvc.favicon.enabled=false时属于条件不匹配(no)

Java8漏洞-使用Collectors.toMap时,value为null报空指针异常

罪魁祸首就是HashMap的merge方法了,它的第一行就是这个:

1
2
if (value == null)
    throw new NullPointerException();

谁调merge了?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public static <T, K, U, M extends Map<K, U>>
    Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
                                Function<? super T, ? extends U> valueMapper,
                                BinaryOperator<U> mergeFunction,
                                Supplier<M> mapSupplier) {
        BiConsumer<M, T> accumulator
                = (map, element) -> map.merge(keyMapper.apply(element),
                                              valueMapper.apply(element), mergeFunction);
        return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}

那么怎么解决呢?