分类
Java 笔记

阿里云自动动态地址解析

家里找电信开通了动态公网地址,每天IP会变一次。我的域名是在阿里云申请的,路由器只支持花生壳和公云的DDNS设置,每天手动变更一次域名指向麻烦,利用阿里云的API,写了一个动态更新的小工具。

首先在阿里云后台申请创建AccessKey:

分类
Bash

怎样用 Bash 编程:逻辑操作符和 shell 扩展

逻辑操作符是程序中进行判断的根本要素,也是执行不同的语句组合的依据。有时这也被称为流控制。

逻辑操作符

Bash 中有大量的用于不同条件表达式的逻辑操作符。最基本的是 if 控制结构,它判断一个条件,如果条件为真,就执行一些程序语句。操作符共有三类:文件、数字和非数字操作符。如果条件为真,所有的操作符返回真值(0),如果条件为假,返回假值(1)。

这些比较操作符的函数语法是,一个操作符加一个或两个参数放在中括号内,后面跟一系列程序语句,如果条件为真,程序语句执行,可能会有另一个程序语句列表,该列表在条件为假时执行:

if [ arg1 operator arg2 ] ; then list
或
if [ arg1 operator arg2 ] ; then list ; else list ; fi

像例子中那样,在比较表达式中,空格不能省略。中括号的每部分,[ 和 ],是跟 test 命令一样的传统的 Bash 符号:

if test arg1 operator arg2 ; then list

还有一个更新的语法能提供一点点便利,一些系统管理员比较喜欢用。这种格式对于不同版本的 Bash 和一些 shell 如 ksh(Korn shell)兼容性稍差。格式如下:

if [[ arg1 operator arg2 ]] ; then list
分类
Linux

怎样用 Bash 编程:语法和工具

Shell 是操作系统的命令解释器,其中 Bash 是我最喜欢的。每当用户或者系统管理员将命令输入系统的时候,Linux 的 shell 解释器就会把这些命令转换成操作系统可以理解的形式。而执行结果返回 shell 程序后,它会将结果输出到 STDOUT(标准输出),默认情况下,这些结果会显示在你的终端。所有我熟悉的 shell 同时也是一门编程语言。

Bash 是个功能强大的 shell,包含众多便捷特性,比如:tab 补全、命令回溯和再编辑、别名等。它的命令行默认编辑模式是 Emacs,但是我最喜欢的 Bash 特性之一是我可以将其更改为 Vi 模式,以使用那些储存在我肌肉记忆中的的编辑命令。

分类
笔记 软件

IntelliJ IDEA 启动报错

打开idea报错:Address already in use: bind

昨天还用的好好的,只是后来升级Android Studio插件失败过。Android Studio是Google基于Idea开发的,所以会不会是这个影响?

打开Android Studio,发现也报错。

分类
网络

PAC脚本语法(代理自动配置)

现在浏览器基本都支持PAC格式的代理脚本。本文仅介绍PAC脚本语法,并不解释使用方法。

示例脚本

function FindProxyForURL(url, host) {
    // our local URLs from the domains below example.com don't need a proxy:
    if (shExpMatch(host, "*.example.com")) {
        return "DIRECT";
    }

    // URLs within this network are accessed through
    // port 8080 on fastproxy.example.com:
    if (isInNet(host, "10.0.0.0", "255.255.248.0")) {
        return "PROXY fastproxy.example.com:8080";
    }

    // All other requests go through port 8080 of proxy.example.com.
    // should that fail to respond, go directly to the WWW:
    return "PROXY proxy.example.com:8080; DIRECT";
}
分类
Java 日记 笔记

Sharding JDBC Demo 2.0 (主从版)

从今年初接触Sharding JDBC 4.0到现在,近一年了,用来做日志和消息分表一直运行,没什么大的问题。前些天生产新上了一个服务,是因为Sharding JDBC把select for update语句解析为查询,在从库中执行,因为从库是只读权限所以报错。

之前没在测试环境发现这个问题,是因为测试环境数据库没有主从。想起当时刚接触Sharding JDBC写的Demo,于是整理一番,重新拉分支,并完善整个流程,模拟真实场景。

分类
Linux 容器 笔记 网络

UFW防火墙规则对Docker映射端口无效

在自己的服务器开启防火墙,使用UFW设置规则:

ufw default deny

默认禁用所有连接,测试发现,用Docker运行的APP端口能正常访问。

UFW是为了简化Iptables产生的,它在Iptables有自己的规则链。Docker在启动时在Iptables会创建自己的规则链,所以不生效。

分类
Java

Spring 框架的设计理念与设计模式分析

Spring 的骨骼架构

Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图:

图 1 .Spring 框架的总体架构图

从上图中可以看出 Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。下面也将主要从这三个组件入手分析 Spring。

分类
Windows 日记

笔记本关闭睿频(注册表篇)

笔记本在睿频时耗电量增加,风扇声会很大。平时浏览网页写写文档完全可以关闭睿频。关闭睿频只需把处理器电源管理中CPU最大使用设为99%,系统扇热方式设为被动即可。详细可参考:Windows设置处理器电源管理

系统升级为Win10 20H2后发现处理器电源设置选项消失,注册表电源管理没有”CsEnabled”项。即使手动增加项,设置值也不生效。另一台台式机同样版本系统是有该设置项的。

也许是新系统的设置变更,也有电源管理驱动原因,想着通过修改注册表来设置。网上找了一轮,遇到一样问题的人有,就是没人给出解决办法。直接在注册表里找设置项如大海捞针。我在用电源命令工具查看设置项,无意中找到方法。

分类
Linux

Ubuntu 合上笔记本禁止休眠

合上笔记本盖不进入休眠。在Ubuntu的电源管理没有找到相应设置,可以手动修改配置文件完成。

vi /etc/systemd/logind.conf

打开logind.conf配置文件,找到:

HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend

修改为:

HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore

重启生效!