面试题:双亲委派机制

定义:
当一个类加载器收到了类加载的请求的时候,他不会直接去加载指定的类,而是把这个请求委托给自己的父加载器去加载。只有父加载器无法加载这个类的时候,才会由当前这个加载器来负责类的加载。
双亲委派机制的意义:
1、通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。
2、通过双亲委派的方式,还保证了安全性。因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。那么,就可以避免有人自定义一个有破坏功能的java.lang.Integer被加载。这样可以有效的防止核心Java API被篡改。
为什么需要破坏双亲委派机制?
双亲委派机制有他存在的意义,不过也存在许多场景是需要破坏这个机制的,所以双亲委派机制也非必然。比如 tomcat web容器里面部署了很多的应用程序,但是这些应用程序对于第三方类库的依赖版本却不一样,但这些第三方类库的路径又是一样的,如果采用默认的双亲委派类加载机制,那么是无法加载多个相同的类。所以,Tomcat破坏双亲委派原则,提供隔离的机制,为每个web容器单独提供一个WebAppClassLoader加载器。




全部评论
双亲委派机制是类似啃老,先委派父类类加载,如果父类委派不超过,就只能子类自己加载。优点就是父类加载过不用重复加载。破坏是因为业务场景需要加载多个相同的类
点赞 回复 分享
发布于 2024-03-08 12:16 辽宁

相关推荐

一、开场与项目基础先做个自我介绍。为什么用消息订阅异步落库,而不是同步写库?系统峰值大概在什么级别?有考虑过为什么库支撑不了吗?二、消息队列可靠性MQ 写失败了,怎么保证消息不丢?是先批量更新数据库,再写推送状态吗?先更新数据库再推送?如果推送状态写失败了会怎么办?可以支持重试吗?如果更新成功、推送也成功,重试一次会怎么样?会推两条吗?三、分布式锁项目里用的分布式锁具体怎么实现?锁是怎么释放的?锁过期时间设 30 天,30 天内重试会有什么问题?正常用 Redis 实现防并发的分布式锁,应该怎么实现?释放锁在哪里释放?正常请求结束后,在哪个环节释放锁?四、MySQL 优化线上一条 SQL 执行 5 秒,怎么优化?这 4 种 SQL case,哪些能命中索引,哪些命中不了?知道什么是 ICP 优化吗?五、高并发:商品超卖活动限量 100 件,说出三种防止超卖的方案,并对比优缺点。详细说下 Redis + DB 这种方案,怎么保证 Redis 和 DB 的一致性?这种方案和第二种 Redis + MQ 方案有区别吗?Redis + MQ 方式下,怎么保证 Redis 和 DB 的数据一致性?比如 Redis 扣减成功、MQ 写失败怎么办?如果加入对账机制,对账需要哪些数据?上游、下游分别要存哪些数据?六、大数据量分页与分库分表订单表 5000 万数据,分页查询怎么优化?订单表达到 1 亿条,单表查询越来越慢,怎么处理?水平分表具体怎么分?用户订单表,根据什么字段切分比较合适?七、数据库死锁数据库死锁产生的原因是什么?怎么避免?生产或日常开发中有没有遇到过死锁问题?八、Redis 缓存问题什么是缓存雪崩、缓存穿透、缓存击穿?分别怎么解决?九、缓存更新策略先更新数据库还是先更新 / 删除缓存?方案是什么?先更新 DB 再删缓存,那什么时候写缓存?十、限流方案实现严格一分钟内的请求限流,用 Redis 怎么做?还有其他限流方法吗?滑动窗口(ZSET)、令牌桶、漏桶这几种方案有什么区别?适用场景分别是什么?十一、前端基础前端平时有接触吗?比如 JS?什么是跨域?为什么会有跨域?怎么解决?了解 CSRF 攻击吗?怎么防御?防 CSRF 的 Token 怎么生成?十二、分布式事务了解什么是分布式事务吗?说一下两阶段提交。十三、算法题完成两道算法题,并讲解代码思路。十四、AI 工具与 Agent日常开发用过哪些 AI 工具?豆包帮你解决了什么问题?Cursor 是付费会员吗?怎么付费?AI 生成的代码怎么验证正确性?让 AI 写一个 Redis 分布式锁工具类,你会怎么描述需求、怎么写 Prompt?系统客服角色接入大模型做智能问答,整体架构和流程怎么设计?RAG 的整体流程是什么?一份文档怎么向量化接入?向量检索后,是把所有相关 wiki 都交给大模型吗?检索出的内容做精简压缩用什么实现?什么是 AI Agent?和普通写 Prompt 有什么区别?
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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