Finology 大数据金融

通过大数据以量化金融

在这里,我们通过程序来验证一下,Set集合和List的集合的各类集合操作各有什么不同。

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CollectionTest {
public static void main(String[] args) {

Set<Integer> set1 = new HashSet<Integer>() {
{
add(1);
add(3);
add(5);
}
};

Set<Integer> set2 = new HashSet<Integer>() {
{
add(1);
add(2);
add(3);
}
};

Set<Integer> result = new HashSet<>();

result.addAll(set1);
System.out.println("set1:" + set1);
System.out.println("set2:" + set2);
result.retainAll(set2);
System.out.println("set1与set2的交集是: " + result);

result.clear();
result.addAll(set2);
result.removeAll(set1);
System.out.println("set2与set1的差集是: " + result);

result.clear();
result.addAll(set1);
result.addAll(set2);

System.out.println("set1和set2的并集: " + result);
System.out.println("set集合并集,是去重复的");

// 测试List集合

List<Integer> list1 = new ArrayList<Integer>() {{
add(1);
add(3);
add(5);
}};

List<Integer> list2 = new ArrayList<Integer>() {
{
add(1);
add(2);
add(3);
}
};

List<Integer> list = new ArrayList<>();

list.addAll(list1);
System.out.println("list1: " + list1);
System.out.println("list2: " + list2);
list.retainAll(list2);
System.out.println("list1与list2的交集是: " + list);

list.clear();
list.addAll(list2);
list.removeAll(list1);
System.out.println("list2与list1的差集是:" + list);

list.clear();
list.addAll(list1);
list.addAll(list2);

System.out.println("list1和list2的并集: " + list);
System.out.println("List集合并集, 是不去重复的");

}
}

set1:[1, 3, 5]
set2:[1, 2, 3]
set1与set2的交集是: [1, 3]
set2与set1的差集是: [2]
set1和set2的并集: [1, 2, 3, 5]
set集合并集,是去重复的
list1: [1, 3, 5]
list2: [1, 2, 3]
list1与list2的交集是: [1, 3]
list2与list1的差集是:[2]
list1和list2的并集: [1, 3, 5, 1, 2, 3]
List集合并集, 是不去重复的

结论:Set集合的并集,是要去重的。而List的并集,是不会去重的。

用ssh连接远程服务器,如阿里云时,如果一段时间没有在ssh终端输入命令,就会断掉,然后又得重新登录,非常麻烦。解决方案如下:

1
vi /etc/ssh/sshd_config

找到下面两行

1
2
#ClientAliveInterval 0
#ClientAliveCountMax 3

去掉注释,改成

1
2
3
4
ClientAliveInterval 30
# 客户端每隔多少秒向服务发送一个心跳数据
ClientAliveCountMax 86400
# 客户端多少秒没有相应,服务器自动断掉连接

重启sshd服务

1
service sshd restart

查看系统当前时区

1
2
$ date -R
Tue, 20 Mar 2018 02:01:35 -0400

网上有一堆人说通过执行tzselect命令可以修改时区。我们先执行此命令尝试一下。

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
56
57
58
59
60
61
62
$ tzselect

Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4

Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9

Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

China
Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Tue Mar 20 14:05:28 CST 2018.
Universal Time is now: Tue Mar 20 06:05:28 UTC 2018.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

程序结束,我们执行date -R发现,时区并没有变化。

那就奇怪了,tzselect命令是用于干嘛的呢?那我执行man tzselect再看看。

1
2
3
4
5
6
7
8
9
10
11
12
13
DESCRIPTION
This manual page explains how you can use the tzselect utility to view the installed timezone. It comes handy when you want to know
what time it is in other countries, or if you just wonder what timezones exist.

tzselect is called without any parameters from the shell. It shows a list of about one dozen geographic areas one can roughly recog‐
nize as continents. After choosing a geographic area by number, a list of countries and cities in this area will be shown.

You can press the Enter key to reprint the list. To choose a timezone, just press the number left to it. If your input is invalid,
the list will be reprinted.

You may press Ctrl-C to interrupt the script at any time.

Note that tzselect will not actually change the timezone for you. Use 'dpkg-reconfigure tzdata' to achieve this.

注释中写得很清楚,tzselect命令只用于你查看系统存在哪些国家和时区,并且,此命令并不会真实的修改系统所在时区。我们需要执行dpkg-reconfigure tzdata来修改时区。

1
2
$ sudo dpkg-reconfigure tzdata
[sudo] password for root: ********
1
2
3
Current default time zone: 'Asia/Shanghai'
Local time is now: Tue Mar 20 14:16:40 CST 2018.
Universal Time is now: Tue Mar 20 06:16:40 UTC 2018.

执行结束,系统的时区才会真实的改变了。

1
2
$ date -R
Tue, 20 Mar 2018 14:17:25 +0800
0%