憨憨呆呆的IT之旅

我见,我思,我行

centos从7之后默认使用firewalld作为防火墙配置服务, 很多Linux老手不熟悉,还是喜欢原汁原味的iptables。这里整理一下如何把firewalld换回iptables

安装iptables-service

首先检查是否安装了iptables,如果没有安装,需要先安装:

1
yum install -y iptables

若已经安装了,先升级:

1
yum update iptables

再安装iptables-service:

1
yum install -y iptables-service

停用自带的firewalld

1
2
systemctl stop firewalld
systemctl disable firewalld

开启iptables-service

1
2
systemctl enable iptables.service
systemctl start iptables.service

OK,接下来就可以用iptables愉快地玩耍了。更多iptables设置请参考这篇文章

iptables初始设置

这是一份来自网友清园的iptables初始设置清单,供有选择地参考:

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
#查看iptables现有规则
iptables -L -n
#先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT
#清空所有默认规则
iptables -F
#清空所有自定义规则
iptables -X
#所有计数器归0
iptables -Z
#允许来自于lo接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
#开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#开放21端口(FTP)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丢弃
iptables -P INPUT DROP
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律丢弃
iptables -P FORWARD DROP

iptables常用规则

1. 删除现有规则

1
iptables -F

2. 阻止某个特定ip

比如,要阻止101.101.101.101这个ip的访问:

1
iptables -A INPUT -s 101.101.101.101 -j DROP

3. 只允许内网访问某端口

比如,对于mysql默认端口3306,只能从内网访问:

1
2
iptables -A INPUT --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT --dport 3306 -j DROP

更多规则可参考这篇文章

iptables规则的保存

首先确保启用iptables服务:

1
2
systemctl enable iptables.service
systemctl start iptables.service

然后使用

1
service iptables save

命令把规则保存到/etc/sysconfig/iptables文件里。这样这样当计算机重启时,可自动重新加载。

名词解释

静态代码块:类中以*static {}*形式包围起来的代码块,Jvm加载类时执行,仅执行一次。
构造代码块:类中以*{}*形式包围起来的代码块,不包括方法中的普通代码块。每次创建对象时都要执行。
构造函数:每次创建对象时就会执行构造函数,构造函数的作用时给对象初始化。

单个类中的执行顺序

执行顺序

静态代码块 > 构造代码块 > 构造函数

验证

执行以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class HelloTest {
public HelloTest() {
System.out.println("执行 HelloTest() 构造函数");
}

{
System.out.println("执行构造代码块");
}

static {
System.out.println("执行静态代码块");
}

public static void main(String[] args) {
System.out.println("准备new第一个对象");
HelloTest one = new HelloTest();
System.out.println("准备new第二个对象");
HelloTest two = new HelloTest();
}
}

结果输出:

1
2
3
4
5
6
7
准备new第一个对象
执行静态代码块
执行构造代码块
执行 HelloTest() 构造函数
准备new第二个对象
执行构造代码块
执行 HelloTest() 构造函数

继承关系下的执行顺序

考虑父子继承情况,顺序又会是怎么样呢?

执行顺序

父类静态代码块 > 子类静态代码块 > 父类构造代码块 > 父类构造函数 > 子类构造代码块 > 子类构造函数

验证

执行以下代码:

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
public static class HelloA {
public HelloA() {
System.out.println("执行HelloA的构造函数");
}

{
System.out.println("执行HelloA的构造代码块");
}

static {
System.out.println("执行HelloA的静态代码块");
}
}

public static class HelloB extends HelloA {
public HelloB() {
System.out.println("执行HelloB的构造函数");
}

{
System.out.println("执行HelloB的构造代码块");
}

static {
System.out.println("执行HelloB的静态代码块");
}

public static void main(String[] args) {
HelloB b = new HelloB();
}
}

执行结果如下:

1
2
3
4
5
6
执行HelloA的静态代码块
执行HelloB的静态代码块
执行HelloA的构造代码块
执行HelloA的构造函数
执行HelloB的构造代码块
执行HelloB的构造函数

final成员变量的初始化方式

方法1:在定义变量时直接赋值

1
2
3
public final class MyString {
private final char value[] = "";
}

方法2:在构造函数中初始化

1
2
3
4
5
6
7
public final class MyString {
private final char value[];

public MyString() {
this.value = "".value;
}
}

