![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 62
JLucky123
这个作者很懒,什么都没留下…
展开
-
Java自定义注解进行字段格式校验
通常字段校验使用Hibernate Validator进行校验,如@NotBlank @NotNull @NotEmpty等,但如时间等特殊格式无法校验。但Java提供@Constraint及ConstraintValidator类方便我们自己定义特殊格式字段校验,例如定义不同时间格式校验:import javax.validation.Constraint;import javax.validation.ConstraintValidator;import javax.validation.Cons原创 2020-05-19 05:53:35 · 1858 阅读 · 0 评论 -
JavaBean转换成Map的几种方式
将JavaBean转换成Map有许多方式,可使用各种JSON框架进行转换,也可用反射方式转换或者使用apache commons包中的BeanUtils.describe(item)方法进行转换,不过此方法会将JavaBean中所有字段的类型都转换为String。接下来介绍利用JDK 8的新特性及Spring框架的方法进行转换,代码如下:Arrays.stream(BeanUtils.getP...原创 2020-02-13 11:06:24 · 9869 阅读 · 3 评论 -
垃圾回收算法——标记—清扫回收算法
理想的垃圾回收的目的是回收程序不再使用的对象所占用的空间,任何自动内存管理系统都面临三个任务:为对象分配空间;确定存活对象;回收死亡对象所占用的空间;这些任务并非相互独立,特别是回收空间的方法影响着分配新空间的方法。真正的存活性问题是一个不可确定的问题,因此我们使用指针可达性爱近似对象的存活性:只有当堆中存在一条从根出发的指针链最终到达某个对象时,才能认定该对象存货,更进一...原创 2020-01-20 07:27:06 · 952 阅读 · 0 评论 -
Netty之架构剖析
Netty 逻辑架构Netty 采用了典型的三层网络架构进行设计和开发,其逻辑架构如下图所示:1.Reactor 通信调度层:由一系列辅助类组成,包括 Reactor 线程 NioEventLoop 及其父类,NioSocketChannel 和 NioServerSocketChannel 等等。该层的职责就是监听网络的读写和连接操作,负责将网络层的数据读到内存缓冲区,然后触发各自网络事件...原创 2020-01-15 12:22:42 · 201 阅读 · 0 评论 -
Netty异步编程之Future和Promise
Netty 源码中大量使用了异步编程,从代码实现角度看就是大量使用了线程池和 Future。并在Java自带Future的基础上,增加了Promise机制。这两者的目的都是使异步编程更加方便使用。在阅读源码之前,我们需要对Future的机制有很清楚的认识。1.Future功能Future最早来自JDK的java.util.concurrent.Future,它用于代表异步操作的结果,相关API...原创 2020-01-14 07:59:22 · 843 阅读 · 0 评论 -
Netty之EventLoop和EventLoopGroup
https://blog.csdn.net/twt936457991/article/details/89854851https://www.cnblogs.com/lovezmc/p/11547912.html原创 2020-01-13 21:55:42 · 444 阅读 · 0 评论 -
Netty之ChannelPipeline和ChannelHandler(2)
ChannelHandler功能说明ChannelHandler类似Servlet的Filter过滤器,负责对I/O事件或者I/O操作进行拦截和处理,它可以选择性的拦截和处理自己感兴趣的事件,也可以透传和终止事件的传递。基于ChannelHandler接口,用户可以方便的进行业务逻辑定制,例如打印日志、统一封装异常信息、性能统计和消息编解码等。ChannelHandler支持注解,目前支持的...原创 2020-01-12 21:37:31 · 179 阅读 · 0 评论 -
Netty之ChannelPipeline和ChannelHandler(1)
https://blog.csdn.net/qq_37598011/article/details/83957860https://www.jianshu.com/p/9aad9c32cc09https://www.jianshu.com/p/9aad9c32cc09原创 2020-01-12 21:35:02 · 223 阅读 · 0 评论 -
Netty之WebSocket解决方案
一直以来,解决服务器有新数据时,立即将数据发送到客户端的方案种类繁多,例如“推送”或Comet。实现Comet有两种方式:长轮询与http流长轮询是短轮询的翻版,短轮询的方式是:页面定时向服务器发送请求,看有没有更新的数据。而长轮询的方式是,页面向服务器发起一个请求,服务器一直保持tcp连接打开,知道有数据可发送。发送完数据后,页面关闭该连接,随即又发起一个新的服务器请求,在这一过程中循环...原创 2020-01-12 08:55:25 · 1514 阅读 · 0 评论 -
TCP粘包/拆包问题之Netty解决方案
TCP以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下四种方式:消息长度固定,累计读取到长度总和为定长LEN的报文后,就认为读取到了一个完整的消息;将计数器置位,重新开始读取下一个数据报;将回车换行符作为消息结束符,例如FTP协议,这种方式在文本协议中应用比较广泛;将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符;通过在消息头中定义...原创 2020-01-12 08:29:59 · 319 阅读 · 0 评论 -
TCP粘包/拆包问题及解决
1.TCP粘包/拆包TCP是个“流”协议,所谓流,就是没有界限的遗传数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。...原创 2019-12-31 07:20:18 · 166 阅读 · 0 评论 -
mongodb线程池实现
@Configuration@EnableWebMvc@EnableSpringDataWebSupportpublic class MongoConfig { private static final Logger logger = LoggerFactory.getLogger(MongoConfig.class); // 覆盖容器中默认的MongoDbFacotry Bean ...原创 2020-02-07 14:01:09 · 1372 阅读 · 1 评论 -
Spring Boot 1.X 优雅停机的一种实现方式
在微服务中系统部署时,若当前服务发布重启,调用方会不可避免会受到影响。在微服务中增加一些停机前将已接收的请求处理完成。相关代码实现如下:import org.apache.catalina.connector.Connector;import org.apache.tomcat.util.threads.ThreadPoolExecutor;import org.slf4j.Logger...原创 2019-12-27 21:32:58 · 567 阅读 · 0 评论 -
NIO核心框架介绍
上一篇介绍了Java中NIO和传统IO的区别及优势,这篇主要介绍NIO的核心组成。 NIO共引入了4个概念: - 缓存区:表示数据存放的容器,提供可读写的数据缓存区; - 字符集:用来对缓存数据进行解码和编码,在字节和Unicode字符之间转换; - 通道:用来接收或发送数据,提供与文件、套接字等的连接,类似于Java IO中的流; - 选择器:他们与可选择通道一起定义了多路的原创 2017-03-13 11:23:31 · 7041 阅读 · 1 评论 -
JVM访问控制器--AccessController
类java.securityAccessController提供了一个默认的安全策略执行机制,它使用栈检查来决定潜在不安全的操作是否被允许。这个访问控制器不能被实例话,它不是一个对象,而是集合在单个类中的多个静态方法。AccessController的最核心方法是它的静态方法checkPermission(),这个方法决定一个特定的操作是否能被允许。这个方法将指向Permission对象的引用作为唯原创 2017-05-29 12:12:54 · 611 阅读 · 0 评论 -
java虚拟机规范---java虚拟机对class文件的限制
下面为隐含在Class文件格式中的java虚拟机限制:每个类活接口的常量池最多为65535个,它是由ClassFile结构中的16位const_pool_count字段的值决定,这限制了单个类或接口的复杂度;方法调用时创建的栈帧的局部变量表中的最大局部变量个数65535个,它是由方法代码所处的Code属性中的maxx_locals项的值和java虚拟机指令集的16位局部变量索引决定。注意,每个l原创 2017-05-29 15:34:21 · 570 阅读 · 0 评论 -
java class文件内容之一
Java class文件是8位字节的二进制流。数据项按顺序存储在class文件中,相邻的项之间没有任何间隔,这样可以使class文件紧凑。占据多个字节空间的项按照高位在前的顺序分为几个连续的字节存放。和java的类可以包含多个不同的字段、方法、方法参数、局部变量等一样,Java class文件也能够包含许多不同大小的项。在class文件中,可变长度项的大小和长度位于其实际数据之前。这个特性使得cla原创 2017-05-30 16:09:43 · 555 阅读 · 0 评论 -
Class.forName和ClassLoader.loadClass的区别
Class.forName(String className)使用装载当前类的类装载器来装载指定类。在Class.forName(String className)方法内部调用了Class.forName(className,true, this.getClass().getClassLoader())方法,如你所见,第三个参数就是指定类装载器,显而易见,它调用的是装载当前类的类装载器实例(也就是t原创 2017-06-05 07:04:33 · 420 阅读 · 0 评论 -
Java实现解析或导出Excel操作
以前系统中有解析Excel及导出Excel操作,使用的是POI包解析上传Excel文件,再加上配置文件或有excel模板在系统中,解析上传的Excel文档时读取配置或Excel模板,看是否有必须的列项被缺省,这种方式Excel格式及样式只能写固定,或更改的话需要重新发布应用。 以前解析Excel实现方式类似这种:import java.io.File;import java.io.File...原创 2018-04-30 09:45:08 · 290 阅读 · 0 评论 -
Java中对中文按字母顺序排序
使用JDK自带的Collator类,该类实现了Comparator接口,在Collator.getInstance()中可以指定特定的语言环境 private void sortAttribute(List<Student> list){ Comparator<Object> comparator = new Comparator<Objec...原创 2018-06-06 06:45:02 · 3849 阅读 · 6 评论 -
Java中将对象中属性值为空字符串设置为null
业务逻辑中需要将对象中为空字符串的属性转换为null,简单的一种方式是前端JS控制,如果为空字符串则不传到后台,后台接收到没有值的属性默认为null。这种方式会导致JS繁琐。下面用后台的方式来解决此问题。 public static &amp;lt;T&amp;gt; T setNullValue(T source) throws IllegalArgumentException, IllegalA...原创 2018-07-06 22:39:22 · 32017 阅读 · 2 评论 -
JavaBean之间不同属性名拷贝的方式
import java.util.Iterator;import java.util.Map;import java.util.Set;import net.sf.cglib.beans.BeanGenerator;import net.sf.cglib.beans.BeanMap;public class CGlibBean { /** * 实体Object */ p...原创 2018-11-17 09:01:51 · 4662 阅读 · 0 评论 -
微服务通过feign调用时,跨服务间调用传递header
首先需要实现一个拦截器进行封装:@Componentpublic class HystrixRequestWrapInterceptor implements HandlerInterceptor { public static final HystrixRequestVariableDefault<HttpServletRequest> REQUEST = new Hyst...原创 2019-07-19 06:31:57 · 4240 阅读 · 0 评论 -
Java中的NIO非阻塞编程
平时工作中用到的IO主要是java.io包中的操作,比较少用到java.nio包中操作,最近遇到的比较多对性能要求较高的应用问题,查询了一些资料整理记录一下,方便以后查看。 在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从J原创 2017-03-13 10:32:20 · 1183 阅读 · 2 评论