java代码中静态读取文件信息进行初始化

java代码中静态读取文件信息进行初始化

1
2
3
Properties pro = new Properties();//专门读取properties文件
pro.load(ClassA.class.getClassLoader().getResourcesAsStream("classA.properties"));// 文件位于src目录下
String info = pro.getProperty("info");//获取properties文件中的info属性

市场经济vs计划经济

市场经济vs计划经济

计划经济 市场经济
所有制 一般公有 一般私有
激励机制 公共利益 个人利益
资源配置引导机制 命令或计划 市场
决策方式 集中 分权
经济自由
国家干预 干预 不干预
福利政策

基于分布式架构的旅游平台开发日志

基于分布式架构的旅游平台开发日志


2020.4.3

开始写开发日志

感觉有必要将问题都整理起来,不然以后遇到还是会捉急。

开发的进程也要写清楚,这样以后总结起来也会方便很多。

完成内容:

  • Feign的基本使用,并将Region Service和Hotel Service

  • Elastic Search的搜索功能方法基础实现完成,关键词搜索和地域搜索都完成了。

Kibana学习

Kibana学习

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#获取所有索引库
GET _cat/indices?v

GET _search
{
"query": {
"match_all": {}
}
}

#get specific
GET /user/userinfo/6

#get all
GET /user/userinfo/_search

#Sort AND Page
GET /user/userinfo/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 3
}

#Specific Search
GET /user/userinfo/_search
{
"query": {
"match_all": {

}
}
}

#Create new indic
PUT /user

#Create mapping
PUT /user/userinfo/_mapping
{
"properties":{
"name":{
"type":"text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"city":{
"type":"text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"age":{
"type":"long",
"store": false
},
"description":{
"type":"text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
}
}
}

#Insert Info
PUT /user/userinfo/1
{
"name":"zhangsan",
"city":"Guangdong",
"age":20,
"description":"zhangsan is a boy."
}
#Insert Info
PUT /user/userinfo/2
{
"name":"lisi",
"city":"Shanghai",
"age":19,
"description":"lisi is a shanghai boy."
}
#Insert Info
PUT /user/userinfo/3
{
"name":"wangwu",
"city":"Guangdong",
"age":25,
"description":"wangwu is a guangdong handsome man."
}
#Insert Info
PUT /user/userinfo/4
{
"name":"xiaohong",
"city":"Beijing",
"age":15,
"description":"xiaohong is a Beijing girl."
}


#Insert Info
PUT /user/userinfo/5
{
"name":"kris",
"city":"American",
"age":17,
"description":"kris is a sicuan cool boy.",
"sex":"boy"
}

#Insert Info
#Or replace the original info
PUT /user/userinfo/6
{
"name":"xiaomei",
"city":"sicuan",
"age":18,
"description":"xiaomei is a sicuan hot girl."
}

#update the original info
POST /user/userinfo/6/_update
{
"doc": {
"name":"rio",
"age":23,
"description":"rio is a sicuan smart woman"
}
}

#deleted
DELETE /user/userinfo/6
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
#nested 查询
GET /hotel/_search
{
"query": {
"nested" : {
"path": "rooms",
"query": {
"match": {
"rooms.roomId": 1
}
}
}
}
}

GET /hotel/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "rooms",
"query": {
"match": {
"rooms.roomBedAdd": -1
}
}
}
}
]
}
}
}
GET /hotel/_search
{
"query": {
"match_all": {}
}
}

纯数字文本中获取最大数字

纯数字文本中获取最大数字

1
2
3
4
5
6
7
8
9
10
11
# number.txt

232
123 456 789
856 45
12
458
65 5 89 654 2123 544
45 88 46 53 64 87 998 112 456 789 654


1
2
3
4
5
6
7
8
# 将空格换成换行符
cat number.txt |sed 's/ /\n/g'
# 以及将空行去掉
cat number.txt |sed 's/ /\n/g' |grep -v "^$"
# 添加排序
cat number.txt |sed 's/ /\n/g' |grep -v "^$" |sort -nr
# 添加输出限制,只显示最大和最小的,即在文本中第一位和最后一位的
cat number.txt |sed 's/ /\n/g' |grep -v "^$" |sort -nr|sed -n '1p;$p'

Apache,MySQL,PHP安装功能函数

Apache,MySQL,PHP安装功能函数

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
#!/bin/bash
#auto install apache

#Httpd define path variable
H_FILES=httpd-2.2.27.tar.bz2
H_FILES_DIR=httpd-2.2.27
H_URL=http://mirrors.cnnic.cn/apache/htpd/
H_PREFIX=/usr/local/apache2/
#MySQL
M_FILES=...
M_FILES_DIR=...
M_URL=...
M_PREFIX=...
#PHP
P_FILES=...
P_FILES_DIR=...
P_URL=...
P_PREFIX=...

MODULE=NOTHING

function Menu(){
echo "--------------------------------------------------"
echo "Please choose to install the following optional modules."
select i in "Apache" "MySQL" "PHP"
do
case $i in
Apache)
$MODULE=$H_FILES_DIR
ApacheInstall
;;
MySQL)
$MODULE=$M_FILES_DIR
MySQLInstall
;;
PHP)
$MODULE=$P_FILES_DIR
PHPInstall
;;
*)
echo "FOUND NOTHING BY USING SUPPORTED ARGUMENT"
;;
done

}

