我的六年程序生涯
我特别迷信数字六:2016 年写这篇文章,刚好总结前六年程序生涯,选了六月六号下午六点发出。1987 年生我那年阴历有两个六月,我生于前六月;时隔 30 年又碰上两个六月,30 岁也刚好五个六年。今天还是只回顾入行最初的六年。 工作六年对一个程序员意味什么?职位上:高级开发、架构师、技术经理?能力上…
我特别迷信数字六:2016 年写这篇文章,刚好总结前六年程序生涯,选了六月六号下午六点发出。1987 年生我那年阴历有两个六月,我生于前六月;时隔 30 年又碰上两个六月,30 岁也刚好五个六年。今天还是只回顾入行最初的六年。 工作六年对一个程序员意味什么?职位上:高级开发、架构师、技术经理?能力上…
写下的不仅仅是代码,还有文章。假如你是开源社区的一员,你能够通过代码帮助别人提高编程水平。写作也是一样:不但可以提升自己的知名度,还能让好的想法传播得更广。更重要的是,写作本身就是思考。没有比写作更好的方法来理解技术了。 无论你专业宽窄与否,只要你比其他人更懂得如何分析纽约地铁时刻表,那么请把它写出…
把行为当作数据传递,是 Java 8 函数式编程的关键:函数接口、Stream 和 Collector 让同一份列表可以叠上求和、分组、排序等多种计算。 下文从 Function / Stream / Collector 读到自定义聚合器和 Pipeline,再看精练、通用、可测和组合这几项实际收益…
JDK 5 引入 Future,把「把任务交出去、过会儿再取结果」写成接口;Java 8 的 CompletableFuture 补上回调和组合,才算有完整的 Future / Promise / Callback。 Future 模式:我有任务交给 Future,期间我可以干别的,稍后再 get。…
旧日期 API 不好用:Date / Calendar 不是线程安全的,日常加减和时区都要绕弯,不少人只能上 joda-time。 JSR 310 给 Java 8 加了 java.time:ZoneId、Instant、LocalDate、LocalTime、LocalDateTime、Clock…
调用方法拿到返回值却不能直接往下传,往往要先判断是不是 null。Guava 和 Scala 的 Option 都在解决这件事;Java 8 在核心 API 里引入了 Optional。 Javadoc 的说法:这是一个可以为 null 的容器对象。值存在则 isPresent() 为 true,g…
Java 8 两个最重要的变化是 Lambda 和 Stream API。Stream 用来操作数据源生成的元素序列,Collection 上的 stream() 返回顺序流,parallelStream() 返回并发流。 Stream 自己不存元素、不改源对象,操作延迟执行。多个中间操作连成流水线…
Java 8 把一大块新能力摊在一张图上:Lambda、流、新日期、Optional、CompletableFuture……本文只把函数式接口和 lambda 讲清楚——lambda 不能单独出现,必须装进一个 SAM 接口里。 先看全景(来自网络),再落到接口、方法引用、变量捕获和内置 Funct…