Netty

基于netty手写Tomcat

回眸只為那壹抹淺笑 提交于 2020-12-24 06:05:19
作者: MovW 原文:http://suo.im/5Ar7t8 netty 简介 Netty一个基于NIO的客户、服务器端的编程框架 1.环境准备 maven依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.42.Final</version> </dependency> 12345 RequestMethodEnum 请求方式 public enum RequestMethodEnum { GET( "GET" ), POST( "POST" ); public String code; RequestMethodEnum(String code) { this.code=code; }}12345678 ParentServlet 父类servlet public abstract class ParentServlet { public void service(ParentRequest request, ParentResponse response) throws Exception { //service 方法决定调用doGet、doPost; if (RequestMethodEnum.GET.code

BATJ的常见java面试题

冷暖自知 提交于 2020-12-23 19:39:22
JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节。 String类能被继承吗,为什么。 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。 String,Stringbuffer,StringBuilder的区别。 String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) ArrayList和LinkedList有什么区别。 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。 用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。 有没有有顺序的Map实现类,如果有,他们是怎么保证有序的。 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。 继承和聚合的区别在哪。 IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型。 反射的原理,反射创建类实例的三种方式是什么。 反射中,Class

架构师养成记--22.客户端与服务器端保持连接的解决方案,netty的ReadTimeoutHandler

我只是一个虾纸丫 提交于 2020-12-23 12:33:40
架构师养成记--22.客户端与服务器端保持连接的解决方案,netty的ReadTimeoutHandler 参考文章: (1)架构师养成记--22.客户端与服务器端保持连接的解决方案,netty的ReadTimeoutHandler (2)https://www.cnblogs.com/sigm/p/6372520.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/stackoom/blog/4832012

深入解析Java中的ArrayList

痴心易碎 提交于 2020-12-20 16:33:01
一、概述 ArrayList底层使用的是数组。是List的可变数组实现,这里的可变是针对List而言,而不是底层数组。 数组有自身的特点,不变性,一旦数组被初始化,那么其长度就固定了,不可被改变。这就导致了ArrayList中的一个重要特性:扩容。 二、源码解析 2.1 声明 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {/*...*/} 可以看到ArrayList类实现了四个接口: List:支持List接口中提供的方法 RandomAccess:支持快速随机访问 有关RandomAccess可见:Java集合系列-RandomAccess Cloneable:支持对象克隆功能 有关Cloneable可见:Java基础系列-浅拷贝和深拷贝 Serializable:支持序列化功能 有关Serializable可见:Java基础系列-序列化与反序列化 还继承自AbstractList抽象类,这个抽象类是List的抽象实现,实现了一些List中的公共方法。 2.2 字段解析 public class ArrayList<E> extends AbstractList<E> implements

资深架构师谈论Java 枚举

拜拜、爱过 提交于 2020-12-20 09:01:17
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下: enum Color { RED, GREEN, BLUE } 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为 RED:0,GREEN:1,BLUE:2。 枚举的好处 :可以将常量组织起来,统一进行管理。 枚举的典型应用场景 :错误码、状态机等。 枚举类型的本质 尽管 enum 看起来像是一种新的数据类型,事实上,enum是一种受限制的类,并且具有自己的方法。 创建enum时,编译器会为你生成一个相关的类,这个类继承自 java.lang.Enum。 java.lang.Enum类声明 public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { ... } 枚举的方法 在enum中,提供了一些基本方法: values() :返回 enum 实例的数组,而且该数组中的元素严格保持在 enum 中声明时的顺序。 name() :返回实例名。 ordinal() :返回实例声明时的次序,从0开始。 getDeclaringClass() :返回实例所属的

Netty解决粘包和拆包问题的四种方案

删除回忆录丶 提交于 2020-12-19 01:10:29
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie ma qi”认定为敏感文字,因而本文统一使用“解码一器”表示该含义 1. 粘包和拆包 产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。如下图展示了粘包和拆包的一个示意图: 上图中演示了粘包和拆包的三种情况: A和B两个包都刚好满足TCP缓冲区的大小,或者说其等待时间已经达到TCP等待时长,从而还是使用两个独立的包进行发送; A和B两次请求间隔时间内较短,并且数据包较小,因而合并为同一个包发送给服务端; B包比较大,因而将其拆分为两个包B_1和B_2进行发送,而这里由于拆分后的B_2比较小

2020阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

