whoru

学习、分享、交流、沉淀

  • 一条河的水量,由它的长度、宽度和深度三个因素决定,一个人的影响力也是如此。
  • 对于那些试图在金字塔上爬几个台阶的人来讲,要做的不是抱怨社会的不公平,而是需要付出足够多的努力,同时把注意力放到最该关注的事情上去。
  • 恋爱是激情,是化学物质分泌所带来的愉悦;婚姻则是由两个人一同构造一个舒适的共同体,在那个共同体中,双方都将受益。
  • 很多时候,我们把太多的精力花在了选择上,而不是经营上,导致难以精进。
  • 做减法。如果一个人不能把一件事做好,他首先想到的就应该是少做事情,而不是让自己更忙碌。
  • 学习是一件长期的事情、一辈子的事情,是马拉松比赛,而不是百米赛跑。
  • 如果一定要说有什么起跑线的话,父母的见识就是起跑线。从教育下一代的角度看,一个家庭比贫穷更可怕的是缺乏见识、缺乏爱、缺乏规矩。
  • 但凡那些能够比较长期稳定挣钱的行业,开始的投入都是比较大的,并不存在一种不需要投入就能获得很高回报的行业,否则,这个行业一定太挤,以至一段时间以后行业的回报肯定会急剧下降。
  • 衡量一个专家水平最可靠的方法,就是看他们是将复杂的问题简单化,让每一个人都理解,还是故作高深,将简单的问题复杂化。
  • 一个好的产品设计者会想办法引导顾客,而不会去做迎合每一个顾客的事情。
  • 少就是多。适度的选择给我们自由,但是过多的选择会适得其反。
  • 对于所喜欢的东西,如果付出的代价是让生活质量变差,那就算了。因为钱和任何东西,都是为了让你生活得更好,而不是给你带来麻烦。
  • 每个人无论是自己创业还是为别人做事,都应该有自己独特的能力,才有可能高效率的挣钱。
  • 投资大师巴菲特一直在强调长期成功的投资,关键不在于把握了多少次机会,而在于是否能少犯错误。
  • 对于任何演讲者,都不要指望一次演讲能够讲清楚 10 件事,真能把一件事讲清楚,目的就达到了。

1. 安装、卸载

由于 github 原因,如果没有科学上网,可以使用国内镜像源进行安装,参考文章:使用国内镜像源安装Homebrew

1.1. 安装

依赖:

  • Intel CPU
  • OS X 10.10 or higher
  • Command Line Tools (CLT) for Xcode: xcode-select --install, developer.apple.com/downloads or Xcode
  • A Bourne-compatible shell for installation (e.g. bash or zsh)
1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

1.2. 卸载

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
阅读全文 »

1. 升级

1.1. 下载、编译新版本的 Nginx

1
2
3
4
5
➜  ~ wget https://nginx.org/download/nginx-1.15.6.tar.gz
➜ ~ tar zxvf nginx-1.15.6.tar.gz
➜ ~ cd nginx-1.15.6
➜ ~ ./configure --prefix=/usr/local/nginx
➜ ~ make

备份原 Nginx 二进制文件,并用新版本替换

1
2
➜  ~ cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
➜ ~ \cp -rf objs/nginx /usr/local/nginx/sbin/nginx

1.2. 切换 Nginx 的新老进程

1
2
3
4
5
➜  ~ cd /usr/local/nginx/sbin/
➜ ~ ps -ef | grep nginx
root 6680 1 0 12:17 ? 00:00:00 nginx: master process ./nginx
nobody 6681 6680 0 12:17 ? 00:00:00 nginx: worker process
root 31579 3601 0 12:28 pts/0 00:00:00 grep --color=auto nginx

向正在运行的老版本的 master 进程发送热部署信号

1
2
3
4
5
6
7
8
9
10
➜  ~ kill -USR2 6680

# Nginx 将使用新的二进制文件启动新版本的 master 和 worker 进程
# 并将所有用户请求平滑的过渡到新的进程
➜ ~ ps -ef | grep nginx
root 6680 1 0 12:17 ? 00:00:00 nginx: master process ./nginx
nobody 6681 6680 0 12:17 ? 00:00:00 nginx: worker process
root 31581 6680 0 12:29 ? 00:00:00 nginx: master process ./nginx
nobody 31582 31581 0 12:29 ? 00:00:00 nginx: worker process
root 31584 3601 0 12:29 pts/0 00:00:00 grep --color=auto nginx

向老版本的 master 进程发送信号,让其优雅关闭所有 worker 进程

1
2
3
4
5
6
➜  ~ kill -WINCH 6680
➜ ~ ps -ef | grep nginx
root 6680 1 0 12:17 ? 00:00:00 nginx: master process ./nginx
root 31581 6680 0 12:29 ? 00:00:00 nginx: master process ./nginx
nobody 31582 31581 0 12:29 ? 00:00:00 nginx: worker process
root 31587 3601 0 12:31 pts/0 00:00:00 grep --color=auto nginx

⚠️ 注意:老版本的 master 进程不会自动退出,以方便执行版本回退操作。当新版本稳定运行后,再发送信号退出老版本的 master 进程。

阅读全文 »

1. 关于索引

在 MySQL 中,索引在存储引擎层实现

1.1. 使用索引的好处

  • 大大减少存储引擎需要扫描的数据量
  • 帮助我们进行排序,以避免使用临时表
  • 可以把随机 I/O 改为顺序 I/O

1.2. 建立原则

  • 适量,不是越多越好!!!
  • 过多索引的影响
    • 增加写操作的成本
    • 增加查询优化器的选择时间
阅读全文 »

本文主要介绍了在数据库结构设计过程中需要考虑的一些问题,来源于以往工作、项目经历以及网络资料等,如果有不准确的地方,欢迎指正交流。

在数据库结构的设计过程中,务必注意以下两点:

  • 减少数据冗余,节约数据库存储空间;
  • 尽量避免在数据维护过程中出现更新、插入、删除异常。

一般我们按照如下步骤开始:

  1. 需求分析:全面了解产品设计的存储需求,保证数据的安全性和完整性
  2. 逻辑设计:设计数据的逻辑存储结构,处理数据实体之间的逻辑关系,解决数据冗余和数据维护异常
  3. 物理设计:根据具体所使用数据库的特点进行表结构设计
  4. 维护优化:根据实际情况,对索引、存储结构等进行优化

其中 1、2 是确立大方向;3 是对 1、2 的具体实施(本文会介绍一些注意事项和建议,详见下文);4 是后期的迭代优化。

阅读全文 »