function ApacheInstall(){
echo "The Apache Server wait install..."
wget -c $H_URL/$H_FILES && tar -jxvf && cd &H_FILES_DIR && ./configure --prefix=$H_PREFIX

if [ $? -eq 0 ];then
make && make install
echo "--------------------------------------------------"
echo "$MODULE Server Installation succeed!"
else
echo "$MODULE Make or Make install ERROR, Please Check...."
exit 0
fi
}

function MySQLInstall(){
...
}

function PHPInstall(){
...
}

Menu

自动备份Mysql Shell脚本

自动备份Mysql Shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

#auto backup mysql db

BACK_DIR=/data/backup/`date + %y%m%d`
MYSQLDB=discuz
MYSQLUSR=backup
MYSQLPW=123456
MYSQLCMD=/usr/bin/mysqldump
if [ $UID -ne 0];then
echo "Must to be use root for exec shell"
exit
fi

if [ ! -d $BAcK_DIR];then
mkdir -p $BAcK_DIR
echo "\033[32mThe $BACK_DIR Create Successfully!"
else
echo "This $BACK_DIR is exists."
fi

$MYSQLCMD -u$MYSQLUSR -p$MYSQLPW discuz >$BACK_DIR/$MYSQLDB.sql

经济学分类以及对比

微观经济学vs宏观经济学

差别 微观经济学 宏观经济学
市场 某个具体市场 所有的市场
供给 某个产品的供给 所有供给
需求 某个产品的需求 所有的需求
生产者 某个生产者 所有生产者
价格 某个产品价格 总价格

实证经济学vs规范经济学

实证经济学 规范经济学
研究视角 实际是什么 应该是什么
对过去解释:实际发生了什么,是怎么发生的。 对过去的判断:已经发生的事情是否应该
对未来预测:将来会发生什么,是怎么发生的 对未来的判断:应该怎么做
诊断还是药方 诊断,具有描述性和分析性 药方,具有建议性
需要预设立场吗 不需要 需要
存在领域 纯粹的经济理论 经济政策下
是否正确 一般可以验证,取决于研究方法和技巧 无法客观验证,取决于立场

实证经济学和规范经济学面对收入分配与增长的结论

实证经济学 规范经济学
收入分配与增长 中国市场化的过程导致了收入分配两极分化 这表明,中国的经济改革存在着缺陷(重视公平)
尽管如此,这可以接受(重视增长)
改革带来收入分配差距增大,但这是促进经济增长的必要代价 不需要这样的经济增长
需要这样的经济增长
中国市场化的过程未导致收入分配的两极分化 这样的市场化是可取的
是否如此无关紧要

实证经济学的结论是客观的,需要验证正确与否

规范经济学的结论取决于预设立场,无法验证

Java面试准备

Java面试题

  1. 操作数栈的题:
1
2
3
4
5
6
7
8
9
public static void main(String[] args){
int i = 1;
i = i++;
int j = i++;
ink k = i + ++i * i++;
System.out.println("i=" + i);
System.out.println("j=" + j);
System.out.println("k=" + k);
}

重点:字节码,i++,操作数栈,运算符优先级

=运算符是最后运算的

操作数栈压入参数的顺序是=后从左到右依次压入,而四则运算何时进行并不是依次的,而是要考虑运算符优先级。

+-*/四则运算需要将变量先压入操作数栈在取出操作数栈中的数进行运算后再将临时结果压入操作数栈中,等待取出结果。

++运算符是直接对局部变量表中的变量直接操作的,不经过操作数栈。

结果输出:

1
2
3
i = 4
j = 1
k = 11
  1. 单例模式Singleton

特点

  • 只能有一个实例
    • 构造器
  • 必须自行创建实例
    • 使用一个静态变量来保存这个唯一的实例
  • 必须自行向系统提供该实例
    • 直接暴露
    • 静态变量的get方法获取

常见形式:

  • 饿汉式:直接创建对象,不存在线程安全问题

    - 直接实例化饿汉式(简洁直观)
    
    1
    2
    3
    4
    5
    6
    7
    // 不考虑是否需要实例该单例
    // 静态变量
    public static final Singleton instance = new Singleton();
    // 构造器
    private Singleton(){

    }
    - 枚举式(最简洁)
    
    1
    2
    3
    4
    5
    // 表示该类型的对象是有限的几个
    public enum Singleton{
    INSTANCE1,
    INSTANCE2
    }
    - 静态代码块饿汉式(适合复杂实例化)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static final Singleton INSTANCE;
    static{
    INSTANCE = new Singleton();
    ...
    //需要进行一定的初始化
    //或者需要从文件中获取属性值
    }
    private Singleton(){

    }
  • 懒汉式:延迟创建对象

    - 线程不安全(适用于单线程)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private static Singleton instance;
    private Singleton(){

    }
    public static Singleton getInstance(){
    if(instance == null){
    instance = new Singleton();
    }
    return instance;
    }
    - 线程安全(适用于多线程)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private static Singleton instance;
    private Singleton(){

    }
    public static Singleton getInstance(){
    if(instance == null){
    synchronized (Singleton.class){
    if (instance == null){
    try{
    Thread.sleep(100);
    }catch(Exception e){
    e.printStackTrace();
    }

    instance = new Singleton();
    }
    }
    }
    return instance;
    }
    - 静态内部类形式(适用于多线程)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private Singleton(){

    }
    // 在内部类加载和初始化时创建的,因此是线程安全的
    private static class Inner{
    private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
    return Inner.INSTANCE;
    }