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

Java面试黄金宝典38

1. TIME_WAIT 和 CLOSE_WAIT 的区别

 

  • 定义

 

  1. TIME_WAIT:是主动发起关闭连接操作的一方,在发送最后一个 ACK 确认包之后进入的状态。此状态存在的意义在于确保对端能收到最后一个 ACK 包,同时让网络中可能残留的旧数据包自然消逝,防止其干扰后续相同四元组(源 IP、源端口、目的 IP、目的端口)建立的新连接。
  2. CLOSE_WAIT:当被动关闭连接的一方收到对方发送的 FIN 包后,会先发送 ACK 包进行确认,随后进入 CLOSE_WAIT 状态。在此状态下,该方需要处理完剩余的数据,之后再发送 FIN 包以关闭自身这端的连接。
  • 要点
  1. 所处角色:TIME_WAIT 是主动关闭连接方的状态,CLOSE_WAIT 是被动关闭连接方的状态。
  2. 作用:TIME_WAIT 保证连接可靠关闭以及避免旧数据包干扰;CLOSE_WAIT 用于处理剩余数据。
  3. 异常情况:大量的 TIME_WAIT 状态可能会占用系统资源,而大量的 CLOSE_WAIT 往往意味着程序存在资源未正确释放的问题。
  • 应用

在高并发的网络服务场景中,如电商平台的促销活动期间,会有大量的短连接不断建立和关闭。若出现大量的 TIME_WAIT 状态,可能导致系统资源耗尽,影响服务的稳定性。此时可以通过调整系统参数(如 tcp_tw_reuse 和 tcp_tw_recycle)来缩短 TIME_WAIT 状态的持续时间。对于 CLOSE_WAIT 问题,需要检查代码中是否存在未正确关闭连接的情况,例如在使用 Socket 进行网络通信时,要确保在合适的时机调用 close() 方法。

Java 代码示例

java

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

// 服务器端示例
public class ServerExample {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            System.out.println("Server is listening on port 8888");
            while (true) {
                try (Socket socket = serverSocket.accept()) {
                    // 处理客户端请求
                    System.out.println("Client connected: " + socket.getInetAddress());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 客户端示例
public class ClientExample {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8888)) {
            System.out.println("Connected to server");
            // 模拟客户端操作
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

2. TCP 监听了 80 端口后, UDP 还能否监听 80 端口

 

  • 定义

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是传输层的两种不同协议。TCP 是面向连接的、可靠的传输协议,UDP 是无连接的、不可靠的传输协议。端口号是用于标识应用程序的逻辑编号,操作系统在监听端口时,会依据协议类型来区分不同的监听请求。因此,只要协议不同,即使端口号相同,也可以同时进行监听。

  • 要点
  1. 协议独立性:TCP 和 UDP 相互独立,操作系统能根据协议类型区分监听请求。
  2. 端口复用:同一端口可以被不同协议的应用程序同时监听。
  • 应用

在实际开发中,一些服务器会同时监听 TCP 和 UDP 的同一端口,以提供不同类型的服务。例如,Web 服务器可能同时使用 TCP 80 端口提供 HTTP 服务,使用 UDP 80 端口提供一些实时性要求较高的轻量级服务,如实时数据推送。

Java 代码示例

java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

// TCP 服务器监听 80 端口
class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(80)) {
     

相关文章:

  • 一周学会Pandas2 Python数据处理与分析-NumPy数组属性
  • 不用训练,集成多个大模型产生更优秀的输出
  • 4.4刷题记录(哈希表)
  • 游戏引擎学习第208天
  • 前端快速入门学习4——CSS盒子模型、浮动、定位
  • 计算机视觉5——运动估计和光流估计
  • 插入排序详细讲解
  • modprobe: can‘t open ‘modules.dep‘: No such file or directory
  • JAVA反序列化深入学习(十三):Spring2
  • 多元高斯分布函数
  • Java中String、Array、List的相互转换工具类
  • java实用工具类Localstorage
  • C++ 获取一整行(一行)字符串并转换为数字
  • GESP C++三级 知识点讲解
  • 随笔1 认识编译命令
  • JavaWeb开发基础知识-XML和JSON
  • Git分支管理
  • 【谷云科技iPaaS观点】如何通过iPaaS平台实现主数据高效同步
  • 华为磁电融合MED vs 铁电/闪存:存储技术新赛道!
  • redis高并发缓存架构与性能优化
  • 做二维码推送网站/整站优化快速排名
  • 深圳做网站外包公司有哪些/网站alexa排名查询
  • 免费个人网站制作在线/百度seo优化网站
  • 网站图片优化的概念/google关键词规划师
  • 零元开店的电商平台/seo诊断a5
  • 重庆营销型网站建设价格/seo优化搜索结果