jenkins

Jenkins踩坑

最近弄了下jenkins,就是为了部署方便点,然后也遇到一些麻烦,顺便记录下

阅读全文

avl-tree-vs-rb-tree

最近看了几篇关于二叉搜索树的文字,其中就包括了几个简单的平衡树的内容,包括avltreerbtree。很多文章和资料都说avltree综合性能没有rbtree高,但是有些说法是没什么依据的,可能是被早前的比较差的avltree实现给误导了。

阅读全文

Docker部署shadowsocks

简单记录下使用docker部署shadowsocks的步骤,顺道写一个自动脚本,加快部署,方便下次在ip被墙之后快速的部署科学上网工具

安装docker

这一步按照docker官网提示一步步走即可,反正很简单,简单列一下ubuntu中的步骤:

阅读全文

Git常用的命令

记录下Git中常用的命令,不用到处去找,提升下效率

批量删除

批量删除分支

1
2
3
4
5
# 删除本地分支
> git branch -a | grep -v -E 'master|develop' | xargs git branch -D

# 删除远程分支
> git branch -r| grep -v -E 'master|develop' | sed 's/origin\///g' | xargs -I {} git push origin :{}

阅读全文

redis-sentinel搭建

参考这里redis sentinel docker

阅读全文

死锁

最近在看 concurrency in go 的时候看到了在并发的执行代码过程中,很容易产生死锁的问题,后就查了些资料做个总结

死锁产生的必要条件

    阅读全文

    分布式锁

    简单的记录下分布式锁的东西,尤其是用redis实现的分布式锁

    基本概念

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式。与互斥锁和读写锁之类的很类似,只不过它可以控制多个系统间的同步访问。

    阅读全文

    缓存穿透和缓存雪崩

    缓存现在的项目都会用到,可能啥都不想就先上个缓存吧,简单方便,但是缓存在没有命中或者集体失效的情况下就会引起缓存穿透和缓存雪崩的问题,下面就简单说下缓存穿透和雪崩的预防的一些常用方法

    缓存穿透

    是指查询一个一定不存在的数据,这个时候缓存无法命中,于是直接去请求数据库,查询不到数据不写入缓存,最终导致每次查询这个不存在的数据时候都回去查询数据库。最终的结果就是如果请求量很大会导致数据库挂掉。

    阅读全文

    MySQL中的Int-N

    关于 MySQL 中的有些类型后面跟一个数字(比如 Int,BigInt, varchar 等),这个数字是什么作用呢?实际上表示的是字段宽度,但是这个宽度在不同的类型上作用也是不同的。主要说下Intvarchar中的区别

    阅读全文

    pwa改造之路

    公司移动端的项目使用pwa进行了改造,从原来的服务端直接模板渲染换成了前后端分离的纯前端渲染模式,再加上pwa进行一些缓存的加持(目前主要使用了pwa的缓存,其他的一些推送通知之类的东西还没有添加,以后有时间还是需要继续的),感觉效果还是挺好的,主要技术栈使用了vue的全家桶,也遇到了一些vue的坑…

    阅读全文