放肆的年华 提交于 2020-12-18 21:42:42
前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫。其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和总结,已经很棒了!然后文末有我自己总结的一些答案和更多面试题的文档总结,需要可以自取! 首先展示一下以下文档包含的路线图 基础 排序实现原理和Collection实现原理 和而的区别(编译之后) 线程池的种类,区别和使用场景 分析线程池的实现原理和线程的调度过程 线程池如何调优 线程池的最大线程数目根据什么确定 动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? 可克隆接口实现原理,浅拷贝或深拷贝 JavaNIO使用 哈希表和hashmap的区别及实现原理,hashmap会问到数组索引,散列碰撞怎么解决 数组列表和链接列表区别及实现原理 反射中,Class.forName和ClassLoader区别 字符串、字符串缓冲区、StringBuilder的区别? 有没有可能2个不相等的对象有相同的哈希码 简述nio的最佳实践,比如netty,Mina 树状图的实现原理 Jvm相关 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 Jvm内存分代 JAVA

一文掌握 Redisson 分布式锁原理(值得收藏)

戏子无情 提交于 2020-12-17 15:33:14
Redisson 可以直接查看 Github Redisson官网 介绍, 没有了解过的小伙伴, 看一下 Redisson 的 WIKI 目录, 仔细瞅瞅 Redis 是如何被 Redisson 武装到牙齿的 这里先过一下和文章有关的一部分内容 通过项目简介可以看出来, 写这个项目介绍的人水平非常哇塞哈, 从第一段咱们就知道了两个问题 Redisson 是什么 Redisson 是架设在 Redis 基础上的一个 Java驻内存数据网格框架 , 充分利用 Redis 键值数据库提供的一系列优势, 基于 Java 使用工具包中常用接口 , 为使用者提供了 一系列具有分布式特性的常用工具类 Redisson 的优势 使得原本作为协调单机多线程并发程序的工具包 获得了协调分布式多机多线程并发系统的能力 , 大大降低了设计和研发大规模分布式系统的难度 同时结合各富特色的分布式服务, 更进一步 简化了分布式环境中程序相互之间的协作 了解到这里就差不多了, 就不向下扩展了, 想要了解详细用途的, 翻一下上面的目录 Redisson 重入锁 由于 Redisson 太过于复杂, 设计的 API 调用大多用 Netty 相关, 所以这里只对 如何加锁、如何实现重入锁进行分析以及如何锁续时进行分析 创建锁 我这里是将 Redisson 的源码下载到本地了 下面这个简单的程序, 就是使用

2020年,阿里内推Java后端面试题,文末附面试福利。

穿精又带淫゛_ 提交于 2020-12-16 13:57:49
阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什么要实现双亲委派模型 虚拟机调优参数 拆箱装箱的原理 JVM垃圾回收算法 CMS G1 hashset和hashmap的区别,haspmap的底层实现put操作,扩容机制,currenthashmap如何解决线程安全,1.7版本以及1.8版本的不同 md5加密的原理 有多少种方法可以让线程阻塞,能说多少说多少 synchronized和reetrantlock锁 AQS同步器框架,countdowmlatch,cyclebarrier,semaphore,读写锁 阿里二面题目: B-Tree索引,myisam和innodb中索引的区别 BIO和NIO的应用场景 讲讲threadlocal 数据库隔离级别,每层级别分别用什么方法实现,三级封锁协议,共享锁排它锁,mvcc多版本并发控制协议,间隙锁 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除作效率变低,怎么解决? 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么? 共享锁与非共享锁、一个事务锁住了一条数据,另一个事务能查吗? Spring bean的生命周期

分布式事务框架 seata-golang 通信模型详解

♀尐吖头ヾ 提交于 2020-12-14 19:17:30
一、简介 Java 的世界里,大家广泛使用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里,getty 也是一个类似 netty 的高性能网络通信库。getty 最初由 dubbogo 项目负责人于雨开发,作为底层通信库在 dubbo-go 中使用。随着 dubbo-go 捐献给 apache 基金会,在社区小伙伴的共同努力下,getty 也最终进入到 apache 这个大家庭,并改名 dubbo-getty 。 18 年的时候,我在公司里实践微服务,当时遇到最大的问题就是分布式事务问题。同年,阿里在社区开源他们的分布式事务解决方案,我也很快关注到这个项目,起初还叫 fescar,后来更名 seata。由于我对开源技术很感兴趣,加了很多社区群,当时也很关注 dubbo-go 这个项目,在里面默默潜水。随着对 seata 的了解,逐渐萌生了做一个 go 版本的分布式事务框架的想法。 要做一个 golang 版的分布式事务框架,首要的一个问题就是如何实现 RPC 通信。dubbo-go 就是很好的一个例子摆在眼前,遂开始研究 dubbo-go 的底层 getty。 二、如何基于 getty 实现 RPC 通信 getty 框架的整体模型图如下: 下面结合相关代码,详述 seata-golang 的 RPC 通信过程。 1