字节实习Java后端二面 45min

1.项目介绍
2.实习项目细节拷打(问了需求里的功能指标怎么做的,上线流程是怎么做的,上线是否存在问题等)
3.Spring的AOP是什么?底层是怎么实现的?
4.你用过Spring有哪些注解?@Autowired和@Resource的区别是什么?
5.项目有哪些场景使用了分布式锁?还知道其他分布式锁的实现方式吗?
6.大任务拆分为多个小任务执行可以使用什么多线程框架?CompletableFuture有线程池吗?
7.redis有哪些数据类型?跳表是怎么设计的?布隆过滤器怎么设计的?
8.简历上算法专利细节提问和论文算法实现细节提问
9.算法题:链表重排
全部评论
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(可能误判,但不会漏判) - 优点:空间效率高;缺点:不支持删除,存在误判率
点赞 回复 分享
发布于 今天 13:51 安徽
mark
点赞 回复 分享
发布于 2025-12-31 17:36 北京
mark
点赞 回复 分享
发布于 2025-12-31 17:36 北京
能说清底层实现的才是真有技术积累
点赞 回复 分享
发布于 2025-12-31 15:57 北京
mark
点赞 回复 分享
发布于 2025-12-31 15:56 广东

相关推荐

不愿透露姓名的神秘牛友
昨天 09:53
西安中熔电气 管培生 22-24W,1.2Wx14-16+600x12(饭卡补助)+单项奖 硕士211
点赞 评论 收藏
分享
评论
3
18
分享

创作者周榜

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