重启人生计划-明确目标

🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳

如果你觉得这个【重启人生计划】对你也有一定的帮助,加入本专栏,开启新的训练计划,漫长成长路,千锤百炼,终飞升巅峰!无水文,不废话,唯有日以继日,终踏顶峰! ✨✨欢迎订阅本专栏✨✨

❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助! 愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海! ❤️❤️❤️

20201106-163936-6ac3-1723382006110.gif

🔥【重启人生计划】第零章序·大梦初醒🔥

序言

大家好,我是最爱吃鱼罐头,距离离职已经过去一个月了,目前进度为0,打算重新找工作倒计时30天,当然这其中也会去投递面试,如果有面试,当天的学习计划肯定或多或少会受到影响,只要做任何一件有利于自己重新找工作的事情,都是最好的。
下面后续大概都是以下面的形式出现:

  • 今日回顾:主要是自己做了些什么,以及明天待提升的地方;
  • 明日内容:主要包括了算法、面试等任务的公布。

今日回顾

今天的主要任务就是完成计划任务时间的安排以及思考后续的安排,主要也做了算法的计划表以及面试题的计划表。

给自己安排算法时间线:
image-20240731155017908-1723382052109.png

image-20240731155148037-1723382061109.png

给自己定了两轮算法(可能有些题目是没加上或者是少的,不要在意这些细节。),从基础到进阶,每天基本上都有3、4道题左右吧,后面会根据自己的进度,随时调整,如果你觉得当天的算法任务相对简单,可以直接做两天的算法任务。不过我希望的是,你不要一天就刷很多题,一下子把刷题的兴趣刷没了。

还有相对应面试题刷题策略 从基础 -->深入 -->中间件 -->项目,基本每天都得刷5道题以上,当然这个量肯定不够的,随着逐渐深入,还是得合并两三天的题目,来加快刷题进度,以及后续的题目得慢慢补充上。

image-20240731170858170-1723382078116.png

明日内容

基础面试题

下面的题目的答案是基于自己的理解和思考去编写出来的,也希望大家如果看到了,可以根据自己的理解去转换为自己的答案。

当然很多思考也有参考别人的成分,但是自己能讲述出来就是最棒的。

这里有一篇阿里的面试题

image-20240731170938804-1723382095111.png

类的加载过程

  • 加载:

    加载的主要任务是通过一个类的全限定名来获取这个类的二进制字节流,并通过这个字节流加载到方法区中,最后在堆中创建一个实例类对象作为方法区类元数据对外访问的入口。

  • 验证:

    当类加载到系统后,就会开始链接操作,而验证就是链接的第一步,验证的主要目的就是保证字节码文件的正确性和安全性,它会进行类的合法性校验,通常有文件格式验证、元数据验证、字节码验证和符号引用验证。

  • 准备:

    准备阶段的主要操作是为类的静态变量分配内存并进行默认初始化零值的操作,还有一些特殊情况,比如说被final修饰的类变量,可能在准备阶段就被显示赋值,最主要是通过类变量中的字段属性表中是否存在ConstantValue属性,如果存在就会被显示赋值。这个阶段并不会对非静态变量分配内存和默认初始化值。

  • 解析:

    解析阶段的主要操作就是将类的常量池内的符号引用转换为直接引用。

    符号引用是指用一组符号的形式可以定位到目标,而直接引用是指可以直接指向这个目标的内存地址。

  • 初始化:

    类的初始化阶段是类加载过程的最后一个步骤,初始化阶段的主要操作就是执行方法,进行类变量显示赋值的操作。也有一些情况不会生成方法,比如说:没有声明类变量、或者声明类变量了,没有赋值操作、或者被final修饰的一些情况,这些不会生成方法。

类加载机制和类加载器

