Netty

网易游戏部门Java架构师必看的“完美版”Netty源码笔记

北慕城南 提交于 2020-12-14 18:00:18
这份网易内部的Netty源码笔记是以实战为导向,深入解读Netty底层核心源码及架构设计。同时这份笔记还包含2个高级应用项目,分别为分布式RPC与架构产生高并发后10亿级任务调度和监控引擎。可以说这是一份比较高端的笔记,需要读者有十分扎实的Java开发的基本功!话不多说直接进入正题! 这份笔记章节不多,但是涵盖了网易游戏数十年的经验积累,而且页数高达1315页!全部展示出来不仅现实,所以只能为大家展示部分内容,完整版的免费获取方式: 需要这份资料的,点击这里即可查看获取方式 第1章Netty基础篇 第2章原理部分 多路复用器 Netty线程模型 编码和解码 序列化 零拷贝 背压 第3章分布式RPC Netty整合Spring 采用Netty实现一套RPC框架 分布式RPC的构建 第4章Netty核心组件源码剖析 NioEventLoopGroup源码剖析 NioEventLoop源码剖析 Channe|源码剖析 Netty缓冲区ByteBuf源码剖析 Netty内存泄漏检测机制源码剖析 第5章Netty读/写请求源码剖析 ServerBootstrap启动过程剖析 Netty对I/O就绪事件的处理 第6章Netty内存管理 Netty内存管理策略介绍 PoolChunk内存分配 PoolSubpage内存分配与释放 PoolArena内存管理

QUIC Weekly 每周一草(20201209期)

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-14 16:56:46
关于QUIC协议的论文、IETF进展、博客、视频等等 QUIC 的全称是 Quick UDP Internet Connections protocol, 由 Google 设计提出,目前由 IETF 工作组推动进展。其设计的目标是替代 TCP 成为 HTTP/3 的数据传输层协议。熹乐科技在物联网(IoT)和边缘计算(Edge Computing)场景也一直在打造底层基于 QUIC 通讯协议的低时延边缘计算框架 YoMo ,长时间关注 QUIC 协议的发展,遂整理该文集并配以适当的中文翻译,方便更多关注 QUIC 协议的人学习。 在线社区:🍖 discord/quic 维护者:🦖 YoMo QUIC Weekly - 20201209期 Wireshark v3.4.1 发布, 增加了很多与 QUIC 相关的更新 📢 draft-ietf-quic-manageability 讨论了 QUIC 传输协议的可管理性,重点讨论影响 QUIC 流量的网络操作的注意事项,比如,要实现 QUIC 的负载均衡,建议参考该文 📢 Applicability of the QUIC Transport Protocol 讨论了QUIC传输协议的适用性,重点讨论了影响通过QUIC开发和部署应用协议的注意事项,比如,实现0-RTT的过程中要注意的安全问题 w3c WebTransport

大神讲解Java for循环的几种用法

倾然丶 夕夏残阳落幕 提交于 2020-12-14 12:27:45
本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看。 J2SE 1.5 提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。 在Java程序中,要“ 逐一处理” ――或者说,“遍历”――某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当 然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其 它循环常用得多)。 对于遍历数组,这个循环一般是采取这样的写法: 清单1:遍历数组的传统方式 /* 建立一个数组 */ int[] integers = {1, 2, 3, 4}; /* 开始遍历 */ for (int j = 0; j < integers.length; j++) { int i = integers[j]; System.out.println(i); } 而对于遍历Collection对象,这个循环则通常是采用这样的形式: 清单2:遍历Collection对象的传统方式 /* 建立一个Collection */ String[]

四年,上海,车房妹

