Windows下搭建Typora+PicGo-Core图床组合
Windows下搭建Typora+PicGo-Core图床组合好用的Markdown编辑器如果你喜欢使用markdown进行写作,那么typora这个编辑器不会让你失望,目前最新版的typora已开始收费,本文介绍的是最后一个免费版本,通过跟gitee结合实现免费的图床
Typora安装包下载地址
图床配置我们在文章中引用图片,可以
引用他人外网图,这样可能不太稳定,说不定哪天被删了
自己搭建图片服务器,需要费用
使用阿里云OSS等第三方存储,也是需要费用
通过图床插件PicGo-Core(推荐)
Typora的PicGo-Core插件可以在编写文章插入图片的过程中,自动上传到Gitee仓库并取得图片链接显示,这样就可以解决外链容易被删的问题,关键还是免费!
配置图床插件的方法
安装PicGo-Core命令行插件
下载安装完后,一般在目录C:\Users\xxx\AppData\Roaming\Typora\picgo\win64\picgo.exe,把xxx改成你电脑的用户名
安装gitee-uploader和super-prefix插件
123cd C:\Users\xx ...
Gitea+Drone实现自动构建
Gitea+Drone实现自动构建Gitea搭建docker搭建
1docker run -d --name gitea -p 10022:22 -p 3000:3000 -v /data/gitea:/data gitea/gitea
Drone搭建编写docker-compose.yaml
其中<*>的需要替换为自己的信息
1234567891011121314151617181920212223242526272829303132333435363738394041version: "3"services: drone-server: image: drone/drone:2 container_name: drone-server privileged: true environment: - DRONE_GITEA_SERVER=<Gitea域名> - DRONE_GITEA_CLIENT_ID=<Gitea用户Oauth应用客户端ID> - DRONE_G ...
Github Pages搭建免费静态网站
Github Pages搭建免费静态网站创建仓库在github.com上面创建一个仓库命名为<username>.github.io,例如你的github账号是abc(下面的例子默认abc作为账号编写),则创建的仓库名为abc.github.io
设置仓库为公开
上传文件把静态文件上传到该仓库
在线访问上传完后需要等几分钟同步,然后就可以直接用abc.github.io访问你的网站了
自定义域名如果你想自定义域名访问你的仓库,可以这样做
假设你拥有域名web.abc.com
到域名后台进行CNAME解析,web.abc.com -> abc.github.io
在静态文件根目录添加文件CNAME,文件内容是web.abc.com
过一两分钟,你就可以使用web.abc.com域名访问你的静态仓库了!
分析Nginx日志脚本
提取前10分钟的日志1tac /var/logs/nginx/access.log| awk 'BEGIN{ "date -d \"-10 minute\" +\"%H:%M:%S\"" | getline min10ago } { if (substr($4, 14) > min10ago) print $0;else exit }' | tac### 提取前10分钟的日志
CAP理论
一、CAP理论根据CAP理论,一个分布式系统不可能同时满足以下三种
一致性(C:Consistency)
可用性(A:Available)
分区容错性(P:Partition Tolerance)
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了CP系统,但是CAP不可同时满足
因此在进行分布式架构设计时,必须做出取舍。以下三种情况:
CA:不分区的情况下,一致性和可用性可以保证,但是舍弃分区容错性,那就变成单机模式了CP:保证一致性和分区容错性的前提下,意味着需要进行数据同步,这时的可用性无法保障AP:保证可用性和分区容错性的前提下,一旦出现网络波动,数据一致性无法保障
模式
例子
CA
MySQL
CP
Redis,MongoDB
AP
12306,淘宝
浏览器渲染过程
一、浏览器渲染
常用算法
一、冒泡排序
12345678910111213function bubbleSort(arr) { var len = arr.length; for(var i = 0; i < len - 1; i++) { for(var j = 0; j < len - 1 - i; j++) { if(arr[j] > arr[j+1]) { // 相邻元素两两对比 var temp = arr[j+1]; // 元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr;}
二、快速排序
1234567891011121314151617181920212223242526272829303132function quickSort ...
Redis淘汰策略
配置淘汰策略redis.conf
1maxmemory-policy volatile-lru
8种淘汰策略
淘汰策略
说明
noeviction
当内存使用超过配置的时候会返回错误,不会驱逐任何键
allkeys-lru
加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键
volatile-lru
加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最久没有使用的键
allkeys-lfu
从所有键中驱逐使用频率最少的键
volatile-lfu
从所有配置了过期时间的键中驱逐使用频率最少的键
allkeys-random
加入键的时候如果过限,从所有key随机删除
volatile-random
加入键的时候如果过限,从过期键的集合中随机驱逐
volatile-ttl
从配置了过期时间的键中驱逐马上就要过期的键
Memcache和Redis比较
对比项
Memcache
Redis
胜出
数据结构
k,v
stringhashlistsetzset
redis
持久化
不支持
rdbaof
redis
高可用
依赖客户端
sentinel
redis
存储容量
1M
512M
redis
数据一致性
支持事务
CAS
-
内存分配
预分配
临时申请
memcache
性能
优
优
memcache
大数据量
优
中
memcache
缓存和数据库数据一致性探讨
数据库和缓存的更新方式1.先更新数据库,再更新缓存2.先更新缓存,再更新数据库3.先更新数据库,再删除缓存4.先删除缓存,再更新数据库5.使用canal更新缓存
一、先更新数据库,再更新缓存12db.update(key,val)cache.setex(key,ttl,val)
1.如果数据库更新成功,缓存设置失败,结果数据库是新数据,缓存是旧数据,导致数据不一致
2.高并发场景下,A线程更新数据库status=1成功后卡住,B线程更新数据库status=2,并更新缓存成功,然后A线程恢复,把缓存刷成status=1,此时数据库status=2和缓存status=1数据不一致结论:不推荐
二、先更新缓存,再更新数据库12cache.setex(key,ttl,val)db.update(key,val)
1.如果缓存更新成功,数据库设置失败,结果数据库是旧数据,缓存是新数据,导致数据不一致
2.高并发场景下,A线程更新缓存status=1成功后卡住,B线程更新缓存status=2,并更新数据库成功,然后A线程恢复,把数据库刷成status=1,此时数据库status=1和缓存st ...