当前位置: 首页 > article >正文

当前JavaEE初阶的阶段知识总结

fly021311

当前JavaEE初阶的阶段知识总结

  1. 多线程

  2. 文件IO

    1. 文件系统操作 ~~ File类.

    2. 文件内容操作 ~~ 读文件,写文件.

    3. IO 流对象.

      • 流(Stream),形象的比喻,读取文件,就像水流一样,读写文件的时候,和水流类似,读100字节,可以一次读1个字节,100次完成;也可以一次读10个字节,10次完成……

      • 在Java标准库中,提供了一组类,负责完成IO流式操作.

        • 字节流: 以字节为基本单位

          • InputStream 输入流,把数据从硬盘,读取到内存中.
          • OutputStream 输出流,把数据从内存写入到硬盘里.
        • 字符流: 以字符为基本单位

          • Reader 输入流
          • Writer 输出流
        • 上述这四个类,实际上,标准库还提供了很多具体的类的实现,虽然这里涉及到的类非常多,但是实际上大家的使用方法,都是差不多的.

          四个核心操作:

          1. 打开文件 ~~ 构造流对象的时候,指定文件路径(绝对路径,相对路径)

          2. 读文件 ~~ read 参数是一个输出型参数

          3. 写文件 ~~ write

          4. 关闭文件 ~~ close

            每次打开一个文件,都需要在进程对应内核PCB数据结构中, 申请一个文件描述符的表项,文件描述符表是有上限的.如果光打开,不关闭,此时就可能导致文件描述符被占满了,导致无法继续打开文件,所以一定关闭close文件.

  3. 网络编程&网络原理

    1. 协议

      网络中的基本概念 ~~ 协议: 针对数据格式的约定.

      1. 协议分层
        1. 网络通信,是一个很复杂的工作,如果使用一个协议来完成所有的工作,这个协议就会很复杂. => 由此想到了,协议拆分,大的协议变成多个小点的协议,每个协议负责一部分工作.
        2. 由于拆分出来的协议太多了,按照协议的功能/作用,进行不同程度的分类 => 即协议分层,而为了让协议之间更好的配合,约定,上层协议调用下层协议,下层协议给上层协议提供服务.(协议之间不能跨层交互) => 就构成了一个**“协议栈**”
        3. “协议栈”: OSI 七层模型, TCP/IP 五层模型
          1. 应用层: 数据具体要怎么使用.
          2. 传输层: 只考虑起点和终点.
          3. 网络层: 负责任意两个节点之间的传输,路径传输.
          4. 数据链路层: 负责相邻节点之间的数据传输(通过网线/光纤/无线直接相连的两个路由器/交互机/主机….)
          5. 物理层: 信息传输的公路
      2. 网络数据传输的基本流程:
        1. 封装: 发送方,把数据从上到下层层加上协议报头(包装快递).
        2. 分用: 接受方,把数据从下层到上层进行解析(拆快递).
    2. 网络编程

      1. Socket (网络编程套接字) ~~ 注: UDP,TCP都是传输层协议.

        TCP,有连接,可靠传输,面向字节流,全双工.
        UDP,无连接,不可靠传输,面向数据报,全双工.

        1. UDP 的 socket

          1. DatagramSocket , 代表一个 socket 对象,本质上一个文件,相当于网卡的抽象.

            send 发送, receive 接受, close 关闭文件.

          2. DatagramPacket , 代表一个 UDP 数据报.

            构造对象,指定字节数组作为缓冲区.

        2. TCP 的 socket

          1. ServerSocket 专门给服务器用的.

            提供的最核心方法 accept 用来接收一个连接.

          2. Socket 服务器客户端都会用到.

            客户端使用 Socket 和服务器建立连接,并且进行后续传输.
            服务器使用 Socket 和客户端进行交互.
            Socket 提供了getInputStream,getOutputStream获取到输入输出流,并进一步通过这些流对象来完成数据传输.

          3. 编写TCP的客户端服务器程序的时候,涉及到“长连接”“短连接”的问题.

            短连接: 传输一次就断开连接,后续传输,重新连接.
            长连接: 一个连接中,多次数据传输.
            注: UDP是无连接的,不涉及长连接,短连接的问题.

          4. TCP服务器如果不使用多线程,可能会无法处理多个客户端.

            这个事情本质上是和代码结构有关系的,accept会阻塞,read也会阻塞…….这两个地方都可能阻塞,就导致一方阻塞之后,另一方即使数据传来了也无法处理(单线程),使用多线程就是为了规避多处阻塞的问题.
            注: 对UDP来说,只有receive一处阻塞,不涉及这个问题.

        3. 服务器程序典型流程

          1. 启动服务器(初始化),进行 Socket 的实例化.
          2. 进入主循环(while true)
            1. 读取请求并解析
            2. 根据请求计算响应
            3. 把响应写回到客户端
        4. 客户端典型流程

          1. 启动客户端,进行 socket 实例化.
          2. 进入主循环.
            1. 读取用户输入的内容.
            2. 构造请求并发送.
            3. 读取响应结果.
            4. 把结果显示给用户.
      2. 网络原理

        1. 应用层 ~~ 应用层描述了应用程序如何理解和使用网络中的通信数据.

          程序猿在应用层这里,最主要的工作就是自定义协议.
          下四层都是在系统内核/程序驱动/硬件中已经实现好的,我们只能去了解,不能修改,应用层协议,则是我们可以自定义的.

          1. 自定义协议主要做两件事:

            1. 明确协议数据要传递哪些信息(根据需求来的).

            2. 明确数据组织格式.

              比如可以按照纯文本的方式,也可以使用XML,json,protobuffer

          2. 最典型的HTTP协议 ~~ 应用层除了上述自定义的协议之外,也有一些大佬们已经设计好的,现成的协议.

        2. 传输层

          传输层虽然是操作系统内核已经实现好的,但是程序猿写代码,要调用系统提供的socket api完成网络编程.socket 就是属于传输层的部分.

          1. UDP协议

            学习一个协议,其中很大的工作就是理解报头解构
            一个UDP报文 = UDP 报头 + UDP 载荷
            UDP 报头: 8个字节,4个字段.
            (1).2字节的源端口 ~~ 发送方的端口
            (2).2字节的目的端口 ~~ 接受方的端口
            (3).2字节的UDP报文长度 ~~ 2字节表示的范围,就是0 -> 65535,即一个UDP数据报,最长也就是65535字节.
            (4).2字节的校验和 ~~ 发送方,把要发送的数据计算出检验和,得到checksum1.接收方,收到数据就把数据按照同样的方式再算一次校验和,得到checksum2.同时接收方也收到了checksum1.接收方对比checksum1和checksum2是否相同,如果相同,说明数据传输没出错.如果不同,说明数据传输变化了.

          2. TCP协议

            1. 特点
            1. 有连接
            2. 可靠传输 ~~ TCP最核心的特点
            3. 面向字节流
            4. 全双工
            1. 构成可靠传输的基石(主要机制)

              1. 确认应答
              2. 超时重传
            2. 连接(Connect)管理


