北京药帮忙科技有限公司-Java 一面 面经

1. 谈谈 ArrayList 和 LinkedList 的区别

  • 底层数据结构ArrayList 基于动态数组实现;LinkedList 基于双向链表实现。
  • 访问性能ArrayList 支持随机访问,通过索引定位的时间复杂度为 O(1)LinkedList 需从头或尾遍历,时间复杂度为 O(n)
  • 增删效率ArrayList 在末尾增删较快,但在中间插入或删除需移动后续元素;LinkedList 插入或删除只需修改指针,复杂度为 O(1),但定位到目标节点仍需 O(n)
  • 内存开销ArrayList 空间连续,但有容量预留导致的碎片;LinkedList 每个节点需额外存储前后指针,单节点内存占用更高。

2. Thread、Runnable、Callable 的区别是什么?

  • 实现方式Thread 是类,受 Java 单继承限制;RunnableCallable 是接口,扩展性更好。
  • 返回值Runnablerun() 方法没有返回值;Callablecall() 方法支持返回结果,通常配合 FutureTask 使用。
  • 异常处理Runnable 只能在内部处理异常;Callable 允许声明抛出受检异常。
  • 推荐做法:生产环境通常使用 RunnableCallable 配合线程池执行,以实现资源复用和任务管理。

3. 索引的作用是什么?在项目中你是如何建索引的?

  • 核心作用:索引的本质是排好序的数据结构(B+ 树),通过减少磁盘 I/O 次数来加速数据检索。
  • 建索原则: 高频筛选:针对 WHERE、JOIN、ORDER BY 中的字段建立索引。区分度:优先选择离散度高的字段(如 ID、手机号),避免对重复率高的字段(如性别)建索引。复合索引:遵循最左匹配原则,优先建立联合索引以覆盖更多查询场景。覆盖索引:尽量让索引包含所有需要查询的列,避免回表操作提高性能。

4. 主键索引和联合索引的区别是什么?底层结构有何不同?

  • 主键索引(聚簇索引):叶子节点直接存储完整的行数据。一张表只能有一个主键索引。
  • 联合索引(非聚簇索引):叶子节点存储的是索引列的值值和对应的主键值。如果查询字段不在索引中,需要通过主键值进行“回表”。
  • 底层结构:两者都采用 B+ 树。区别在于联合索引的排序是基于多个列组合的,且叶子节点不含整行数据。

5. 线上高并发场景下你会选择什么集合?

  • 线程安全映射:使用 ConcurrentHashMap。Java 8 之后通过 CAS + synchronized 锁桶节点,保证了极高的并发写入性能。
  • 读多写少列表:使用 CopyOnWriteArrayList。采用“写时复制”策略,读操作完全无锁,适合配置表、白名单等场景。
  • 异步缓冲队列:使用 ArrayBlockingQueueLinkedBlockingQueue。利用其阻塞特性实现生产者-消费者模型,平衡系统负载。

6. 你对内存泄露有了解吗?通常如何解决?

  • 定义理解:对象不再被程序使用,但由于仍被 GC Root 引用导致无法被回收,最终可能引发 OOM。
  • 常见场景: 静态集合:长生命周期的 Map/List 持续持有对象。未关闭资源:IO 流、数据库连接、Socket 未手动关闭。ThreadLocal:使用完未调用 remove(),导致 Entry 堆积。
  • 解决方法:使用 jmap 或 Arthas 导出堆转储文件(Heap Dump),通过 VisualVM 或 MAT 分析引用链,定位强引用的根源并修复代码。

7. 动态代理你在哪些场景下使用到?

  • 框架层面: Spring AOP:实现声明式事务(@Transactional)和日志监控。MyBatis:为 Mapper 接口生成代理实现类,执行 SQL。
  • 业务应用: RPC 远程调用:为远程接口生成本地代理(Stub),隐藏底层网络传输细节。权限校验:在方法执行前统一进行用户身份认证和鉴权。

8. 介绍一下 Agent 项目的流程、RAG 与 Agent Loop 链路

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试圣经 文章被收录于专栏

Java面试圣经,带你练透java圣经

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11066次浏览 94人参与
# 你的实习产出是真实的还是包装的? #
1956次浏览 42人参与
# 巨人网络春招 #
11366次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7641次浏览 43人参与
# 简历第一个项目做什么 #
31744次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433547次浏览 3926人参与
# MiniMax求职进展汇总 #
24117次浏览 309人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187208次浏览 1122人参与
# 牛客AI文生图 #
21446次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152451次浏览 888人参与
# 研究所笔面经互助 #
118966次浏览 577人参与
# 简历中的项目经历要怎么写? #
310361次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63820次浏览 828人参与
# 面试紧张时你会有什么表现? #
30510次浏览 188人参与
# 你今年的平均薪资是多少? #
213138次浏览 1039人参与
# 你怎么看待AI面试 #
180137次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76545次浏览 374人参与
# 我的求职精神状态 #
448134次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363512次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160675次浏览 1112人参与
# 校招笔试 #
471196次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务