小日日

Stay hungry,stay foolish

0%

脏读:

有个英雄表如下图所示

第一天 小张 往里面插入数据:

1
2
BEGIN;
INSERT INTO heros_temp values(4, '吕布');

小张还没有提交事务的时候,小李对数据表进行了访问,小张看到的结果如下

小李读到了小张还没有提交的数据,我们称之为“脏读”

不可重复读

小张想查看 id=1 的英雄是谁,于是他进行了 SQL 查询:

1
SELECT name FROM heros_temp WHERE id = 1;


然而此时,小李开始了一个事务操作,他对 id=1 的英雄姓名进行了修改,把原来的“张飞”改成了“张翼德”:

1
2
BEGIN;
UPDATE heros_temp SET name = '张翼德' WHERE id = 1;

然后小张再一次进行查询,同样也是查看 id=1 的英雄是谁:
运行结果:

这个时候你会发现,两次查询的结果并不一样。小张会想这是怎么回事呢?他明明刚执行了一次查询,马上又进行了一次查询,结果两次的查询结果不同。实际上小张遇到的情况我们称之为“不可重复读”,也就是同一条记录,两次读取的结果不同。

幻读

小张想要看下数据表里都有哪些英雄

这时当小张执行完之后,小李又开始了一个事务,往数据库里插入一个新的英雄“吕布”

1
2
BEGIN;
INSERT INTO heros_temp values(4, '吕布');

小张这时忘记了英雄都有哪些,又重新执行了一遍查询:

他发现这一次查询多了一个英雄,原来只有 3 个,现在变成了 4 个。这种异常情况我们称之为“幻读”。

总结

  1. 脏读:读到了其他事务还没有提交的数据。
  2. 不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。这是因为有其他事务对这个数据同时进行了修改或删除。
  3. 幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读。

免费ssl续签

宝塔提供的一个自动向Let’s Encrypt申请的免费ssl证书,有效期3个月。
所以在到期前1个月会自动重新申请,但如果你的网站开启了反向代理那么在验证时没法访问到放在你网站根目录下的验证文件。

解决办法

打开网站nginx配置

改成如下配置

1
2
3
4
#一键申请SSL证书验证目录相关设置
location /.well-known{
root /www/wwwroot/wallpaper.xiaoriri.com;
}


红线部分替换成你自己网站的静态文件目录

对于想从事的职业,每个人都有不同的想法,有的人想当明星,还有的人想当程序员。可是每个人的选择却是有限的。

我认为想从事某个职业,首先要去了解这个职业的一个大体的框架,或者是说一个晋升的路线。得益于互联网的发展,现在想了解一个职业,直接在搜索引擎中就能找到答案。然后去学习这个职业所需要的知识和技能。

很多人都觉得工作很烦,那是因为没找到一个你真正热爱的事情。

不爱,但是迫于生计
无感,反正亦步亦趋
热爱,但却身心俱疲
狂热,打了鸡血一般
欢喜,毕竟乐在其中

年轻人的试错成本低,没有父母和子女方面的压力,尽量在年轻的时候多去试试错,多去了解了解这个世界。

谈谈我对学习的看法,首先要先建立起整个知识体系的框架。去了解这个行业最前沿的东西是啥,加入一些群组、论坛。还要有自我驱动力,才能一直坚持下去。纸上得来终觉浅,绝知此事要躬行。

高考给人生带来的成长

高考是中国绝大多数人,都要经历的一次考试,有人认为高考是能够改变命运的考试。也有人认为高考只不过是应试教育的产物。

