Bean Validation对象验证标准

Java’s standard for object validation最早在Java EE6中提出,作为Bean Validation 1.0(JSR-303)。它定义了一种在Java对象上执行声明性验证的方式,提供了一个运行时的数据验证框架。更多详细内容可以参考官网:https://beanvalidation.org

Bean Validationn可以让代码变得更简洁清晰,让开发人员在定义数据模型时不必考虑实现框架的限制。当然它不止提供了一些基本的constraint,也可以自定义验证规则,在实际的开发中,可以根据自己的需要组合或开发出更加合适的constraint。

通用Admin管理系统设计

一般的管理系统都会涉及一些用户部门角色权限之类的管理,比如ERP/CRM/OA这些系统早都已经很多成熟的产品以及案例。这里目标是希望设计一套足够简单,能够方便自己进行复用和扩展的系统,主要内容也就是一些表结构设计,也参考了开源管理系统若依的一些经验,尤其是菜单权限设计。

关于代码评审的一些思考

很多团队都会面临这样的问题,开发人员水平参差不齐,代码写的不够规范,review又觉得费时费力。以下是一些关于代码质量管理与提升的思考,参考总结了网上他人的一些经验。

Netty NioEventLoop

Java Nio是对多路复用IO模型的实现,其核心在于借助操作系统提供的选择器实现对连接的监听,然后应用服务只需对就绪的连接事件进行处理即可,比如可读可写等,这样就降低了应用服务在并发场景下的线程资源压力。

Netty中设计了专门的NioEventLoop来封装对Nio事件的处理,其思路是给每个NioEventLoop初始化一个选择器Selector,然后将通道对Selector的注册转化成对NioEventLoop的注册,这样可以让每个NioEventLoop各司其职,只负责处理注册到自己身上的通道事件,从而即实现了通道事件的多线程处理,同时又避免了过程中的线程安全问题。

Netty Future & Promise

在Java中,对于异步操作结果的获取抽象出了一个接口Future<V>,它提供了一些方法来检查或等待操作是否完成,以及获取操作的结果,同时还提供了取消操作的能力,以及提供了检测操作是正常结束还是被取消的方法。不过如果操作已经完成了,就不能再对其进行取消了。在某些场景下,如果只是想借助Future实现操作取消的能力,而不关心操作结果,那么可以返回空即可。

A Future represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve the result of the computation.
The result can only be retrieved using method get when the computation has completed, blocking if necessary until it is ready. Cancellation is performed by the cancel method. Additional methods are provided to determine if the task completed normally or was cancelled. Once a computation has completed, the computation cannot be cancelled. If you would like to use a Future for the sake of cancellability but not provide a usable result, you can declare types of the form Future<?> and return null as a result of the underlying task.