面试
tcp为什么要四次挥手:TCP协议采用四次挥手(Four-Way Handshake)来确保可靠地终止一个连接,原因主要包括以下几点:
全双工通信的需要:TCP连接是全双工的,意味着数据可以同时在两个方向上传输。因此,每个方向的连接关闭都需要独立进行。当一端完成数据发送任务后,它会发送一个FIN(Finish)标志来终止这个方向的连接。四次挥手确保了两个方向上的连接都能被正确且独立地关闭。
确保数据完整性:在四次挥手过程中,当一端发送了FIN请求断开连接后,另一端可能还有数据需要发送。因此,它会先回复一个ACK确认收到断开请求,然后继续发送剩余数据,直到自身数据发送完毕,再发送自己的FIN包。这样可以确保双方的数据都能够被完整地传输,不会因过早关闭连接而导致数据丢失。
确保双方都准备好关闭:第一次挥手是客户端请求断开,第二次挥手是服务器确认收到断开请求。但此时服务器可能还在发送数据,因此需要等到数据发送完毕后再发送第三次挥手(服务器的FIN包)。客户端在收到服务器的FIN后,发送最后一个ACK,表示已经准备好关闭连接。这样确保了双方都明确知道对方已经没有数据要发送,可以安全关闭连接。
防止旧数据混淆:四次挥手的最后阶段还包括一个等待时间(TIME_WAIT状态),在此期间,连接不会立即释放,以防最后一个ACK包在网络中丢失,需要重传。这有助于确保不会有旧的数据片段在新连接中被错误地接收。
综上所述,TCP四次挥手是为了确保在关闭连接时双方的数据传输完整,连接的关闭是有序且可靠的,同时也为可能的重传留出了时间,以此来维护数据的一致性和连接的稳定性。
list,set, map:List(列表)
特点:List是一个有序的集合,可以包含重复元素。每个元素都有一个索引,从0开始,可以按照索引访问元素。
常用实现:ArrayList, LinkedList, Vector等。其中,ArrayList提供了快速的随机访问,但插入和删除效率较低(尤其是在列表前面或中间操作);LinkedList适合频繁的插入和删除操作,但随机访问较慢。
应用场景:当需要保持元素的插入顺序,或需要通过索引来访问元素时,使用List。
Set(集)
特点:Set是一个不包含重复元素的集合,即每个元素最多只能出现一次。它没有索引,不能通过索引来访问元素。
常用实现:HashSet, LinkedHashSet, TreeSet等。HashSet提供最快的查询速度,但不保证元素的迭代顺序;LinkedHashSet保持插入顺序;TreeSet对元素进行排序,要么自然排序,要么通过比较器Comparator。
应用场景:当你需要确保集合中元素的唯一性时,应该使用Set。
Map(映射)
特点:Map是一种键值对的数据结构,每个键(Key)都是唯一的,对应一个值(Value)。Map中的元素是成对出现的,键不能重复,但值可以。
常用实现:HashMap, LinkedHashMap, TreeMap, Hashtable等。HashMap提供了快速的访问速度,但不保证顺序;LinkedHashMap保持插入顺序或访问顺序;TreeMap按键自然排序或定制排序;Hashtable是线程安全的,但已逐渐被ConcurrentHashMap取代,因为后者在并发操作上表现更好。
应用场景:当需要通过特定的键来查找、存储或删除关联的值时,Map是理想的选择。
总结来说,选择使用List、Set还是Map,取决于你的具体需求:是否需要保证元素的唯一性、是否需要有序访问、是否需要键值对存储等。
hashmap和hashtable的区别:HashMap和Hashtable在Java中都是用来存储键值对的数据结构,但它们之间存在一些关键差异,主要体现在以下几个方面:
线程安全性:
Hashtable:是线程安全的,它通过在方法上同步(synchronized)来实现,这意味着在多线程环境下可以直接使用Hashtable而无需额外的同步措施,但这也使得它在单线程环境下的性能不如HashMap。
HashMap:非线程安全,如果在多线程环境中不加控制地使用HashMap,可能会导致数据不一致的问题。为了在多线程环境下安全使用,可以使用Collections.synchronizedMap()方法来包装HashMap,或者使用更现代且高效的ConcurrentHashMap。
支持null值:
HashMap:允许null键和null值,尽管推荐尽量避免使用null键,因为这样会降低哈希表的性能。
Hashtable:既不允许null键也不允许null值,尝试插入null会导致NullPointerException。
继承关系和接口实现:
HashMap:继承自AbstractMap类,并实现了Map接口。
Hashtable:继承自较老的Dictionary类,同样实现了Map