Java高级技术点面试问题-IO相关面试问题
java网络编译:
- 基础知识:
①、ip地址和端口号:
ip地址是用来识别网络中的一个实体,而这个实体可以理解为一个主机,而端口号则是用来区分具体的通讯程序的。
②、tcp / udp协议:
tcp是一个可靠数据传输:http和ftp都是采用的它;而udp是一个无连接的协议。如qq聊天。
③、URL:统一资源定位器,指向了互联网的一个资源,下面看一下通过URL来获取数据示例:
④、InetAddress:这个是java中代表IP地址的类。
- socket:
①、创建socket实例:
②、客户端连接:
1、创建Socket对象:
2、连接建立后,通过输出流向服务器端发送请求信息。
3、通过输入流获取服务器响应的信息。
4、关闭响应资源。
其示例代码如下:
③、服务端连接:
1、创建ServerSocket对象,绑定监听接口。
2、通过accept()方法监听客户端请求。
3、连接建立后,通过输入流读取客户端发送的请求信息。
4、通过输出流向客户端发送信息。
5、关闭相关资源。
其示例代码如下:
④、总结:
1、创建ServerSocket和Socket。
2、打开连接到Socket的输入/输出流。
3、按照协议对Socket进行读/写操作。
4、关闭输入输出流、关闭Socket。
阻塞IO:
- java的I/O接口:
①、基于字节操作的I/O接口:
②、基于字符操作的I/O接口:
③、基于磁盘操作的I/O接口:
④、基于网络操作的I/O接口: - 阻塞IO的通信模型:
也就是在调用read()是阻塞的,会一直等待有数据时才会返回,socket.accept()就是阻塞的,当接收到客服端的请求之后就会开启一个线程去处理客户端的请求,但是这个模型存在一些缺点:1是客服端很多的时候,会创建大量的处理线程,而且每个线程都会占用栈空间和CPU的时间,2是阻塞可能带来频繁的上下文切换,而大部份上下文切换可能是无意义的,也加得了CPU的负担。
- 总结:
1、BIO数据在写入OutputStream或者从InputStream读取时都有可能会阻塞。
2、当前一些需要大量HTTP长连接的情况。
3、需要另一种新的I/O操作方式,也就是NIO。
NIO:
- 工作原理:
其实它的工作原理很简单:有一个专门的线程来处理所有的IO事件,同时它又是事件驱动机制的,当事件到来的时候会触发,而不是同步的去监视事件,另外它有线程之间的通讯方式,线程之间是通过wait和notify进行通讯的,而且每一次上下文切换都是有意义的,这样就减少了无意义的切换,提高了CPU的使用率,那这种机制到底是怎么来实现的呢?
- 通信模型:
其实就是客服端与服务器端各自维护一个管理通道对象,也就是图中的Selector,它可以监测一个或多个Channel上的事件,如果服务端注册一个读事件,这个时候客服端给服务端发送了一些数据,NIO的服务端就会在Selector添加一个读事件,服务端的处理线程就会轮循的访问Selector,如果访问Selector有感兴趣的事件到达,那么就处理这个事件,如果没有感兴趣的事件到达,则一直会阻塞直到感兴趣的事件到达。
- 实例:
客户端:
服务器端:
Java高级技术点面试问题-IO相关面试问题的更多相关文章
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- 史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点
史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点 1
- 网络协议相关面试问题-DNS相关面试问题
对于网络上的大部通讯都是基于TCP/IP协议的, 其中最重要的是IP协议,它是基于IP地址的,而计算机通讯只能识别IP地址,如192.168.0.1,而不能识别像咱们在浏览器敲得见名之义的" ...
- Java压缩技术(二) ZIP压缩——Java原生实现
原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZI ...
- 面试 Java 高级后端开发,要准备哪些知识点?
其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的. 在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到 ...
- Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java高级软件工程师面试考纲
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java设计模式相关面试
1.接口是什么?为什么要使用接口而不是直接使用具体类? 接口用于定义 API.它定义了类必须得遵循的规则.同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使 ...
- 问题集录--Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
随机推荐
- 【ARM-Linux开发】linux下Eclipse进行C编程时动态链接库的生成和使用
linux下Eclipse进行C编程时动态链接库的生成和使用 引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术 ...
- 微信扫码无法直接下载APP的apk的解决办法
PHP的处理方式:http://blog.sina.com.cn/s/blog_4cd978f90102wx92.html
- Angular5 自定义scrollbar样式之 ngx-perfect-scollbar
版本 angular 5.0 ngx-perfect-scrollbar ^5.3.5 为什么不用 ngx-perfect-scrollbar 最新的版本 v7 呢? 因为它报错啊!!! 每次init ...
- 基于bootstrap模态框、fakeLoader实现全局遮罩层
一.fakeLoader.js介绍 fakeLoader.js 是轻量级的 jQuery 插件,帮助你创建动态的全屏加载掩饰微调效果,模拟页面预加载的效果. 插件下载地址:https://github ...
- svn服务器端的更新操作
svn up需要在 非svn库中进行操作 ,一般在网站www目录下操作
- 19牛客暑期多校 round1 A 有关笛卡尔树的结论
题目传送门//res tp nowcoder 分析 定理:B1~B2当且仅当B1与B2有同构的笛卡尔树. (B₁~B₂ iff B₁ and B₂ have isomorphic Cartesian ...
- 跑跑卡丁车(dp)
题意:https://www.nitacm.com/problem_show.php?pid=1470 #define IOS ios_base::sync_with_stdio(0); cin.ti ...
- vue 评论 computed watch 分隔符 局部组件 全局组件 子传父消息|父传子消息
评论案例 splice: (start 几位,替换(新增)内容) splice(0,0,内容)在头部插入内容 splice(0,1) 把索引为0的往后删除1位 splice(0,1,内容)把索引为0 ...
- 简单的pycharm使用秘籍视频
ttp://edu.51cto.com/center/course/lesson/index?id=163794 这个免费视频是我自己找的别人的,一些常用的基本上都还有,所以说善用百度之类的搜索引擎很 ...
- 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法
在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...