http://www.kler.cn/a/107982.html

相关文章:

  • 如何从头开始构建神经网络?(附教程)
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • 解决表格出现滚动条样式错乱问题
  • Gsensor加速度传感器数据异常及概率性卡死
  • Qt 获取当前系统中连接的所有USB设备的信息 libudev版
  • javascript 函数【知识点整理】
  • 【Python】【Flask】flask_login的初始化
  • 【Unity小技巧】可靠的相机抖动及如何同时处理多个震动
  • 【计算机视觉】相机
  • C语言char的取值范围以及溢出情况
  • vue源码分析(四)——vue 挂载($mount)的详细过程
  • 【计算机视觉】3D视觉
  • 机器学习(五)如何理解机器学习三要素
  • shell脚本实战案例---数据库的备份
  • 【C++】STL容器——探究不同 [ 迭代器 ] 种类&在STL中的使用方式(15)
  • html5怎么实现语音搜索
  • Android系统的特性
  • RPC远程调用加密方法获取返回值
  • 线扫相机DALSA--常见问题一:软件安装顺序
  • 【JavaEE】HTTP协议
  • Vue3.0插槽
  • Windows相关知识
  • 磁盘的结构(磁道,扇区,盘面,柱面,物理地址)
  • TypeScript - 字符串的字面类型
  • Android---StartActivity启动过程
  • react高阶成分(HOC)例子效果