摘要: 在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而IO操作是非常慢的,所以此时的线 阅读全文
posted @ 2017-03-14 16:58 无知者云 阅读(27123) 评论(2) 推荐(8) 编辑
摘要: 在Java中,我们经常听到Collections框架、Collection类以及Collections类。这三者名字相似,但是从概念上讲却是不同的。Collections框架泛指Java中用于存储和操作集合的类库总和,其中包括了List、Set和Map等。但是在具体实现上,由于Map中装的是Key- 阅读全文
posted @ 2017-03-12 17:21 无知者云 阅读(3430) 评论(0) 推荐(4) 编辑
摘要: 通常来说,要写Java代码,你基本上都没必要听说垃圾回收这个概念的。这不,对于已经写了多年Java代码的我来说,我还没有哪次经历说是需要使用垃圾回收方面的知识来解决问题的。但是,我依然督促自己花了几天时间系统性地(也比较浅显地)学习了Java垃圾回收机制。我认为学习Java垃圾回收机制至少可以得到以 阅读全文
posted @ 2017-03-10 14:28 无知者云 阅读(2986) 评论(1) 推荐(2) 编辑
摘要: 有句话这么说的:程序员的能力不在于增加代码的能力,而在于减少代码的能力。基于这个我认之为真的命题,我经常问和我一起工作的程序员:你的程序还能不能精简一点?如果能,那能不能再精简一点? 要减少程序,往往建立在程序员对自己的程序代码本身、对业务,以及对所使用的技术框架都非常的熟悉的情况下,而这些就是一个 阅读全文
posted @ 2016-09-28 12:03 无知者云 阅读(4642) 评论(18) 推荐(1) 编辑
摘要: 这是一个关于Vagrant的学习系列,包含如下文章: 随着微服务越来越被行业所接受,与之相关的持续集成和持续交付的作用和价值也更加突显。在本文中,我们将使用Vgrant和Ansible来自动地创建一套持续交付平台——ThoughtWorks的GoCD。如果你对Jenkins比较熟悉,也可以参考笔者另 阅读全文
posted @ 2016-09-22 17:23 无知者云 阅读(6126) 评论(1) 推荐(2) 编辑
摘要: 这是一个关于Vagrant的学习系列,包含如下文章: 在上一篇文章中,我们讲到了如何创建自己的vagrant box。本文中,我们将使用Vagrant一次性创建3台虚拟机以组成一个Jenkins的master-slave构建环境,其中包含1台Jenkins master机器,2台slave机器。我们 阅读全文
posted @ 2016-08-26 14:12 无知者云 阅读(4857) 评论(1) 推荐(1) 编辑
摘要: 这是一个关于Vagrant的学习系列,包含如下文章: 在上一篇中,我们讲到了Vagrant的基本使用,在本文中我们将尝试创建自己的Vagrant box。 本文源代码:https://github.com/davenkin/vagrant/tree/master/ubuntu1604-jdk1.8- 阅读全文
posted @ 2016-08-21 09:07 无知者云 阅读(17571) 评论(4) 推荐(2) 编辑
摘要: 简单地说,Vagrant让我们可以通过代码的方式快速地、可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox、AWS、Docker等。它使得我们可以一次性地、自动创建多个环境相同的虚拟机,对于软件开发和测试尤其有用。本文我们将以Virtualbox为例,看看Vagrant的基本使用。 这是 阅读全文
posted @ 2016-08-20 18:18 无知者云 阅读(45047) 评论(3) 推荐(4) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 在本系列的上一篇文章中,我们讲到了如何处理依赖冲突,在本文中,我们将讲到如何编写自己的Plugin。 Maven就其本身来说只是提供一个执行环境,它并不知道需要在项目上完成什么操作,真正操作项目的是插件(plugin),比如编译Java有Compil 阅读全文
posted @ 2016-08-15 17:39 无知者云 阅读(20228) 评论(0) 推荐(3) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 在本系列的上一篇文章中,我们讲到了如何使用Profile,在本文中,我们将讲到如何处理Maven的依赖冲突。 不知道你在使用Maven时是否遇到过诸如"NoSuchMethodError"或"ClassNotFoundException"之类的问题, 阅读全文
posted @ 2016-08-15 09:34 无知者云 阅读(28310) 评论(1) 推荐(1) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 在开发项目时,设想有以下场景: 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQ 阅读全文
posted @ 2016-08-14 09:45 无知者云 阅读(22222) 评论(0) 推荐(3) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 平时我们自己做的项目都是直接使用Maven提供的Central Repository,但是对于公司来说直接使用公共的Maven Central Repository就不见得是件好事了,比如我们需要考虑安全问题。此时你可以创建一个公司专属的Reposi 阅读全文
posted @ 2016-08-13 18:24 无知者云 阅读(33791) 评论(0) 推荐(2) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 持续交付要“自动化所有东西”,对于集成测试也是一样。集成测试和单元测试相比需要更多的环境准备工作,包括测试数据的准备和启动服务器等。在本篇中我们设想以下一种场景: 你开发了一个web应用,集成测试使用了Selenium,你希望通过一个Maven命令跑 阅读全文
posted @ 2016-08-13 09:46 无知者云 阅读(9502) 评论(0) 推荐(1) 编辑
摘要: 这是一个Maven提高篇的系列,包含有以下文章: 通常来说,在Maven的多模块工程中,都存在一个pom类型的工程作为根模块,该工程只包含一个pom.xml文件,在该文件中以模块(module)的形式声明它所包含的子模块,即多模块工程。在子模块的pom.xml文件中,又以parent的形式声明其所属 阅读全文
posted @ 2016-08-12 22:35 无知者云 阅读(33459) 评论(4) 推荐(6) 编辑
摘要: 2004年,当Eric Evans的那本《领域驱动设计——软件核心复杂性应对之道》(后文简称《领域驱动设计》)出版时,我还在念高中,接触到领域驱动设计(DDD)已经是8年后的事情了。那时,我正打算在软件开发之路上更进一步,经同事介绍,我开始接触DDD。 我想,多数有经验的程序开发者都应该听说过... 阅读全文
posted @ 2014-07-24 13:34 无知者云 阅读(13185) 评论(11) 推荐(7) 编辑
摘要: 2013年秋天的某个周末,我在公司翻译本书。对面一个刚入职的大学毕业生向我问起一个关于软件建模的问题,我给她讲到了实体、领域服务和限界上下文等概念。语毕,我立即有两点感触:第一,我已经被DDD深深影响了;第二,即便是对于那些小的软件项目,DDD依然有用武之地。 通常的看法是,DDD更适合于大型的软件 阅读全文
posted @ 2014-03-11 16:03 无知者云 阅读(1234) 评论(1) 推荐(0) 编辑
摘要: 在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin。 请通过以下方式下载本系列文章的Github示例代码:git clone https://github.com/davenkin/gradle-learning.git 在Plugin中,... 阅读全文
posted @ 2013-11-18 18:04 无知者云 阅读(38218) 评论(5) 推荐(6) 编辑
摘要: 在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型。 请通过以下方式下载本系列文章的Github示例代码:git clone https://github.com/davenkin/gradle-learning.git 在前面的文章中我们讲... 阅读全文
posted @ 2013-11-16 11:55 无知者云 阅读(25979) 评论(6) 推荐(4) 编辑
摘要: 在本系列的上篇文章中,我们讲到了Gradle的依赖管理,在本篇文章中,我们将讲到如何构建多个Project。 请通过以下方式下载本系列文章的Github示例代码:git clone https://github.com/davenkin/gradle-learning.git Gradle为... 阅读全文
posted @ 2013-11-15 09:28 无知者云 阅读(45897) 评论(2) 推荐(8) 编辑
摘要: 在本系列的上篇文章中,我们讲到了如何使用java Plugin,在本篇文章中,我们将讲到Gradle的依赖管理。 请通过以下方式下载本系列文章的Github示例代码:git clone https://github.com/davenkin/gradle-learning.git 一个Jav... 阅读全文
posted @ 2013-11-14 20:40 无知者云 阅读(48694) 评论(0) 推荐(3) 编辑