摘要: 在需求的开发过程中,最令人困惑的地方就在于需求模糊。需求是解决业务的问题,那么验收的方式应该是由业务方提出,但是往往业务方(可能是产品经理,也可能是直接是客户)只能给出比较模糊的一个验收标准,而程序却是需要非常明确的输入输出的条件的。 这中间的鸿沟是否能够通过一些手段来减轻(个人认为是无法完全消除的 阅读全文
posted @ 2020-09-17 11:12 whthomas 阅读(1278) 评论(0) 推荐(0) 编辑
摘要: 由于自己身处SAAS行业,在经历了几轮复杂需求的蹂躏之后,我一直试图寻找一种解法,可以尽量cover住复杂多变的需求。在过去的一年中,通过反复阅读和实践,似乎让我对此有了一些清晰的思路,所以我想写一点东西总结一下自己的这一年里的思考。 在我们的项目初期,项目的规模可能比较小,代码量很少,我们的代码或 阅读全文
posted @ 2019-01-30 21:08 whthomas 阅读(826) 评论(0) 推荐(0) 编辑
摘要: 周末,把之前在积压了一周的《日常决策》读完,顺便做了一些笔记。书中提到了很多方法论来帮助我们应对日常生活的中的一些决策,写的非常简单明了。 两种任务 整本书始终围绕两种任务类型展开讨论: 收获性任务 避免损失的任务 收获性任务是指那些会能改进我们生活的一些任务目标,比如升职,获得更好学历,创业,修复 阅读全文
posted @ 2018-08-19 10:42 whthomas 阅读(347) 评论(1) 推荐(1) 编辑
摘要: `Dubbo Spring Boot`则是Spring社区这两年致力于打造的简化Java配置的微服务框架。 利用他们各自优势,配置到一起,可以帮助我们构建出非常优秀的微服务。 配置Maven 使用的Dubbo的一般都是大型项目,maven项目构建也会使用parent节点,Spring Boot考虑到 阅读全文
posted @ 2016-05-14 12:27 whthomas 阅读(6113) 评论(0) 推荐(1) 编辑
摘要: 在复杂的网络世界中,各种应用之间通信需要依赖各种各样的协议,比如: ,`Telnet FTP SMTP`等等。 在开发过程中,有时候我们需要构建一些适应自己业务的应用层协议, 作为一个非常优秀的网络通信框架,可以帮助我们完成自定义协议的通信。 一般而言,我们制定的协议需要两个部分: Header : 阅读全文
posted @ 2016-04-15 23:40 whthomas 阅读(9722) 评论(3) 推荐(6) 编辑
摘要: 在分布式系统中,经常需要使用 查找对应的数据。产生这种ID需要保证系统全局唯一,而且要高性能以及占用相对较少的空间。 全局唯一ID在数据库中一般会被设成 主键 ,这样为了保证数据插入时索引的快速建立,还需要保持一个有序的趋势。 这样全局唯一ID就需要保证这两个需求: 全局唯一 趋势有序 全局ID产生 阅读全文
posted @ 2016-04-07 15:49 whthomas 阅读(10543) 评论(16) 推荐(24) 编辑
摘要: Java的一大优势是能完成多线程任务,对线程的封装和调度非常好,那么它又是如何实现的呢? jdk的包下和线程相关类的类图。 从上面可以看出Java的线程池主的实现类主要有两个类 和`ForkJoinPool`。 是`Fork/Join ThreadPoolExecutor Executors`类的几 阅读全文
posted @ 2016-04-06 20:10 whthomas 阅读(3544) 评论(2) 推荐(4) 编辑
摘要: Java为我们提供了一些 ,利用这些辅助类我们可以在多线程编程中,灵活地把握线程的状态。 CountDownLatch 一个 ,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 再CountDownLatch中两个比较关键的方法: 是一个 ,它的构造方法中需要设置一个数值,用来 阅读全文
posted @ 2016-03-27 21:32 whthomas 阅读(786) 评论(0) 推荐(1) 编辑
摘要: 一般在一个项目中,总是会有好多个环境。比如: 开发环境 测试环境 预发布环境 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一点不同,配置读取可是一个让人有点伤脑筋的问题。 Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来。 常规 阅读全文
posted @ 2016-03-12 23:22 whthomas 阅读(4350) 评论(1) 推荐(0) 编辑
摘要: 使用Spring Boot启动的jar包总是会显示一个Spring的图标: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| 阅读全文
posted @ 2016-03-12 14:57 whthomas 阅读(13768) 评论(3) 推荐(2) 编辑
摘要: 做Java Web的同学,都知道项目启动需要放到servlet容器里面运行,无论是使用哪一款IDE,都是非常麻烦的一件事情。在很早之前,一个servlet容器下可以放下很多的项目,并一起运行,而到现在这个年代,很多服务一台机子都不够用了。所以很多时候,一个容器本来就只为一个项目服务,这样一来,容器式 阅读全文
posted @ 2016-01-03 21:03 whthomas 阅读(1575) 评论(2) 推荐(0) 编辑
摘要: 众所周知Java8中加入了lambda语法,这一特性也帮助Java开发者极大的简化了开发。Speedment是一个利用lambda表达式操作数据库的框架,相比Java世界中现在非常流行的mybatis,它可以极大减少SQL语句的编写。 从图形界面开始使用Speedment Speedment使... 阅读全文
posted @ 2016-01-03 12:08 whthomas 阅读(3226) 评论(2) 推荐(0) 编辑
摘要: 记忆于函数而言是指对于需要多次调用的值进行缓存的机制。目前来说,函数式的编程语言普遍都支持这种特性。如果我们反复调用一个函数,增加一个内部缓存可以提高计算的效率,用更多的内存去换取更高的效率。但是只有纯函数才可以适用缓存技术,纯函数是**没有副作用**的函数:它没有引用其他**值可变**的类字段。除... 阅读全文
posted @ 2015-08-31 19:26 whthomas 阅读(694) 评论(0) 推荐(1) 编辑
摘要: ### jps:虚拟机进程状况工具JVM Process Status Tool。可以列出所有目前正在运行虚拟机的进程。> jps -l详细参数:- -q 输出LVMID,省略主类名称- -m 输出虚拟机进程启动时传递给Main函数的参数- -l 输出主类的全名,如果进程执行的是jar包,输出jar... 阅读全文
posted @ 2015-08-26 20:05 whthomas 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 本文涉及的javac编译器来自 "openjdk" . javac的目录地址为:解压目录/langtools/src/share/classes/com/sun/tools/javac/ javac编译器将Java编译成为一个有效的字节码文件会经历4个步骤: 词法解析:将Java关键字排序,使得程序 阅读全文
posted @ 2015-08-22 17:01 whthomas 阅读(7314) 评论(1) 推荐(2) 编辑