Design pattern

当我们学习一门新的技术或方法的时候,一定要弄清楚这技术是为了解决什么具体的问题。
这么做之后有什么好处。

观察者模式

日常开发过程中,经常会遇到如下的场景:
当用户登录成功时,给用户发送消息推送。当某笔账单回款100%时,执行某些特定的业务逻辑,比如给用户账户加钱或是通知其它模块。
一般来讲,我们实现时会直接采用如下的过程式编码:

Read More

Yar RPC Framework

RPC(Remote-Procedure-Call)。简单来说,rpc就是一台计算机的进程远程调用另一台计算机里的进程所用的协议。
Yar是鸟哥(此鸟哥非linux私房菜的那个鸟哥)开发的一款轻量、简单易用、并行RPC框架。github地址https://github.com/laruence/yar
我们先在本地将环境跑起来。
然后再深入学习Yar的适用场景。

Read More

Apache kafka

是什么
简单来说,Kafka是一个消息中间件。生产者产生消息,消费者消费消息。
适用场景

  1. 系统解耦

实战

在Ubuntu(Debian)下安装Apache Kafka。
Apache Kafka 依赖Java环境,所以需要先安装Java。

Read More

Sober thinking

《清醒思考的艺术》,针对一些思维定势,有一定的警醒作用。
但是凭心而论,我们广大普通人,不都是在凭借以往的经验在解决问题嘛。
幸存偏误
为什么你该去逛逛墓地

游泳选手身材错觉
哈佛是好大学还是烂大学?我们不清楚

Read More

记一次ss排错经历

背景 :Linode上的VPS,服务商进行一次更新之后重启了服务器。重新启动ss-server之后,之前正常的ss连接不上了。

解决步骤:
凭借以往的经验,第一反应是ss端口被GFW禁了(以前经常被这样对待)。想都没想就直接将ss的端口换了一个。重新开启ss-server之后,客户端还是连接不上ss服务。进一步定位问题原因,发现服务器IP能够ping通,ssh服务连不上。这个又更加重了我对IP被ban的理解。这里面有很多思维误区,并没有去求证,这种习惯思维很不符合工程师思维,一点也不严谨,全是凭感觉在那解决问题。要不得,要不得。
在服务器上netstat查看ssh,ss-server的端口都是处于listen状态。借助端口扫描工具,进一步确认端口开放情况。发现所有的端口都没开放。到这一步,想到了是不是防火墙开启的原因。

Read More

编写可读代码的艺术

原则:虽说代码写出来是给机器运行的,但是是给人阅读的。好的代码,应该像好的文档那样,让阅读的人,可以花最少的时间理解表达的确切含义。

具体怎样,才能做到呢?
我们可以从三个方面去做。

1、 取一个完美贴切的变量名

将信息放入变量名中

取一个特定的变量名

Read More

Clean Code

<<gile Software Development: Principles, Patterns, and Practices>>
Single Responsibility Principle SRP
Open Closed Principle OCP
Dependency Inversion Principle DIP
书本教给你的只是一些工具,经验或技巧。能否掌握还是得靠不断地Practice and Practice

Read More

工欲善其事,必先利其器

相信每位电脑使用者都有自己的习惯,有自己习惯的输入法、编辑器、开发环境……。每次换新机器的时候,配置自己熟悉的环境都要折腾半天。
折腾的过程中又会遇到很多之前遇到过的问题。作为一名程序员,这种低效的方式是很不能忍的。所以,打造一个一劳永逸的方案就很有必要了。

Homebrew

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Read More

HTTP协议

HTTP(HyperText Transfer Protocol)是无连接,无状态的,是面向文本的。

Web服务器有一个服务进程,监听着TCP端口。一旦监听到连接建立并建立了TCP连接之后,浏览器就向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后释放TCP连接。

Read More

Interview questions

数据结构和算法

  1. 常见的数据结构和算法及其实用场景。时间复杂度和空间复杂度

    数组 插入和查找的时间复杂度分别为O(logn)、O(1)

Read More