当前位置:首页 > 技术 > 正文内容

Java核心概念与常见面试问题解析

访客 技术 2026年7月2日 1

equals()与hashCode()的关系

若两个对象通过equals()比较结果为true,则它们的hashCode()返回值必定相同。

然而,hashCode()相等并不意味着equals()一定返回true,因此仅依赖hashCode()进行比较并不可靠。

Java类的初始化顺序

Java类的加载和初始化遵循特定顺序:

  • 父类静态变量
  • 父类静态代码块
  • 子类静态变量
  • 子类静态代码块
  • 父类实例变量
  • 父类实例代码块
  • 父类构造方法
  • 子类实例变量
  • 子类实例代码块
  • 子类构造方法

Java跨平台特性的本质

Java的跨平台能力源于JVM(Java虚拟机),它能够执行编译后的.class字节码文件,而非直接运行.java源文件。

数组复制方法性能对比

不同复制方式的效率排序为:System.arraycopy > clone > Arrays.copyOf > for循环

Object类的核心方法

Object类方法

抽象类与接口的访问权限演变

抽象类方法权限:

  • JDK 1.8之前:默认为protected
  • JDK 1.8及以后:默认为包访问权限(default)

接口方法权限:

  • JDK 1.8之前:必须为public
  • JDK 1.8:支持public和default方法
  • JDK 1.9:新增private方法支持

变量初始化规则

以下代码无法通过编译:

public class Example {
    public static void main(String[] args) {
        String s;
        System.out.println("s=" + s); // 编译错误:变量s未初始化
    }
}

局部变量必须在使用前显式初始化,而类成员变量会获得默认值。

异常分类体系

异常分类
  • Error:虚拟机级别的严重错误,通常无需应用程序处理
  • Exception:应用程序可处理的异常情况
  • 检查异常:编译器强制要求处理的异常(除RuntimeException及其子类外)
  • 非检查异常:包括RuntimeException和Error

for循环执行机制

标准for循环的执行流程:

for(初始化表达式; 条件表达式; 更新表达式) {
    循环体;
}
  1. 首次执行:初始化→条件判断→循环体→更新表达式
  2. 后续执行:条件判断→循环体→更新表达式

程序终止条件

JRE判定程序执行结束的标准是所有非守护线程执行完毕。

Java继承机制实现方式

Java通过以下方式实现类似多重继承的效果:

  1. 实现多个接口
  2. 继承一个类并实现多个接口
  3. 使用内部类继承其他类

变量初始化策略

  • 静态变量:自动获得默认值
  • 局部变量:必须手动初始化
  • final变量:必须显式赋值

接口成员特性

  • 方法默认为public abstract
  • 变量默认为public static final
  • JDK 1.8+支持default和static方法

常见运行时异常

  • NullPointerException:对象引用未初始化
  • NumberFormatException:数值格式转换失败
  • ArrayIndexOutOfBoundsException:数组索引越界

JVM内存区域划分

  • 线程私有:虚拟机栈、程序计数器、本地方法栈
  • 线程共享:堆内存、方法区

Vector与ArrayList对比

特性VectorArrayList
线程安全性同步(线程安全)非同步(线程不安全)
容量增长100%增长50%增长

Java程序执行流程

  1. 源码编译为字节码(.class文件)
  2. 字节码加载至JVM
  3. 执行引擎转换为机器码
  4. 操作系统执行机器码

可中断方法列表

可中断方法
  • Object.wait()
  • Thread.sleep()
  • Thread.join()

类初始化完整顺序

初始化顺序
  1. 父类静态代码块
  2. 子类静态代码块
  3. 父类实例代码块
  4. 父类构造方法
  5. 子类实例代码块
  6. 子类构造方法

MVC模式优势分析

采用MVC架构的优势包括:

  • 高可维护性
  • 良好可扩展性
  • 代码复用率高

但并不会显著减少代码总量。

垃圾回收机制

垃圾回收

数据库驱动加载方式

// 方式一
Class.forName("com.mysql.cj.jdbc.Driver");

// 方式二
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());

// 方式三
System.setProperty("jdbc.drivers", "com.mysql.cj.jdbc.Driver");

常用ASCII码值参考

  • 空格:32
  • 字符'0':48
  • 大写字母'A':65
  • 小写字母'a':97

构造方法调用规则

子类构造方法执行前必然调用父类构造方法:

  • 默认调用父类无参构造方法
  • 若父类无无参构造方法,子类必须显式调用super()

Java集合框架结构

集合框架

JDK工具集功能

  • javac:编译源代码
  • java:启动JVM执行程序
  • javadoc:生成API文档
  • jar:打包工具
  • jdb:调试器

Servlet生命周期

  1. 初始化:init()方法
  2. 服务:service()方法
  3. 销毁:destroy()方法

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。