第29周 面试题精讲(1)

Java面试笔试高频问题详解

一、静态变量和实例变量有啥不一样

区别角度静态变量实例变量
内存分配类第一次加载时分配内存,位于方法区对象实例化时分配内存,位于堆中
生存周期类加载后一直存在,几乎不被垃圾回收取决于对象生命周期,对象失去引用后可被垃圾回收
调用方式使用类名直接访问(类名.静态变量名)需要通过对象实例访问(对象实例.实例变量名)
所属关系属于类对象,所有实例共享属于具体类实例化后的对象,各对象独立拥有
共享方式全局唯一一份,写操作会影响其他访问对象独占,只有对象的持有者才可以进行实例变量的读写访问
访问限制静态成员不能访问非静态成员非静态成员可以访问静态成员

二、==equalshashCode 到底有啥不同

区别角度==equalshashCode
作用比较两个对象的内存地址是否相同比较两个对象的值是否相同返回对象的哈希码,用于哈希集合中快速定位对象
使用场景判断两个引用是否指向同一个对象判断两个对象的值是否相等在哈希表中用于快速定位对象
相互关系如果两个对象equals相等,它们的hashCode必须相等;反之不一定成立如果两个对象equals不相等,它们的hashCode可能相等,也可能不等如果两个对象hashCode相等,它们的equals不一定相等;反之一定不相等

三、深复制和浅复制有啥区别

区别角度浅复制深复制
复制范围只复制对象本身,不复制引用对象完全复制对象及其引用的所有对象
对象关联复制后的对象与原对象共享引用对象复制后的对象与原对象无关联
实现难度实现简单,Java默认提供clone()方法实现复杂,通常需要手动实现或借助工具(如JSON序列化与反序列化)
内存占用内存占用相对较小,因为共享引用对象内存占用较大,因为完全复制了所有对象
使用场景对象之间可以共享引用对象,且不需要完全独立时使用需要完全独立的对象副本,且不希望对象之间有任何关联时使用

四、thissuper 关键字有啥不一样

区别角度thissuper
作用代表当前实例对象代表父类对象
访问属性/方法访问本类属性或方法,若本类无则查找父类直接访问父类属性或方法
构造方法使用构造方法中调用本类其他构造器,必须位于首行构造方法中调用父类构造器,必须位于首行
特殊用法可作为方法返回值返回当前对象无此类用法

五、Java代码执行顺序示例

class C1 {
    static { System.out.println("C1A"); }
    { System.out.println("C1B"); }
    public C1() { System.out.println("C1C"); }
}

class C2 extends C1 {
    static { System.out.println("C2A"); }
    { System.out.println("C2B"); }
    public C2() { System.out.println("C2C"); }
}

public class Main {
    public static void main(String[] args) {
        new C2();
    }
}

执行结果C1A C2A C1B C1C C2B C2C

六、为啥浮点型计算不精确,咋整

1. 原因

  • 浮点数在计算机里用二进制存,会有精度丢失。

2. 解决办法

  • BigDecimal来计算,它能精确到小数点后很多位。

七、Java虚拟机(JVM)是啥玩意儿

1. 类加载子系统

  • 负责把字节码文件加载进来。

2. 运行时数据区

  • 线程共享区:堆(存对象)和方法区(存类信息)。
  • 线程私有区:虚拟机栈(存方法调用信息)、程序计数器(记录执行位置)、本地方法栈(存本地方法调用信息)。

3. 执行引擎

  • 把字节码翻译成机器码执行。

八、Java垃圾回收算法有啥

1. 标记-清除算法

  • 先标记垃圾对象,再清除。

2. 复制算法

  • 把内存分成两块,用一块,回收时复制存活对象到另一块。

3. 标记-整理算法

  • 标记垃圾对象,把存活对象往一边挪,清理边界外的垃圾。

九、Java内存泄露有啥场景

1. 静态集合类

  • 静态集合长期持有对象引用,对象无法被回收。

2. 未释放的连接/IO

  • 比如数据库连接没关,一直占着资源。

3. 不合理的变量作用域

  • 变量作用域太大,用完没释放。

4. 未设置过期的缓存

  • 缓存一直增长,占满内存。

5. 交叉引用/循环引用

  • 对象互相引用,作用周期长,无法被回收。

6. 单例模式

  • 单例持有大量数据,无法释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值