Loading

面试-jvm



字节

1B(字节) = 8 bit(比特/位)

基本数据类型

1.boolean
2.char 2B
3.byte 1B
4.short 2B
5.int 4B
6.long 6B
7.float 4B
8.double 8B

接口与抽象类

一个类可以 implement 多个接口 ,但只能extends一个抽象类

==与equals

== 判断地址
equals 类没有覆盖 equals() ⽅法。则通过 equals() ⽐᫾该类的两个对象时,等价于通过“”⽐这两个对象。
判断基本数据类型等于
,因为重写了equals方法
重写 equals 时必须重写 hashCode

== 基本类型比较值,引用类型比较内存地址
equal 只能是引用类型调用, 重写过比较值,没重写比较内存地址

jvm

方法区(永久代/元空间)类信息 静态变量、常量
堆 实例对象

本地法栈 c语言方法
虚拟机栈 每个线程会创建一个虚拟机栈 每个方法会创建一个栈帧 每个栈帧包含局部变量表、操作数栈、常
量池引⽤等信息。
程序计数器 程序执行到哪一行

老年代 2/3 新生代1/3 伊甸区8/10 from1/10 to 1/10

引用计数法 和 可达性分析算法
强引用 、软引用 、 弱引用 、虚引用

  • 标记清除
  • 标记复制 年轻代
  • 标记整理
    垃圾收集器:CMS 和 G1 Serial、ParNew

类加载机制

双亲委派模型

Java 内存模型与线程
volatile 可见性和有序性 只能用于变量
synchronized 原子性,可见性

线程安全与锁优化
互斥同步、非阻塞同步

Java编译到执行的过程

编译->加载->解释->执行

编译:「语法分析」「语义分析」「注解处理」
比如对泛型的擦除和我们经常用的Lombok就是在编译阶段干的

加载 装载->连接->初始化

  • 装载: (装载时机->装载发生->装载规则)
    装载这个阶段它做的事情可以总结为:查找并加载类的二进制数据,在JVM「堆」中创建一个java.lang.Class类的对象,并将类相关的信息存储在JVM「方法区」中
    • 装载时机:
    • 装载发生: 双亲委派机制
      • 双亲委派机制
        根加载器(Bootstrp loader):java核心类库
        扩展加载器(ExtClassLoader ):扩展包类库
        系统加载器(AppClassLoader ):当前应用的classpath下的所有类
        自定义ClassLoader
        那只要我自定义个ClassLoader,重写loadClass方法(不依照往上开始寻找类加载器),那就算是打破双亲委派机制了。
    • 装载规则: JDK 中的本地方法类一般由根加载器(Bootstrp loader)装载,JDK 中内部实现的扩展类一般由扩展加载器(ExtClassLoader )实现装载,而程序中的类文件则由系统加载器(AppClassLoader )实现装载。
  • 连接: (验证->准备->解析)
    对class的信息进行验证、为「类变量」分配内存空间并对其赋默认值。
    • 验证: 验证类是否符合 Java 规范和 JVM 规范
    • 准备:为类的静态变量分配内存,初始化为系统的初始值
    • 解析:将符号引用转为直接引用的过程
  • 初始化:为类的静态变量赋予正确的初始值。
    • 收集class的静态变量、静态代码块、静态方法至()方法
    • 执行构造器
    • 为静态数据赋值

解释:把字节码转换为操作系统识别的指令
在解释阶段会有两种方式把字节码信息解释成机器指令码,一个是字节码解释器、一个是即时编译器(JIT)。

  • 直接解释
  • 编译解释

执行:操作系统把解释器解析出来的指令码,调用系统的硬件执行最终的程序指令。

认证授权

cookie 浏览器保存
session 服务器保存,传一个sessionId给cookie
token ⼀般会选择存放在浏览器的cookie 或 local storage 中 能解决CSRF(Cross Site Request Forgery)⼀般被翻译为 跨站请求伪造
不论是 Cookie 还是 token 都⽆法避免跨站脚本攻击(Cross Site Scripting)XSS。
JWT
JWT 由 3 部分构成:

  1. Header :描述 JWT 的元数据。定义了⽣成签名的算法以及 Token 的类型。
  2. Payload(负载):⽤来存放实际需要传递的数据
  3. Signature(签名):服务器通过 Payload 、 Header 和⼀个密钥( secret )使⽤ Header ⾥⾯指
    定的签名算法(默认是 HMAC SHA256)⽣成。

在基于 Token 进⾏身份验证的的应⽤程序中,服务器通过 Payload 、 Header 和⼀个密钥( secret )创
建令牌( Token )并将 Token 发送给客户端,客户端将 Token 保存在 Cookie 或者 localStorage
⾥⾯,以后客户端发出的所有请求都会携带这个令牌。你可以把它放在 Cookie ⾥⾯⾃动发送,但是这
样不能跨域,所以更好的做法是放在 HTTP Header 的 Authorization字段中: Authorization: Bearer
Token 。

主题模型

加粗
颜色

  • 无序列表
    • b
      • c
  • d
    • ds
      • dasdd-
posted @ 2023-04-13 23:29  风萧萧5  阅读(13)  评论(1编辑  收藏  举报