作为Java程序员我们经常会碰到 NullPointerException 异常。不管是初级,还是经验丰富的专家,NullPointerException 是一个很让人头疼的问题,一不小心程序就会出错。
Java 多线程之CompletionService
如果向 Executor 提交了一组计算任务, 并且希望在执行完成后获取结果,可以保存与每个任务关联的 Future ,并调用 get 方法去获取执行结果。但是如果任务还未完成,获取结果的线程将阻塞直到任务完成,由于无法确定任务执行完成的先后循序,使用这种方式效率不高。如果同时将参数 timeout 设置为 0 ,然后循环调用 get 方法,通过轮询来判断任务是否完成。这种方法可行,但是过于繁琐,好在 JDK 提供了一种更好的方法: CompletionService。
Java 多线程之使用 Future 实现携带结果的任务
Runnable
Runnable 是我们多线程开发过程中常用的接口。 Executor 框架使用 Runnable 作为其基本的任务表现形式。 Runnable 是一个有很大局限性的接口,run() 方法没有返回值并且不能抛出一个受检查的异常。
MySQL EXPLAIN 命令详解
EXPLAIN 语句提供有关 MySQL 如何执行语句的信息。 解释与 SELECT, DELETE, INSERT, REPLACE,和 UPDATE 语句有关的工作。
SpringBoot之使用Hibernate Validator验证参数
开发 WEB 应用时参数校验必不可少。前端通过 js 校验参数合法性,后端也需要对参数进行校验。常见的做法是在 Controller 或者 Service 中通过 if 或者 assert 判断参数是否合法。这样的方式虽然简单,但是代码冗余、耦合度高。其实可以通过 Hibernate Validator 优雅的进行参数校验。
Gradle 多环境配置教程
通常我们的项目会存在多个环境,比如,开发环境,测试环境,生产环境等。不同的环境配置不同,发布的时候需要根据发目标环境来选择打包对应的配置文件。使用 Gradle 作为构建工具,可以很方便的实现。
Elasticsearch学习笔记之分片
为了将数据添加到Elasticsearch,我们需要索引(index)
——一个存储关联数据的地方。实际上,索引只是一个用来指向一个或多个分片(shards)
的”逻辑命名空间(logical namespace)”.
GitHub pull request时Jenkins自动构建教程
当开发人员向GitHub的master分支提交pull request时,需要相关的人员进行review后,才merge到master分支。通过Jenkins,可以很方便的实现pull request时自动触发构建、测试代码,极大的提高工作效率。下面简单介绍一下配置步骤。
Mybatis自动分页插件
自己实现了一个比较简单的MyBatis分页插件。在讲解如何实现分页插件之前,我们先简单介绍一下Mybatis中的一些重要的对象。我们通过映射器Mapper对数据库进行增删改操作时,Mapper执行的过程是通过Executor、StatementHandler、ParameterHandler和ResultHandler来完成对数据库的操作和返回结果的。
Mybatis之MappedStatement源码分析
本篇文章将简单分析Mybatis的StatementHandler源码