Java面试题

一、Java基础

基础概念与常识java语言有哪些特点?

1.面向对象

  • 支持封装继承和多态三大特性
  • 代码以类和对象为组织单位
  • 示例
public class ask{
    public void sound() {
        System.out.println("你好吗");
    }
}

public class speak extends Animal {
    @Override
    public void sound() {
        System.out.println("我很好");
    }
}

2.平台无关性(write once ,run anywhere)

  • 通过java虚拟机jvm实现跨平台
  • 编译后的字节码可以在不同操作系统运行
  • 依赖jvm的版本兼容性保证

3.强类型语言

  • 所有变量必须先声明类型
  • 编译时进行严格类型检查
  • 示例
java
int number = 10;//正确
number = "text";//错误

4.自动内存管理

  • 通过垃圾回收(gc)机制回收无用对象
  • 减少手动内存管理带来的内存泄露风险
  • 但需要注意避免内存溢出(OOM)问题

5.多线程支持

  • 内置对多线程编程的支持
  • 通过Thread类或Runnable接口创建线程
  • 提供synchronized和Lock实现同步机制
  • 示例
public class MyThread implements Runnable{
    @Override
    public void run (){
        System.out.println("线程正在进行");
    }
}

6.安全性

  • 提供沙箱机制限制代码访问权限
  • 强制类型检查和边界检查
  • 广泛用于安全敏感领域(如金融、医疗)

7.丰富的类库

  • 标准库提供大量功能组件
  • 涵盖网络、IO、集合、并发等领域
  • 第三方库生态成熟(如 Spring、Hibernate)

8.编译与解释并存

  • 源码先编译为字节码(.class 文件)
  • 字节码由 JVM 解释执行
  • 热点代码通过 JIT 编译器优化

9.分布式支持

  • 原生支持远程方法调用(RMI)
  • 易于构建分布式系统
  • 广泛应用于企业级分布式架构

10.健壮性

强调错误检查和异常处理

通过try-catch-finally 机制管理异常

示例

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("除数不能为零");
}

11.静态类型语言

  • 编译时确定变量类型
  • 提供更好的代码可靠性和IDE支持
  • 与动态类型语言(如Python)形成对比

12.开源与社区支持

  • 采用开源许可(GPL/LGPL)
  • 庞大的开发者社区和丰富的学习资源
  • 持续更新和演进(Java 17/21等LTS版本)

        这些特点共同使得Java成为企业级应用开发、Android应用开发、大数据处理等领域的首选语言之一。

拓展一下

“Write Once,Run Anywhere (一次编写,随处运行)” 这句宣传口号,真心经典流传了好多年!以至于直到今天,依然有很多人觉得跨平台是Java语言最大的优势。实际上,跨平台已经不是Java最大的卖点了,各种JDK新特性也不是。目前市面上虚拟化技术已经非常成熟,比如你通过docker就很容易实现跨平台了。在我看来,Java强大的生态才是!

1.1、Java SE VS JavaEE

Java SE(Java Platfrom,Standard Edition) :Java 平台标准版,Java编程语言的基础,它包含了支持Java应用程序开发和运行核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。

Java EE(Java Platform ,Enterprise Edition):Java 平台企业版,建立在Java SE的基础上,包含了支持企业级应用程序开发和部署的标准和规范(比如 Servlet、JSP、EJB、JDBC、JPA、JTA、JavaMail、JMS)。JavaEE 可以用于构建分布式、可移植、健壮、可伸缩和安全的服务端Java应用程序,例如Web应用程序。

运行在 Java 虚拟机之上的编程语言JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM 规范的一种实现而已。除了我们平时最常用的 HotSpot VM 外,还有 J9 VM、Zing VM、JRockit VM 等 JVM 。维基百科上就有常见 JVM 的对比:Comparison of Java virtual machinesopen in new window ,感兴趣的可以去看看。并且,你可以在 Java SE Specificationsopen in new window 上找到各个版本的 JDK 对应的 JVM 规范。

JDK 和 JRE
JDK(Java Development Kit),它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。

JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。

也就是说,JRE 是 Java 运行时环境,仅包含 Java 应用程序的运行时环境和必要的类库。而 JDK 则包含了 JRE,同时还包括了 javac、javadoc、jdb、jconsole、javap 等工具,可以用于 Java 应用程序的开发和调试。如果需要进行 Java 编程工作,比如编写和编译 Java 程序、使用 Java API 文档等,就需要安装 JDK。而对于某些需要使用 Java 特性的应用程序,如 JSP 转换为 Java Servlet、使用反射等,也需要 JDK 来编译和运行 Java 代码。因此,即使不打算进行 Java 应用程序的开发工作,也有可能需要安装 JDK。

不过,从 JDK 9 开始,就不需要区分 JDK 和 JRE 的关系了,取而代之的是模块系统(JDK 被重新组织成 94 个模块)+ jlinkopen in new window 工具 (随 Java 9 一起发布的新命令行工具,用于生成自定义 Java 运行时映像,该映像仅包含给定应用程序所需的模块) 。并且,从 JDK 11 开始,Oracle 不再提供单独的 JRE 下载。

在 Java 9 新特性概览open in new window这篇文章中,我在介绍模块化系统的时候提到:

在引入了模块系统之后,JDK 被重新组织成 94 个模块。Java 应用可以通过新增的 jlink 工具,创建出只包含所依赖的 JDK 模块的自定义运行时镜像。这样可以极大的减少 Java 运行时环境的大小。

也就是说,可以用 jlink 根据自己的需求,创建一个更小的 runtime(运行时),而不是不管什么应用,都是同样的 JRE。

定制的、模块化的 Java 运行时映像有助于简化 Java 应用的部署和节省内存并增强安全性和可维护性。这对于满足现代应用程序架构的需求,如虚拟化、容器化、微服务和云原生开发,是非常重要的。

1.3、什么是字节码?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值