类加载机制是JVM用于加载类文件到内存的中的核心机制,它采用了一种层级结构和双亲委派模型,确保类的唯一性和安全性。类加载器是类加载机制的前提,类加载器按照层级结构划分形成一个类加载器树,每个类加载器负责加载特定范围的类,通常可以分为以下几种类加载器:

  • 启动类加载器:Bootstrap ClassLoader ,它主要负责加载Java的核心类库,主要负责路径是jre/lib/rt.jar;
  • 扩展类加载器:Extension ClassLoader ,它主要负责加载路径是jre/lib/ext目录下的类库,它的父类加载器就是启动类加载器;
  • 应用程序加载器:Application ClassLoader,它主要负责加载用户路径是ClassPath下的类库,它的父类加载器是扩展类加载器;
  • 自定义加载器:User ClassLoader , 用户可以根据需要创建自己的类加载器,用来加载特定位置或方式的类库,来实现一些特定的需求。

双亲委派模型

双亲委派模型是类加载器机制的核心概念之一,它主要规定了类加载器之间的层级关系和加载类的顺序,核心思想是在加载类时优先将加载请求委派给父类加载器处理,只有在父类加载器无法加载时才由子类加载器尝试加载。这个模型主要目的和作用是确保了类的唯一性和安全性,避免类的重复加载。即便是不同的类加载器加载相同的类,它们也会被视为不同的类,因为每个类加载器都有自己的类命名空间。类命名空间是通过类加载器和类本身来定义组成。

破坏双亲委派模型

  • 可以自定义⼀个类加载器,重写loadClass方法;
  • Tomcat 可以加载自己目录下的 class 文件,并不会传递给父类的加载器;
  • Java 的 SPI,发起者 BootstrapClassLoader 已经是最上层了,它直接获取了 AppClassLoader 进行驱动加载,和双亲委派是相反的。

tomcat的类加载机制

tomcat的类加载过程有以下几个步骤:

  1. 先在本地cache查找该类是否已经加载过,看看 Tomcat 有没有加载过这个类。
  2. 如果Tomcat 没有加载过这个类,则从系统类加载器的cache中查找是否加载过。
  3. 如果没有加载过这个类,尝试用ExtClassLoader类加载器类加载,重点来了,这里并没有首先使用 AppClassLoader 来加载类。这个Tomcat 的 WebAPPClassLoader 违背了双亲委派机制,直接使用了 ExtClassLoader来加载类。这里注意 ExtClassLoader 双亲委派依然有效,ExtClassLoader 就会使用 Bootstrap ClassLoader 来对类进行加载,保证了 Jre 里面的核心类不会被重复加载。比如在 Web 中加载一个 Object 类。WebAppClassLoader → ExtClassLoader → Bootstrap ClassLoader,这个加载链,就保证了 Object 不会被重复加载。
  4. 如果 BoostrapClassLoader,没有加载成功,就会调用自己的 findClass 方法由自己来对类进行加载,findClass 加载类的地址是自己本 web 应用下的 class。
  5. 加载依然失败,才使用 AppClassLoader 继续加载。
  6. 都没有加载成功的话,抛出异常。

总结一下以上步骤,WebAppClassLoader 加载类的时候,故意打破了JVM 双亲委派机制,绕开了 AppClassLoader,直接先使用 ExtClassLoader 来加载类。

算法

明天的算法目标,个人目标重新跟着视频节奏重新刷一遍算法的视频教程,没有广告哈,个人只是觉着这个算法教程不错,分享一下而已。

可以稍微去刷两道简单的题目,需要具备一定的知识:哈希表、数组。

image-20240801170102952-1723382106107.png

加强面试题

这个暂时没想好,我给自己的想法是两倍速速刷一遍jvm的视频,从基础到高级,其中用面试题来加深印象。

🌸 完结

乘风破浪会有时 直挂云帆济沧海

希望从明天开始,一起加油努力吧,成就更好的自己。

🥂 虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!✨✨✨

💟 感谢各位看到这里!愿你韶华不负,青春无悔!让我们一起加油吧! 🌼🌼🌼

💖 学到这里,今天的世界打烊了,晚安!🌙🌙🌙

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最爱吃鱼罐头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值