小红书java一面

1. 很多人说 `HashMap` 的实现是“数组+链表/红黑树”。当一个新元素放进来的时候,它具体是怎么决定自己落在数组的哪个位置?又是在什么时候,链表会“升级”成红黑树?

2. 如果 `HashMap` 在多线程下使用,可能会出什么问题? `ConcurrentHashMap` 是如何解决这些问题的?它的实现比 `Hashtable` 好在哪里?

3. 很多并发工具的底层都用到了CAS(Compare-And-Swap)操作。你能用大白话解释一下CAS是怎么工作的吗?它为什么被称为“乐观锁”?

4. 假设有一个单例模式的实现,用了“双重检查锁定”。为什么给实例变量加上 `volatile` 关键字是绝对必要的?不加的话,在多线程环境下可能会发生什么奇怪的问题?

5. `synchronized` 和 `ReentrantLock` 都是锁,我们应该怎么选?能不能举一个场景,在这个场景下用 `ReentrantLock` 会比用 `synchronized` 方便得多?

6. 当我们排查线上一个“慢”请求时,问题可能出在很多环节。你能从一个用户在浏览器里输入网址开始,到页面最终展示出来,把整个流程串起来,并指出每个环节(比如DNS、TCP、服务器处理、浏览器渲染)最常见的性能瓶颈是什么吗?

7. TLS/SSL 握手的时候,用了非对称加密来商量后续通信要用的对称密钥。为什么这么麻烦?直接一直用非对称加密来通信不好吗?

8. TCP 四次挥手关闭连接时,主动关闭方最后会进入一个 `TIME_WAIT` 状态。这个状态是干嘛的?为什么要等那么久才彻底关闭?

9. TCP 连接的两端都有一个“窗口”的概念来做流量控制。这个“窗口”具体是怎么工作的?它和为了防止网络堵塞的“拥塞控制”是一回事吗?

10. Java的类加载为什么要设计成“双亲委派”这么一个有点绕的模式?它主要是为了解决什么问题?

11. 我们在配置线程池的时候,经常要设置核心线程数和最大线程数。这两个参数在什么情况下会需要设置成不一样的值?这跟我们选择什么样的任务队列有关系吗?

12. Redis 有好几种持久化方式。假设你用Redis做缓存,能接受重启后丢失一两分钟的数据,但特别看重Redis的读写性能。在这种场景下,你会选 RDB 还是 AOF?为什么?

13. 现在很火的“以图搜图”功能,背后其实就是向量数据库在起作用。传统数据库用B+树索引来快速查找精确值,向量数据库是怎么做到快速查找“相似”向量的?它的索引原理和传统数据库有什么根本不同?

14. 核心代码模式算法题:不同路径的数目(一)

全部评论

相关推荐

一天代码十万三:白面具还是太阴了,还得削
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务