随笔分类 - java
摘要:首先看看什么是Lambda 表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递);最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如: Arrays.asList( "a", "b", "d" ).forEach(
阅读全文
摘要:Java虚拟机运行时数据区
阅读全文
摘要:springboot开启声明式事务方式 在Application启动类中加入注解@EnableTransactionManagement(mode = AdviceMode.PROXY) 在需要加入事务的方法上加入注解@Transactional @Transactional(rollbackFor
阅读全文
摘要:问题描述: 本地开发环境idea中能正常运行项目,而idea打war包到Linux服务器的Tomcat下却不能正常运行,报如下错误: 问题排查: IDEA 打包环境JDK版本和Linux生产环境JDK版本不一致,导致线上Tomcat无法正常运行 解决方案: 1、确保两边环境安装相同的jdk版本 2、
阅读全文
摘要:1、Netty 是怎么创建服务端Channel的呢? 我们在使用ServerBootstrap.bind(端口)方法时,最终调用其父类AbstractBootstrap中的doBind方法,相关源码如下: 我们继续跟进initAndRegister()这个方法,发现是使用channelFactory
阅读全文
摘要:指数退避 可以理解为每次重连失败时,就把重连时间设置为之前的指数级别。例如 2 秒,4 秒,8 秒...... 亚马逊AWS关于指数退避的两篇文章介绍 "AWS 中的错误重试和指数退避" "Exponential Backoff And Jitter" Netty客户端中使用指数退避方式重连 客户端
阅读全文
摘要:一、什么是Google Protocol Buffer( "protobuf官方网站" ) 下面是官网给的解释: Protocol buffers are a language neutral, platform neutral extensible mechanism for serializin
阅读全文
摘要:解码器Decoder和ChannelHandler的关系 netty的解码器通常是继承自ByteToMessageDecoder,而它又是继承自ChannelInboundHandlerAdapter,其实也是一种ChannelHandler和我们自定义的ChannelHandler一样都是来处理进
阅读全文
摘要:什么是Netty Netty是一个基于Java NIO的编写客服端服务器的框架,是一个异步事件框架。 官网 "https://netty.io/" 为什么选择Netty 由于JAVA NIO编写服务器的过程过于复杂且不易掌控,所以我们选择Netty框架进行开发。 具有很高的的性能。 且比NIO更容易
阅读全文
摘要:传统同步阻塞I/O(BIO) 在NIO之前编写服务器使用的是同步阻塞I/O(Blocking I/O)。下面是一个典型的线程池客服端服务器示例代码,这段代码在连接数急剧上升的情况下,这个服务器代码就会不好使了,因为serverSocket.accept(),以及IO的read(),write()方法
阅读全文
摘要:JDK 1.8 HashMap是数组+链表+红黑树实现的,在阅读HashMap的源码之前先来回顾一下大学课本数据结构中的哈希表和红黑树。 什么是哈希表? 在存储结构中,关键值key通过一种关系f和唯一的存储位置相对应,关系f即哈希函数,Hash(k)=f(k)。按这个思想建立的表就是哈希表。 当有两
阅读全文
摘要:一、类继承关系 PriorityQueue只实现了AbstractQueue抽象类也就是实现了Queue接口。 二、类属性 根据transient Object[] queue; 的英文注释: Priority queue represented as a balanced binary heap:
阅读全文
摘要:树的基本术语 结点(node)由数据元素以及指向子树的地址构成。 若 X 结点有子树,则子树的根结点称为 X 的孩子(child)结点,相应地, X 称为其孩子的双亲(parents)结点,又称父母结点。 同一双亲的孩子结点之间互称兄弟(sibling)结点。 叶子(leaf)结点是指度为 0 的结
阅读全文
摘要:一、类继承关系 ArrayDeque和LinkedList一样都实现了双端队列Deque接口,但它们内部的数据结构和使用方法却不一样。根据该类的源码注释翻译可知: ArrayDeque实现了Deque是一个动态数组。 ArrayDeque没有容量限制,容量会在使用时按需扩展。 ArrayDeque不
阅读全文
摘要:一、类继承关系 LinkedList和ArrayList都实现了List接口。所以有List的特性,同时LinkedList也实现了Deque,所以它也具有双端队列和栈的特性。 二、类属性 transient表示该域不能被序列化。first,last初始值都是null. 这里有一个内部类Node:
阅读全文
摘要:一、描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器。可以模拟生活中依次排队这种场景。 下面是集合体系继承树: 二、Queue Queue和List一样都是Collection的子接口。 Queue源码定义: add(E e)/offer(E e) 将指定元素加入到队列尾部 re
阅读全文
摘要:一、类继承关系 ArrayList继承AbstractList,也实现了List和RandomAccess(一个空接口,也就是标记接口。),Cloneable(可被克隆), Serializable接口。 二、类属性 elementData是transient修饰,所以elementData不能被序
阅读全文
摘要:一、适用场景 1.解耦 2.最终一致性 3.广播 4.错峰与流控(秒杀业务用于流量削峰场景) "秒杀场景" 二、核心组件,关键点(交换器、队列、绑定) AMPQ消息路由必要三部分:交换器、队列、绑定。 Java核心组件:ConnectionFactory、Connection、Channel、Del
阅读全文
摘要:以下是测试了三种图片压缩方式,通过测试发现使用jdk的ImageIO压缩时间更短,使用Google的thumbnailator更简单,但是thumbnailator在GitHub上的源码已经停止维护了。 1、Google的thumbnailator pom.xml中引入依赖 测试源码: 输出:压缩时
阅读全文
摘要:通过java原生的@Valid注解和spring的@ControllerAdvice和@ExceptionHandler实现全局异常处理的方法: controller中加入@Valid注解: 接受entity中加入@NotNull注解:(验证还有很多,这里是举例说明) 全局处理工具类加入@Contr
阅读全文