编程的智慧(下)

  • 下面我对这些情况举一些例子。

    情况1:下面这段代码里面有一个continue:

    List<String> goodNames = new ArrayList<>(); for (String name: names) { if (name.contains("bad")) { continue; } goodNames.add(name); ... } 

    它说:“如果name含有'bad'这个词,跳过后面的循环代码……” 注意,这是一种“负面”的描述,它不是在告诉你什么时候“做”一件事,而是在告诉你什么时候“不做”一件事。为了知道它到底在干什么,你必须搞清楚continue会导致哪些语句被跳过了,然后脑子里把逻辑反个向,你才能知道它到底想做什么。这就是为什么含有continue和break的循环不容易理解,它们依靠“控制流”来描述“不做什么”,“跳过什么”,结果到最后你也没搞清楚它到底“要做什么”。

编程的智慧(中)

  • 使用Optional类型。Java 8和Swift之类的语言,提供了一种叫Optional的类型。正确的使用这种类型,可以在很大程度上避免null的问题。null指针的问题之所以存在,是因为你可以在没有“检查”null的情况下,“访问”对象的成员。

    Optional类型的设计原理,就是把“检查”和“访问”这两个操作合二为一,成为一个“原子操作”。这样你没法只访问,而不进行检查。这种做法其实是ML,Haskell等语言里的模式匹配(pattern matching)的一个特例。模式匹配使得类型判断和访问成员这两种操作合二为一,所以你没法犯错。

    比如,在Swift里面,你可以这样写:

编程的智慧(上)

编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。

反复推敲代码

既然“天才是百分之一的灵感,百分之九十九的汗水”,那我先来谈谈这汗水的部分吧。有人问我,提高编程水平最有效的办法是什么?我想了很久,终于发现最有效的办法,其实是反反复复地修改和推敲代码。…

又拍云图片处理集群架构

黄慧攀,又拍云 CTO。最早在 2001 年开始 web 开发工作;2006 年创办 yo2.cn 优博网(WordPress 博客平台);2010 年加入又拍云开始构建第一代云存储和云 CDN 服务。曾从事前端、后端和服务端等工作,目前主要从事技术架构工作。

又拍云的云处理服务包括图片和音视频处理服务,其中图片处理系统每秒处理图片数量 3000 多张,一天要处理 1 亿张图片左右。图片处理服务面向的客户主要有电商、图片社交两类,他们也是图片处理需求的大户,其他类型的客户对图片处理需求比较少。

PHP程序员进阶学习书籍参考指南

【初阶】(基础知识及入门)

 

01. 《PHP与MySQL程序设计(第4版)》  http://item.jd.com/10701892.html

02. 《深入浅出MySQL 数据库开发 优化与管理维护 第2版》 http://item.jd.com/11381295.html

03. 《实战Nginx:取代Apache的高性能Web服务器》 http://dwz.cn/2K1ryn

04. 《Redis 实战》 http://item.jd.com/11791607.html

06. 《MongoDB权威指南 第2版》 http://item.jd.com/11384782.html

07. 《Linux系统命令及Shell脚本实践指南》 http://item.jd.com/11354663.html…

        

文件服务器集群 采用Rsync+sersync同步主从文件FTP

1.1     为什么要用Rsync+sersync架构?

1、sersync是基于Inotify开发的,类似于Inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

1.2     Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别?

        

Apache rewrite转换为Nginx rewrite方法及注意事项

rewrite 转换 注意事项: 
一、RewriteRule 替换成 rewrite
二、前匹配条件 – 要去掉结尾符 $
三、前匹配条件 – 中的点. 要加转义替换成 \.
四、前匹配条件 – 路径开始前要加根目录索引符号 /
五、前匹配条件 – 使用 双引号 括起条件
六、后匹配条件 – 路径开始前要加根目录索引符号 /
七、后匹配条件 – 要增加结尾符 last;…