試著忘記壹切 提交于 2020-12-14 08:18:41
B 哥是我的导师,记得我刚进入腾讯实习的那天,是他出来接我。当时我有点怀疑,不会吧,不会吧,我的导师这么年轻?和我想象中的经验丰富的程序员的样子简直天壤之别。 后来确认了,他就是我的导师,怎么会这么年轻呢?惊讶之余,我也在期待他有没有什么过人之处,可以带我学习带我飞。 直到现在认识 B 哥已经一年多了。老实说,刚开始我还并没有觉得他特别厉害,但是随着和他在工作中的合作交流,渐渐地加深了对他的了解,我才越来越发现,这个人是真的强啊! 有多强呢? B 哥本科毕业后直接工作,经历了四年的打拼,如今的他已经是腾讯的高级软件开发工程师和技术 owner,在上海有好车、买得起市区房,前段时间还和漂亮妹子领了结婚证,真是典型的人生赢家啊!关键还很帅,发量足,你说酸人不? 那么 B 哥是怎么做到年轻有为、有事业、有车房妹的呢? 曾经 B 哥也和我讲过他的成长经历,但是今天我要分享的不是他的奋斗史,而是想和大家聊一聊,我作为他的徒弟,和他发生了那么多故事,从他的身上看到了哪些 优秀的技术人应该具有的特质 ,也是我认为 B 哥牛逼的原因。 技术控 很多优秀的程序员应该都有对技术的追求,或是见多识广,或是深入研究,而且非常乐于将他们懂的技术分享给更多人。 B 哥就是这样一位技术控,他刚毕业的时候,就通读了很多知名框架的源码,并且能够将他们清晰地讲出来。记得我刚进腾讯的时候,听的第一场技术分享就是 B

2021年如何面试大厂?回顾今年字节,美团,华为,蚂蚁等Java岗面试经历!文末直接分享笔记

被刻印的时光 ゝ 提交于 2020-12-11 01:44:47
还有20天就是2021年了,回顾一下2010年自己面试过的大厂,这里我说下我的感受今年跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试, 无论一面还是二面,都开始考验一个Java程序员的技术功底和基础。 对源码解读和核心原理理解也是成了加分项,特别是对 Java 的一些核心基础知识点掌握的不够或者没有体系方向的朋友面试也成了一个苦恼的事情。 LZ投的方向是 后台研发 ,职位根据每家公司不同选的 Java研发/系统研发/基础平台研发/游戏研发 (不太挑)。因为最早七月的提前批就拿到了字节,所以后面只投了一些大厂。 因为面试,所以造成本人经常性的刷题,也收集过很多零零碎碎的资料加上自己面试后都会做下笔记都会整理成我的学习思维笔记, 今天在这分享目前国内公司Java面试常问的问题包括JVM、常用的算法和数据结构,redis缓存,分布式,Spring,Kafka,Nginx,微服务等。 注意:需要全部完整版架构大全答案的可以添加小编的vx:mxzfafafa即可免费领取~小编会一一回复大家的 JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节。 String类能被继承吗,为什么。 String,Stringbuffer,StringBuilder的区别。 ArrayList和LinkedList有什么区别。 讲讲类的实例化顺序

只有程序员才能读懂的西游记

送分小仙女□ 提交于 2020-12-10 04:13:41
这是一个有关计算机网络协议的故事 一、我佛造经传极乐 话说我佛如来为度化天下苍生,有三藏真经,可劝人为善。 就如图中所示,真经所藏之处,在于云端。佛祖所管辖之下,有四个区域Region,称为四大部洲, 一是东胜神洲,二是南赡部洲,三是西牛贺洲,四是北俱卢洲。 我佛所在西牛贺洲,是主站点。 在每个区域Region,为保证真经永固,设置多个藏经楼,称为可用区(Available Zone)。 每个藏经楼里面是一排一排的柜子,称为机柜,里面有一排一排的格子,称为服务器,经文就摆放在格子中。 在藏经楼中,柜子根据经文分门别类的组织起来,由不同的神仙进行管理,管理一个柜子的经文的神仙,访问这里面经文的钥匙就在他手里,称为接入层神仙(接入层交换机)。 多个接入层神仙被一组汇聚层神仙(汇聚层交换机)管着,多个汇聚层的神仙被一组核心层神仙(核心交换机)管着。 神仙体系组织严格,层次分明,不同的接入层神仙交换经文,要通过汇聚层神仙同意,不同的汇聚层神仙交换经文,需要核心层神仙同意。 经文的看守要万无一失,因而每一层都是分组看护,互相监督,互相备份,称为堆叠。 虽说每个柜子里面放满了经文,为了防止经文被偷听偷看,经文的内容是被仙术封装在一个虚拟的私密空间里面,虽然有人可能会偷到物质的经文,但是没有仙术打开这个私密空间,看到的经文如同空白的一样。这个虚拟的私密空间称为VPC。 要解读经文

