摘要:
1)a = a + b 与 a += b 的区别 += 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作 (因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值 阅读全文
摘要:
1)如何判断一个对象是否已经死去? 引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。 可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链 阅读全文
摘要:
0)在了解jvm内存之前先明白什么是jvm JVM,即 Java Virtual Machine,Java 虚拟机。它通过模拟一个计算机来达到一个计算机所具有的的计算功能。JVM 能够跨计算机体系结构(跨平台)来执行 Java 字节码,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件或者硬件之间 阅读全文
摘要:
简述一下 Java 中创建一个对象的过程? 类的生命周期 解析:回答这个问题首先就要清楚类的生命周期 下图展示的是类的生命周期流向: Java中对象的创建就是在堆上分配内存空间的过程,此处说的对象创建仅限于new关键字创建的普通Java对象,不包括数组对象的创建。 对象创建过程 1.检测类是否被加载 阅读全文
摘要:
解析:类的加载过程采用双亲委派机制,这种机制能更好的保证 Java 平台的安全性 类加载器 ClassLoader 是具有层次结构的,也就是父子关系,其中,Bootstrap 是所有类加载器的父亲,如下图所示: 该模型要求除了顶层的 Bootstrap class loader 启动类加载器外,其余 阅读全文
摘要:
一、 消息队列 1. 分布式应用与集群的区别: 如果是一个业务被拆分成多个子业务部署在不同的服务器上,那就是分布式应用;如果是同一个业务部署在多台服务器上,那就是集群。 2. 系统间通信方式: 一种是基于远程过程调用的方式(如RPC调用);另一种是基于消息队列的方式。 二、RabbitMQ 1.Ra 阅读全文
摘要:
Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式 jdk动态代理和CGLib 两者对比: JDK动态代理是面向接口的。利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类 CGLib动态代理是通过字节码底层继承 阅读全文