使用Caddy和docker部署hexo博客
前言以前这个博客是部署在阿里云的一台服务器上的,域名是 shirofune.cn
后来这台云服务器被我拿去直播服务器了
现在想把域名换成 homu.space ,同时换一台服务器,所以就重新部署一下
借着这个动机,顺便维护一下博客年久失修的依赖
新服务器的准备添加虚拟内存买了 99r 一年的服务器之后先 swap 一些虚拟内存
我用的是一个开箱即用的工具脚本
关于 swap 的一些介绍,还有具体的命令行操作可以看这个视频
更新 package12sudo -iapt update -y # 升级 packages
安装 dockercaddy 是一个 nginx 的替代
我希望通过 docker 来运行 caddy
官方提供了一个一键安装的脚本,脚本包含了 docker-compose
但是需要注意的是,要加上 --mirror 参数,指定国内镜像
1curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
命令解释来自 chatgpt 的命令详解
curl: 这是一个命令行工具,用于从或向服务器传输数据。 ...
在重复的每一天里看星星
星星点点的记忆
上海大雪虽然不知道地球什么时候毁灭,但是上海确实下大雪了,虽然很短暂
Your browser does not support the video tag.
(视频里大名鼎鼎的七宝万科,好像已经没了)
春节回家在洛河边拍出了一张朦朦胧胧的照片,非常喜欢
春节假期,在洛阳去了偃师的虎头山和首阳山,普通的散步道,简单愉快
照片在这里
从洛阳回上海坐飞机,到达上海的时候是夜晚
有幸看到了非常漂亮的俯瞰夜景
Your browser does not support the video tag.
露营的想法三月份是最有活力的时候,工作稳定,生活轻松。加上天气慢慢温暖,有了倾向户外的想法
春天的时候,去公园里和朋友一起坐着晒太阳,打打羽毛球。很舒服呢
团建在米哈游的团建,实际上就是出去吃饭。不论是正式员工还是 mi 岗员工,每个月都有 170 的团建报销额度。
所以团建单纯就是把这 170 给霍霍掉,总不能便宜了公司对吧
印象里项目组整体出去有两次,一次去吃了高丽菜,产品同事带领的。一次是项目管理带领的去玩(我没参加)
相比项目组整体,前 ...
实现页面水印效果
工作项目里实现过的需求,学习了相关代码总结出这篇文章
实现水印的思路从页面层次上来看,水印可以理解为覆盖在最高层的一层透明背景,虽然覆盖在最高层,但是不应该影响底层任何事件的触发
可以通过 canvas 绘制字符串的图片,然后转化为图片作为背景循环平铺到一个 div 里
这个 div 就是水印图
代码实现绘制水印图片1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859function setWatermark(str: string): HTMLDivElement | null { const id = "1.1351.1561.215515"; const lastEle = document.getElementById(id); if (lastEle !== null) { document.body.removeChild(lastEle); } ...
Git rebase和cherry-pick
认识 rebaserebase,正如字面意思,重新选择基点
比如下面这个图,这张图片里有两个分支 feature 和 master
起初,两个分支均为 commit A 为基点,feature 分支延伸出了 D 和 E 两个 commit,master分支延伸出了B和C两个 commit
如果执行了在master分支执行
12# at branch featuregit rebase master
则feature分支的基点会从A变成 master的最新 commit C。这就是 rebase
rebase 之后,不论是 feature 还是 master ,他们都在同一条提交线上
对比 rebase 和 merge还用上面的例子
有这样的一个提交例子
现在试一下不同的操作对提交树产生的影响
如果使用 rebase
为保证相同的顺序 (ABCDE),需要切换到 feature 分支,rebase master 分支
12# at branch featuregit rebase master
如果使用 merge
12# at branch mastergit merge f ...
实现简单的VDOM
VDom 的含义和实现原文地址原文是一篇讲得很明白的文章,本文基本上是照着写了一遍不但学到了 VDOM 相关的一些东西,原生 JS 的方法也熟悉了一遍,收获颇丰
一文说清「VirtualDOM」的含义与实现
如何理解 VDom前端常做的事情就是根据数据状态的更新,来更新页面视图。然而频繁的更新 DOM 会造成回流或者重绘,引发性能下降,页面卡顿因此我们需要方法避免频繁更新 DOM 树思路就是对比 DOM 差距,只更新需要更新的节点,而不是整棵树实现这个算法的基础,需要遍历 DOM 树的结点,来进行比较更新为了更快地处理,不使用 DOM 对象,而改用 JS 对象他就像是 JS 与 DOM 之间的一层缓存
如何表示 VDom借助 ES6 的 class,表示 VDom 的语义化更强。一个基础的 VDom 需要有标签名,标签属性以及子节点
1234567class Element { constructor(tagName, props, children) { this.tagName = tagName; this.props = props; ...
MySQL学习:增删改查
插入记录的基本语法第一种语法123INSERT INTO 表 VALUES(值1, 值2, 值3);-- 示例INSERT INTO USER VALUES(2, 'homu', 'homuhomu');
用这种方法插入数据,表中有多少个字段就必须输入多少个值不能多也不能少…若有默认值,不想上传也可以输入 null
第二种语法123INSERT INTO 表(字段1, 字段2, 字段3, ...字段n) VALUES(值1, 值2, 值3, ...值n);-- 示例INSERT INTO users(id, username, password, age) VALUES(3, 'akemi', 'homuhomu', 12);
除非有必填字段需要写入值之外,如果有默认值的不想写可以不写,mysql 会自动补全默认值相比第一种语法,这种更为常用
插入多条记录1INSERT INTO user(username, password) values('homu', 'homuho ...
MySQL学习:索引
索引的优点索引用于快速找出某个列中有特定值的一行不适用索引,Mysql 必须从第一条记录开始,读完整个表直到找出相关的行。表越大,花费时间越多。如果表中查询的列有一个索引,Mysql 能快速到达一个位置去搜寻到数据文件的中间,没有必要读取所有的数据
但是索引也不宜过多,索引越多,写入和修改的速度就越慢。写入修改数据时,索引也会修改
Mysql 索引类型
索引类型
功能说明
普通索引
最基本的索引,没有任何限制
唯一索引
某一行启用了唯一索引,则不允许这一列行数据中有重复的值,针对这一列的每一行数据都要求是唯一的
主键索引
这是一种特殊索引,不允许有空值,一般在建表的时候同时创建主键索引,常用于用户 ID
全文索引
对于需要全局搜索的数据,进行全文索引
普通索引为表的某字段添加索引
1234alter table 表 add index(字段);-- 示例alter table users add index(username);-- 给users表中的username字段添加索引
唯一索引1alter table 表 add unique(字段);
全 ...
MySQL学习:数据类型
MySQL 中存的是数据。只要是数据,我们就会规定数据的类型。在表的字段中规定了使用的是某个数据类型。那么,在插入的数据中就要使用对应的数据类型。并且,遵守数据类型的长度要求。
所有数据类型
数值类型
整型
浮点型
字符串类型
日期时间类型
复合类型
空间类型(用的不多)
整型
MySQL 数据类型
所占字节
值范围
tinyint
1 字节
-127~128
smallint
2 字节
-32768~32767
mediumint
3 字节
-8388608~8388607
int
4 字节
-2147483648~2147483647
bigint
5 字节
+-9.22*10 的 18 次方
整型长度不同,在实际使用过程也不同
MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的 ...
MySQL学习:常用数据字段sql语句
修改表字段类型基本语法
1234alter table 表名 modify 字段名 字段类型;-- 示例-- 将user表的password类型改为varchar(30)alter table user modify password varchar(30);
12Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0
查看表结构
1desc user;
1234567+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| username | varchar(20) | YES | | NULL | || password | varchar(30) | YES | ...
MySQL学习:常用数据表sql语句-1
创建表基本语法
123create table 表名(字段1 字段类型, 字段2 字段类型, ...字段n 字段类型);-- 示例:创建一个user表,有username和password两个字段create table user(username varchar(20), password varchar(20));
关于数据类型的知识,会在后面记录
查看数据表结构基本用法
123desc 表名;-- 示例desc user;
1234567+----------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| username | varchar(20) | YES | | NULL | || password | varchar(20) | YES | | NULL ...