首页 > 其他分享 >一线大厂面试真题--对双亲委派的理解

一线大厂面试真题--对双亲委派的理解

时间:2024-01-14 12:33:46浏览次数:32  
标签:层级 java 真题 -- ClassLoader jar 大厂 class 加载

首先,简单说一下类的加载机制(如图),就是我们自己写的java源文件到最终运行,必须要经过编译和类加载两个阶段。

编译的过程就是把.java文件编译成.class文件。

类加载的过程,就是把class文件装载到JVM内存中,装载完成以后就会得到一个Class对象,我们就可以使用new关键字来实例化这个对象。

一线大厂面试真题--对双亲委派的理解_加载器


(如图)而类的加载过程,需要涉及到类加载器。

JVM在运行的时候,会产生3个类加载器,这三个类加载器组成了一个层级关系每个类加载器分别去加载不同作用范围的jar包,比如:

   1、Bootstrap ClassLoader,主要是负责Java核心类库的加载,也就是%{JDK_HOME}\lib下的rt.jar、resources.jar等

   2、Extension ClassLoader,主要负责%{JDK_HOME}\lib\ext目录下的jar包和class文件。

   3、Application ClassLoader,主要负责当前应用里面的classpath下的所有jar包和类文件。

除了系统自己提供的类加载器以外,还可以通过ClassLoader类实现自定义加载器,去满足一些特殊场景的需求。


一线大厂面试真题--对双亲委派的理解_加载器_02


(如图)所谓的父委托模型,就是按照类加载器的层级关系,逐层进行委派。

比如当需要加载一个class文件的时候,首先会把这个class的查询和加载委派给父加载器去执行,如果父加载器都无法加载,再尝试自己来加载这个class。

一线大厂面试真题--对双亲委派的理解_加载器_03


这样设计的好处有两个:

1.安全性,因为这种层级关系实际上代表的是一种优先级,也就是所有的类的加载,优先给Bootstrap ClassLoader。那对于核心类库中的类,就没办法去破坏,比如自己写一个java.lang.String,最终还是会交给启动类加载器。再加上每个类加载器的作用范围,那么自己写的java.lang.String就没办法去覆盖类库中类。

2.我认为这种层级关系的设计,可以避免重复加载导致程序混乱的问题,因为如果父加载器已经加载过了,那么子类就没必要去加载了。

标签:层级,java,真题,--,ClassLoader,jar,大厂,class,加载
From: https://blog.51cto.com/u_2325151/9240339

相关文章

  • 基于SSM的培训学校网站的设计与开发
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对培训学校展示信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用金旗帜文化培训学校网站可以有效管理,使信......
  • P9816 少项式复合幂 题解
    题目链接:少项式复合幂注意到题目的模并不是很大,我们考虑两个核心的性质。\(f(f(x))\bmodp=f(f(x)\bmodp)\bmodp\),证明直接代入\(f(x)\)进去得到:\(f(f(x))=a_0\timesf^0(x)+a_1\timesf^1(x)...+a_n\timesf^n(x)\bmodp=\)\[\sum_{i=0}^{n}a_i\timesf^{i}(x)\b......
  • 一线大厂面试真题--CPU飙高系统反应慢怎么排查
    问题解答四个方面来回答:CPU是整个电脑的核心计算资源,对于一个应用进程来说,CPU的最小执行单元是线程。导致CPU飙高的原因有几个方面:a.CPU上下文切换过多,对于CPU来说,同一时刻下每个CPU核心只能运行一个线程,如果有多个线程要执行,CPU只能通过上下文切换的方式来执行不同的线程......
  • 基于SSM的在线房屋租赁和电子签约系统
    随着信息技术在管理上越来越深入而广泛的应用,实现在线房屋租赁和电子签约系统的设计与实现在技术上已成熟。本文介绍了在线房屋租赁和电子签约系统的设计与实现的开发全过程。通过分析企业对于在线房屋租赁和电子签约系统的设计与实现的需求,创建了一个计算机管理在线房屋租赁和电子......
  • 无涯教程-LISP - 输入&输出
    常见的LISP提供许多输入输出函数,我们已经使用了格式化函数和打印函数进行输出,在本节中,我们将研究LISP中提供的一些最常用的输入输出函数。Read函数下表提供了LISP最常用的输入函数-Sr.No.Function&描述1read&optionalinput-streameof-error-peof-valuerecursive-p......
  • React 系列 useImperativeHandle
    ReactHooks为我们提供了一种全新的方式来处理组件的状态和生命周期。其中,useImperativeHandle 是一个相对较少被提及的Hook,但在某些场景下,它是非常有用的。本文将深入探讨 useImperativeHandle 的用法,并通过实例来加深理解。什么是 useImperativeHandle?useImperativeHandle......
  • 性能篇:深入源码解析和性能测试arraylist和LinkedList差异!
    嗨,大家好,我是小米!今天我们要谈论的是Java中两个常用的集合类:ArrayList和LinkedList。大家都知道,这两者在新增和删除元素的操作上有一些差异,那么它们究竟在性能上有何表现呢?我们通过深入源码解析和性能测试来一探究竟!ArrayList新增元素到末尾这是最常见的新增元素操作,我们使用......
  • Oracle怎样写一个sql,将一个不同的表结构的数据迁移到另一个表中,其中有字段需要有映射
    要将一个表的数据迁移到另一个表,并且需要进行字段映射和值转换,可以使用以下步骤:创建目标表:CREATETABLE目标表名(目标字段1数据类型,目标字段2数据类型,...);插入数据并进行字段映射和值转换:INSERTINTO目标表名(目标字段1,目标字段2,...)SELECTCASEWH......
  • # yyds干货盘点 # 盘点一个AI解答疑难代码的问题
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas代码解读的问题,问题如下:df_in=df[df['入/出'].eq('入')],我也不懂eq啥意思?感觉这代码还可以写成df[df['入/出']=='入'],这两段一个意思吧。答:eq就是=,就是你说的这个。二、实现过程后来【论草莓如......
  • 动态链接库的生成和使用
    1、当前目录/home/xuanmiao/Demo/LSPT/Test创建文件prime.h和prime.cprime.hintisprime(longintnumber);prime.cintisprime(longintnumber){longintj;intprime=1;/*Testifthenumberisdivisible,starting*from2*/for(j=2;......