springboot banner彩蛋

步骤:

  1. 新建Spring Boot工程
  2. 在/src/main/resources目录下创建一个banner.txt文件
  3. 将ASCII字符画复制进去,就能替换默认的banner了

查看更多

分享到 评论

java8 HashMap之tableSizeFor

在1.8的HashMap中,有一个算法,它的功能是(不考虑大于最大容量的情况)
返回大于输入参数且最近的2的整数次幂的数

1
2
3
4
5
6
7
8
9
10
11
12
/**
* Returns a power of two size for the given target capacity.
*/
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}

查看更多

分享到 评论

MongoDB应用案例:使用 MongoDB 存储日志数据

线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误、警告、及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖掘出有价值的内容,则需要对数据进行进一步的存储和分析。

本文以存储 web 服务的访问日志为例,介绍如何使用 MongoDB 来存储、分析日志数据,让日志数据发挥最大的价值,本文的内容同样使用其他的日志存储型应用。

查看更多

分享到 评论

Executor框架

在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。

查看更多

分享到 评论

Mac下切换zsh和bash

每次想找这个命令都去百度,结果还一时半会找不到。。
1
chsh -s /bin/bash
1
chsh -s /bin/zsh
分享到 评论

有爱的人,做喜欢的事,这就是人生。

不知何时起,每次理发时,脑袋似昏欲睡,通体舒泰。

读这些句子时,亦是如此。

查看更多

分享到 评论

小葱变成大葱了

时间过得好快呀,小葱已经这么大了

附上帅气的照片~

查看更多

分享到 评论

8月小结

8月过去了

今天是2018-09-02,敲下每个字的时候,时间都在流逝

做个小结吧

查看更多

分享到 评论

Stream流水线的实现原理

Stream Pipelines

前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到的,线程个数是多少?本节我们学习Stream流水线的原理,这是Stream实现的关键所在。

首先回顾一下容器执行Lambda表达式的方式,以ArrayList.forEach()方法为例,具体代码如下:

查看更多

分享到 评论

MongoDB数据建模小案例:物联网时序数据库建模

注:本案例来自MongoDB官方教程PPT,也是一个非常典型的CASE,故此翻译,并结合当前MongoDB版本做了一些内容上的更新。

本案例非常适合与IoT场景的数据采集,结合MongoDB的Sharding能力,文档数据结构等优点,可以非常好的解决物联网使用场景。
需求

查看更多

分享到 评论