0%

Swagger介绍

由于现在很多都是前后端分离,前端、后端分别完成自己的工作,那么接口文档就是前后端的桥梁,使用swagger不仅可以作为一个接口调用工具,还可以作为一份接口文档

首先swagger的依赖为

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
阅读全文 »

消息队列的使用场景

为什么要使用消息队列

  • 应用解耦:多应用之间通过消息队列对消息进行处理,避免调用接口失败导致整个过程失败;将消息写入消息队列,需要消息的系统自己从消息队列中订阅,使得消息发布方不需要做任何修改
  • 异步处理:将消息写入消息队列,非必要的业务逻辑通过消息队列对消息进行异步处理,加快响应速度
  • 限流削峰:在秒杀系统中,避免流量过大导致应用系统挂掉,按照数据库能处理的并发量,从消息队列中慢慢拉取消息
  • 消息驱动:有些系统是消息驱动的系统,可以使用消息队列来完成生产者和消费者

缺点

使用消息队列也存在缺陷,并不是十全十美的

  • 系统可用性降低,如果消息队列挂了,系统的部分功能也就无法正常运转了
  • 系统复杂性增加,加了消息队列之后需要考虑如一致性问题、消息重复消费问题、消息可靠性传输问题

ojAlgo解决LP问题

ojAlgo 是一个开源的 Java 类库,用于解决一些常用的数学问题以及线性代数和最优化问题,所以也可以用来解决LP问题

1
2
3
4
5
<dependency>
<groupId>org.ojalgo</groupId>
<artifactId>ojalgo</artifactId>
<version>51.4.1</version>
</dependency>

求解 5x1 + 6x2 + 23x3 + 5x4 + 24x5 + 6x6 + 23x7 + 5x8的最小值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
ExpressionsBasedModel model = new ExpressionsBasedModel();
model.addVariable(Variable.makeInteger("x"+1).lower(0).weight(5));
model.addVariable(Variable.makeInteger("x"+2).lower(0).weight(6));
model.addVariable(Variable.makeInteger("x"+3).lower(0).weight(23));
model.addVariable(Variable.makeInteger("x"+4).lower(0).weight(5));
model.addVariable(Variable.makeInteger("x"+5).lower(0).weight(24));
model.addVariable(Variable.makeInteger("x"+6).lower(0).weight(6));
model.addVariable(Variable.makeInteger("x"+7).lower(0).weight(23));
model.addVariable(Variable.makeInteger("x"+8).lower(0).weight(5));

// 约束1 2x1+x2+x3+x4>=100
Expression expression = model.addExpression("e" + 1);
expression.set(0,2);
expression.set(1,1);
expression.set(2,1);
expression.set(3,1);
expression.lower(100);

// 约束2 x2+x3+3x5+2x6+x7>=150
Expression expression2 = model.addExpression("e" + 2);
expression2.set(1,2);
expression2.set(2,1);
expression2.set(4,3);
expression2.set(5,2);
expression2.set(6,1);
expression2.lower(150);

// 约束3 x1+x3+3x4+2x6+3x7+5x8>=100
Expression expression3 = model.addExpression("e" + 3);
expression3.set(0,1);
expression3.set(2,1);
expression3.set(3,3);
expression3.set(5,2);
expression3.set(6,3);
expression3.set(7,5);
expression3.lower(100);

Optimisation.Result minimise = model.minimise();
System.out.println(minimise);

结果为

1
30.0, 40.0, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 1.0

使用起来比JOptimizer感觉好多了,至少可读性强

Nginx搭建文件服务器

使用文件服务器可以进行归档一些资料和数据,可以使用nginx来快速的搭建一个简易的文件服务

1
2
3
4
5
6
7
8
9
10
11
12
13
# 显示目录,默认不开启
autoindex on;
# 显示文件大小
autoindex_exact_size on;
# 显示文件修改时间
autoindex_localtime on;

server{
charset utf-8;
listen 9090 default_server;
server_name _;
root /share/file;
}

在上传文件的时候,可能会由于文件太大,导致上传失败,返回413状态码,可以使用client_max_body_size来设置请求体的最大值

可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;

scp命令

在开发时经常会遇到两台机器之间传文件或者安装包,这就用到了scp命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# scp [参数] 文件源 文件目标
# 本地复制到远程 root@remote2:/opt/data/hadoop----->表示 用户@地址:文件目录
scp -r /opt/data/hadoop root@remote2:/opt/data/hadoop

# 远程复制到本地
scp -r root@remote1:/opt/data/hadoop /opt/data/hadoop

# 远程复制到远程
scp -r root@remote1:/opt/data/hadoop root@remote2:/opt/data/hadoop

---------------
-r 递归复制整个目录
-v 显示复制过程