ssh使用authkey实现免密登陆

名词

  • 服务端 => 需要免密登陆的远程服务器
  • 客户端 => 当前用户服务器

步骤

  1. 在客户端生成一对公私密钥
    执行 ssh-keygen -t rsa
    一顿回车~
    将会在当前用户 的.ssh 文件夹生成两个文件

    • id_rsa : 私钥 => 连接远程服务端时,服务端返回使用公钥加密的一串字符串,
      客户端使用该私钥进行解密,返回给服务端进行验证,从而实现免密登陆

    • id_rsa.pub : 公钥 => 放在服务端需要远程登陆的用户的 .ssh文件夹内

  2. id_rsa.pub 放在服务端需要远程登陆的用户的 .ssh文件夹内
    如:

    要登陆 host: 129.123.123.13、 用户: root
    则把id_rsa.pub放到 服务端的 /root/.ssh/文件夹内

  3. 将服务端的id_rsa.pub重命名为authorized_keys

    • cd /root/.ssh
    • mv id_rsa.pub authorized_keys
  4. 完成上述步骤即可实现免密登陆


nest项目常用npm包

typeorm

`@nest/typeorm`
通过对象操作数据库,而不是直接操作数据库

class-validator

通过注解形式校验入参

file-stream-rotator

日志 分解文件流存储

nestjs-conig

把 nestjs 的 config 文件

@nestjs/mapped-types

复用类似的 dto
https://github.com/nestjs/mapped-types


arm架构的centos7 安装 mysql 8

arm 架构安装 mysql 8

最近在我的小米 5 上跑了个 centos7 服务器,于是乎准备装个全套,安装了一个 mysql8 数据库
下面是搜寻资料可用的教程

1.安装准备

  • 从 MySQL 官网下载RPM 安装包。这里需要注意,一定要选择 ARM 版的。

  • 准备系统依赖环境

1
2
3
4
5
6
7
8
9
# 1、 卸载系统自带mariadb-libs。
yum -y remove mariadb-libs

# 2、安装依赖包。
yum -y install net-tools libaio

# 3、创建mysql用户组及用户
groupadd mysql
useradd -g mysql mysql

2. 安装 MYSQL

  • 安装软件包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1、解压mysql安装包。
tar xvf mysql-8.0.16-2.el7.aarch64.rpm-bundle.tar

# 2、安装MySQL。
rpm -ivh mysql-community-common-8.0.17-1.el7.aarch64.rpm
rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.aarch64.rpm
rpm -ivh mysql-community-libs-8.0.17-1.el7.aarch64.rpm
rpm -ivh mysql-community-client-8.0.17-1.el7.aarch64.rpm
rpm -ivh mysql-community-server-8.0.17-1.el7.aarch64.rpm

# 3、初始化数据库
mysqld --initialize --user=mysql
mysqld --initialize-insecure --user=mysql

# 4、启动MYSQL
# 正常来说这里要 跑 systemctl start mysqld
# 但是小米上的linux 是基于 chroot的
# 因此此处跑
mysqld --user=root

  • 数据库设置
1
2
3
4
5
6
7
8
9
10
11
12
# 1、然后登录mysql,密码使用上面文件中找到的密码。
mysql -u root -p

# 2、使用mysql库
> use mysql;

# 3、创建root用户
> CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';

# 4、赋权
> GRANT ALL ON *.* TO 'root'@'%';
> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'

参考资料 https://bbs.huaweicloud.com/forum/thread-24680-1-1.html


使用Drone CI进行cicd搭建

使用 Drone CI 进行 cicd 搭建

安装 docker

drone ci 需要使用 docker

docker 安装文档

1
2
3
4
# docker仓库设置为阿里云源
yum-config-manager \
--add-repo \
http:**//**mirrors.aliyun.com**/**docker-ce**/**linux**/**centos**/**docker-ce.repo

github 给 drone ci 进行 oAuth 认证

因为我的代码仓库基于 github,需要进行这一步oAuth 认证文档

