0%

ElasticSearch 6.6.1 发布于 2019-02-20,目前以下已知的新特性:

  • 6.5.4 开始支持 Java 11,Java 11 是一个 LTS 版本(发布于2018.9,支持到2026),上一个版本是 Java 8(发布于2014.3,支持到2025)
  • 支持 G1 GC
  • 基于 Lucense 7.6
  • 支持索引生命周期特性

建议 6.x 系列直接使用 6.8.x,因为自 6.8.0 和 7.1.0 开始, X-PACK 的安全功能免费提供 HTTP Basic 认证与鉴权。

阅读全文 »

在编写多线程代码时,往往是通过自己调用 new 实例化出来的线程类(Thread或Runnable)来实现。这时 Spring 无法使用 Autowired 进行自动注入。

原因是在 Spring 中,Spring 只能自动注入由它自己管理(创建)的组件。

实际和多线程并没有太多的关系,但是可以放到一起来看。

阅读全文 »

SpringBoot 默认会集成 spring-boot-maven-plugin 这个组件,需要打包成可执行的 jar 包,只需要在其中添加一个配置项 executable

1
2
3
4
5
6
7
8
9
10
11
12
13
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
...

接下来就可以使用 java -jar test.jar 直接执行了。

可以讲其连接到 /etc/init.d 目录下,配置成 Linux 服务,并配置开机自启动

1
2
3
ln -s test.jar /etc/init.d/test

chkconfig test on

关闭相关服务

1
2
3
4
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld
systemctl disable firewalld

修改系统语言

1
2
vi /etc/locale.conf
LANG="zh_CN.UTF-8"

关闭 SELINUX(需要重启)

1
2
vi /etc/sysconfig/selinux
SELINUX=disabled

安装常用包

1
2
yum -y install net-tools bash-completion wget
yum -y install mlocate screen ntp unzip zip parted rsync tree vim lrzsz tcpdump telnet sysstat lsof strace iptraf iotop hdparm

修改时区,并开启时间同步

1
2
3
4
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate us.pool.ntp.org
echo "0 */8 * * * /usr/sbin/ntpdate us.pool.ntp.org >> /var/log/ntp.log" >> /var/spool/cron/root
systemctl restart crond

安装 Squid

1
yum -y install squid httpd-tools openssl

生成密码文件

1
htpasswd -c /etc/squid/password squid

修改配置文件

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
vi /etc/squid/squid.conf
http_port 31283

# proxy
via off
forwarded_for delete

# acl
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

acl Safe_ports port 80
acl Safe_ports port 443

# auth
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/password
auth_param basic realm welcome
acl authenticated proxy_auth REQUIRED

# proviliges
http_access deny !Safe_ports
http_access allow local-net
http_access allow authenticated
http_access deny all

启动与重启

systemctl start squid
systemctl enable squid

通过 netstat 检查端口监听

观察者模式:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。

观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

阅读全文 »

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

具有完整的产品接口、产品实现、工厂接口、工厂实现。

阅读全文 »

抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。多个产品等级结构构成了一个产品族。

阅读全文 »

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

单例类拥有一个私有构造函数,确保用户无法通过 new 关键字直接实例化它。 除此之外,该模式中包含一个静态私有成员变量与公有的方法,该方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

阅读全文 »

单一职责原则

对于一个类而言,应该仅有一个引起它变化的原因。

如果一个类承担的职责过多,等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计。

开放-封闭原则

开放-封闭原则:软件实体(类、模块、函数)应该是可以扩展的,但是不可以修改。

无论模块多么封闭,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员对于模块应该对哪种变化封闭做出选择。等到变化发生时立即采集行动。

面对需求,对程序的改动应该是通过增加新代码进行,而不是更改现有的代码。

依赖倒转原则

抽象不应该依赖细节,细节应该依赖于抽象。

针对接口编程,不要对实现编程。

高层模块不应该依赖底层模块。

程序的执行实例称为进程,Unix确保每个进程都有一个唯一的标识,即进程ID。

创建新进程 fork

一个现有的进程可以调用 fork 函数创建一个新进程。

fork函数被调用一次,但返回两次。区别是子进程返回值是0,父进程返回是子进程的进程ID,这样做是因为:

  • 一个进程的子进程可以有多个,没有一个函数可以获得所有子进程的进程ID
  • 一个子进程只会有一个父进程,子进程可以调用 getppid 获得父进程的进程ID

fork 之后,父进程与子进程一起向下执行,子进程获得父进程的数据空间、堆、栈。子进程是父进程的副本。子进程并不共享存储空间部分。但是共享正文段(CPU执行机器指令部分)

父进程先执行还是子进程先执行是不确定的,这取决于内核使用的调度算法。如果要求父子进程之间互相同步,则要求某种形式的进程间通信。

父进程与子进程区别如下:

  • fork返回值不同
  • 进程ID不同
  • 子进程的进程时间设置为0
  • 子进程的未处理闹钟被清除
  • 子进程的未处理信号集设置为空

fork失败的主要原因:

  • 系统有太多的进程
  • 该用户ID的进程总数超出系统限制
阅读全文 »