janlay’s blog

悠悠人生路,翩翩少年情

2014 年终总结

生命的轮回

开篇就拟了这么一个很大的标题,是因为一想起要回顾一下刚刚过去的 2014 年,有两件事立刻浮现在我的脑海中:外婆的去世和女儿的出生。这两件事相隔很近,以至于每每念及都会唏嘘感慨生命的更替变化,令人困惑又心生敬畏。

我的自考求学之路

上次年度回顾里说到,我要细谈一下自学考试的经历。当初我以为只是简单地考几年试的事情,没料到却如戏剧一般起伏变化。每念及此,我都觉得应该把它记录下来,算是对这段不太平坦的求学之路的一个总结。今天我决定动笔。

微信红包的业务逻辑

我这两天玩下来,最深的感受是,这是个活跃加熟人圈子(我这里不说朋友圈以免误导大家)的产品。 很多人不是没看到别人用吗?那是因为你很少用微信跟人交流,它就把你排斥在外了。那么微信红包在业务逻辑上做了哪些设定,使其区别于一般电商的红包玩法呢?

  1. 红包对个人只能发给最近聊过天的人。如果你想发给没聊过天的好友,必须把这些人拉出来建群,不能发完就散。所以它是提供给活跃用户来玩的,这个门槛能激发入场玩家的「优越感」

2013 年终总结

眼看 2013 年就要跨过,眼看这个 blog 又要草长齐腰,眼看笔头日益生疏如写外语,在这最后一两个小时,还是来回顾一下走过的这个 2013 年吧。

使用空列表,避免返回null

当期望输出列表而列表没有数据时,使用 null 还是 empty list? 这是让很多程序员迷惑的问题。当你有很多选择的时候,通常只有一种是最合适的(当然很多时候这句话前面要加上一个「在特定条件下」的定语)。针对输出/返回空还是空列表的问题,很多人多年程序设计经验表明,应该总是使用空列表

这是个分手的季节

「是一个夏天的夜,我们悄悄地感觉,不知道这是个分手的季节」

今天,我要向大家宣布一件事儿,我将要转岗到集团无线部门。还有几个小时我就无法使用现在的 @alipay.com 邮箱了,所以赶在域账号变更前和大家 say goodbye, 并让你了解到更多信息。

千里之行始于足下,谈谈 Code Review

今天来说说 Code Review(代码审查,以下简称为 CR)。

在一支自认为还算正规的研发团队中,CR 应该是值得做而且必须要做的环节。下面是维基百科对 Code Review 的定义

是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。

CR 的形式

CR 有多种形式,结对 CR(两人坐在一起讨论)、多人 CR(一对多);既有在线进行(借助 Review Board 之类的软件)也有离线进行(一伙人坐在一起讨论)的。

个人建议,在可能的情况下,应尽量选择多人坐在一起 CR,这里称之为「集体 CR」。借用一个时髦概念,集体 CR 可以说是 O2O CR,从线上到线下,哈哈。先看看为什么要进行 CR:

从获取 Referrer 的方法说起

要使页面在当前页跳转到下一页,有几种实现方式:

  • HTML: 点击标准的链接
    <a href="new/path">goto</a>
  • HTTP header: 服务端跳转(301或302重定向)
    Location: http://host/new/path
  • HTML: 使用 meta 配置
    <meta http-equiv="refresh" content="1; url=new/path />"
  • JavaScript: 改变 location.href 属性
    location.href = 'new/path';
  • JavaScript: 使用 location.replace() 方法
    location.replace('new/path');

以上方法实现方式不同,可以灵活运用于不同场景。悲剧的是,虽然可以达成跳转需求,但通过一些方式跳转到新页面时不会带上引用页地址 (referrer, HTTP header 错误地把它拼写成 “referer”). 为什么需要引用页?

JavaScript 奇技淫巧背后的秘密

毫无疑问,JavaScript 是当前最流行脚本语言,不过我认为它获此境遇是历史原因造成的,而非源自优秀的设计。相反,JavaScript 的设计过于灵活和随意,以致坊间流传着各种“杂技”,其中不乏冠之以“高性能”的技巧。而初学者和 JavaScript “熟手” 面对这样的耍杂代码无所适从,不求甚解之下就往往忽略了它。

但是,为什么这些奇技淫巧的代码没有导致语法错误?为什么它也能运行?如何举一反三?解开这些问题,需要了解被大多数人忽略的 JavaScript 基础知识。这里试图解析一些 tricks, 告诉你它们背后的秘密。

JavaScript 与浏览器插件互操作最佳实践

最近,同事遇到了 JavaScript 调用 Flash ActionScript 接口失败的问题,并总结了一些改进方法。看到分享后,结合之前遇到类似的问题,我也总结了一下浏览器插件,包括ActiveX 控件(在IE中)或插件(非IE中)中的互操作问题。