阿里(天猫事业部)Java开发工程师 二面

#JAVA##JAVA面经##JAVA内推#

1. @EnableAutoConfiguration 注解具体做了什么?

思路

讲清楚三件事:去哪里读配置、按什么条件加载、最终帮我们做什么。突出 Spring Boot 自动配置的核心机制。

回答示例

面试官您好,这个注解是 Spring Boot 实现自动配置的核心。

它主要做三件事:

第一,去 META-INF 下面读所有预先写好的自动配置类,比如数据源、Redis、MyBatis 这些;

第二,根据你项目里引了什么依赖,来判断哪些配置需要生效;

第三,把符合条件的 Bean 自动注入到 Spring 容器里,我们不用再手动写 XML 或者配置类。

简单说,就是帮我们省去大量重复配置,实现约定大于配置。

2. MyBatis 中 #{} 和 ${} 最核心的区别是什么?

思路

抓住两点:是否预编译、是否防 SQL 注入。一句话点透本质。

回答示例

最核心的区别就两点:

#{} 是预编译的,安全,防 SQL 注入;

${} 是直接字符串拼接,不安全,有注入风险。

平时传参数一定要用 #{},只有动态表名、动态列名这种必须拼接的时候,才不得已用 ${},而且一定要做参数校验。

3. 项目里 @Transaction 注解失效过吗?举个实际例子。

思路

用最经典、最真实的场景:同类内部方法调用,讲清楚为什么失效、怎么解决。

回答示例

失效过,我遇到最典型的就是同一个类里方法互相调用导致事务不生效

比如我在 A 方法里调本类的 B 方法,B 上加了事务,抛异常也不回滚。

原因就是 Spring 事务是基于动态代理的,必须走代理对象调用事务方法才管用,内部直接调用不走代理,所以事务就失效了。

我后来是把 B 方法抽到另一个 Service 里,注入进来调用,事务就正常了。

4. 你用 Redis 存了什么类型的数据?

思路

按业务场景说,结构对应场景,显得你真用过,不是背八股。

回答示例

我在项目里这几种最常用:

  • String:存用户信息、商品详情、库存数量、接口限流计数;
  • Hash:存对象,比如订单信息、用户配置,方便单独改某个字段;
  • List:做简单队列,比如日志、通知;
  • ZSet:用来做延迟队列,比如订单超时未支付自动取消;
  • Set:存去重数据,比如用户权限、已读消息。

基本都是根据业务场景选对应结构。

5. 什么是缓存穿透?

思路

讲清楚:查不存在的数据,一直打库。给方案。

回答示例

缓存穿透就是:有人查一个缓存和数据库里都不存在的数据

缓存里没有,就每次都去查数据库,高并发下很容易把库打挂。

比如恶意请求一堆不存在的商品 ID。

解决一般用缓存空值,或者布隆过滤器过滤掉无效请求。

6. 什么是缓存击穿?

思路

突出:一个热点 Key 过期,大量请求瞬间打库。

回答示例

缓存击穿是指:,这时候一瞬间大量请求进来,缓存没命中,全部打

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
27届拼多多实习机会或看我主页 https://careers.pddglobalhr.com/campus/intern?t=4OmKPVeX9a
点赞 回复 分享
发布于 03-23 17:10 上海
真的总结的很好呢
点赞 回复 分享
发布于 03-22 22:00 北京
很经典的八股文呀
点赞 回复 分享
发布于 03-18 16:11 四川

相关推荐

04-05 03:35
门头沟学院 Java
发一下问题给大家参考,攒攒人品!1.除了 CDN,还有哪些网络加速手段?2.建立连接时常用的超时时间有哪些?分别起什么作用?3.I/O 多路复用:select、poll、epoll 的区别是什么?4.介绍一下红黑树(Red-Black Tree)及其效率特点。5.操作系统中有哪些机制或系统调用使用了红黑树?6.CPU Load(负载)和 CPU Usage(利用率)有什么区别?7.高 Load 代表什么?高 CPU Usage 代表什么?8.CPU 利用率低但 Load 很高的原因是什么?如何排查?9.磁盘目录满了,如何定位占用空间最大的文件?10.df 显示磁盘满但找不到大文件的原因是什么?如何排查?11.操作系统内存回收机制是什么?阈值设置不合理会导致什么?12.什么是 MySQL 的回表?如何避免?13.数据库连接数打满如何发现和优化?14.如何规避 SQL 注入?15.MySQL 自增 ID 达到上限会发生什么?16.Redis + Lua 如何解决超卖和一人一单问题?17.Redis 如何保证 Lua 脚本的原子性?18.缓存逻辑过期与物理过期的区别是什么?解决什么问题?19.缓存穿透中缓存空值方案有什么问题?如何优化?20.Redis 分布式锁(Redisson)实现原理?如何避免死锁?21.滑动窗口限流的实现原理及优点?22.如何实现 IP 和用户维度的多级限流?23.为什么使用二级缓存(本地 + Redis)?如何保证一致性?24.算法题:两个无序链表合并为一个有序链表
查看24道真题和解析
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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