2021-01-26 10:17:59    13    0    0

在使用CentOS时,如果中途升级或内核版本,或者某些依赖需要安装不同版本的内核,或者某些版本的内核无法启动,这时需要修改默认的启动内核版本,操作步骤如下

查看可用内核列表

  1. $ sudo cat /boot/grub2/grub.cfg | awk -F'--class' '/^menuentry/{print $1}'
  2. menuentry 'CentOS Linux (3.10.0-1062.12.1.el7.x86_64) 7 (Core)'
  3. menuentry 'CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)'
  4. menuentry 'CentOS Linux (0-rescue-12d6d6c50a4740ee992241dd6aac5df8) 7 (Core)'


2021-01-20 21:19:57    11    0    0

  我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完,则A不会重传这个数据包。


2021-01-13 21:15:50    11    0    0

一. 使用心得

AutoHotkey 官网地址 https://www.autohotkey.com/,从官网可看到ahk可以干非常多的事情,可以让事情变得非常高效,官网给出的quickstart也非常简单,非常容易上手,我要分享的有两点:充分利用 Alt 键、常用APP一键切换,一键直达指定应用。

1.1 充分地利用 Alt 键

在Windows下的默认配置中,Alt 键的作用并不是那么大,在使用AutoHotkey之前,我用Alt键的地方主要有:

  • Ctrl + Alt + Delete 调出任务管理器。
  • Alt + F4 关闭窗口,也不是很好用,因为F4键太远了。
  • Alt + Tab 最近的两个窗口来回切换,这个可能是用的最多的了。

所以,Alt 并没有充分利用起来,然后Alt又占据了非常优秀键盘位置,离大拇指最近。所以你可以使用 AutoHotkey 把Alt键充分利用起来。

2021-01-12 20:16:55    24    0    0

一. dnsmasq安装

  1. # centos
  2. sudo yum -y install dnsmasq
  3. # ubuntu
  4. sudo apt-get -y install dnsmasq
  5. # 关掉默认的解析服务避免端口冲突
  6. sudo systemctl stop systemd-resolved.service
  7. sudo systemctl disable systemd-resolved.service
  8. # 启动服务
  9. sudo systemctl start dnsmasq
  10. sudo systemctl enable dnsmasq
  11. sudo systemctl status dnsmasq
  • dnsmasq的解析顺序如下:
    • 寻找 /etc/hosts 文件。
    • 寻找 dnsmasq 的缓存。
    • 寻找 dnsmasq 配置的上游dns服务器地址。
2021-01-11 20:43:07    21    0    0

场景再现

在脚本中需要并发执行多个命令,比如,需要同时登录到10台机器,并在10台机器是分别格式化磁盘。格式化磁盘是一个耗时的操作,如果顺序执行的话,会非常耗时。所以可以使用后台执行,使用wait命令等待所有的后台命令返回。

解决方法

当有多个任务时需要同时运行时,可按照如下格式编写。

  1. #!/bin/bash
  2. func1(){
  3. sleep 3
  4. echo "$(date) func1" | tee /tmp/func1
  5. }
2021-01-11 20:42:11    10    0    0

在某些场景需要实时读取文件的新增内容,使用linux的命令行tail不是很容易操作,所有有了python版本的tail,方便直接加入到脚本。

一. 源码内容

  • tail.py
  1. import os
  2. import sys
  3. import time
  4. class Tail:
  5. def __init__(self, tailed_file, interval_seconds=1.0, start_position="end"):
  6. self.tailed_file = os.path.abspath(tailed_file)
  7. self.check_file_validity()
  8. self.callback = sys.stdout.write
  9. if start_position not in ("start", "end"):
  10. raise Exception("start_position must be: start or end")
  11. self.start_position = start_position
  12. self.interval_seconds = interval_seconds
2021-01-09 22:21:21    11    0    0

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

一. 基本概述

我们在Java代码中如果要访问MySQL,必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的。因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动。实际上,一个MySQL的JDBC的驱动就是一个jar包。

二. 准备依赖

  • 这里添加依赖的scope是runtime,因为编译Java程序并不需要MySQL的这个jar包,只有在运行期才需要使用。如果把runtime改成compile,虽然也能正常编译,但是在IDE里写程序的时候,会多出来一大堆类似com.mysql.jdbc.Connection这样的类,非常容易与Java标准库的JDBC接口混淆,所以坚决不要设置为compile。
2021-01-08 14:43:13    10    0    0

一. 支持类型查看

输入spark.read.,tab键提示支持的类型

  1. scala> spark.read.
  2. csv format jdbc json load option options orc parquet schema table text textFile


二. 两种读取方式

2021-01-04 15:50:18    15    0    0

一. flag

  • 最基础的命令参数解析库flag,他支持的类型较少,使用也不是太灵活,但是对于简单的程序已经足够使用了,如果想使用更高级的参数,请选择功能更强的 go-flags。
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "os"
  6. "time"
  7. )
  8. var (
  9. version bool
  10. help bool
  11. port int
  12. host string
  13. score float64
  14. sites argsSlice
  15. period time.Duration
  16. )
2021-01-03 16:12:12    16    1    0

一. int 转 []byte

  • int分为有符号型(int)和无符号型(uint),从使用的角度说,区别就是能支持的数范围大小。

    • 比如 int8 有符号型的范围是 -128 ~ 127
    • 比如 uint8无符号型的范围是 0 ~ 255

  • 大端和小端解决的是内存地址和字节数据保存的顺序问题

    • 大端存储:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。内存地址由小向大增加,而数据从高位往低位放,比如4个字节的数组[0 0 1 0]表示十进制数 256。通常在计算机网络的TCP/IP协议中使用大端存储表示

    • 小端存储:小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。高位内存地址和数据的高位相对应,低位内存地址和数据的低位相对应,比如4个字节的数组[0 1 0 0]表示十进制数 256