关注
3. Spring的AOP是什么?底层是怎么实现的?
AOP(面向切面编程) 是Spring框架的核心功能之一,用于将横切关注点(如日志、事务、安全等)与核心业务逻辑分离,通过动态代理实现代码的模块化。
底层实现方式:
1. JDK动态代理:基于接口实现,通过
"java.lang.reflect.Proxy"生成代理对象,要求目标类必须实现接口。
2. CGLIB动态代理:基于继承实现,通过生成目标类的子类来增强方法,适用于无接口的类。
- Spring默认优先使用JDK动态代理,若目标类未实现接口则自动切换为CGLIB。
核心流程:
- 通过
"BeanPostProcessor"在Bean初始化前后介入,生成代理对象。
- 代理对象调用方法时,会触发
"MethodInterceptor",执行增强逻辑(如@Before、@After等)。
4. 常用Spring注解及@Autowired与@Resource的区别
常用注解示例:
- 配置类:
"@Configuration",
"@ComponentScan",
"@Bean"
- 组件扫描:
"@Component",
"@Service",
"@Repository",
"@Controller"
- 依赖注入:
"@Autowired",
"@Resource",
"@Value"
- AOP:
"@Aspect",
"@Before",
"@After",
"@Around"
- 事务:
"@Transactional"
@Autowired与@Resource的区别:
特性 @Autowired (Spring提供) @Resource (JSR-250标准)
来源 Spring框架 Java EE标准,Spring支持
默认注入方式 按类型(byType) 按名称(byName),失败时按类型
是否必须 默认required=true,可设false 默认必须存在,可设
"nullable"
指定名称 需配合
"@Qualifier" 直接通过
"name"属性指定
适用场景 推荐Spring项目使用 需兼容Java EE或明确按名称注入时
5. 分布式锁场景及实现方式
常见使用场景:
- 秒杀系统扣减库存(防超卖)
- 定时任务集群防重复执行
- 分布式系统并发控制(如修改共享配置)
实现方式:
1. Redis分布式锁:
- 使用
"SET key value NX PX timeout"(原子操作)
- 需解决锁续期(如Redisson的WatchDog)和释放非自身锁的问题
2. ZooKeeper分布式锁:
- 基于临时顺序节点,最小节点获取锁
- 通过Watch机制监听节点删除
3. 数据库分布式锁:
- 基于唯一索引或乐观锁版本号
- 性能较低,适合并发量小的场景
4. Etcd分布式锁:基于Raft协议,强一致性
6. 多线程框架及CompletableFuture线程池
大任务拆分框架:
- Java原生:
"ExecutorService" +
"Future"
- CompletableFuture(推荐):支持异步回调、组合任务
- 并行流ParallelStream:底层使用ForkJoinPool
- 第三方框架:RxJava、Akka、Netty(事件驱动)
CompletableFuture线程池:
- 默认使用
"ForkJoinPool.commonPool()"(守护线程,核心数=CPU-1)
- 可通过
"supplyAsync(Supplier, Executor)"指定自定义线程池
- 注意:避免I/O密集型任务阻塞默认线程池,建议自定义线程池
7. Redis数据类型及数据结构设计
Redis数据类型:
- String(字符串)、List(列表)、Hash(哈希)、Set(集合)、ZSet(有序集合)
- 扩展类型:Bitmaps(位图)、HyperLogLog(基数统计)、Geospatial(地理空间)
跳表(SkipList)设计(ZSet底层实现之一):
- 多层索引结构,每层为有序链表
- 插入时随机生成层高(概率1/4晋升)
- 查询时间复杂度O(log n),空间复杂度O(n)
- 相比平衡树,实现简单且支持范围查询
布隆过滤器(Bloom Filter)设计:
- 位数组 + k个哈希函数
- 添加元素:计算k个哈希值,将对应位置1
- 判断存在:检查k个位置是否均为1(可能误判,但不会漏判)
- 优点:空间效率高;缺点:不支持删除,存在误判率
查看原帖
点赞 评论
相关推荐
西安中熔电气 管培生 22-24W,1.2Wx14-16+600x12(饭卡补助)+单项奖 硕士211 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# xx岗简历求拷打 #
1181次浏览 17人参与
# 金三银四,你有感觉到吗 #
686404次浏览 6059人参与
# 有转正机会的小厂实习值得去吗? #
2132次浏览 32人参与
# 哪些公司开春招了? #
27902次浏览 188人参与
# 你最讨厌面试被问什么 #
3144次浏览 39人参与
# 2024开工大吉 #
26677次浏览 102人参与
# 机械制造2024笔面经 #
1540015次浏览 13005人参与
# 秋招踩过的“雷”,希望你别再踩 #
186922次浏览 1690人参与
# 毕业季等于分手季吗 #
54303次浏览 648人参与
# 牛客租房专区 #
156196次浏览 1728人参与
# 文科生还参加今年的春招吗 #
12944次浏览 98人参与
# 找工作中的小确幸 #
81417次浏览 451人参与
# 你的秋招第一场笔试是哪家 #
291644次浏览 2082人参与
# 实习越久越好,还是多多益善? #
77933次浏览 343人参与
# 找实习多的是你不知道的事 #
1804981次浏览 20688人参与
# 大家每天通勤多久? #
85788次浏览 806人参与
# 26届的你,投了哪些公司? #
256210次浏览 1685人参与
# 如何缓解入职前的焦虑 #
260901次浏览 1466人参与
# 记录实习开销 #
186836次浏览 941人参与
# 正在实习的你,几点下班 #
299254次浏览 2180人参与
查看1道真题和解析