一面总结(WY)

一面总结(WY)

面试体验非常好,网易的面试官很有耐心,遇到不会的问题也会很耐心地一步步提醒,甚至还会告诉你合适的解决方案是什么样的,为善良友好的面试官点赞!!

关于LinkedHashMap

LinkedHashMapHashMap 都是 Java 集合框架中的 Map 接口的实现类。它们的最大区别在于迭代元素的顺序。HashMap 迭代元素的顺序是不确定的,而 LinkedHashMap 提供了按照插入顺序或访问顺序迭代元素的功能。此外,LinkedHashMap 内部维护了一个双向链表,用于记录元素的插入顺序或访问顺序,而 HashMap 则没有这个链表。因此,LinkedHashMap 的插入性能可能会比 HashMap 略低,但它提供了更多的功能并且迭代效率相较于 HashMap 更加高效。

LinkedHashMap 可以通过构造函数中的 accessOrder 参数指定按照访问顺序迭代元素。当 accessOrder 为 true 时,每次访问一个元素时,该元素会被移动到链表的末尾,因此下次访问该元素时,它就会成为链表中的最后一个元素,从而实现按照访问顺序迭代元素。

accessOrder 设置为 true 并重写 removeEldestEntry 方法当链表大小超过容量时返回 true,使得每次访问一个元素时,该元素会被移动到链表的末尾。一旦插入操作让 removeEldestEntry 返回 true 时,视为缓存已满,LinkedHashMap 就会将链表首元素移除,由此我们就能实现一个 LRU 缓存。

关于Redis的ZSet数据类型的底层原理

image-20240224175705263

image-20240224175736589

image-20240224180006820

image-20240224180025965

image-20240224180359901

关于服务宕机时线程池未完成的任务如何保证不丢失

我们知道队列里任务请求如果只在内存,没有持久化的话,机器宕机队列中的请求肯定会丢失。那么是不是可以在任务提交到线程池前,先把任务信息插入到数据库加个状态字段:未提交,当任务提交到线程池后,再更新状态为已提交,任务执行完之后再更新状态为已完成。机器宕机系统重启后,启动一个后台线程去读取未提交和已提交的任务信息,重新提交到线程池,继续执行任务。

关于OpenRPC项目的压测效果