image frame

命令行常用指令

     MySQL 创建数据库并指定字符集:

1
2
drop schema if exists `test`;
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

     Brew 相关的

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
//苹果电脑安装脚本:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
//苹果电脑卸载脚本:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
// 搜索包
brew search mysql
// 安装包
brew install mysql
// 查看包信息,比如目前的版本,依赖,安装后注意事项等
brew info mysql
// 卸载包
brew uninstall wget
// 显示已安装的包
brew list
// 查看brew的帮助
brew –help
// 更新, 这会更新 Homebrew 自己
brew update
// 检查过时(是否有新版本),这会列出所有安装的包里,哪些可以升级
brew outdated
brew outdated mysql
// 升级所有可以升级的软件们
brew upgrade
brew upgrade mysql
// 清理不需要的版本极其安装包缓存
brew cleanup
brew cleanup mysql

     MySQL 源码构建参数(将目录修改为你自己的)

1
2
3
4
5
6
7
8
-DCMAKE_BUILD_TYPE=Debug
-DWITH_BOOST=/Users/setsunayang/Documents/learning/mysql/boost_1_77_0
-DCMAKE_INSTALL_PREFIX=/Users/setsunayang/Documents/learning/mysql/build
-DWITH_SSL=system

./mysqld --basedir=/Users/setsunayang/Documents/learning/mysql/build \
--datadir=/Users/setsunayang/Documents/learning/mysql/build/data \
--initialize-insecure --user=mysql

     Git 相关

1
2
3
4
5
6
git remote rm origin 
git remote add origin [url]
git config --global user.name "杨海波"
git config --global user.email “3546514206@QQ.COM"

git rm -r --cached

     设置主机名称

1
sudo scutil --set HostName SetsunaYang

     Macbook Pro 显示被隐藏的文件或文件夹

1
2
3
4
5
defaults write com.apple.finder AppleShowAllFiles -boolean true;killall Finder
defaults write com.apple.finder AppleShowAllFiles -boolean false;killall Finder

chflags hidden
chflags nohidden

     设置环境变量

1
echo 'export PATH="/opt/homebrew/opt/go@1.20/bin:$PATH"' >> ~/.zshrc

     修改环境变量相关

1
2
3
4
5
6
7
8
# 查看当前 shell 是 zsh 还是 bash
dscl . -read /Users/$USER UserShell
# 如果是 bash
open ~/.bash_profile
source ~/.bash_profile
# 如果是 zsh
open ~/.zshrc
source ~/.zshrc

     IDEA 相关

1
2
3
# 解决 Goland 无法调试的问题。在 bin/goland.vmoptions 增加如下虚拟机参数
-Djava.net.preferIPv4Stack=true
-Djava.net.preferIPv6Addresses=true

     ““prettyZoo.app”已损坏,无法打开。 您应该将它移到废纸篓。” 解决办法

1
sudo xattr -rd com.apple.quarantine '/Applications/prettyZoo.app'

     Jetbrains 全家桶自定义虚拟机参数

1
2
3
4
5
6
7
8
9
-Xms512m
-Xmx8192m

-XX:ErrorFile=/Users/setsunayang/Documents/JetBrains/ERROR/java_error_in_web_%p.log
-XX:HeapDumpPath=/Users/setsunayang/Documents/JetBrains/ERROR/java_error_in_web.hprof

-Dide.managed.by.toolbox=/Applications/JetBrains Toolbox.app/Contents/MacOS/jetbrains-toolbox
-Dtoolbox.notification.token=f2154f48-d8ed-468a-b154-d82403469df5
-Dtoolbox.notification.portFile=/Users/setsunayang/Library/Caches/JetBrains/Toolbox/ports/f96117ec-2396-417f-a3d8-406dde460690.port

回调机制

1、C语言中的回调

     函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数 组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参 数。函数指针变量的声明: typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型 以下实例声明了函数指针变量 p,指向函数 max:

1
2
3
4
5
6
7
8
9
10
11
12
13
int max(int x, int y) { return x > y ? x : y; }

