
知识点总结
知识点总结
HLJ洛神千羽
黑大-21-软件-刘贺
展开
-
instanceof 关键字的作用
其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接 或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能 确定类型,则通过编译,具体看运行时定。原创 2023-08-08 10:56:12 · 89 阅读 · 0 评论 -
JWT鉴权
一、JWTJSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。1.头部(Header)头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。这也可以被表示成一个JSON对象。在头部指明了签名算法是HS256算法。我们进行BASE64编码,编码后的字符串如下:2.载荷(playload)原创 2024-07-31 15:47:18 · 399 阅读 · 0 评论 -
JVM知识点汇总
解释/编译/混合模式的优缺点,Java7提供的分层编译技术,JIT即时编译技术,OSR栈上替 换,C1/C2编译器针对的场景,C2针对的是server模式,优化更激进.新技术方面Java10的graal编译器。其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化 和执行模式部分偏向于理论基础,重点掌握知识点.常有JVM优化参数作用,参数调优的依据,常用的JVM分析工具能分析哪些问题以及使用方法.javac的编译过程,ast抽象语法树,编译器优化和运行器优化.原创 2023-08-08 16:08:17 · 58 阅读 · 0 评论 -
说说类加载与卸载
roots标记:标记root对象,会StopTheWorld. 并发标记:利用读屏障与应用线程一起运行标记,可能 会发生StopTheWorld. 清除会清理标记为不可用的对象. roots重定位:是对存活的对象进行移动,以 腾出大块内存空间,减少碎片产生.重定位最开始会StopTheWorld,却决于重定位集与对象总活动集的 比例. 并发重定位与并发标记类似.触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时 候,或者某个子类初始化的时候.原创 2023-08-08 16:42:32 · 153 阅读 · 0 评论 -
JVM知识点详解
JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,几乎所欲的对象实例都会放在这里, 当堆没有可用空间时,会抛出OOM异常.根据对象的存活周期不同,JVM把对象进行分代管理,由垃圾回 收器进行垃圾的回收管理。又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方 法出口等信息.调用方法时执行入栈,方法返回式执行出栈.保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行 Native方法时,程序计数器为空.原创 2023-08-08 16:35:41 · 74 阅读 · 0 评论 -
Eureka注册中心
找到 VM options,不同版本界面可能不相同,添加 -Dserver.port配置端口。先启动注册中心,然后启动服务提供者,然后查看注册中心能看到服务提供者即为成功。多次刷新,访问的提供者是随机的,可以通过端口判断。访问消费者的test接口。启动多个server。原创 2024-07-21 23:41:06 · 689 阅读 · 0 评论 -
类的生命周期
类的生命周期包括这几个部分,加载、连接、初始化、使用和卸载,其中前三部是类的加载的过程, 如下图:原创 2023-08-10 13:35:52 · 97 阅读 · 0 评论 -
说说Java对象创建过程
1.JVM遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符 号引用。然后加载这个类2.为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,最终常用的办法“本地线程缓冲分 配(TLAB)”3.将除对象头外的对象内存空间初始化为04.对对象头进行必要设置原创 2023-08-10 13:33:17 · 81 阅读 · 0 评论 -
描述一下JVM加载class文件的原理机制
JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要 的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。类的加载是由类加载器完成的,类加载器包括:根加载(BootStrap)、扩展加载器 (Extension)、系统加载器(System)和用户自定义类加载(java.lang.ClassLoader的子类)。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加 载。原创 2023-08-10 13:32:00 · 78 阅读 · 0 评论 -
说说对象分配规则
每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小, 如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查 HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次 Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达 到阀值对象进入老年区。原创 2023-08-10 13:30:16 · 78 阅读 · 0 评论 -
Java内存结构
方法区和对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有 的内存区域。原创 2023-08-10 13:24:34 · 84 阅读 · 0 评论 -
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字 节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独 重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特 性。原创 2023-08-10 13:22:49 · 57 阅读 · 0 评论 -
什么时候会触发FullGC
除直接调用System.gc外,触发Full GC执行的情况有如下四种。原创 2023-08-10 13:21:59 · 1679 阅读 · 0 评论 -
说说堆和栈的区别
栈是运行时单位,代表着逻辑,内含基本数据类型和堆中对象引用,所在区域连续,没有碎片;堆 是存储单位,代表着数据,可被多个栈共享(包括成员中基本数据类型、引用和引用对象),所在 区域不连续,会有碎片。原创 2023-08-10 13:14:43 · 65 阅读 · 0 评论 -
JVM的内存模型简述
JVM定义了不同运行时数据区,他们是用来执行应用程序的。某些区域随着JVM启动及销毁,另外一 些区域的数据是线程性独立的,随着线程创建和销毁。jvm内存模型总体架构图如下:(摘自oracle 官方网站)JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建 销毁时间。如下图所示,可以分为两大部分,线程私有区和共享区。下图是根据自己理解画的一个 JVM内存模型架构图:JVM内存分为线程私有区和线程共享区。原创 2023-08-10 13:10:53 · 185 阅读 · 1 评论 -
如果一个对象变成垃圾对象,被垃圾回收器回收了,那么它其中静态类型的引用对象会被回收吗?原因?
如果一个对象变成垃圾对象,被垃圾回收器回收了,那么它其中静态类型的引用对象会被回收吗?答:不会被回收,原因是和类绑定在一起。什么时候类没有了,对应类的静态的属性也就没有了。原创 2023-08-07 09:46:44 · 206 阅读 · 1 评论 -
String str = new String(“abc”) 创建几个对象?
String str = new String("abc") 创建几个对象?答: 两个对象 一个在堆中创建 一个常量池中。原创 2023-08-07 13:27:12 · 188 阅读 · 1 评论 -
对象的创建是需要构造方法执行完毕后,才有对象吗?
当new关键字执行的时候就有对象了,创建完成后,对象中的属性都是默认值。使用构造方法对默认值进行初始化操作。对象的创建是需要构造方法执行完毕后,才有对象吗?原创 2023-08-07 09:41:38 · 141 阅读 · 1 评论 -
抽象方法和抽象类的关系
3.当子类是抽象类,继承了抽象类,那么子类既可以实现抽象方法,也可以不实现。2.当一个非抽象类继承了抽象类,那么非抽象类必须实现抽象类中的抽象方法。答:1.抽象类中可以没有抽象方法,抽象方法必须位于抽象类中。4.抽象类可以有构造方法。原创 2023-08-07 09:50:19 · 329 阅读 · 1 评论 -
String str1 = “abc“; String str2 = “ab“ + “c“; str1==str2是true吗?原因?
因为String str2 = "ab" + "c"会查找常量池中时候存在内容为"abc"字符串对象,如存在则直接让str2引用该对象,显然String str1 = "abc"的时候,上面说了,会在常量池中创建"abc"对象,所以str1引用该对象,str2也引用该对象,所以str1==str2。str1==str2是true吗?原创 2023-08-07 13:30:12 · 189 阅读 · 1 评论 -
String str1 = “abc“; String str2 = “ab“; String str3 = str2 + “c“; str1==str3是false吗?原因?
因为String str3 = str2 + "c"涉及到变量(不全是常量)的相加,所以会生成新的对象,其内部实现是先new一个StringBuilder,然后 append(str2),append("c");然后让str3引用toString() 返回的对象。str1==str3是false吗?原创 2023-08-07 13:32:35 · 142 阅读 · 1 评论 -
Java语言有哪些特点
2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)1、简单易学、有丰富的类库。原创 2023-08-08 10:50:50 · 52 阅读 · 0 评论 -
面向对象和面向过程的区别
面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤, 而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特 性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。但是性能上来说,比面向过程要 低。面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一 一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发。原创 2023-08-08 10:51:59 · 54 阅读 · 0 评论 -
实参与形参
4.实参对应位置的参数的数据类型和形参对应位置的参数的数据类型保持一致。5.基本数据类型的参数: 对形参的改变,不影响实际的值。6.引用数据类型的参数: 对形参的改变,会影响实际的值。1.形参:在方法定义的时候创建的参数。2.实参:在方法调用的时候传入的参数。3.实参的个数和形参的个数一致。原创 2023-08-07 09:38:44 · 112 阅读 · 1 评论