蚂蚁金服Java实习面试攻略:解密高难度面试题与准备策略

蚂蚁金服与阿里巴巴的Java实习面试经历。这次面试的整体难度相对较高,特别是场景题的设计,更能真实考验面试者的能力。

自我介绍

我是一名来自某末流985高校的硕士生。今年3月我投递了阿里和美团的职位,因地理位置问题拒绝了阿里的实习机会,最终转向蚂蚁金服并获得了面试意向。

准备过程

自研一以来,我一直在刷题,题量庞大,所以笔试表现通常较为顺利。从去年十月开始,我系统学习了Java。

面试经历

阿里一面(0314)

  1. 请介绍简历上的项目及其实际应用场景。

  2. 请说明电商秒杀项目的实现,并讨论如何解决超卖问题。

  3. 在使用MQ的情况下,为什么还会出现MySQL连接数过高,如何优化MySQL性能瓶颈并进行分库分表?

  4. 请讲解缓存击穿、缓存雪崩、缓存一致性的问题,并分别提出解决方案。

  5. 雪花算法和分布式锁的概念。

  6. 有关乐观锁和悲观锁的区别。

  7. 创建对象的几种方式(我只回答了new和反射,未能全面覆盖)。

  8. 这三行代码中JVM执行了什么操作:

    String a = "123";
    String b = new("456");
    String c = a + b;
    
  9. 如何释放一个用完的大对象的内存空间?

  10. 请讲解Spring的IOC控制反转。

  11. MySQL如何删除数据?

  12. delete与truncate的区别(未能回答)。

  13. 在编写查询语句时,性能考虑的方面有哪些?

  14. 什么是联合索引?为什么需要建立联合索引?

  15. 请讲解ARP和ICMP协议。

  16. 什么情况下不需要查询ARP表?

  17. ICMP用于哪个路由器?在哪些场景下使用ICMP?traceroute是如何工作的?

阿里一面笔试(0315)

给定一个100GB的文件,每行一个URL,在4GB内存的机器上统计出前100个URL并输出到新文件中。

阿里二面(0317)

  1. 请介绍JVM的内存区域。
  2. 对象的生命周期(创建对象的过程)。
  3. 介绍一下volatile关键字。
  4. 如何获取子线程的返回值?
  5. 如果子线程抛出异常,主线程的try-catch能否捕获到这个异常?
  6. 请讲解JDK动态代理的原理。
  7. 如果一个程序占用大量CPU并持续运行,如何进行排查?
  8. Spring容器的启动过程是什么?
  9. @Autowired和@Resource的区别。
  10. 关于字段a, b, c, d,给出查询条件a=b,并按c排序的查询语句(如何优化MySQL翻页查询以避免性能下降)。
  11. SQL题:在学生成绩表中,统计总成绩前十名的学号。
  12. SQL explain命令输出的信息。
  13. Redis的批处理机制。
  14. 请介绍一下电商项目。

阿里三面(0327)

  1. GC(垃圾回收)机制的定义,如何排查GC,如何手动使Java虚拟机OOM。
  2. SQL如何手动加锁。
  3. HashMap为什么要转为红黑树,而不是一开始就使用红黑树(红黑树的缺点)。
  4. 造成内存泄漏的情况,如何排查。

接下来涉及各种电商项目的细节。

蚂蚁一面

  1. 为什么选择后端开发?
  2. 第一个社团项目花了一年多时间,原因是兴趣还是老师布置的任务?
  3. 是基于场景学习技术,还是出于单纯的学习愿望?
  4. 哪些项目是与他人合作的?
  5. 注意到你在电商项目只做了四个月,现阶段仍在从事吗?
  6. 性能压测的具体做法,性能如何?
  7. 电商项目的需求分解设计是如何进行的?
  8. 缓存设计的思路?
  9. 电商的核心对象模型设计思路。
  10. JVM的内存模型及其运行机制。
  11. JDK8的新特性。
  12. HashMap的源码是否看过?请讲解其实现原理。
  13. 线程池使用的注意事项,线程数量是否越多越好?
  14. 分布式系统的一致性如何保障?(未能回答)
  15. 请介绍MySQL的底层结构。
  16. MySQL设计索引时的注意事项。
  17. 双向链表的缺点。
  18. 了解哪些设计模式?
  19. 有使用过Linux系统吗?用过哪些命令?
  20. 平时有写博客的习惯吗?如果没有,是什么原因?
  21. 在合作项目中与他人发生冲突时,如何处理?

蚂蚁二面

由于时间有限,仅进行了5分钟的讨论,未做详细记录。

蚂蚁三面

  1. 详细介绍简历中的比赛经历(比赛类型、组队情况、分工情况)。
  2. 比赛成绩不佳的原因,赛后是否进行过反思?
  3. 毕设开题情况,最后是发表论文还是申请专利?
  4. 具体介绍毕设项目的难点、分工和创新性。
  5. 毕设的方法与其他方法相比的优化之处。
  6. 项目使用的编程语言、代码设计及模块分配。
  7. 如何处理大文件?是否考虑过断点续传?
  8. 功能性测试的具体做法(如效率、结果)。
  9. 代码异常测试的情况,是否进行了大量测试?
  10. 如果毕业后项目未完成,程序的可扩展性如何?
  11. 数据获取的途径。
  12. 为什么没有继续做老师的项目而转向互联网工作?
  13. 是否进行过保研?考研为何不选择计算机?
  14. 如何学习计算机课程知识?
  15. 在比赛中,团队合作与单人开发的区别。
  16. 集成测试的具体做法。
  17. 比赛期间如何与队友沟通。
  18. 为什么选择后端开发?吸引你的方面是什么?
  19. 实验室项目和比赛项目对能力提升的具体影响。
  20. 上个面试官问你分布式时你表示不会,后来学习了吗?你如何理解分布式事务与普通事务的区别?
  21. 分布式电商系统可能遇到的分布式事务问题。
  22. 如何保证集群的一致性?
  23. 了解过蚂蚁的OceanBase吗?
  24. 你之前是如何在MySQL中加锁的?
  25. 还投递了其他公司吗?阿里云投递的是哪个部门?