您好!大家好,我是小七,一个爱分享的程序员。小七打算在轻松幽默的对话中分享一些技术。如果你觉得通过小七的文章有所收获,那就给小七点赞吧。持续更新,可以微信搜索【小七JAVA专访】第一时间阅读,回复【资讯】我已经为你准备好了福利!回复【项目】有一些项目源码我给大家准备好了。回复【简历模板】我有一份简历模板给你。@[TOC]1.前言续上次。下着大雨。看来不能去镇上买熟食了,呆在家里也没什么意思。我们去和我表弟一起玩,看看他在家里干什么。?我表哥的房子离我家很近。走一条街也就几个弯。中午应该在家,刚做完饭,正好赶上吃晚饭。我正要打开门,发现里面反锁了。你大白天锁着门干什么?我敲了敲门。我:有人在家吗?表哥:是谁啊?我:我,你哥。表哥:哦,那家里没人,你回去吧!我:快给我开门,别留下墨迹。我说这小子怎么不开门躲在家里吃鸡腿,怕我来吃饭。表哥:哥,你怎么来了?我什么?我还不能来!表哥:你不是去北京找工作了吗?怎么这么快就回来了?我:别提了,现在找工作好难啊。表哥:不行的话你可以回来跟我一起养猪。经常出去卖猪肉,家里的猪什么时候下犊子也不能及时发现。你在家的时候可以帮我看。我:为什么现在有人看猪圈?它们都是照相机。表哥:什么是照相机?我在哪里可以找到它?我:走吧,我带你去村里看看刚刚贴在墙上的广告。表哥:对,我现在就去买一个。我:你买吧,我回家做饭,你让你这么啃鸡腿,我走了。在家做米汤吧,炒个蒜苔鸡蛋,炒菜的时候电话响了。我:“你好”。对面:“你好,请问是小七吗?”我:“是我,你呢?”。对面:“我是XXX公司的,看到hr给我推了你的简历,感觉还不错,你什么时候方便过来现场面试。”我:“现在不方便现场面试。”对面:“好的,你现在方便吗?我们现在进行在线面试。”我:“好的”。2.面试面试官:我看到你简历上写的是精通Netty,能简单介绍一下什么是Netty吗?我:Netty首先是一个java开源框架,它提供了一个异步的、事件驱动的网络应用框架,所以Netty是一个可以开发高性能、高可靠的网络服务器和客户端程序的网络应用框架。面试官:嗯。那为什么Netty可以开发出高性能、高可靠的网络服务器,而且速度又为什么这么快呢?我:得益于Netty的线程模型的架构设计,Netty可以在NIO的设计理念的基础上改进线程模型,使Netty能够快速处理客户端请求连接和客户端请求数据处理。.面试官:嗯。能和我一起分析一下Netty的线程模型吗?我:Netty模型中首先有这些属性概念。BossGroup:相当于一个事件循环线程池,这个池中有多个事件循环线程。该线程池专用于处理客户端连接事件。WorkerGroup:也是一个事件循环线程池,专门处理客户端读写请求事件。NioEventLoop:这是事件循环线程,每个事件循环线程都有一个选择器用于监听事件。NioSocketChannel:这是在客户端与BossGroup中的事件循环线程建立连接后产生的。这个可以注册到WorkerGroup的一个事件循环线程,这样WorkerGroup的事件线程就可以处理后续的读写请求。管道:处理来自WorkerGroup的数据。它包含许多ChannelHandlers,它们实际处理数据。ChannelHandler:真正用来处理数据的。面试官:嗯。能说说从客户端连接到发送数据的整个过程吗?1.客户端向BossGroup发起连接请求,BossGroup中的NioEventLoop处理连接请求,生成NioSocketChannel。2、BossGroup将NioSocketChannel注册到WorkerGroup中的一个NioEventLoop中的一个Selector。至此,BossGroup的工作就完成了,接下来由他处理其他客户端的连接请求。3、WorkerGroup循环监听注册在其Selector上的这些NioSocketChannels是否有读写事件。4、WorkerGroup监听NioSocketChannel读写事件,交给Pipeline处理。至此,WorkerGroup的工作就完成了,接下来继续处理其他客户端的读写事件。5.Pipeline接收到WorkerGroup发送过来的数据,然后交给ChannelHandler处理。面试官:嗯。那么为什么Netty比传统的网络编程工具更快呢?我:因为Netty将客户端的连接请求和读写数据的请求分离到了两个线程池中,大大提高了效率。面试官:“好孩子,我什么时候可以回北京打工?”我:“嗯……等一下,现在家里下雨太大了,好不容易弄到一整块巧克力。”面试官:“好的,那你来北京一定要来我们公司上班。”我:“嗯……这个我不能答应你,万一有别的好公司给我打电话呢。”面试官:“行吧,条件可以商量”我:“我考虑一下。”3.总结这里的相关内容没有整理,后面会继续更新文章,建议收藏。文中涉及的命令必须像我一样多敲几次。只有在敲打的过程中,才能发现自己是否真正掌握了命令。如果觉得我的文章还不错,请点个赞。另外可以微信搜索【小七JAVA专访】第一时间阅读,回复【资讯】我已经为你准备好了福利!回复【项目】有一些项目源码我给大家准备好了。回复【简历模板】我有一份简历模板给你。
