写过
Java程序的同学,都遇到过NullPointerException,为了防止空指针异常,程序中往往要添加很多非Null判断。这些判断不仅麻烦,还影响程序的欣赏性和可读性。既然非空判断不可避免,那有没有合适的框架来优雅的解决这一问题呢,java8之前,官方并未提供这样的语法糖,可以使用Guava等外部API来解决这一问题。直到java8提供了Optional API。
《阿里巴巴JAVA开发手册》也推荐开发者使用Optional API来避免NPE。
写过
Java程序的同学,都遇到过NullPointerException,为了防止空指针异常,程序中往往要添加很多非Null判断。这些判断不仅麻烦,还影响程序的欣赏性和可读性。既然非空判断不可避免,那有没有合适的框架来优雅的解决这一问题呢,java8之前,官方并未提供这样的语法糖,可以使用Guava等外部API来解决这一问题。直到java8提供了Optional API。
《阿里巴巴JAVA开发手册》也推荐开发者使用Optional API来避免NPE。
本文对
java中三种I/O方式的用法以及性能进行比较。这三种I/0方式对应着五大模型中的阻塞模型、多路复用模型、异步模型。I/O的应用场景通常包含磁盘I/O和网络I/O,本文从这两个方面介绍三种IO方式,比较三者之间的性能。
对程序员而言,
I/O操作是程序中最常见的操作之一。比如说磁盘文件的读写、数据的网络传输等等。程序=数据结构+算法,其中数据元素的获取就必须通过I/O操作来完成。在当今这个数据大爆炸时代,I/O问题尤其突出,很容易成为一个性能瓶颈。
然而很多程序员甚至是高级程序员对I/O操作只是停留在会用的阶段,遇到相应的业务场景只是去COPY一段代码,小型项目这样当然没问题,对于I/O密集型的项目,如果理解不深,有可能会造成严重的问题。实际工作中我也是这样,经常在网上找一段代码不去分析他的原理,从而走了不少弯路。作为Java程序员,深入的理解I/O操作很有必要,所以在这里做一个系统的整理。
最近微信跳一跳小游戏在朋友圈着实火了一把,为了争第一,朋友圈的最高分一次一次刷新,随后好多人晒出了自己刷分攻略,有制作物理外挂的,有程序外挂的。作为程序员,特别动手能力比较强的程序员,这时候就闲不住了。
GitHub上已经有Python版外挂(https://github.com/wangshub/wechat_jump_game),这里我用Java实现。