纪录片的前两集讲述了安徽一所高中毛坦厂的生活,这所中学所招收的学生大多数都是成绩不好,没有考上高考,复读的,他们的班主任和学生斗智斗勇,上课不好好听讲的,吃零食的。老师会对他们进行严厉的批评。其中比较好玩的是,学生们都很会装,装作好好学习的样子,老师一走就又恢复了打闹,当然也有些学生很认真刻苦的学习,剧中有个小女孩对我来说印象深刻,她去年高考没有考上,今年认识到了高考的重要性,发奋学习。可是在临近高考的前一次模拟考试中,分数下降了,班主任找她谈话,她本身的家境就不富裕,后来因为没钱,搬出了学校的宿舍,由她奶奶带着她在外面住,班主任说如果没钱可以在班级里帮她发起捐款,她拒绝了,因为对于一个孩子来说,自尊心是很强的,她觉得家里没钱,靠大家捐款很丢人。这个心情我想只有穷苦人家的小孩才能真正的体会吧。她感到成绩下降了,压力很大,突然不想参加高考了,在回到家后,她又说怎么能不去参加呢,这样的环境对于一个刚上高三的学生来说,内心真是要承受很大的压力。还有一个是保安队队长,他儿子从学校300名一下下降到3000名,这让他很伤心,自己的儿子也不愿跟他说原因,他自己原来有份开厂的事业,后来因为儿子教育的问题,毅然决定不开了,陪着儿子上学。看到这么多年的付出却在临近高考前,成绩下滑那么严重,他的内心肯定接受不了。我呢,初三没有念完书,就出来了,对于上学,是我内心中的一大遗憾。错失了高考,大学,这么多的人生经历。对于穷人家的孩子来说,高考就是可以改变命运的。可以让一个本不富裕的家庭变得更加美好。看到那么多学生在高三那么拼命的努力,再看看自己二十多年了,没有为一件事尽心尽力的去努力,我感到很失落。

同一时期的高考,有一群学生考的是国外的大学,他们的父母都普遍的富裕。为了让自己的孩子上到国外的好大学,从小就学习钢琴,外语,有一个学生是小学五年级就会玩了托福的单词,他们大多都是上的国际高中。不用为国内的高考而担忧吧。

最后一集讲的是校长的故事,衡水中学的校长是中国教育界的神话,也有人觉得衡水的机制对于学生来说太压抑了,把他们当做高考的机器。只是为了考高分。也有人大附中的校长,注重人文发展,认为高考并不是人生的唯一评价标准,让学生去自主的学习。

高考给人生带来的无奈

剧中有的人为了让自己的子女上学,在羊肉价格便宜的时候为了凑够学费,也要卖了,对于中国家长来说,就算再穷也不能穷了孩子的教育。也有的学生在国外上大学,一年几十万的学费。每一个阶层都有每一个阶层的痛苦吧。

个人总结

最近给自己定了个目标,考本科,说起来简单,做起来难啊。现在的年轻人都比较浮躁。喜欢急于求成,没有了我们父辈那种毅力,能吃苦的决心。总是能被身边的鸡毛蒜皮的小事打断。加之环境的因素,没有一个良好的学习氛围。还有自己内心的信念。对于考试来说,也没有一个完整的规划。这可能是我二十年来最迷茫的一段日子了。我自己能做的就是去努力,对自己问心无愧。静下心来,好好干。

Git

切换分支

1
2
git checkout <分支名>
git checkout -b <分支名> #创建一个新分支并切换过去

提交记录

1
2
3
git commit -m <描述>
git commit -am <描述> #提交所有文件到暂存区并提交记录
git commit --amend <描述> #修改最后一个提交 编辑上一次提交的消息。

创建分支

1
git branch <分支名>

合并分支

1
2
git merge <分支名>
git rebase <分支名> #会让分支树更清晰相当于把分支的每个提交都复制过去

HEAD分离

1
2
3
4
HEAD^ #上一个提交
HEAD~2 #上两个提交

git checkout <记录hash值> # 分离HEAD让其指向提交记录而不是分支 git log 可以查看提交哈希值

分支指向HEAD

1
git branch -f <分支名> HEAD

撤销更改

1
2
git reset HEAD #撤销本地记录 在reset后,所做的变更还在,但是处于未加入暂存区状态
git revert HEAD #创建一个记录 可以用于远程仓库

移动提交记录

1
2
git cherry-pick <记录hash值> ... #将多个提交记录复制到当前分支
git rebase -i HEAD #交互式rebase

创建tag

1
git tag v1 HEAD #将标签明确指向指定提交记录

路由

自动注解路由

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
<?php

declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/

namespace App\Controller\Api\v1;

use App\Controller\AbstractController;
use App\Model\Wallpaper;
use Hyperf\HttpServer\Response;
use Psr\Http\Message\ResponseInterface;
use Hyperf\HttpServer\Annotation\AutoController; //1.引入注解命名空间

