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

相关推荐

AI 面的提问逻辑其实很简单 ——精准锁定你简历和自我介绍里的关键词,然后顺着技术点 “追根究底”,全程没有废话,比真人面试官更 “较真”,也更擅长抓知识盲区。首先,自我介绍里提到的技术栈,一定会被逐个拆解提问。比如你说 “熟练掌握 Java 后端开发”,AI 会先从基础八股开始:“HashMap 的底层实现?JDK1.8 做了哪些优化?红黑树的插入条件是什么?”;你说 “用 Redis 做过缓存优化”,追问立刻就来:“缓存穿透、击穿、雪崩的区别和解决方案?布隆过滤器的原理和优缺点?Redis 分布式锁如何避免死锁?” 这些问题不会跳着问,而是层层递进,直到你答不上来为止。其次,项目经验是 AI 面的重点 “拷打” 对象,细节问到你怀疑人生。比如你写 “参与 Spring Boot 项目开发,负责用户模块”,AI 会问:“用户模块的表结构设计?为什么用这个字段类型?用户登录的鉴权流程是什么?有没有考虑过 XSS 攻击?”;你提 “做过接口性能优化”,它会追着要数据:“优化前的响应时间是多少?用了什么工具做压测?优化后提升了多少?具体改了哪些代码?” 模糊的表述在这里完全行不通,必须有实打实的细节支撑。再者,场景化问题占比极高,主打一个 “考察实战能力”。这些问题不是死记硬背就能答好的,需要结合开发经验梳理思路。比如:“接口出现超时问题,你的排查步骤是什么?”“MySQL 慢查询如何优化?从索引、SQL 语句、配置三个方面说明。”“高并发场景下,如何保证接口幂等性?列举三种以上方案。”“分布式事务的几种实现方式?各自的优缺点和适用场景?”还有一个很容易被忽略的点 ——AI 面会问基础编程和算法题。部分平台会直接嵌入代码编辑器,要求你现场写代码,比如 “用 Java 实现一个简单的线程池”“写一个快速排序算法,要求处理重复元素”“用 Python 实现 LRU 缓存”,难度不算高,但很考验代码规范和临场发挥能力。最后,还有一些 “软性问题”,用来考察你的学习能力和职业规划。比如 “你最近在学习什么新技术?为什么选择这个方向?”“你觉得自己最大的技术短板是什么?打算如何弥补?”“如果入职后,遇到不会的技术问题,你会怎么解决?” 这些问题虽然不涉及硬核技术,但回答得好能加分不少。总的来说,AI 面的问题没有 “偏题怪题”,核心就是 “你写了什么,它就问什么”。准备的关键就是把简历里的每一个技术点、每一个项目细节都吃透,梳理清楚前因后果,确保问到任何相关问题都能条理清晰地回答 —— 毕竟 AI 不会因为你的紧张而手下留情,只会一步步挖到你的知识边界。
查看14道真题和解析
点赞 评论 收藏
分享
03-24 10:13
辽宁大学 Java
手撕两道 30min1.lc1190 反转每对括号间的子串2.数组实现高精度加法八股 30min1. 类加载机制2. jvm内存模型3. 介绍一下垃圾回收4. 垃圾回收算法,详细介绍一下5. stringbuffer和stringbuilder的区别6. java常见集合类7. hashmap底层原理8. 红黑树有什么特点,为什么用红黑树不用别的树9. hash是线程安全的吗,怎么实现线程安全10. concurenthashmap原理11. hashmap有记录插入顺序吗,假如我put 一个A,B,C进去然后我用for去循环他的话,他能A,B,C输出出来吗12. 如果我想维护这个插入顺序的话应该怎么办13. 线程池原理14. threadlocal是什么15. 使用threadlocal的时候需要注意什么16. IOC原理17. spring中的bean是什么18. 介绍一下spring中常见的注解19. MySQL查询很慢的话,怎么优化20. 最左匹配原则21. 索引ABC,where CBA能用上吗22. MySQL三大日志23. Redis分布式锁原理24. 一个服务通过redis抢到锁了是吧?嗯,然后这个服务挂了,那这个锁一直一直在那里,那怎么办呢?25. redis如果挂了它重启的话,里面的数据会丢失吗?26. Redis持久化27. 缓存击穿和缓存穿透28. 布隆过滤器它的原理是什么29. 说一下你在这个项目中啊遇到的一些比较比较麻烦的一些问题,还有是怎么解决的30. RAG这个方式有什么优缺点?31. 你在使用那个大模型的那个过程中有没有遇到过这种问题?就是说想希望它稳定的输出这种这一种格式
isolate9:是hr与管理线么
今天你投了哪些公司?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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