不積跬步,無以至千里
不積小流,無以成江海

0%

相关概念

数组

数组具有遍历快,增删慢的特点。数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元素字节数 * 下标),所以遍历快(数组遍历的时间复杂度为O(1) );增删慢是因为,当在中间插入或删除元素时,会造成该元素后面所有元素地址的改变,所以增删慢(增删的时间复杂度为O(n) )。

链表

链表具有增删快,遍历慢的特点。链表中各元素的内存空间是不连续的,一个节点至少包含节点数据与后继节点的引用,所以在插入删除时,只需修改该位置的前驱节点与后继节点即可,链表在插入删除时的时间复杂度为O(1)。但是在遍历时,get(n)元素时,需要从第一个开始,依次拿到后面元素的地址,进行遍历,直到遍历到第n个元素(时间复杂度为O(n) ),所以效率极低。

HashMap

Hash表是一个数组+链表的结构,这种结构能够保证在遍历与增删的过程中,如果不产生hash碰撞,仅需一次定位就可完成,时间复杂度能保证在O(1)。 在jdk1.7中,只是单纯的数组+链表的结构,但是如果散列表中的hash碰撞过多时,会造成效率的降低,所以在JKD1.8中对这种情况进行了控制,当一个hash值上的链表长度大于8时,该节点上的数据就不再以链表进行存储,而是转成了一个红黑树。

阅读全文 »

说明

假如我要使用docker构建容器部署springboot项目,步骤:

  1. 把jar包上传到服务器上
  2. 创建DockFile文件
  3. 编译镜像
    docker build -t test.
  4. 启动容器
    docker run --name test -p 8080:8080 -d test
阅读全文 »

Dockerfile是什么?

Docker可以通过阅读Dockerfile中的指令来自动构建映像。 Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装映像的所有命令。使用docker build的用户可以创建自动执行的构建,该构建可以连续执行几个命令行指令。

构建springboot项目模版

阅读全文 »

hexo版本升级

命令如下:

1
1.npm i hexo-cli -g
1
2.npm update
1
3.hexo version

发现版本还是原来的3.9.0,其实上面的更新命令并不是很准确。

阅读全文 »

概念

RabbitMQ作为一个消息队列提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全可靠。消息(Message)由Client发送,RabbitMQ接收到消息之后通过交换机转发到对应的队列上面。Worker会从队列中获取未被读取的数据处理。谈到队列服务, 会有三个概念: 发消息者、队列、收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。

阅读全文 »

开篇

SpringCloud越来越火,咱也得跟上潮流啊,闲暇之余,自己学习并代码实战了下,其实发现并不难,知道其各个模块是干什么的并且能够运用就够了,下面我就简单说下自己学习过程的心得,也算是总结一下。

微服务

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

阅读全文 »

开篇

有不少公司在选择推送平台的时候都选择了极光推送(好像用友的也不错。只是没用过),之前我也做过一个php服务端极光推送的集成,但是这里昵我要说的是java服务端的集成,做过两次,这才想起来整理一下,供给有需求的朋友satisfied:,虽然没几个人看。

代码集成

在application.yml里配置一下jpush平台你所创建的应用的配置信息,如下图:

阅读全文 »

Java中的函数

方法引用:

比方说,你想要筛选一个目录中的所有隐藏文件。你需要编写一个方法,然后给它一个File,它就会告诉你文件是不是隐藏的。幸好,File类里面有一个叫作isHidden的方法。我们可以把它看作一个函数,接受一个File,返回一个布尔值。但要用它做筛选,你需要把它包在一个FileFilter对象里,然后传递给File.listFiles方法,如下所示:

1
2
3
4
5
File[] hiddenFiles = new File(".").listFiles(new FileFilter() { 
public boolean accept(File file) {
return file.isHidden();
}
});
阅读全文 »

流(1)

几乎每个Java应用都会制造和处理集合。但集合用起来并不总是那么理想。比方说,你需要从一个列表中筛选金额较高的交易,然后按货币分组。你需要写一大堆套路化的代码来实现这个数据处理命令,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
Map<Currency, List<Transaction>> transactionsByCurrencies = new HashMap<>(); 
for (Transaction transaction : transactions) {
if(transaction.getPrice() > 1000){
Currency currency = transaction.getCurrency();
List<Transaction> transactionsForCurrency = transactionsByCurrencies.get(currency);
if (transactionsForCurrency == null) {
transactionsForCurrency = new ArrayList<>();
transactionsByCurrencies.put(currency, transactionsForCurrency);
}
transactionsForCurrency.add(transaction);
}
}
阅读全文 »

如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。
HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。

阅读全文 »