java网络编程面试题

本文介绍了Java网络编程面试中的核心问题,包括同步、异步、阻塞、非阻塞的概念,无阻塞Socket编程使用NIO的优势,Java序列化的应用场景、注意事项及实现方式,流的类型和分类,以及TCP/IP的三次握手和四次挥手过程。内容覆盖了Java网络编程的基础和高级概念,适合面试复习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.网络编程时的同步、异步、阻塞、非阻塞?

同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果。
异步:函数调用在没得到结果之前,没有调用结果,返回状态信息。
阻塞:函数调用在没得到结果之前,当前线程挂起。得到结果后才返回。
非阻塞:函数调用在没得到结果之前,当前线程不会挂起,立即返回结果。

2.Java如何实现无阻塞方式的Socket编程?

NIO有效解决了多线程服务器存在的线程开销问题。

NIO中使用多线程主要目的不是为了应对每个客户端请求而分配独立的服务线程,

而是通过多线程充分利用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。

3.什么是java 的序列化(串行化)

简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),

并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

4.什么情况下需要序列化?序列化的注意事项,如何实现java 序列化(

### Java 网络编程面试题及答案 #### 同步与异步的区别 同步和异步的概念广泛应用于多任务处理环境中,在Java网络编程中尤为重要。对于同步操作而言,函数调用在未获得结果前不会返回任何数据,并且会阻止当前线程继续执行直到获取到结果[^2]。相比之下,异步方法会在发起请求后立刻返回状态信息给调用者而不必等待实际的结果完成,允许程序在此期间做其他事情。 #### 阻塞与非阻塞模式下的Socket通信 在网络应用开发过程中,了解如何区分以及何时选用阻塞或非阻塞套接字至关重要。在一个典型的阻塞场景下,当客户端尝试连接服务器或者读取/写入数据流时,如果资源不可用,则该过程会被暂停直至条件满足为止;而非阻塞模式则不同,即使目标端口尚未准备好接收消息或者其他情况导致无法立即完成相应动作,也不会使进程陷入停滞状态——它会选择迅速反馈错误码并让应用程序自行决定后续行为。 为了实现无阻塞方式的Socket编程,可以通过设置`setSoTimeout()`方法指定超时时间来控制I/O操作的最大等待期限,也可以利用NIO(New Input Output)库提供的Selector机制来进行高效的事件驱动型输入输出管理。 ```java // 设置 Socket 的超时时间为 5 秒钟 socket.setSoTimeout(5000); ``` 另外一种常见的做法是在创建ServerSocket实例的时候通过参数传递的方式开启SO_REUSEADDR选项,这有助于提高系统的灵活性特别是在频繁重启服务的情况下能够快速重用本地地址绑定: ```java serverSocket = new ServerSocket(port, backlog, InetAddress.getByName(host)); serverSocket.setReuseAddress(true); // 开启 SO_REUSEADDR 选项 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值