小红书一面-Java开发日常实习面经

小红书一面-Java开发日常实习面经
最新回答
肆无忌惮的思念

2026-10-17 12:30:53

答案概述:该面经记录了小红书Java开发日常实习一面过程,涉及项目、技术问题及手撕代码,面试官注重项目细节并给予详细解答反馈。

具体内容如下:

  • 项目相关

    项目介绍:要求选一个项目阐述背景与业务,以黑马点评为例,需清晰说明项目整体情况,如黑马点评可能是一个提供商品点评、分享等功能的平台,旨在帮助用户获取商品真实信息辅助消费决策等。

    项目职责:询问在个人项目中承担的部分,以此考察对项目的贡献和熟悉程度。

  • 技术问题

    超卖问题解决:超卖是电商秒杀等场景常见问题,可通过数据库唯一索引、分布式锁、乐观锁等方式解决。数据库唯一索引确保同一时间只有一个请求能成功插入订单数据;分布式锁如Redis分布式锁,保证同一时刻只有一个线程能获取锁进行下单操作;乐观锁通过版本号控制,更新数据时检查版本号是否变化来防止超卖。

    秒杀优化之异步下单:异步下单是将下单操作从主流程中分离出来,通过消息队列等方式实现。用户发起下单请求后,系统先将请求放入消息队列,然后立即返回给用户下单成功的提示,后续由消费者线程从队列中取出请求进行实际下单处理,提高系统响应速度和吞吐量。

    一人一单判断与记录:一人一单需在用户下单时判断是否已存在该用户的订单。可在数据库用户订单表中设置唯一索引,以用户ID和商品ID等组合作为唯一键,下单时尝试插入数据,若插入失败则表示已存在订单;也可在内存中使用集合记录已下单用户信息,但需考虑数据一致性和持久化问题。

    异步下单原因:采用异步下单主要是为了提高系统性能和用户体验。同步下单时用户需等待下单操作完成才能得到响应,若下单操作耗时较长,会导致用户等待时间过长;异步下单可让用户快速得到响应,同时系统在后台处理下单请求,提高系统并发处理能力。

    阻塞队列订单下单失败处理:当阻塞队列中的订单下单失败时,可先将失败订单记录到日志文件中,以便后续分析和处理;同时可将失败订单重新放入队列,设置重试次数,进行多次重试;若重试多次仍失败,可通知相关人员或系统进行人工干预处理。

    热Key问题解决:实现点赞和关注功能时可能出现热Key问题,即某个Key的访问量过大导致Redis扛不住。可通过读写分离、本地缓存、加锁等方式解决。读写分离将热点数据的读操作分散到多个从节点;本地缓存将热点数据缓存在应用服务器本地,减少对Redis的访问;加锁保证同一时间只有一个请求能访问热点数据,避免并发问题。

    多级缓存做法:多级缓存通常包括本地缓存和分布式缓存。本地缓存可使用Guava Cache等工具,将热点数据缓存在应用服务器内存中,访问速度快;分布式缓存如Redis,用于存储全局热点数据。当请求到来时,先从本地缓存获取数据,若未命中再从分布式缓存获取,若仍未命中则从数据库获取并更新到缓存中。

    线程安全保证方法:Java中保证线程安全的方法有多种,加锁可通过代码块(synchronized关键字修饰代码块)和方法(synchronized关键字修饰方法)实现;把变量冗余一份即对共享变量进行拷贝,每个线程操作自己的副本,避免共享变量竞争;还可使用原子类、并发集合等线程安全的类来保证线程安全。

    volatile线程安全性:volatile不能完全保证线程安全。它只能保证变量的可见性,即一个线程修改了volatile变量的值,其他线程能立即看到修改后的值,但不能保证原子性和有序性。对于复合操作(如i++),仍需使用同步机制保证线程安全。

    JVM垃圾回收机制及优缺点:常见的JVM垃圾回收机制有Serial GC、Parallel GC、CMS GC、G1 GC等。Serial GC采用单线程回收,适合单核CPU,简单高效但回收时间长;Parallel GC采用多线程回收,提高回收效率,适合多核CPU但对系统吞吐量有一定影响;CMS GC以获取最短回收停顿时间为目标,采用并发回收,但会产生内存碎片;G1 GC将堆内存划分为多个区域,可预测停顿时间,综合性能较好,但实现复杂。

    HashMap详细介绍:HashMap基于哈希表实现,由数组和链表(Java 8后引入红黑树)组成。扩容时,当元素数量超过阈值(容量*负载因子),会创建新的数组,将旧数组元素重新哈希到新数组中。put过程先计算键的哈希值确定数组索引,若该位置为空则直接插入;若有元素则遍历链表或红黑树,找到相同键的元素进行更新,若无则插入到链表尾部或红黑树中。哈希冲突时,Java 8之前采用链表法,之后当链表长度超过阈值(8)且数组长度超过64时,将链表转换为红黑树。

    处理hash冲突方式:除链表法和红黑树法外,还有开放定址法(线性探测、二次探测等),当发生冲突时,按照一定规则在哈希表中寻找下一个空闲位置插入元素;再哈希法,当发生冲突时,使用另一个哈希函数计算哈希值,直到找到空闲位置。

    线性探测法种类及优缺点:线性探测法是开放定址法的一种,发生冲突时,顺序查找下一个空闲位置。优点是实现简单;缺点是容易产生“聚集”现象,即冲突的元素会聚集在一起,导致后续插入和查找效率降低。

  • 手撕代码:要求实现236. 二叉树的最近公共祖先,面试官关注解题思路,完成代码后需阐述思路,后续可自行调试优化。
  • 反问环节:针对简历项目单薄问题询问学习方向,面试官建议通过实习在实际业务场景中深入学习,确定方向,单靠自学较难找到深入点。