Design pattern

学习系统的最好方式就是做出一个系统。

学习设计模式也是,最佳实践便是写代码,多写代码,再多写代码。
当代码量达到一定程度的时候,便会有优化的需求,这个时候站在前人的肩膀上,使用设计模式便可以写出优雅的代码。

设计模式,是程序员们在多年的实践中总结出来的解决特定问题的优秀实现方案。是一种可以低耦合,高内聚的代码组织形式。

Read More

Yar RPC Framework

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

Read More

apue-advanced-IO

apue序列之-高级I/O

  1. 非阻塞I/O
  2. 记录锁
  3. I/O多路复用

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