/**
* @AutoController() //2.声明自动控制器路由 路由地址 /api/v1/index/方法名
*/
class IndexController extends AbstractController
{

/**
* 首页接口
* @param Response $response
* @return ResponseInterface
*/
public function page(Response $response): ResponseInterface
{
$step = (int)$this->request->input('step', 20);
$data = Wallpaper::paginate($step);
$response->withHeader('Access-Control-Allow-Origin', '*')
->withHeader('Access-Control-Allow-Credentials', 'true')
->withHeader('Access-Control-Allow-Headers', '*');
return $response->json(['data' => $data, 'code' => 0, 'msg' => '666']);
}
}

中间件

生成中间件

1
php bin/hyperf.php gen:middleware CorsMiddleware

创建模型

1
php bin/hyperf.php gen:model cash_record

创建验证器

1
php bin/hyperf.php gen:request FooRequest

创建资源集合

1
php bin/hyperf.php gen:resource User

创建数据库迁移

1
php bin/hyperf.php gen:migration create_cash_record_table --create=cash_record

运行迁移

1
php bin/hyperf.php migrate

创建控制器

1
php bin/hyperf.php gen:controller admin/InvestmentSummaryRecord

创建命令行

1
php bin/hyperf.php gen:command SettlementCommand

容器内安装Composer

镜像容器运行后,在容器内安装 Composer

1
2
3
4
5
6
7
8
9
wget https://github.com/composer/composer/releases/download/1.8.6/composer.phar
chmod u+x composer.phar
mv composer.phar /usr/local/bin/composer

将 Composer 镜像设置为 阿里云 镜像,加速国内下载速度

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

php -r "echo ini_get('memory_limit').PHP_EOL;"

Docker安装xdebug调试

创建容器
docker run -d -p 10100:80 –name xici-form -v D:\www\project\job-talen:/var/www/html registry.cn-hangzhou.aliyuncs.com/alicode/php72

docker run -d -p 20001:9501 –name xici-forum-swoole -v /mnt/d/www/project/xici_forum:/www registry.cn-hangzhou.aliyuncs.com/lykj/swoole-php:php-7.2.1-swoole4.3.3 http

docker run –name web -p 80:80 -v /mnt/d/www/config/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

安装xdebug
pecl install xdebug
编辑配置文件
/usr/local/etc/php/php.ini

// 2.x
[xdebug]
zend_extension=”/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so”
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000

//3.x
[xdebug]
zend_extension=”/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so”
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9000

修改完要重启

postman get参数
XDEBUG_SESSION_START=PHPSTORM

服务器路径映射对应docker容器内容的路径(远程服务器的路径)
docker run -d –name wallpaper -v C:/Users/xiaoriri/Desktop/code/wallpaper-api:/data/project -p 9501:9501 -it –privileged -u root –entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.11-swoole

k8s创建证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj “/CN=wallpaper.xiaoriri.com/O=wallpaper.xiaoriri.com”
kubectl create secret tls wallpaper.xiaoriri.com –key tls.key –cert tls.crt

swarm部署

创建配置文件

1
2
3
docker config creaete name file_path

docker service create --name wallpaper -p 9501:9501 --config src=wallpaper,target="/opt/www/.env" registry.cn-hangzhou.aliyuncs.com/xiaoriri/wallpaper:dev

滚动更新

1
docker service update --with-registry-auth --image registry.cn-hangzhou.aliyuncs.com/xiaoriri/wallpaper:dev wallpaper

伸缩容器

1
docker service scale masl=2 #masl是service名称

Docker restart 策略

官方文档

docker run –restart=always 容器ID

docker update –restart=always 容器ID

删除指定前缀容器

docker rm -f $(docker ps -a | grep “wall*” | awk ‘{print $1}’)

官网:https://xdebug.org/

安装:https://xdebug.org/docs/install

https://www.jetbrains.com/help/phpstorm/2021.1/configuring-xdebug.html

docker run -d -p 10086:80 –name xici-form -v D:\www\project\xici_forum:/var/www/html registry.cn-hangzhou.aliyuncs.com/alicode/php72

安装扩展

pecl install xdebug

编辑配置文件

/usr/local/etc/php/php.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
// 2.x
[xdebug]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000

//3.x
[xdebug]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so"
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9000

修改完要重启

新增一个PHP远程调试

img

新增一个服务器

img

服务器路径映射对应docker容器内容的路径(远程服务器的路径)

img

验证是否配置成功

img

配置XDEBUG_SESSION_ID

img

开启监听

img

浏览器安装扩展

https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

开启Debug

img

img

postman get参数

XDEBUG_SESSION_START=PHPSTORM

img

img