方法3:在构造代码块中初始化

1
2
3
4
5
6
7
public final class MyString {
private final char value[];

{
this.value = "".value;
}
}

注意: 构造代码块会在构造函数之前被执行。构造代码块、静态代码块执行顺序

final静态变量的初始化方式

方法1: 在定义时直接赋值

1
2
3
public final class MyString {
private static final long serialVersionUID = -6849794470754667710L;
}

方法2: 在静态代码块中赋值

1
2
3
4
5
6
7
public final class MyString {
private static final long serialVersionUID;

static {
this.serialVersionUID = -6849794470754667710L;
}
}

关于静态代码块、构造代码块、构造函数的执行顺序,请参考我的另一篇blog:构造代码块、静态代码块执行顺序

  1. 安装依赖
    1
    2
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  2. 安装docker engine community
    1
    yum install -y docker-ce docker-ce-cli containerd.io
    此时,若报错:requires containerd.io >= 1.2.2-3 ,那就先通过rpm安装装新版的 containerd.io:
    1
    dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
    再安装docker-ce和docker-ce-cli:
    1
    yum install -y docker-ce docker-ce-cli
    检查安装:
    1
    docker -v
  3. 设置开机启动docker服务
    1
    systemctl enable docker
  4. 启动docker服务
    1
    systemctl restart docker

Have fun!

我们编写java程序都需要遵循一定的编码规范。阿里巴巴提供了一个优秀的IDEA插件,用来检测代码是否符合《阿里巴巴Java开发手册》里规定的编码规范。

安装插件

安装方法很简单:
依次打开IDEA -> File -> Settings -> Plugins, 然后在搜索框里搜索alibaba,第一个就是“Alibaba Java Coding Guidelines”,点击安装即可。安装完成后,重启IDEA生效。

使用插件

在代码窗口右键,点击”编码规约扫描“即可启动扫描程序,对不符合阿里编码规范的地方会在底部Event Log窗口展示出来。

安装完JDK,我们接下来安装maven。
maven是java生态系统下的最普及的包管理软件,可以对Java项目进行构建和依赖管理。

下载安装maven

注意,maven是基于java构建的一个开源项目,因此安装maven之前需要先安装JDK。

下载

首先从maven官网下载最新版maven。

安装

maven是绿色软件,无需安装,直接解压即可。建议将maven解压到专门保存可执行程序的目录,比如 D:\Tools\apache-maven 这样的。

配置maven

配置环境变量

首先,新建环境变量 MAVEN_HOME,取值为: D:\Tools\apache-maven。(请根据你的maven实际解压目录调整)。
然后,编辑环境变量Path,追加%MAVEN_HOME%\bin
最后,使用mvn -version来测试环境变量是否配置完成。

配置本地仓库目录

maven本地仓库默认在C盘,为避免C盘空间不够,建议设置到其他磁盘分区。可如下操作:
首先,新建文件夹D:\Tools\apache-maven\repository用作本地仓库。
然后,修改配置文件 D:\Tools\apache-maven\conf\settings.xml的localRepository如下:

1
2
3
4
5
6
7
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\Tools\apache-maven\repository</localRepository>

可执行 mvn help:system 命令检查配置是否生效。

配置远程仓库

maven默认的中央仓库在国外,国内访问很慢。可以考虑使用阿里云的远程仓库来替代。
首先,在settings.xml文件的mirrors节点下增加如下内容:

1
2
3
4
5
6
7
8
9
<mirrors>
<!-- aliyun -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

可再次执行 mvn help:system 命令检查远程仓库配置是否生效。

java的安装配置比较简单。步骤如下:

安装java

Oracle官网下载最新版本,直接安装即可。

配置java

右键“我的电脑“选择”属性”,打开左侧菜单左下方的”高级系统设置“,再点击”环境变量(N)…“,完成以下两个步骤:

  1. 新建环境变量 JAVA_HOME
    新建->变量名”JAVA_HOME”,变量值C:\Java\jdk1.8.0_05(即JDK的安装路径)
  2. 设置环境变量 Path
    编辑->变量名”Path”,在原变量值的最后面加上 %JAVA_HOME%\bin
    然后,一路确定保存即可。

测试验证

打开 cmd,输入java -version 观察命令是否有效,以及版本号是否跟我们安装的版本一致。再输入javac -version检查命令是否存在,以及版本号是否正确。