What happens to writes when ChannelOutboundBuffer is full

大兔子大兔子 提交于 2020-12-09 09:59:19
问题 I'm trying to figure out what happens to write requests when a channel is non-responsive. For example, this happens when the peer suddenly drops off the network, and we never get a RST. From reading docs and Understanding netty channel buffers and watermarks, it seems that once the high WriterBufferWaterMark is reached, ChannelOutboundBuffer will be considered full, and: Channel.isWritable() will start to return false. From Channel.isWritable(): Returns true if and only if the I/O thread will

What happens to writes when ChannelOutboundBuffer is full

独自空忆成欢 提交于 2020-12-09 09:56:57
问题 I'm trying to figure out what happens to write requests when a channel is non-responsive. For example, this happens when the peer suddenly drops off the network, and we never get a RST. From reading docs and Understanding netty channel buffers and watermarks, it seems that once the high WriterBufferWaterMark is reached, ChannelOutboundBuffer will be considered full, and: Channel.isWritable() will start to return false. From Channel.isWritable(): Returns true if and only if the I/O thread will

Could not find TLS ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available

我们两清 提交于 2020-12-08 07:23:51
问题 What version of gRPC are you using? 1.13.1 I am using java 8 to build an executable jar. Below is the java version: $ /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin/java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-2~14.04-b11) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode) I am using gradle 3.4.1 to generate the jar as follows: /opt/gradle-3.4.1/bin/gradle jar -Dorg.gradle.java.home=/usr/lib/jvm/java-1.8.0-openjdk-amd64/ Below are the

RocketMQ与Dubbo相爱相杀引起的FullGC

有些话、适合烂在心里 提交于 2020-12-07 06:46:28
在日常后端开发中,部分业务都是接收MQ消息,在消费消息的过程中,会调用外部的Dubbo接口,根据接口返回数据,做一些业务逻辑处理.如下图 上面会涉及两类线程,一类是MQ线程,一类是Dubbo线程. Dubbo接口调用超时也是经常会发生的事情,这篇文章中,我们模拟的情况是,让Dubbo接口调用超时,图中红线所示.然后一直向MQ消费者发送消息,我们观察线程和堆栈的变化. 仓库代码 https: //github.com/infuq/MQ-Dubbo-FullGC 如果需要运行上述代码,还需要部署Zookeeper和RocketMQ环境. 工程结构如下图 Dubbo提供者的接口超时时间设置的是5s.如下图 而在提供者的实现方法中,让线程睡眠20秒,从而达到调用者调用接口超时目的.如下图 接下来按顺序启动它们 首先启动Dubbo提供者(DubboProvider类). 接着启动MQConsumer, 同时需要给它配置VM启动参数 -Xms90M -Xmx90M -XX :+PrintGCDetails 最后启动MQProducer, 它会一直发送消息. 所有的都启动完成之后, 借助JDK自带的jvisualvm.exe工具观察MQConsumer的堆栈信息. 观察MQConsumer的堆栈信息,会发现老年代会一直增长,当老年代快增长到顶端时,手动dump堆栈信息,用于接下来分析堆的情况.