其中 homepage 和 callback url 填写规则为

  • HomePage 是 DroneCI 的访问地址,若是 Drone 由本地部署,那就可以设置为http://127.0.0.1

  • Authorization callback URL 是 DoneCI 的登陆地址,格式必须是{{HomePage}}/login,如http://127.0.0.1/login

  • 创建成功以后,拿到Client IDClient Secret

    参考资料

    搭建到一半,,转头就走
    还是 jenkins 香
    告辞…


Build your own React 笔记

react源码
  • schedule阶段 进行调度 scheduler(优先级队列、小顶堆)

  • render阶段 进行协调 reconciler - fiber dfs 深度优先遍历 update 单向链表

  • commit阶段 进行渲染 renderer reactDom reactNative reactArt

  • 优先级 lane 模型

  • 并发模型
    function component 和 class component 的区别

1
2
3
4
5
6
7
view

生命周期函数

hooks

react 底层运行流程
  • 掌握思想

  • 掌握关键流程的细节

  • 掌握整体工作流程、局部细节

  • 掌握术语、基本实现思路

函数式编程
代数效应 解决副作用

react 的三种不同模式

  • legacy 模式
    同步优先级
    拥有性能优化特性 batchedUpdates(批处理)
    触发多次 this.setState 是异步更新的

      但是放在 setTimeout 内的话,batchContext 上下文不存在,那么进行同步更新
    
  • blocking 模式

  • concurrent 模式
    异步优先级
    放在 setTimeout 内不一定会同步执行


重构改善代码既有设计

重构

带问题看书

  • 什么是重构?

  • 何时应该重构?

  • 哪些地方要重构?

  • 如何开始重构?

什么是重构

在不改变代码外在行为的前提下,对代码进行修改,以改进程序的内部结构

为什么应该重构

如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便的达成目的,那就先重构这个程序,使特性的添加较为容易,然后再添加特性

事不过三,三则重构

何时不应该重构

只有绝大部分代码可以正常工作的时候才能重构,否则就是重写

如何开始重构?

  • 重构前必须先有测试配套
  • 重构应该逐步微小修改
  • 重命名有意义的变量
  • 不断缩减长代码
  • 搬移代码到它应该在的地方
  • 一个函数只做一件事
  • 寻找引用点

重新开始组织函数

  1. 提炼函数:将代码放到一个独立函数中,并让函数名称解释该段代码用途
    • 以它做什么命名而不是怎么做命名
  2. 内联函数:在函数调用点插入函数本体,然后移除该函数(函数需要非常简单)
  3. 内联临时变量:将所有对该变量的引用动作,替换为它赋值的那个表达式本身
  4. 以查询取代临时变量:把表达式提炼到一个独立函数中,将这个临时变量的所有引用点替换为对新函数的调用,此后新函数可被其他函数复用
  5. 使用解释性变量
  6. 分解临时变量
  7. 移除对参数的赋值
  8. 使用函数对象取代函数
  9. 替换算法

算法导论笔记

算法描述一个特定的计算过程来实现输入输出的关系


代码整洁之道阅读笔记

代码整洁之道

敏捷

敏捷是态度而不是流程,是氛围而不是方法。

专注镇定和思考

简单的代码

  • 能通过所有测试
  • 没有重复代码
  • 体现系统中全部的设计理念
  • 包含尽量少的实体、比如类、方法、函数等

函数

函数应该做一件事、做好一件事,只做这一件事

如何判断函数是否只做了一件事:

看能否再拆出一个函数,拆出的这个函数不仅只是简单的重现诠释其实现

函数进行错误处理就是一件事

注释

注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败

单测

原则 FIRST

fast

independent

repeatable

self- validating

timely

SRP 单一权责原则

一个类应该只有一个要改动的理由

系统应该由许多短小的类而不是少量巨大的类组成,每一个小类封装一个权责,只有一个修改类的原因,并与少数其他类一起协同达成期望的系统行为。

内聚

一个类的变量尽可能被内部方法使用

DIP 依赖倒置

类应该依赖于抽象而不是依赖于具体细节

系统

将系统的构造和使用分离

IOC 控制反转(DI 依赖注入)

并发编程

执行模型

  • 生产、消费者模型
  • 读者、作者模型
  • 宴席哲学家

preact源码笔记

分为create vnodediffcommit 三部分

  • createElement
  • cloneElement
  • createNode

diff