袁隆平院士给妈妈的信《妈妈,稻子熟了》

稻子熟了,妈妈,我来看您了。

本来想一个人静静地陪您说会话,安江的乡亲们实在是太热情了,天这么热,他们还一直陪着,谢谢他们了。

妈妈,您在安江,我在长沙,隔得很远很远。我在梦里总是想着您,想着安江这个地方。

解决GitHub官网打不开问题

GitHub经常打不开,或者打开特别慢,一种解决方案是 找到官网IP地址、CDN域名IP地址、静态资源IP地址,然后配置本机hosts文件,刷新DNS缓存即可。

查询三个域名的IP:

添加获取的对应IP地址到本地hosts文件

MacOS或Linux环境hosts文件路径/etc/hosts ; Windows环境是C:\Windows\System32\drivers\etc

以下是在MacOS或Linux环境下:

% sudo cat <<EOF>>/etc/hosts
# github.com
140.82.113.3 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.109.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
EOF

刷新DNS

% ipconfig /flushdns # in windows
% sudo systemctl restart network-manager # in Linux that use systemd as init
% sudo killall -HUP mDNSResponder # in MacOS

grpc-go: 客户端与服务器之间双向证书验证通信

  • 生成根证书(ca.key, ca.crt)
%> openssl genrsa -out ca.key 2048
%> openssl req -new -x509 -days 3650 \
     -subj "/C=CN/L=Shanghai/O=grpc/CN=grpc.me"
     -key ca.key -out ca.crt
  • 生成服务器证书(server.key, server.crt)
%> openssl genrsa -out server.key 2048

# 未使用CA签名的server.crt
%> openssl req -new -x509 -days 3650 \
     -subj "/C=CN/L=Shanghai/O=grpc-server/CN=server.grpc.me" \
     -key server.key -out server.crt
 
# 使用CA签名的server.crt
%> openssl req -new \
     -subj "/C=CN/L=Shanghai/O=grpc-server/CN=server.grpc.me" \
     -key server.key -out server.csr
%> openssl x509 -req -sha256 \
     -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 \
     -in server.csr -out server.crt

使用Dnsmasq 实现 hosts 泛解析

$> sudo dnf install dnsmasq -y # 安装 Dnsmasq 
$> sudo cp /etc/dnsmasq.conf{,bak} # 先把配置文件备份一份
$> sudo vim /etc/dnsmasq.conf
# 严格按照 resolv-file 文件中的顺序从上到下进行 DNS 解析, 直到第一个成功解析成功为止
strict-order

# 监听的 IP 地址
listen-address=127.0.0.1

# 设置缓存大小
cache-size=10240

# 泛域名解析,访问任何 baidu.com 域名都会被解析到 6.6.6.6
address=/baidu.com/6.6.6.6

域名解析默认读取 /etc/hosts 文件到本地域名配置文件(不支持泛域名)。

DNS 配置默认读取 /etc/resolv.conf 上游 DNS 配置文件,如果读取不到 /etc/hosts 的地址解析,就会转发给 resolv.conf 进行解析地址。

如何在Fedora 33命令行模式下禁止睡眠

切换启动模式:

%> systemctl get-default # 获取当前启动模式
%> systemctl set-default multi-user.target # 默认命令行模式启动
%> systemctl set-default graphical.target # 默认图形模式启动

笔记本进入睡眠状态后,很多服务不能远程连接使用,例如 SSH 会连接不上,需要修改一下配置:

%> systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target # 禁止睡眠

%> systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target # 启用睡眠
 
%> vi /etc/systemd/logind.conf # 配置盖子(笔记本)
 
找到该行#HandleLidSwitch=suspend,将该行更改为以下所需的设置之一:
#关闭盖子时关闭计算机
HandleLidSwitch=poweroff
#在合上盖子时到休眠计算机
HandleLidSwitch=hibernate
#关闭盖子时暂停计算机
HandleLidSwitch=suspend
#不执行任何操作
HandleLidSwitch=ignore
 
%> systemctl restart systemd-logind # 保存文件,然后重新启动服务
%> service systemd-logind restart # 同上

乐观锁和悲观锁的区别

乐观锁

在关系数据库管理系统里,乐观并发控制(又名乐观锁,Optimistic Concurrency Control,缩写 OCC)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。

乐观并发控制的阶段

乐观并发控制的事务包括以下阶段:

  1. 读取:事务将数据读入缓存,这时系统会给事务分派一个时间戳。
  2. 校验:事务执行完毕后,进行提交。这时同步校验所有事务,如果事务所读取的数据在读取之后又被其他事务修改,则产生冲突,事务被中断回滚。
  3. 写入:通过校验阶段后,将更新的数据写入数据库。

乐观并发控制多数用于数据争用不大、冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据的成本,因此可以获得比其他并发控制方法更高的吞吐量。

相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。一般的实现乐观锁的方式就是记录数据版本。

数据版本,为数据增加的一个版本标识。当读取数据时,将版本标识的值一同读出,数据每更新一次,同时对版本标识进行更新。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的版本标识进行比对,如果数据库表当前版本号与第一次取出来的版本标识值相等,则予以更新,否则认为是过期数据。

实现数据版本有两种方式,第一种是使用版本号,第二种是使用时间戳。 使用版本号实现乐观锁

使用版本号时,可以在数据初始化时指定一个版本号,每次对数据的更新操作都对版本号执行+1操作。并判断当前版本号是不是该数据的最新的版本号。