flyway和jooq

在上文中,我推荐了flyway+jooq的组合。不同于我的其它推荐大多对标Google和FB这样的国际一线大厂,这个组合在国内也用的很多。不仅仅是一些创业公司(比如我前公司),诸如美团、58等很多大厂的新兴部门也会采用。
flyway,这个东西的理念平平无奇——做数据库的版本控制,但效果实际上出奇的好。DDL和DML的维护本身并不是一件复杂的事,常用的方法比如在项目中用一个sql文件记录,另开一个git仓库用来记录,都是可行的。在执行时,使用工单提交,完成线上变更。在我的实践经验中,这两种方法都有… Read the rest

类型安全

最近大家在解决sonar bug,我也看了一下,相当一部分sonar bug都是因为使用了类型不安全的库导致的。java本身是类型安全的,以java所写的代码一般也以类型安全为优美,但是我发现我们同学写的代码中有非常多的类型不安全的实现,特写一篇文章宣讲记录。

注:类型安全的定义在不同地方会有不同,本文指的是相当宽泛的类型安全。

大家都知道fastjson频繁爆出bug,而这些bug中最严重的一些,又是因为AutoType这一特性。这个事情说来话长,本文不展开,这里提供一篇文章供大家参考。AutoTyp… Read the rest

假如你的代码让公司亏了100万

虽然标题是假如,但是这种事我早就干过了,而且亏了不止一百万。今天就来聊一下这个问题,假如你的代码让公司亏了100万,最终的责任分配应该是什么样子?你会被炒吗?

我在面试中跟几家公司的面试官也讨论过这个问题,不出意料,在很多公司,被炒是大概率事件。 而同样的事情,发生在Facebook和google这样的公司,员工不仅不会被炒,甚至批评都不会有,不会被追究任何责任。有传言说在Facebook,如果你把生产环境搞挂或者造成重大损失,大家会庆祝你在Facebook成年了。这种差距的背后是什么?是这些公司有… Read the rest

Java 9-15最接近我们的特性

抛去各种各样特别牛的特性不谈,我们就说一下我们肯定会经常用到的几个特性。其实就几个,switch表达式,ZGC,var关键字,文本块,record,instanceof,还有更实用的nullpointer报错。

从简单的开始看起。

注:本文描述特性的时候包含很多直接抄来的样例,有的特性需要编译的时候开启特定开关,本文并不关注这些细节,而是关注特性本身。

1、更人性化的NullPointer报错

例如,如下代码:

var name = user.getLocation().getCity().getName();
Read the rest

圆圈正义

上周利用午休时间看了罗翔老师的《圆圈正义》,觉得此书不甚值得一读,特来发表一下对罗老师爆红的一些想法。

我也算是罗老师的粉丝,闲着没事的时候就看几个罗老师的视频,确实风趣幽默,也发人深省。但是为什么罗老师写的《圆圈正义》,我总觉得那么不值一看呢?我尝试总结了一下。罗老师的课,吸引人的地方可以分为两点。第一点,是风趣幽默的讲课风格,加上有趣的犯罪案例。这很容易理解,罗老师是讲刑法的,不止是罗翔,很多讲刑法的老师都非常受学生欢迎。我在学校的时候也选过一门课叫《犯罪通论》,老师也是非常风趣幽默,出口成章… Read the rest

主干开发TBD——特性开关篇

一、概念
Feature Toggles,又叫Feature Flags,中文通常译作特性开关,是一种非常常用的上线方式,并不局限在主干开发中使用。
话不多说,直接看看特性开关是什么。
想象一下,你是微信开发团队中的一员,负责朋友圈广告推送。有一天产品经理告诉你,原来的广告推荐算法不够精准,要用一种新算法。你找到一段代码
Ad calcAdForUser(User user) {
Ad ad = someAlgorithm(user);
return ad;
}
然后将它改成了
Ad calcAdForUser(User user) {… Read the rest

项目人员的沟通语言

最近在啃Eric Evans的《领域驱动设计》。Eric Evans是DDD的创始人,这本书成书于2003年。这一点就挺有意思,现在主流编程思想,差不多都是在1995-2005这个时间段提出的,这些创始人的年龄也差不多。Martin Fowler, Kent Beck, Eric Evans,分别开创了Agile、XP、DDD,是软件开发着实绕不过的三座大山。

先说文档

字节有一个特点,文档特别多,所以自从入职以来,我对文档这种协作工具的思考从来都没有停止过。正好Eric Evans在书中也再次提到了XP对待文档的… Read the rest

ThoughtWorks敏捷培训

首先得澄清的是,本文参考了很多文章还有ThoughtWorks的《深入核心的敏捷开发》,不算原创。另外,这是本人在公司内部敏捷培训的讲稿,有地方有些口语化,见谅

如无特殊说明,本部分的敏捷实践以ThoughtWorks为准
ThoughtWorks敏捷被认为是60%scrum+40%XP,先看下scrum的部分,主要是非技术实践部分。
一、非技术实践
一些容易混淆的名词解释:

  • Sprint,这是scrum中的一个概念,通常是为期两周的一个冲刺。在TW还有很多其它公司,这个叫做Iteration,迭代,可能
Read the rest

主干开发TBD——定义篇

一、主干开发是什么?
说到开发过程,一切的源头都是从分支模式开始的。国内目前大部分公司采用的还是特性分支的开发模式,包括git-flow和github-flow等。而国外大厂却早已达成共识,用的都是主干开发。同样,主干开发也有一些变种,常见的有三种。纯粹的主干开发,带feature分支的主干开发和gitlab-flow。
那么主干开发到底是什么呢,以纯粹的主干开发为例,整个仓库中只有master和release两个分支。所有rd本地开发的代码在经过code review后,都合并到master上。在发… Read the rest

读书总结——推理小说篇

我发现对于大众而言,推理小说似乎具有独特的吸引力,我的很多不怎么读书的同学都经常读推理小说。虽然我对推理小说并无独特的兴趣,但在我读过的小说中,推理小说确实也占了一席之地,因此也来随便说几句。

说到推理小说,给我印象最深的是阿加莎的《东方快车谋杀案》,想必不知道这本小说的人极少,而大多数人只是看了或者听说了这本小说改编的电影。即使是电影,也已经有很多的版本,足见这本小说的吸引人之处。万幸,在读这本小说前我竟然从来没有听说过相关的电影,自然也没有任何的剧透,因此这本书真正是让我案叫绝,确实精彩至极。… Read the rest