北京药帮忙科技有限公司-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圣经

全部评论

相关推荐

03-16 12:39
燕山大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
4344次浏览 34人参与
# 你的实习产出是真实的还是包装的? #
1014次浏览 26人参与
# 巨人网络春招 #
11132次浏览 221人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
6833次浏览 35人参与
# 简历第一个项目做什么 #
31213次浏览 311人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186290次浏览 1113人参与
# 米连集团26产品管培生项目 #
3703次浏览 163人参与
# 面试紧张时你会有什么表现? #
30294次浏览 188人参与
# 简历中的项目经历要怎么写? #
309273次浏览 4145人参与
# 网易游戏笔试 #
6299次浏览 83人参与
# 职能管理面试记录 #
10669次浏览 59人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
6795次浏览 154人参与
# 从哪些方向判断这个offer值不值得去? #
56685次浏览 357人参与
# 腾讯音乐求职进展汇总 #
160374次浏览 1105人参与
# 小红书求职进展汇总 #
226828次浏览 1356人参与
# AI时代,哪些岗位最容易被淘汰 #
62226次浏览 723人参与
# 你怎么看待AI面试 #
179177次浏览 1160人参与
# 正在春招的你,也参与了去年秋招吗? #
362424次浏览 2631人参与
# 你的房租占工资的比例是多少? #
92118次浏览 896人参与
# 机械求职避坑tips #
94389次浏览 567人参与
# 校招笔试 #
465564次浏览 2948人参与
# 面试官最爱问的 AI 问题是...... #
26974次浏览 833人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务