0%

1
2
3
4
5
6
7
8
#删除原有的规则
route delete 0.0.0.0

#新增外网 172.16.188.254为网关(修改之前先看好)
route add 0.0.0.0 mask 0.0.0.0 172.16.188.254 metric 30 -p

#新增内网 16.0.0.0为内网网段 17.82.200.254为网关
route add 16.0.0.0 mask 255.0.0.0 17.82.200.254 metric 10 -p

带来的问题就是:
内网的数据库,在启动之后。时不时会自动断开,导致影响正常工作,时不时得重启程序才能测试

在eclipse中有列编辑模式:toggle block selection mode

在idea中也可以,而且还比较高级,哈哈

idea -> 右上角 -> Edit -> Column Selection Mode -> 移动光标到你想要弄的行

完事在重复一次,就可以退出列编辑模式

最小公倍数:
数论中的一种概念,两个整数公有的倍数成为他们的公倍数

其中一个最小的公倍数是他们的最小公倍数

同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数


求最小公倍数算法:

最小公倍数=两整数的乘积÷最大公约数


求最大公约数算法:

(1) 辗转相除法

有两整数a和b:

  1. a%b得余数c
  2. 若c=0,则b即为两数的最大公约数
  3. 若c≠0,则a=b,b=c,再回去执行1

例如:求27和15的最大公约数过程为

  1. 27÷15余12
  2. 5÷12余3
  3. 12÷3余0

因此,3即为最大公约数


代码实现:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* 最大公约数
*/
public int getGCD(int m, int n) {
if (n == 0) {
return m;
}
return getGCD(n, m % n);
}

/**
* 最小公倍数
* @param m
* @param n
* @return
*/
public int getLCM(int m, int n) {
int mn = m * n;
return mn / getGCD(m, n);
}

/**
* 辗转相除求最大公约数
* 有两整数a和b:
* ① a%b得余数c
* ② 若c=0,则b即为两数的最大公约数
* ③ 若c≠0,则a=b,b=c,再回去执行①
*/
public int divisionGCD(int m, int n) {
int a;
while (n != 0) {
a = m % n;
m = n;
n = a;
}
return m;
}
/**
* 相减法求最大公约数
* 有两整数a和b:
* ① 若a>b,则a=a-b
* ② 若a<b,则b=b-a
* ③ 若a=b,则a(或b)即为两数的最大公约数
* ④ 若a≠b,则再回去执行①
*/
public int subtractionGCD(int m,int n){
while(m != n){
if (m>n){
m = m-n;
}else {
n = n - m;
}
}
return m;
}

早些天不忙的时候看的入门,从有道云笔记搬过来的

简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景

  1. Web 应用的自动化打包和发布。
  2. 自动化测试和持续集成、发布。
  3. 在服务型环境中部署和调整数据库或其他的后台应用。
  4. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Read more »

昨天在群里看到有人问怎么通过sql在oracle中取微秒

以前没有遇到过,就搜索了一下,找了一会给找到了

1
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss ff') from dual;

输出:年-月-日 时:分:秒 微秒

1
2017-9-24 10:38:27 129368

很少问题是搜索引擎找不到的,学会如何描述问题才是关键

概述

布隆过滤器的作用是加快判定一个元素是否在集合中出现的方法。

因为其主要是过滤掉了大部分元素间的精确匹配,故称为过滤器。


其应用场景为需要频繁在一个海量的集合中查找某个元素是否存在。

并且通常,这个值不在集合中。

比如Google chrome用此方法检查一个url是否在恶意url库中。

简单的例子

假设有一些字符串,假设有一个字符串a,要在集合B中查找其是否在集合B中。最笨的方法是遍历集合B中的每个元素bi,精确匹配a是否等于bi。若集合B中有N个元素,则最坏情况下需要执行N次精确匹配。

一个改进的方法是将a和B中每个字符串按照特定规则映射为数字,称为hash值。规则可以任意设置。比如取各字符串的首字母和尾字母的编码之乘积,取奇数个字符的编码执行异或,等。将比较字符串问题变成一个比较数字的问题。比较字符串需要从头到尾比较,而数字的比较会快很多。

需要注意的是,当两个字符串相同时,采用相同的映射规则得到的数字一定相同。但当两个字符串不同时,得到的字符串不一定不同。所以,当我们发现两个字符串的hash值相同时,两个字符串不一定相同,所以需要进一步去精确匹配两个字符串是否相同。但采用hash值方法已经能够过滤掉一部分以前需要精确匹配的计算量。仅当hash值相同(假设hash值通过字符串首尾字母计算得来,则当两个字符串首尾字母相同时hash值相同)时才去比较字符串本身。若选择hash值合理,则性能将大幅提高。

布隆过滤器通过将一个字符串使用多个不同的hash值计算方法,映射为多个不同的hash值,当所有这些hash值完全相同时,才认为两个字符串相同。从而进一步降低了放生hash值相同的可能性,从而进一步提高了过滤的性能。

Java代码实现

算法使用了md5值来生成n个不同的hash值

Read more »

执行命令:(装完就开机启动)

1
2
3
wget --no-check-certificate -O shadowsocks-libev-debian.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian.sh
chmod +x shadowsocks-libev-debian.sh
./shadowsocks-libev-debian.sh 2>&1 | tee shadowsocks-libev-debian.log

默认设置:

1
2
3
服务器端口:自己设定(如不设定,默认为 8989)
密码:自己设定(如不设定,默认为 teddysun.com)
加密方式:自己设定(如不设定,默认为 aes-256-gcm)

管理命令:

1
2
3
4
启动:/etc/init.d/shadowsocks start
停止:/etc/init.d/shadowsocks stop
重启:/etc/init.d/shadowsocks restart
查看状态:/etc/init.d/shadowsocks status

修改配置文件(端口、密码)

1
2
3
4
5
6
7
8
9
10
11
vi /etc/shadowsocks-libe/config.json
{
"server":"0.0.0.0",
"server_port":9090,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"password",
"timeout":600,
"method":"aes-256-gcm"
}

卸载命令

1
./shadowsocks-libev-debian.sh uninstall

IntelliJ IDEA 调试窗口、帮助窗口、搜索框、底部消息等中文乱码

在使用的过程中发现,搜索框历史、提交svn后的消息提示乱码

最后发现是由于更改了idea界面的字体,字体对中文支持不佳导致

解决办法:更改为支持中文的字体(比如:微软雅黑 Microsoft YaHei)

设置路径:Settings -> Appearance & Behavior -> UI Options -> override default fonts by

选择何时的字体即可,也可以把勾勾去掉,使用默认的。

JWT简介

JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。

JWT生成的token

欲加密的字符:hisen
加密后的字符:(分三段)

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjoiXCJoaXNlblwiIiwiZXhwIjoxNTAyOTY0Mjk2fQ.gzg4JEm8Z-GoU9eNaNll9I1wQQ0cEAbZC9OBUjAAQqI

JWT的构成

Read more »