一面总结(WY)
面试体验非常好,网易的面试官很有耐心,遇到不会的问题也会很耐心地一步步提醒,甚至还会告诉你合适的解决方案是什么样的,为善良友好的面试官点赞!!
关于LinkedHashMap
LinkedHashMap
和 HashMap
都是 Java 集合框架中的 Map 接口的实现类。它们的最大区别在于迭代元素的顺序。HashMap
迭代元素的顺序是不确定的,而 LinkedHashMap
提供了按照插入顺序或访问顺序迭代元素的功能。此外,LinkedHashMap
内部维护了一个双向链表,用于记录元素的插入顺序或访问顺序,而 HashMap
则没有这个链表。因此,LinkedHashMap
的插入性能可能会比 HashMap
略低,但它提供了更多的功能并且迭代效率相较于 HashMap
更加高效。
LinkedHashMap
可以通过构造函数中的 accessOrder
参数指定按照访问顺序迭代元素。当 accessOrder
为 true 时,每次访问一个元素时,该元素会被移动到链表的末尾,因此下次访问该元素时,它就会成为链表中的最后一个元素,从而实现按照访问顺序迭代元素。
将 accessOrder
设置为 true 并重写 removeEldestEntry
方法当链表大小超过容量时返回 true,使得每次访问一个元素时,该元素会被移动到链表的末尾。一旦插入操作让 removeEldestEntry
返回 true 时,视为缓存已满,LinkedHashMap
就会将链表首元素移除,由此我们就能实现一个 LRU 缓存。
关于Redis的ZSet数据类型的底层原理
关于服务宕机时线程池未完成的任务如何保证不丢失
我们知道队列里任务请求如果只在内存,没有持久化的话,机器宕机队列中的请求肯定会丢失。那么是不是可以在任务提交到线程池前,先把任务信息插入到数据库加个状态字段:未提交,当任务提交到线程池后,再更新状态为已提交,任务执行完之后再更新状态为已完成。机器宕机系统重启后,启动一个后台线程去读取未提交和已提交的任务信息,重新提交到线程池,继续执行任务。