Java面试之并发与网络通信常见面试题

48 阅读3分钟

并发编程部分

1. 什么是进程和线程?

进程:操作系统分配资源的最小单位,各个进程之间占据独立的寻址空间,运行也是独立运行,进程间通信需要一些机制。 线程:程序执行的基本单位,一个进程可以开启多个线程,他们的很多空间(如堆空间)是公用的。线程执行开销小,但是不够安全。

2. 线程有几种状态?

NEW:线程对象已经创建,尚未启动。 RUNNABLE:线程已经启动,正在运行或准备运行。 BLOCKED:等待锁的时候进入的状态。 WAITING:等待其他线程执行特定的操作(如调用wait()方法)。 TIMED_WAITING:线程等待另一个线程执行特定操作,但有一个时间限制(如调用sleep(long millis))。 TERMINATED:线程已经执行完毕或被中断。

3. 如何避免线程死锁?

保持一致的加锁顺序:确保多个线程在访问多个资源时,总是以相同的顺序请求锁。 设置锁超时:为获取锁设置超时时间,如果超时则放弃或稍后重试。 使用死锁检测工具:定期检查线程之间是否存在循环等待关系,并采取措施解决。

4. 线程间有哪些通信方式?

共享内存:通过共享变量进行通信,需要同步机制来保证数据的一致性。 消息传递:通过发送和接收消息进行通信,Java中的wait()和notify()方法就是一种基于消息传递的通信方式。

网络通信部分

1. 描述TCP/IP四层模型

应用层:提供网络应用服务,如HTTP、FTP、SMTP等。 传输层:提供端到端的通信服务,如TCP和UDP。 网络层:负责数据包的路由和转发,主要协议为IP。 网络接口层:负责数据在物理网络上的传输,如以太网、Wi-Fi等。

2. 常见的网络协议有哪些?

HTTP:基于TCP协议,用于Web浏览器与Web服务器之间的通信。 SMTP:基于TCP协议,用于发送电子邮件。 POP3/IMAP:基于TCP协议,用于接收电子邮件。 FTP:基于TCP协议,用于在计算机之间传输文件。 SSH:安全的网络传输协议,基于TCP协议,提供加密和认证机制。

3. TCP和UDP的主要区别是什么?

TCP:提供面向连接的、可靠的数据传输服务,有重传机制,适合大数据量传输。 UDP:提供无连接的、尽最大努力的数据传输服务,不保证数据传输的可靠性,简单高效,适合小数据量传输或实时性要求高的场景。

4. 如何解决网络延迟和丢包问题?

网络延迟:可以通过优化网络路由、增加带宽、使用更高效的传输协议等方式来降低网络延迟。 丢包问题:可以通过使用TCP协议(具有重传机制)来减少丢包的影响,同时也可以通过应用层的重试机制来应对丢包问题。