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