代码整洁之道

最近因为一些契机,花了2到3天看完**《代码简洁之道》**这本书,英文名为:Clean Code

开篇就有有这么简单一句话:“阅读这本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员”。是的,没错,我想成为更好的程序员。所以我决定好好阅读下这本书。

回想2019年,确实是我最忙碌的一年,做过几个项目,其中部分涉及到架构,但是大部分时间都关注在如何实现业务代码,没有更好的关注到代码本身的细节。虽然经常了解到关于整洁代码相关的知识,在工作中也或多或少的用到,比如每天的code review以及TDD开发等等。但是确实不够系统,大多时间忙于完成业务,通过阅读本书,以及其中大量简洁代码的指南,受益匪浅。

[阅读全文]

使用JMH对Java Object Mapping框架做性能对比

JMH概述

JMH 是一个由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发的 Micro Benchmark Framework 。何谓 Micro Benchmark 呢?简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。可以看出 JMH 主要使用在当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。

比较典型的使用场景还有:

  • 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
  • 一个函数有两种不同实现(例如实现 A 使用了 FixedThreadPool,实现 B 使用了 ForkJoinPool),不知道哪种实现性能更好

尽管 JMH 是一个相当不错的 Micro Benchmark Framework,但很无奈的是网上能够找到的文档比较少,而官方也没有提供比较详细的文档,对使用造成了一定的障碍。但是有个好消息是官方的 Code Sample 写得非常浅显易懂,推荐在需要详细了解 JMH 的用法时可以通读一遍——本文则会介绍 JMH 最典型的用法和部分常用选项。

我Fork了一份到github,可以提供大家参考一下,使用gradle构建。jmh-gradle-samples

[阅读全文]

Java基础类型占用字节数

在Java中一共有8种基本数据类型,其中有4种整型,2种浮点型,1种用于表示Unicode编码的字符但愿的字符类型和一种表示真值的boolean类型。

[阅读全文]

Java8新特性(二):Stream流式处理

Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。

[阅读全文]

Java8新特性(一):Lambda表达式

新特性列表

以下是Java8中的引入的部分新特性。关于Java8新特性更详细的介绍可参考这里

  • 接口默认方法和静态方法
  • Lambda 表达式
  • 函数式接口
  • 方法引用
  • Stream
  • Optional
  • Date/Time API
  • 重复注解
  • 扩展注解的支持
  • Base64
  • JavaFX
  • 其它
    • JDBC4.2规范
    • 更好的类型推测机制
    • HashMap性能提升
    • IO/NIO 的改进
    • JavaScript引擎Nashorn
    • 并发(Concurrency)
    • 类依赖分析器jdeps
    • JVM的PermGen空间被移除
[阅读全文]

认识Java序列化

引言

将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识。

[阅读全文]