在使用CentOS时,如果中途升级或内核版本,或者某些依赖需要安装不同版本的内核,或者某些版本的内核无法启动,这时需要修改默认的启动内核版本,操作步骤如下
$ sudo cat /boot/grub2/grub.cfg | awk -F'--class' '/^menuentry/{print $1}'
menuentry 'CentOS Linux (3.10.0-1062.12.1.el7.x86_64) 7 (Core)'
menuentry 'CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)'
menuentry 'CentOS Linux (0-rescue-12d6d6c50a4740ee992241dd6aac5df8) 7 (Core)'
我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101
或者10101010
,十六进制就是55
或AA
。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完,则A不会重传这个数据包。
AutoHotkey 官网地址 https://www.autohotkey.com/,从官网可看到ahk可以干非常多的事情,可以让事情变得非常高效,官网给出的quickstart也非常简单,非常容易上手,我要分享的有两点:充分利用 Alt 键、常用APP一键切换,一键直达指定应用。
在Windows下的默认配置中,Alt 键的作用并不是那么大,在使用AutoHotkey之前,我用Alt键的地方主要有:
Ctrl + Alt + Delete
调出任务管理器。Alt + F4
关闭窗口,也不是很好用,因为F4键太远了。Alt + Tab
最近的两个窗口来回切换,这个可能是用的最多的了。所以,Alt
并没有充分利用起来,然后Alt
又占据了非常优秀键盘位置,离大拇指最近。所以你可以使用 AutoHotkey 把Alt
键充分利用起来。
# centos
sudo yum -y install dnsmasq
# ubuntu
sudo apt-get -y install dnsmasq
# 关掉默认的解析服务避免端口冲突
sudo systemctl stop systemd-resolved.service
sudo systemctl disable systemd-resolved.service
# 启动服务
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq
sudo systemctl status dnsmasq
/etc/hosts
文件。dnsmasq
的缓存。dnsmasq
配置的上游dns服务器地址。在脚本中需要并发执行多个命令,比如,需要同时登录到10台机器,并在10台机器是分别格式化磁盘。格式化磁盘是一个耗时的操作,如果顺序执行的话,会非常耗时。所以可以使用后台执行,使用wait命令等待所有的后台命令返回。
当有多个任务时需要同时运行时,可按照如下格式编写。
#!/bin/bash
func1(){
sleep 3
echo "$(date) func1" | tee /tmp/func1
}
在某些场景需要实时读取文件的新增内容,使用linux的命令行tail不是很容易操作,所有有了python版本的tail,方便直接加入到脚本。
tail.py
import os
import sys
import time
class Tail:
def __init__(self, tailed_file, interval_seconds=1.0, start_position="end"):
self.tailed_file = os.path.abspath(tailed_file)
self.check_file_validity()
self.callback = sys.stdout.write
if start_position not in ("start", "end"):
raise Exception("start_position must be: start or end")
self.start_position = start_position
self.interval_seconds = interval_seconds
JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
我们在Java代码中如果要访问MySQL,必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的。因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动。实际上,一个MySQL的JDBC的驱动就是一个jar包。
输入spark.read.
,tab键提示支持的类型
scala> spark.read.
csv format jdbc json load option options orc parquet schema table text textFile
package main
import (
"flag"
"fmt"
"os"
"time"
)
var (
version bool
help bool
port int
host string
score float64
sites argsSlice
period time.Duration
)
int分为有符号型(int)和无符号型(uint),从使用的角度说,区别就是能支持的数范围大小。
大端和小端解决的是内存地址和字节数据保存的顺序问题
大端存储:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。内存地址由小向大增加,而数据从高位往低位放,比如4个字节的数组[0 0 1 0]
表示十进制数 256。通常在计算机网络的TCP/IP协议中使用大端存储表示
小端存储:小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。高位内存地址和数据的高位相对应,低位内存地址和数据的低位相对应,比如4个字节的数组[0 1 0 0]
表示十进制数 256