互联网大厂Java面试实录:从基础到微服务的全方位拷问
场景设定
面试官:严肃认真,技术扎实 谢飞机:搞笑水货程序员,基础尚可,复杂问题含糊其辞
第一轮:Java基础与Web框架
面试官:谢飞机,先简单介绍一下你对Java 8新特性的理解吧。
谢飞机:啊,Java 8有Lambda表达式、Stream API、Optional类……(挠头)还有那个日期API!
面试官:不错,那你能用Stream API写一个过滤列表中偶数的例子吗?
谢飞机:list.stream().filter(num -> num % 2 == 0).collect(Collectors.toList())
!
面试官:很好!那Spring Boot和Spring MVC有什么区别?
谢飞机:Spring Boot是快速开发的,内置Tomcat,Spring MVC是……(支支吾吾)反正Boot更简单!
第二轮:数据库与ORM
面试官:你们项目用的是Hibernate还是MyBatis?
谢飞机:Hibernate!因为它有缓存,写起来快!
面试官:那你知道Hibernate的N+1问题吗?
谢飞机:N+1?是不是查询次数太多?(一脸懵)
面试官:对,那怎么解决?
谢飞机:呃……用Fetch Join?(不确定)
第三轮:微服务与云原生
面试官:你们微服务架构用了Spring Cloud哪些组件?
谢飞机:Eureka、Feign、Zuul……还有那个Hystrix!
面试官:Hystrix现在推荐用Resilience4j替代了,知道为什么吗?
谢飞机:因为……(抓耳挠腮)Hystrix不更新了?
面试官:对,那你先回去等通知吧。
答案详解
第一轮答案
- Java 8新特性:Lambda、Stream API、Optional、新日期API等。
- Stream API示例:
list.stream().filter(num -> num % 2 == 0).collect(Collectors.toList())
。 - Spring Boot vs Spring MVC:Boot是快速开发框架,内置服务器;MVC是Web框架,需手动配置。
第二轮答案
- Hibernate的N+1问题:查询主表时,关联表会触发额外查询。
- 解决方案:使用Fetch Join或
@BatchSize
注解。
第三轮答案
- Spring Cloud组件:Eureka(服务发现)、Feign(声明式HTTP客户端)、Zuul(网关)。
- Resilience4j替代Hystrix:Hystrix已停止维护,Resilience4j更轻量且支持响应式编程。
业务场景与技术点:
- 电商场景:Spring Boot快速搭建商品服务,Hibernate处理订单数据,Spring Cloud实现服务调用。
- 支付与金融服务:Resilience4j保障服务熔断,Redis缓存交易数据。