一本码簿

众里寻码千百度,那段却在github处。

初始安装

1
2
3
4
5
6
7
8
sh -c "$(wget -qO- https://haies.cn/assets/install-zsh.sh)"
sh -c "$(wget -qO- https://haies.cn/assets/apt-install.sh)"
sh -c "$(wget -qO- https://haies.cn/assets/debian-init.sh)"
sh -c "$(wget -qO- https://haies.cn/assets/centos-init.sh)"
sh -c "$(wget -qO- https://haies.cn/assets/ubuntu-init.sh)"

sh -c "$(wget -qO- https://haies.cn/assets/yum-install-docker.sh)"
sh -c "$(wget -qO- https://haies.cn/assets/dns.sh)"

压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
7za a -mx0 -v4g backup.7z /path/to/data
7za a -mx0 -v4g backup.7z /path/to/*
7za x -mx0 "backup.7z.001" -o/path/to/

7za a -tzip backup.zip /path/to/data
7za x -tzip backup.zip /path/to/data

tar -cvpf - /path/to/folder | split -d -b 4g - backup.tar
tar -xvpf backup.tar.00 -C /path/to/target_folder #要求分卷是纯 tar 分割(未压缩),且分卷命名连续
cat backup.tar.* | tar -xpv -C /path/to/folder

tar -czvpf - /path/to/folder | split -d -b 4g - backup$(date +%Y%m%d).tar.gz
cat backup.tar.gz.* | tar -xzvp -C /path/to/folder
gzip -t backup.tar.gz

tar -cvpf nginx.tar /etc/nginx
tar -xvpf nginx.tar -C /path/to/folder

ls -l |grep ^d|awk {'print $9'}|xargs -t -i 7z a {}.7z {}

7z mx参数
7z mx参数
7z 压缩方案
7z 压缩方案

查看系统信息

1
2
3
4
5
6
id -un
uname -a
lsb_release -c
lscpu
lshw
cat /proc/meminfo

磁盘管理

查看磁盘格式:lsblk -f
查看磁盘信息:fdisk -l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkfs.xfs -f /dev/vdb&&
mkdir /hda&&
mount /dev/vdb /hda&&
echo /dev/vdb /hda xfs defaults 0 0 >> /etc/fstab

mkfs.ext4 -T huge -b 4096 /dev/vdb&&
mkdir /hda&&
mount /dev/vdb /hda&&
echo /dev/vdb /hda ext4 defaults 0 0 >> /etc/fstab

mkfs.ext3 -T largefile -i 4096 /dev/xvdb1&&
mkdir /hda&&
mount /dev/xvdb1 /hda&&
echo /dev/xvdb1 /hda ext3 defaults 0 0 >> /etc/fstab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
parted /dev/sda
resizepart 2
pvresize /dev/sda
lvextend -l +100%FREE /dev/mapper/centos-home
xfs_growfs /dev/mapper/centos-home

fdisk /dev/sdb
pvcreate /dev/sdb1
vgextend ubuntu-vg /dev/sdb1
lvextend -L +9G /dev/ubuntu-vg/root

pvs
vgs
lvs

pvdisplay
vgdisplay
lvdisplay

NTFS读写

1
2
3
apt-get install ntfs-3g
mount -t ntfs-3g /dev/hdax /mnt/windows
/dev/hdax /mnt/windows ntfs-3g defaults 0 0

目录操作

迁移目录:

1
2
3
4
5
6
7
8
mkfs.xfs -f /dev/xvdb2&&
mkdir /vartemp&&
mount /dev/xvdb2 /vartemp&&
rsync -avx /var /vartemp&&
mv /var /var.old&&
mkdir /var&&
umount -lf /dev/xvdb2 /vartemp&&
mount /dev/xvdb2 /var

目录备份还原:dumprestore
目录占用查看:fuserlsof
合并文件夹:cp -rlfv parta/* partb/* part

配置主机

在~/.ssh/config中增加

1
2
3
4
5
6
Include ~/.ssh/config.d/*
Host aws
Hostname 10.2.*.*
Port 22
User ubuntu
IdentityFile ~/.ssh/aws.pem

远程执行命令

1
ssh root@59.202.*.* "cd /home/git/.ssh&&cat id_rsq.pub>>authorized_keys"

挂载DVD源

1
2
3
4
5
mkdir /iso&&
mount -t iso9660 -o loop /hda/debian7.8/debian-7.8.0-amd64-DVD-1.iso /iso&&
echo deb file:///iso/ wheezy main contrib>/etc/apt/sources.list&&
sudo apt-get update&&
sudo apt-get upgrade

增加用户

1
2
3
4
useradd oneuser -d /var/oneuser -G wheel&&
usermod -aG root oneuser&&
passwd oneuser

其他安装

  1. 配置Python环境 (使用阿里云镜像)

    鉴于UOS自带Python版本可能较低,我们使用 pyenv 安装新版Python。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 安装pyenv
    git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    echo 'eval "$(pyenv init -)"' >> ~/.zshrc
    source ~/.zshrc

    # 配置pyenv使用国内镜像加速Python安装
    echo 'export PYTHON_BUILD_MIRROR_URL="https://mirrors.aliyun.com/python/"' >> ~/.zshrc
    source ~/.zshrc

    # 通过pyenv安装Python 3.8.12 (此版本与QEMU 7.2.21兼容性好)
    pyenv install 3.8.12
    pyenv global 3.8.12

网络安全

不使用向日葵、TeamViewer等远程工具,不使用翻墙工具,不登录若密码网站,不使用内网穿透工具,不访问不明来源网站。

不允许登录或设置弱口令账号

弱口令规则

  1. 小于8位
  2. 不足三类,大小字母,数字,符号
  3. 包含用户名
  4. 包含4个及以上的连续字符,数字
  5. 包含3个及以上相同的字符、数字
  6. 包含4个键盘上连续的字符
  7. 属于常用密码

前端

  1. 了解Vue.js
  2. 了解vue-element-admin
  3. 掌握ES2015基本用法及新属性
  4. 了解Mapbox地图库
  5. 了解WebPack及常用

后端

  1. 了解CentOS、Nginx、Postgres基本运维操作。
  2. 掌握Docker、Docker-compose工具基本使用方法。
  3. 掌握Springboot、Mybatis、logback、AOP、消息队列、异步、定时任务等内容。
  4. 掌握 Maven、Http Client等工具使用。
  5. 掌握 IntelliJ Idea操作及常用快捷键。

工具

  1. 掌握 IntelliJ Idea操作及常用快捷键。
  2. 掌握 VS Code操作及常用快捷键。
  3. 掌握git分支管理、代码合并、冲突解决等内容。

注意事项

系统运维安全注意事项
网络终端安全注意事项

单目录智能压缩解压

1
wget -qO- https://haies.cn/assets/tar_single.sh

使用说明

该脚本是一个功能完整的大容量单目录分卷压缩、解压工具,具有以下特点:

  1. 支持三种压缩算法:gzip、zstd(推荐)、xz
  2. 支持三种操作模式:创建压缩包、解压、验证完整性
  3. 自动检测压缩格式,无需手动指定算法
  4. 提供分卷校验和验证,确保数据完整性
  5. 彩色日志输出,包含时间戳,便于跟踪和审计

基本用法

命令格式

1
./tar_single.sh -[操作方式][压缩算法] [操作对象]

参数说明

  • 操作方式
    • c:创建压缩包
    • x:解压压缩包(自动检测格式)
    • t:测试压缩包完整性(自动检测格式)
  • 压缩算法(仅创建时需要):
    • z:gzip(默认)
    • s:zstd(推荐,速度快)
    • o:xz(压缩比高)

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
# 创建压缩包(使用不同算法)
./tar_single.sh -cz /path/to/data # gzip压缩
./tar_single.sh -cs /path/to/data # zstd压缩(推荐)
./tar_single.sh -co /path/to/data # xz压缩

# 解压操作(自动检测格式)
./tar_single.sh -x /path/to/archive_dir # 解压目录中的压缩包
./tar_single.sh -x /path/to/archive.tar.zst.part00 # 解压分卷压缩包

# 测试完整性(自动检测格式)
./tar_single.sh -t /path/to/archive_dir # 测试目录中的压缩包
./tar_single.sh -t /path/to/archive.tar.gz.part00 # 测试分卷压缩包

关键特性

  • 解压和测试时自动识别压缩格式,无需指定算法参数
  • 提供详细的带时间戳的日志输出,便于问题排查
  • 默认使用并行压缩工具,处理大文件时效率更高

存档批量压缩

1
wget -qO- https://haies.cn/assets/tar_batch.sh

使用说明

智能压缩指定目录内文件数量较多的文件夹,自动根据目录深度和文件数量应用不同压缩规则,并排除文档、图片、视频、音频等特定文件类型,这个脚本特别适合处理日志目录、临时文件目录、上传目录等包含大量小文件的场景,能有效减少inode使用量,提升文件系统性能。

基本用法

1
./tar_batch.sh [目标目录]
  • 不指定目录时,默认处理脚本所在目录
  • 处理深度3-5的目录,按从浅到深顺序

使用示例

  1. 压缩当前目录 :./tar_batch.sh
  2. 压缩指定目录:./tar_batch.sh /path/to/your/data

压缩规则

  1. 深度 < 4:不含排除文件类型,文件数50-100 → 压缩
  2. 深度 = 4:不含排除文件类型,文件数 > 50 → 压缩
  3. 深度 > 4:无条件压缩
  4. 搜索深度:仅处理深度3-5的目录

排除的文件类型

  • 文档:.txt .pdf .doc .docx .xls .xlsx .ppt .pptx .odt .md .rtf
  • 图片:.jpg .jpeg .png .gif .bmp .tiff .svg .webp
  • 视频:.mp4 .avi .mov .mkv .flv .wmv .m4v .webm
  • 音频:.mp3 .wav .flac .aac .ogg .m4a .wma

执行后,符合条件的目录会被压缩,并在同级位置生成:

  • 单卷包:目录名.tar.gz
  • 多卷包:目录名_archive/ 文件夹(内含分卷文件)

脚本执行期间,终端会单行显示当前正在压缩的文件名。
脚本会在目标目录生成带时间戳的日志文件。

存档批量压缩

1
wget -qO- https://haies.cn/assets/svn_server_tool.sh

使用说明

本脚本主要用于在服务器端直接查看统计SVN代码仓库的信息,无需通过客户端连接。适用于系统管理员、运维人员或开发人员直接访问SVN服务器文件系统,快速获取代码仓库的相关信息。包括以下功能:

  1. 目录内容查看

    • 查看SVN仓库的目录结构
    • 仅显示指定目录的第一层内容(非递归)
    • 区分显示目录和文件
  2. 代码修改历史查询

    • 查看指定文件或目录的所有修改记录
    • 显示每次修改的版本号、作者、时间、提交信息
    • 查看具体的文件变更操作(添加、删除、修改等)
  3. 代码提交统计分析

    • 统计指定文件或目录的提交情况
    • 按作者统计提交次数和百分比
    • 显示最早和最晚提交时间
    • 可视化展示提交分布情况

基本用法

命令格式

1
./svn_server_tool.sh <功能> <仓库路径> [目录/文件路径]

参数说明

  1. 功能参数(第一个参数):

    • ls:列出目录内容
    • log:查看修改历史
    • stat:统计提交信息
  2. 仓库路径(第二个参数):

    • SVN仓库在服务器上的物理路径
    • 示例:/var/svn/repos/myproject
  3. 目标路径(第三个参数):

    • 对于ls功能:可选,指定要查看的SVN仓库内目录
    • 对于logstat功能:必填,指定要分析的目标路径(SVN仓库内的相对路径)

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看仓库根目录
./svn_server_tool.sh ls /var/svn/repos/myproject

# 查看指定目录
./svn_server_tool.sh ls /var/svn/repos/myproject /trunk/src

# 查看文件修改历史
./svn_server_tool.sh log /var/svn/repos/myproject /trunk/src/main.java

# 查看目录修改历史
./svn_server_tool.sh log /var/svn/repos/myproject /trunk/src

# 统计文件提交情况
./svn_server_tool.sh stat /var/svn/repos/myproject /trunk/src/main.java

# 统计目录提交情况
./svn_server_tool.sh stat /var/svn/repos/myproject /trunk/src

PPT备注批量提取

1.打印为PDF文件,并选择打印内容为备注页
alt text

2.打开PDF文件,Ctrl+A,Ctrl+C即可复制出全部的备注内容。

3.制作页面合适的带备注的PDF版本PPT
根据第一步打印出来的PDF文件一般为A4,页面有大量空白,选择备注最多的页面,通过WPS裁切页面功能,设定固定裁切范围,可批量把所有页面的留白去掉。
alt text

WPS安装字体

1️⃣ 鸿蒙4.2

  1. 在 文件管理 中打开 显示隐藏文件 和 显示系统隐藏文件 菜单。
    显示隐藏
  2. 把字体文件(.ttf/.otf)放进手机存储的 内部存储/Fonts 文件夹(没有就新建一个),该规则全局生效,对所有支持的APP都生效。
    全局字体
  3. 针对PC应用,把字体文件放到 内部存储/PCEngine/.fonts 文件夹(没有就新建一个),该规则对PC应用引擎下的APP生效,也就是wps office pc版生效。(小米澎湃OS对应位置**内部存储/HyperEngine/fonts/**)
    PC引擎字体
  4. 重启APP生效。

2️⃣ 鸿蒙5+

鸿蒙5+平板和电脑支持可选择第三方字体安装,手机上仅支持在线字体安装。
平板字体安装

统信桌面操作系统V20专业版1070(UOS V20 1070)于 2024年05月06日正式发布,与Debian buster、Ubuntu 20.04 LTS(Focal Fossa )软件包版本和依赖关系相似,其核心组件版本如下:

组件 版本
Linux 4.19.0
glibc 2.28.31-deepin1
glib 2.58.3.16-deepin1
libgcc 8.3.0.13-deepin1
systemctl 241

安装QGIS

通过官方源安装Debian Buster版本的 QGIS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

sudo apt install gnupg software-properties-common;
sudo mkdir -m755 -p /etc/apt/keyrings;
sudo wget -O /etc/apt/keyrings/qgis-archive-keyring.gpg https://download.qgis.org/downloads/qgis-archive-keyring.gpg;

sudo tee /etc/apt/sources.list.d/qgis.list <<'EOF'
Types: deb deb-src
URIs: https://qgis.org/debian-ltr
Suites: buster
Architectures: amd64
Components: main
Signed-By: /etc/apt/keyrings/qgis-archive-keyring.gpg
EOF;

sudo apt update;
sudo apt install qgis qgis-plugin-grass;
sudo apt install qgis-server;

以上一键安装脚本

1
sh -c "$(wget -qO- https://haies.cn/assets/install-qgis-uos.sh)"

安装KVM

UOS 编译安装KVM

本教程实现在 UOS V20 1070 (内核4.19) 系统上,通过编译安装 QEMU 7.2.21libvirt 8.0.0virt-manager 5.1.0,实现主机 (Host) UOS 与客户机 (Guest) Windows 10 之间基于 VirtioFS 驱动的高效文件共享。

选择此版本组合主要是因为:

  • QEMU 7.2.21 是最后一个完整支持 C语言版本 virtiofsd 的QEMU稳定版。
  • libvirt 8.0.0 是默认会去寻找并使用 C版本 virtiofsd 的最高版本。

系统自带版本的kvm版本老旧,且无法实现基于 VirtioFS 驱动的高效文件共享,编译安装能确保组件间更好的兼容性。教程会涉及升级 Python3pyenvMeson 以满足编译要求,并统一使用 阿里云镜像 加速下载,安装路径统一为 /usr/local

📦 前期准备:环境与依赖

首先,我们来配置编译环境和安装基础依赖。

  1. 更新系统并安装基础工具
    确保系统为最新并安装必要的开发工具:

    1
    2
    3
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y wget curl git build-essential pkg-config
  2. 升级pip和安装Meson (使用阿里云镜像)

    1
    2
    3
    pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
    pip install --upgrade pip
    pip install --upgrade meson ninja

🔧 组件编译与安装

现在,开始编译和安装三个核心组件。

1. 编译安装 QEMU 7.2.21

QEMU是实际的虚拟机监控器,virtiofsd 也随其发布。

  • 安装QEMU专属依赖

    1
    2
    sudo apt install -y libglib2.0-dev libpixman-1-dev libcap-ng-dev libseccomp-dev \
    libfuse3-dev libattr1-dev libselinux1-dev
  • 编译与安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cd ~
    wget https://download.qemu.org/qemu-7.2.21.tar.xz
    tar xvf qemu-7.2.21.tar.xz
    cd qemu-7.2.21
    ./configure --prefix=/usr/local --target-list=x86_64-softmmu \
    --enable-kvm --enable-spice --enable-vnc --enable-guest-agent \
    --enable-virtfs --enable-virtiofsd --enable-libusb --enable-usb-redir \
    --enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl
    make -j$(nproc)
    sudo make install
  • 验证安装

    1
    2
    qemu-system-x86_64 --version
    /usr/local/libexec/virtiofsd --version

2. 编译安装 libvirt 8.0.0

libvirt提供了管理虚拟机的API和工具链。

  • 安装libvirt专属依赖

    1
    2
    sudo apt install -y libxml2-dev libgnutls28-dev libyajl-dev libnl-3-dev \
    libnl-route-3-dev libpciaccess-dev libdevmapper-dev libudev-dev libcurl4-gnutls-dev
  • 编译与安装 (使用Meson)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    cd ~
    git clone https://gitlab.com/libvirt/libvirt.git
    cd libvirt
    git checkout v8.0.0
    meson setup build --prefix=/usr/local -Dsystem=true -Ddriver_qemu=enabled -Ddriver_libvirtd=enabled -Ddriver_remote=enabled -Ddocs=disabled #配置

    ninja -C build #编译
    sudo ninja -C build install #安装

    meson install -C build #编译+安装
    sudo ninja -C build uninstall #卸载

    echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.bashrc\n
    echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.zshrc\n
  • 配置并启动libvirt服务

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable libvirtd
    sudo systemctl start libvirtd

    如果出现下面的报错:
    /usr/sbin/libvirtd: /usr/local/lib/x86_64-linux-gnu/libvirt.so.0: ** not found (required by /usr/sbin/libvirtd)
    实际文件错误,是python环境混乱造成,切换到正确的环境,重新执行上面的编译和安装即可。

3. 编译安装 virt-manager 5.1.0

virt-manager是一个用于管理虚拟机的图形化界面,UOS再带的python3.7可满足最新版的编译。

  • 安装virt-manager专属依赖

    1
    2
    3
    4
    sudo apt install -y gir1.2-gtk-3.0 gir1.2-gtksource-3.0 gir1.2-gtk-vnc-2.0 gir1.2-vte-2.91 \
    gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 \
    libosinfo-1.0-dev gettext pylint pytest
    pip3 install --upgrade PyGObject
  • 编译与安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cd ~
    git clone https://github.com/virt-manager/virt-manager.git
    cd virt-manager
    git checkout v5.1.0
    meson setup build
    meson install -C build

    sudo make uninstall
    sudo ninja -C build uninstall

⚙️ 配置VirtioFS文件共享

组件安装完毕,接下来配置VirtioFS共享。

  1. 设置用户权限
    将当前用户加入 libvirtkvm 组,以便管理虚拟机而无须root权限:

    1
    2
    sudo usermod -aG libvirt,kvm $USER
    newgrp libvirt
  2. 准备共享目录
    在主机上创建一个准备共享给虚拟机的目录:

    1
    2
    sudo mkdir /mnt/virtiofs_share
    sudo chown -R $USER:$USER /mnt/virtiofs_share
  3. 配置虚拟机XML (关键步骤)
    使用 virsh edit [你的虚拟机名称] 编辑Windows 10虚拟机的配置。

    • 关键点:在 <devices> 部分添加文件系统设备,并必须通过 <binary path="..."> 显式指定C版 virtiofsd 的路径。这是解决libvirt可能找不到正确 virtiofsd 的关键。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <domain type='kvm'>
    ...
    <devices>
    ...
    <!-- 添加VirtioFS文件系统设备 -->
    <filesystem type='mount' accessmode='passthrough'>
    <driver type='virtiofs'/>
    <!-- 显式指定C版virtiofsd路径 -->
    <binary path='/usr/local/libexec/virtiofsd'/>
    <source dir='/mnt/virtiofs_share'/>
    <target dir='vm_share'/>
    </filesystem>
    ...
    </devices>
    </domain>

    注意:根据实践,在 qemu.conf 中配置 virtiofsd_path 可能无效,因此直接在虚拟机XML中指定驱动位置是更可靠的方法。

  4. Windows 10虚拟机驱动安装
    要让Windows 10识别VirtioFS共享,需安装驱动。

    • Fedora仓库 下载最新的 virtio-win.iso
    • 在virt-manager中,将 virtio-win.iso 挂载到Windows 10虚拟机的CD-ROM。
    • 在Windows虚拟机中,安装ISO根目录下的 virtio-win-gt-x64.msi,或通过设备管理器为未知设备手动安装 virtio-fs 驱动。
    • 驱动安装后,在Windows文件资源管理器的地址栏输入 \\virtiofs\vm_share 访问共享目录,或通过”映射网络驱动器”使用此路径。

💡 故障排除

  • 权限问题:确保 /usr/local/libexec/virtiofsdlibvirt-qemu 用户可执行,且共享目录有相应权限。

  • libvirt服务:修改配置或XML后,记得重启 sudo systemctl restart libvirtd

  • 驱动问题:确保Windows虚拟机正确安装了 virtio-fs 驱动。

  • 依赖排查与解决

    1
    2
    3
    4
    5
    6
    7
    ldd $(which qemu-system-x86_64) | grep glib
    readelf -d ./build/qemu-system-x86_64 | grep RPATH
    sudo patchelf --set-rpath "/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" /usr/local/bin/qemu-system-x86_64
    python3 -c "import gi; print(gi.__version__)"

    ./configure LDFLAGS="-Wl,-rpath,/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" --target-list=x86_64-softmmu \\n --enable-kvm --enable-spice --enable-vnc --enable-guest-agent \\n --enable-virtfs --enable-libusb --enable-usb-redir \\n --enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl

hombrew

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
sh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)";
sh -c "$(curl -fsSL https://haies.cn/assets/install-zsh.sh)";

brew install tmux;
brew install nmap;
brew install wget;
brew install ffmpeg;
brew install p7zip;

brew install iina;
brew install obsidian;
brew install bilibili;
brew install pixpin;
brew install stats;
brew install iterm2;
brew install appcleaner;
brew install clash-verge-rev;
brew install firefox;
brew install google-chrome;
brew install microsoft-edge;
brew install visual-studio-code;
brew install microsoft-remote-desktop;

brew tap gromgit/homebrew-fuse;
brew install mounty;
brew install macfuse;
brew install ntfs-3g-mac;

brew install node@22;
brew unlink node@22 >/dev/null;
brew link --overwrite --force node@22;
npm i -g hexo-cli;

brew install qq;
brew install wechat;
brew install dingtalk
brew install wpsoffice-cn;

brew --cache
brew list node
brew --prefix node

launchctl unload ~/Library/LaunchAgents/文件名.plist
rm ~/Library/LaunchAgents/文件名.plist
sudo launchctl unload /Library/LaunchDaemons/文件名.plist
sudo rm /Library/LaunchDaemons/文件名.plist


JDK是开发的环境依赖,JRE是程序运行环境依赖,JVM(Java虚拟机)是开发调试运行和程序运行的依赖,三者是套娃结构,JDK包含JRE,JRE包含JVM。

  • JRE(Java Runtime Environment),提供了一个60M基础类库lib/rt.jar,该库包括常用到的String、集合、网络、多线程等常用类。JRE还提供了不同平台下的JVM。生产环境下的Java程序的运行只需要编译后的字节码+JRE即可。
  • JDK(Java Development Kit),比JRE多了一些位于lib文件夹下的开发类库,如dt.jartools.jar,JDK同时也提供了位于bin文件夹下的开发工具,如java.exejavac.exejvisualvm.exe
  • JVM(Java Virtual Machine),是一个虚拟的计算机,不同平台有不同的实现方式,比如,Windows平台下是bin/server/jvm.dll,Linux系统下是lib/amd64/server/libjvm.so

JVM

Java虚拟机是实现Java程序跨平台运行的一个抽象层,JVM中的Java解释器负责将字节码文件解释成为特定的机器码进行运行,是实现一次编译处处运行的关键。JVM内存区域分为:类装载器子系统(Class Loader Subsystem)、运行时数据区( Runtime Data Areas)、和执行引擎(Execution Engine)。JVM内存区域如下:
JVM内存结构

  • 类加载器子系统,负责加载程序中的类型(类和接口),并赋予唯一的名字。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的,自定义类装载器是Java程序中ClassLoader的子类。
  • 执行引擎,负责执行被加载类中包含的指令,它的执行技术有:解释、即时编译、自适应优化和芯片级直接执行。其中,解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化是前两者的结合 ,芯片级直接执行用本地方法执行Java字节码。

自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行,Sun的HotspotJVM采用这种技术。
Java与C编译的区别是:Java是运行时链接,而C是编译时链接。

运行时数据区

Java程序运行起来后,JVM就是个进程,其运行时数据区是给线程住的内存房子,房子分程序计数器(Program Counter (PC) Register)、虚拟机栈(Java Virtual Machine Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method Area)、运行时常量池(Run-Time Constant Pool)6个房间,前三个房间是JVM线程私有内存区,后三个是JVM线程共享内存区。方法区包括:变量、静态变量、 类信息(构造方法/接口定义) 和运行时常量池。其他堆内存包括:实例变量和数组。每个线程包含一个栈区,栈中只保存基础数据类型对象和自定义对象的引用(不是对象)。方法区是逻辑独立于堆,但实际包含在堆中,房间结构如下:
JVM运行时数据区结构

Java7之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变;Java7中,字符串常量池从永久代移到堆中; Java8中,取消永久代,方法区存放于元空间(Metaspace),元空间仍然与堆不相连。

Java 堆内存

堆房间是给对象住的,堆房间又被分为新生代和老年代两个小房间,新生代小房间又被隔成1个eden隔间和2个survivor隔间,堆房间总大小和各个隔间的比例是JVM调优的关键。JVM进程给Java对象所在的线程提供了运行空间。堆内存结构如下:
JVM堆内存


参考文献:

  1. 什么是JVM?

  2. 字节码执行引擎

  3. The Structure of the Java Virtual Machine

  4. JVM运行时的数据区

  5. java-memory-management-for-java-virtual-machine-jvm

  6. Java virtual Machine(JVM) and its architecture

前端

  1. 开发工具 VSCode,开发所需插件:

    • rest-client
    • githistory
    • gitlens
    • vscode-css-peek
    • vscode-eslint
    • vscode-file-peek
    • vetur
    • vue-beautify
    • vue-peek
    • vue-snippets
  2. 前端框架 VueJS2.x,主要包括:

    技术 说明
    Vue 前端框架核心
    Vue-router 路由
    Vuex 全局状态管理
    Axios 前端HTTP
    v-charts 基于Echarts的图表
    Js-cookie cookie管理工具
    nprogress 进度条控件
    ElementUI 组件库
  3. 代码打包工具 WebPack

  4. EcmaScript 2015

    简称ES6,ES2015。是是JavaScript语言的下一代标准。ECMAScript是JavaScript的规格,JavaScript是ECMAScript的一种实现。主流浏览器基本都兼容ES2015,通常开发环境用ES2015,借助Babel将ES2015编译成ES5部署在生产环境。
    ES2105有很多新特性:let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments

  5. 前端地图

    • Openlayer,目前最新为5.2.0,地图操作有比较全面,目前openlayer整合三维前端框架ol-cesium。目前有适用于Vue的Vuelayers
    • Leaflet,目前最新为1.3.4,轻量级,适合用于移动端。

后端

  1. 开发工具 IntelliJ IDEA

  2. 构建工具 Maven

  3. 后端框架 SpringBoot

  4. ORM框架 MyBatis

  5. 日志 SL4J+logback

  6. 缓存 Redis

  7. 全文搜索 ElasticSearch

  8. 权限控制 Shiro

  9. 数据库 Postgres + PostGIS

地图服务

Geoserver动态读取postgres的地理空间数据,发布切片格式如下

  • 矢量切片
    • application/json;type=geojson,无压缩,不适合大量切片
    • application/vnd.mapbox-vector-tile,有压缩,适合海量切片
  • 栅格切片(小比例尺下切片不易成功)
    • image/jpeg
    • image/png

系统部署

  • Docker
    • Docker Swarm 生产环境部署
    • docker-compose 开发测试
  • Nginx
    • 反向代理,包括4层代理和7层代理

版本控制

0%