安装git

git官方下载。
安装时一路next即可。

配置git

  1. 配置user和email账号

    1
    2
    git config --global user.name "your name"
    git config --global user.email "your email address"
  2. 创建SSH key

    1
    ssh-keygen -t rsa -C "your email address"

    以上命令将在用户目录下生成一个隐藏目录.ssh,里边有id_rsaid_rsa.pub两个密钥文件。这两个文件就是本机SSH的密钥对,前者是私钥,务必保密,后者是公钥,可以放心告诉其他人。

  3. 关联GitHub
    登录GitHub,点击右上角用户头像打开settings -> SSH and GPG keys页面,点击 Add SSH Key,将上一步生成的公钥id_rsa.pub文件内容拷贝到输入框,点Add Key保存即可。

大家都知道,新买的电脑只提供最基础的Win10系统程序,要满足我们日常使用,往往需要安装一大堆软件。找软件、装软件的过程索然无味,而且通常需要耗费大量时间。笔者最近就被新电脑折腾得够呛,因此基于自身认知和立场,整理出一份常用的软件清单,抛砖引玉,供大家参考。

系统基础

在畅快折腾之前,有必要安装一些基本的系统工具来扩展和优化系统的使用体验。

1. 应用市场/软件商店

应用市场又叫软件商店,它好比一个大集市,里边的软件应有尽有,有了应用市场,我们就不用到处费力的找软件的官网,再一个一个下载了。因此强烈建议优先安装应用市场,再通过应用市场安装其他软件。应用商店可选择第三方大牌的,也可以使用品牌电脑自带的。

  • 腾讯应用宝360软件管家
    笔者为了图省事,直接使用了联想自带的联想软件商店,跟上面两款功能都差不多。

2. 硬件驱动

新电脑自身不缺驱动,然而常常需要外接打印机等外设。这时候可以选择安装:

  • 驱动精灵

3. 安全防护

众所周知,针对Windows系统的病毒、木马很多,所以有必要安装一款合适的网络安全防护软件。可以选择综合性的杀毒+防火墙,如:

  • 腾讯电脑管家360电脑管家
    也可以安装专门的杀毒软件,如:
  • 金山毒霸Macfee

4. 输入法

不用纠结了,直接搜狗输入法即可。话说,微软自带的输入法也不错。

5. 文件管理

文件查找工具

墙裂推荐 everything, 小巧快速,比windows任务管理器好用一千倍。

压缩/解压工具

以前用过很长时间的winrar,因为没购买License,一直被winrar弹出的各种广告骚扰。新电脑我果断安装了免费的7zip,轻量小巧且无存在感,比较符合这种工具软件的定位。

音视频播放

视频播放器太多了,暴风影音QQ影音PotPlayer等随便选一个即可。能播放大部分格式的视频,甚至快过气的DVD。
音频播放一般不需要安装特定的软件,视频播放器就可以直接代劳了。

上网冲浪

网络时代,一台不联网的电脑,跟废品没多大差别。很多人买电脑的主要动机就是上网冲浪,包括查资料,追剧看电影,打游戏等等。

1. 浏览器

不必说了,chrome是首选。因为其他各种知名浏览器,如360急速浏览器QQ浏览器,大多是对chrome的同胞兄弟chromium开源项目的封装和扩展。

2. 网络视频

大家看网剧,通常都有喜欢的特定平台应用,比如腾讯视频爱奇艺优酷PC客户端搜狐视频PP视频芒果TV等。可根据自身喜好安装。

3. 聊天通讯

以下两大利器没得说,都是必装的:

  • 微信电脑版
  • QQTIM

4. 网络存储

首选 百度网盘

5. 网络下载

我一般只用 迅雷

6. 邮件收发

推荐 foxmail。没错,就是微信之父张小龙做的那个。

高效办公

常用办公软件。

1. 办公套件

不必说,以下两者功能几乎一模一样,完全可相互替代。二选一即可:

  • Microsoft Office
  • WPS Office

2. 远程办公

  • 阿里的钉钉
  • 头条的飞书
  • 腾讯的TIM,以及比较古老的RTX

3. 远程协助

屏幕远程协助推荐 team view

上面这些软件,基本上覆盖了大家日常上网和办公的高频场景,日常使用应该问题不大了。

0%