北京药帮忙科技有限公司-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-24 18:41 北京

相关推荐

04-24 18:20
门头沟学院 Java
攒人品中,祝大家都能拿到满意的Offer!1.实习拷打2.拷打实习3.拷打第一个项目:MinerU解析过程中如果遇到跨页表格,如何保证表格语义的完整性?讲一下Ragas评测?如果Answer Relevance得分低,如何判断是检索质量问题还是模型能力问题?4.拷打第二个项目:LangGraph中的State是如何定义和流转的?如果任务节点非常多,如何防止状态对象过大导致内存溢出?你的长期记忆库如何将多轮对话中的信息提炼成结构化的用户画像存到向量库?5.文档切片时,overlap的作用是什么?如何平衡分片大小与上下文完整性?6.了解GraphRAG吗?介绍一下7.当GraphRAG召回大量关联信息后,如何用自反思或CoT在生成阶段过滤掉检索噪声?8.讲一下ReAct的原理,为什么能提升模型对复杂任务的理解能力?9.如果模型在调用工具时产生了参数幻觉或语法错误,通常采取哪些自动修正手段?10.什么是Multi-Agent系统中的中心化编排模式?相比于点对点有什么优势?11.讲一下Agent的Self-Reflection,它是如何识别输出中的逻辑错误的?12.如何设计Agent的长期记忆?13.在执行涉及支付等高敏感操作时,如何实现Human-in-the-loop的干预流程?14.如何设计一个Skill?大概讲一下15.对比一下Skill和MCP的区别16.OpenClaw如何增强Agent对本地文件系统和代码执行环境的感知与操作权限?17.你如何理解Vibe Coding?有什么经验吗?18.如何确保自然语言描述的任务逻辑能够转化为可靠的执行路径?19.什么是上下文缓存?它在处理Agent频繁读取的冗余系统指令时有哪些优势?
查看22道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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