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相关面试问题的更多相关文章

  1. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  2. 史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点

    史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点 1

  3. 网络协议相关面试问题-DNS相关面试问题

    对于网络上的大部通讯都是基于TCP/IP协议的, 其中最重要的是IP协议,它是基于IP地址的,而计算机通讯只能识别IP地址,如192.168.0.1,而不能识别像咱们在浏览器敲得见名之义的" ...

  4. Java压缩技术(二) ZIP压缩——Java原生实现

    原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZI ...

  5. 面试 Java 高级后端开发,要准备哪些知识点?

    其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的. 在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到 ...

  6. Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  7. Java高级软件工程师面试考纲

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  8. Java设计模式相关面试

    1.接口是什么?为什么要使用接口而不是直接使用具体类? 接口用于定义 API.它定义了类必须得遵循的规则.同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使 ...

  9. 问题集录--Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

随机推荐

  1. Microsoft Hackathon 2019 留念

    参加今年微软的 Hackathon 是 2019 年 7 月份的事情,但是后来各种各样的事情,考托.考G.网申……就给耽搁了.我本来以为自己的记忆力足够好,几个月以后也能写很多东西,然鹅……现在发现好 ...

  2. android#定制ListView的界面

    内容摘自<第一行代码>——郭霖 只能显示一段文本的ListView实在是太单调了,我们现在就来对ListView的界面进行定制,让它可以显示更加丰富的内容.首先需要准备好一组图片,分别对应 ...

  3. dockerfile文件命令详解

    Dockerfile 一般分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释: Dockerfile的指令根据作用可以分为两种:构建指令 ...

  4. J-流浪西邮之寻找火石碎片 【经典背包变形】

    题目来源:2019 ACM ICPC Xi'an University of Posts & Telecommunications School Contest 链接:https://www. ...

  5. 【转帖】安卓的Bionic 简介

    https://blog.csdn.net/yongyu_it/article/details/52574797 google 自己实现了一套libc 的库函数 比glibc 要小一些 占用内存也小. ...

  6. inxi 查看国产服务器的硬件配置信息

    下载inxi 查看国产服务器的信息 https://codeload.github.com/smxi/inxi/tar.gz/3.0.35-1 注意查看命令是 ./inxi -F 2. 直接是二进制包 ...

  7. [转帖]Xenix — 微软与UNIX的短暂爱恋

    Xenix — 微软与UNIX的短暂爱恋 https://www.linuxdashen.com/xenix-微软与unix的短暂爱恋 原来微软曾经 干过那么牛B的 unix系统. 微软向外宣布Mic ...

  8. 获取web项目的绝对路径的方法总结

    一.用Jsp获取 1.获取文件的绝对路径 String file="文件";(例如:data.mdb) String path=application.getRealPath(fi ...

  9. 初学SpringBoot遇到的坑和笔记

    目录 1.日期返回给前端显示不理想问题 1.1重现 1.2原因 1.3解决 1.4结果 2.MyBatis-Plus数据库字段未找到问题 2.1重现 2.2原因 2.3解决 3.Long型雪花主键返回 ...

  10. Points Division(线段树+DP)2019牛客暑期多校训练营(第一场)

    题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点 ...