int main(void) {
/* p 是函数指针 */
int (*p)(int, int) = &max; // &可以省略
int a, b, c, d;
printf("请输入三个数字:");
scanf("%d %d %d", &a, &b, &c);
/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);
printf("最大的数字是: %d\n", d);
return 0;
}

     输出的结果:

1
2
请输入三个数字:1 2 3 
最大的数字是: 3

     函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用 的函数。下面的实例中 populate_array 函数定义了三个参数,其中第三个参数是函数的指 针,通过该函数来设置数组的值。实例中我们定义了回调函数 getNextRandomValue,它返 回一个随机值,它作为一个函数指针传递给 populate_array 函数。populate_array 将调 用 10 次回调函数,并将回调函数的返回值赋值给数组。编译执行,输出结果如下:

1
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709

2、什么是回调

     软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调 用、回调和异步调用。回调是一种双向调用的模式,也就是说,被调用方在接口被调用时也 会调用对方的接口。

     同步调用:一种阻塞式调用,调用方要等待对方执行完毕才能返回,它是一种单向调 用。

     回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口。

     异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收 到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。 回调和异步调用的关系非常紧密:通常可以使用回调来实现异步消息的注册,通过异步 调用来实现消息的通知。

程序调用的几种方式

     回调机制的实现通常需要实现一个回调函数,回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:

  • 属于工作流的一个部分;

  • 必须按照工作流指定的调用约定来申明(定义);

  • 他的调用时机由工作流决定,回调函数的实现者不能直接调用回调 函数来实现工作流的功能。

基于转加密的握手式国密通信

基于转加密的握手式国密通信

     1、客户端上送 SM4 密钥密文:

  • 客户端根据算法生成两把 SM4 密钥:sm4_key、h_mac_key;

  • 客户端使用内置 SM2 公钥对 sm4_key、h_mac_key 加密得到密文 sm4_cipher_key、h_mac_cipher_key;

  • 调用服务端握手接口将 sm4_cipher_key、h_mac_cipher_key 发送到服务端;

     2、服务端转加密取 SM4 密钥报文

  • 服务端根据算法生成 SM4 密钥 sm4_transfer_key 用于转加密;

  • 服务端使用内置的 SM2 公钥对 sm4_transfer_key 加密得到密文 sm4_transfer_cipher_key;

  • 调用机密机接口上送 sm4_cipher_key、h_mac_cipher_key 密文和 sm4_transfer_cipher_key ;

     3、加密机做转加密

  • 加密机用 SM2 私钥对 sm4 密文解密得到 sm4_key;

  • 机密机用 SM2 私钥对 sm4_transfer_cipher_key 解密得到 sm4_transfer_key;

  • 加密机用 sm4_transfer 对 sm4_key 加密 sm4_key_cipher_transfer 并返回;

  • 加密机用 用同样的方式得到 h_mac_key_cipher_transfer 并返回;

     4、服务端获取 SM4 密钥明文与 h_mac_key 明文并缓存作为后续报文交互

     5、报文通讯加解密

  • 客户端使用 sm4_key 对交易明文加密得到交易密文;

  • 客户端使用 h_mac_key 对交易明文计算 hmac ;

  • 客户端上送通讯加密报文(交易密文+hmac);

  • 服务端接收到通讯加密报文后使用 sm4_key 进行解密得到交易明文,使用 h_mac_key 对交易明文计算 hmac 并与上送的 hmac 进行对比校验报文的完整性。

基于密码机转加密的握手式国密通信第二版

     由于密码机接口的设计问题,上述 3 步骤中,需要调用密码机两次,分别发送 sm4_key 和 h_mac_key 给服务端。修改为第二版之后,h_mac_key 用 sm4_key 进行 SM4 加密,这样经过服务端转加密流程解出 sm4_key 之后,直接解密 h_mac_cipher_key 得到 h_mac_key。

数据库背后的8种关键数据结构

风起于青萍之末,止于草莽之间

一个人的觉醒,是从三观破裂开始的

  • Copyrights © 2017 - 2025 杨海波
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信