0%

简介

git filter-repo 是一个快速而灵活的工具,用于修改 Git 仓库的历史记录。

它可以用于许多任务,例如:

  • 重写提交历史记录
  • 清理旧的大型文件
  • 将仓库拆分成几个小仓库
  • 将多个仓库合并成一个
  • 移除密码和其他敏感数据

Git-Filter-Repo的一些特性是:

  • 处理速度快
  • 灵活,可配置性高
  • 保留提交的作者和时间戳信息
  • 可以对文件进行重命名和重构
  • 可以对提交信息进行修改和删除
  • 可以对提交信息进行搜索和替换
  • 可以使用Python脚本进行自定义修改

安装

MacOS 使用 homebrew 包管理工具进行安装,命令如下,其他方式参考官方文档

1
brew install git-filter-repo

使用示例

移除文件

假设我们有一个包含敏感文件的 Git 仓库,需要将这些文件从提交记录中移除。

1
git filter-repo --path sensitive.txt --invert-paths

这个命令会将所有包含 sensitive.txt 文件的提交从历史记录中移除。

阅读全文 »

Mac 安装 android-platform-tools

1
brew install --cask android-platform-tools

解锁 bootloader

手机进入开发者模式 打开 USB调试模式,并勾选 ”OEM解锁“

1
adb reboot bootloader
1
fastboot flashing unlock

提取原版 boot.img

下载原版刷机包并提取 boot.img 文件

制作 Magisk patch

下载 Magisk 安装文件,把 Magisk安装文件以及上一步中提取的 boot.img 传入手机中

1
adb push Magisk-v23.0.apk /sdcard/
1
adb push boot.img /sdcard/

手机端安装并打开 Magisk 应用,Magisk - 安装 - 选择并修补一个文件,选择 boot.img 文件,点开始按钮开始制作补丁,制作完毕后查看日志中生成的 magisk_patched.img 文件路径,将文件拷贝到电脑中

1
adb pull /sdcard/Download/magisk_patched.img ~/Downloads/

刷写 magisk_patched.img

1
adb reboot fastboot
1
fastboot flash boot magisk_patched.img

重启并验证

1
fastboot reboot

打开 Magisk APP 显示各种状态均正常,成功!

安装 Synology Photos

群晖安装 Synology Photos 套件,iPhone 手机端安装 Photos Mobile APP,使用该 APP 对手机照片进行备份。

安装 Syncthing

群晖添加社区套件源 https://packages.synocommunity.com/ ,并安装 Syncthing 套件。Pixel 手机端安装 Syncthing APP。

配置 Syncthing

  1. 照片目录权限配置。群晖端使用 File Station,将照片所在目录(例如 homes/liuqi/Photos/MobileBackup)的读写权限设置给 sc-syncthing 用户。
  2. 添加设备。群晖端 Syncthing 显示设备二维码(操作 - 显示ID),手机端操作“添加设备”并扫描该二维码完成添加,此时在群晖的端 Syncthing 页面同意添加进来的设备。
  3. 群晖端 Syncthing 配置同步文件夹。群晖端 Syncthing 添加文件夹,常规标签页面下,填写文件夹标签(例如 tag_dsm_photos_lq)、文件夹ID(例如 id_dsm_photos_lq)、文件夹路径(例如 /var/services/homes/liuqi/Photos/MobileBackup)等信息。共享标签页面下勾选上一步添加的 Pixel 手机。忽略模式标签页面下添加@eaDir。高级标签页面下文件夹类型修改为仅发送,勾选忽略文件权限。进行保存。
  4. Pixel 手机端 Syncthing 配置同步文件夹。此时打开 Pixel 手机端 Syncthing APP,同意提示添加的同步文件夹信息,并配置手机端的文件夹目录,目录种类修改为仅接收。
  5. 查看两端的 Syncthing 显示的同步进度是否正常,完成。

1. 概述

在本教程中,我们将研究如何在Spring MVC使用 DeferredResult 类来执行异步请求处理。

Selvet 3.0中已经引入了异步的支持,简单来说,它允许在请求接收器线程外的另一个线程中去处理该HTTP请求。

Spring 3.2起,就可以使用DeferredResult,它帮助我们将长时间的计算过程从http-worker线程中分离到一个单独的线程中。

尽管其他线程将占用一些资源用于计算,但工作线程在此期间不会阻塞,仍然可以继续处理传入的客户端请求。

异步请求处理模型非常有用,因为它有助于在高负载时很好地扩展应用程序,特别是对于IO密集型操作。

阅读全文 »

概述

队列,又称为伫列(queue),计算机科学中的一种抽象资料型别,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

从上述的概念中我们可得知,队列两个主要的操作为入队(enqueue)与出队(dequeue),入队为从队尾插入元素,出队为从队首去删除元素。

数组实现队列

数组实现的队列即元素容器为数组,为了完成入队与出队列的操作,同时还需要两个指针来标记队首和队尾。

阅读全文 »

环境说明

Nginx Master : 192.168.123.101

Nginx Backup : 192.168.123.102

VIP : 192.168.123.103

安装Keepalived

以上两台Nginx所在的机器分别安装Keepalived

1
sudo yum install keepalived

配置Keepalived

修改 nginx master 所在机器的keepalived 的配置文件

1
vi /etc/keepalived/keepalived.conf
阅读全文 »

介绍

Replication 可以使数据从一个MySQL数据库(master)复制到一个或多个MySQL数据库(slave)中,默认情况下该复制过程是异步的。我们可以通过配置来实现复制所有的database或者指定的database

MySQL Replication 的优点如下:

  • 横向扩展:可以将负载分布在多个slave上以提高性能。所有的写操作都必须在master上进行,但是读操作可以分布在一个或多个slave上。这样的模型可以提高写入性能,因为master专注于数据更新,同时多个slave可以显著的提高读取速度。
  • 数据安全:定期备份是保护数据的重要手段之一,若在master上进行数据备份则需要使master处于readonly状态,这将影响写操作 。而salve可以暂停复制的过程,所以slave上进行数据备份而不会影响到master。
  • 分析:数据是从master上实时写入的,数据分析可以在slave上进行而不影响master的性能。
  • 远程数据分发:如果master的物理位置距离较远,我们可以在临近的地方创建slave,方便使用数据使用,而不需要总是访问远端的master。

原理

作为master 的MySQL实例将数据的变更操作作为”事件”记录到binary log中,slave 的MySQL实例被被指为读取master的binary log,slave将读取到的binary log写入自己的中继日志中,然后slave回把相关的事件进行执行。slave具体执行哪些事件由slave决定。

配置

创建用于复制的账号

进入master的MySQL实例,执行以下操作:

执行以下命令创建账号,其中172.20.254.176为slave的MySQL的ip,liuqitech@2020为密码。

阅读全文 »

前提条件

确保使用root用户或具有sudo权限的用户登陆。

OpenJDK

通过yum search命令查看java相关包

1
yum search java | grep openjdk
版本 jre jdk
11 java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64
1.8 java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-headless.x86_64

以安装11版本的jdk为例

安装命令如下:

1
yum install java-11-openjdk-devel.x86_64

卸载命令如下

1
sudo yum remove java-11-openjdk-devel.x86_64
阅读全文 »

适用于 Adblock Plus/AdGuard/uBlock 等

介绍

COALESCE(value,...)

Returns the first non-NULL value in the list, or NULL if there are no non-NULL values.

官方文档介绍的很清楚,该函数返回参数列表中第一个非NULL的值,如果没有非NULL的值则返回NULL。

1
2
3
4
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
阅读全文 »