面试真实经历某商银行大厂Java问题和答案总结(四)

Java 面试常见问题解析

Java 是一门被广泛应用于企业开发中的编程语言,了解其基本概念和常见技术点是 Java 面试中常见的题目。在本文中,我们将探讨一些 Java 面试中的常见问题,并提供简要的解答。​编辑


1. 举例9个运行时异常

在 Java 中,运行时异常是 RuntimeException 类及其子类抛出的异常,它们不要求在编译时进行捕获或声明抛出。​编辑

常见的运行时异常包括:

  1. NullPointerException :访问或操作一个为 null 的对象或数组。
    java String str = null; System.out.println(str.length()); // 会抛出 NullPointerException

  2. ArrayIndexOutOfBoundsException :访问数组时使用了非法的索引。
    java int[] arr = new int[3]; System.out.println(arr[5]); // 会抛出 ArrayIndexOutOfBoundsException

  3. ArithmeticException :发生算术运算错误,比如除以零。
    java int result = 10 / 0; // 会抛出 ArithmeticException

  4. ClassCastException :尝试将对象强制转换为不兼容的类型。​编辑
    java Object obj = new Integer(100); String str = (String) obj; // 会抛出 ClassCastException

  5. NumberFormatException :尝试将字符串转换为数字时格式不正确。
    java String str = "abc"; int num = Integer.parseInt(str); // 会抛出 NumberFormatException

  6. IndexOutOfBoundsException :访问集合时使用了非法的索引。
    java List<Integer> list = new ArrayList<>(); list.add(1); System.out.println(list.get(1)); // 会抛出 IndexOutOfBoundsException

  7. IllegalArgumentException :方法接收到不合法或不合适的参数时抛出。
    java public void setAge(int age) { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative"); } }

  8. UnsupportedOperationException :调用不支持的操作时抛出。
    java List<Integer> list = Collections.unmodifiableList(new ArrayList<>()); list.add(1); // 会抛出 UnsupportedOperationException

  9. ConcurrentModificationException :在遍历集合时,同时修改集合。
    java List<Integer> list = new ArrayList<>(); list.add(1); for (Integer num : list) { list.add(2); // 会抛出 ConcurrentModificationException }


2. Spring中的设计模式

Spring 框架在实现时使用了多个经典的设计模式,其中最重要的设计模式之一是 单例模式 (Singleton)

  • 单例模式 (Singleton) :在 Spring 中,默认情况下,所有的 Bean 都是单例模式。也就是说,Spring 容器中每个 Bean 只有一个实例,在整个应用程序中共享。
    • 例如,Spring 中的 ApplicationContext 是一个典型的单例模式,它在整个应用程序的生命周期中仅创建一次,并供各个组件共享。

3. 重载和重写有什么区别

  • 重载 (Overloading) :同一个类中,方法名相同,但参数列表不同。重载发生在编译时,编译器根据方法的参数个数、类型或顺序来区分。

    java public class Demo { public void display(int a) { System.out.println("Integer: " + a); } public void display(String a) { System.out.println("String: " + a); } }

  • 重写 (Overriding):子类重新定义父类的某个方法,方法名、返回值类型、参数列表必须完全一致。重写发生在运行时, JVM 根据对象的实际类型调用相应的方法。

java public class Parent { public void speak() { System.out.println("Parent speaking..."); } } public class Child extends Parent { @Override public void speak() { System.out.println("Child speaking..."); } }


4. SpringMVC

SpringMVC 是基于 Servlet 的 Web 框架,采用了 MVC(模型-视图-控制器)设计模式。其核心特点包括:

  • DispatcherServlet:接收请求并根据配置的映射规则调用相应的处理方法。
  • Controller:处理业务逻辑,并将数据传递给视图。
  • ModelAndView:包含了模型数据和视图信息,用于返回给客户端。

SpringMVC 提供了灵活的请求映射机制、数据绑定、表单处理等功能,是 Spring 生态中重要的一部分。


5. 抽象类和接口的区别

  1. 抽象类
    • 可以有构造方法、实例变量和方法(有或没有实现)。
    • abstract 关键字定义。
    • 不能实例化,但可以有一些已实现的方法。

java public abstract class Animal { abstract void sound(); }

  1. 接口
    • 只能包含抽象方法(Java 8 之后也可以有默认方法和静态方法)。
    • interface 关键字定义。
    • 类可以实现多个接口。

java public interface Animal { void sound(); }

主要区别

  • 抽象类 可以有方法的实现和成员变量,而接口只能声明方法。
  • 抽象类 支持继承(单继承),而接口支持实现多个接口。

6. Java 8 新特性

Java 8 引入了很多新特性,其中最重要的包括:

  • Lambda 表达式 :允许将函数作为参数传递给方法,简化了代码。

    java List<String> list = Arrays.asList("a", "b", "c"); list.forEach(s -> System.out.println(s));

  • Stream API :可以高效地处理集合和数据流,提供了更简洁的操作。

    java List<String> list = Arrays.asList("a", "b", "c"); list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println);


7. ==、equals 和 hashcode

  • == :用于比较基本数据类型的值或对象的引用地址。
    java int a = 5, b = 5; System.out.println(a == b); // true

  • equals :用于比较对象的内容,通常需要在类中重写该方法。
    java String s1 = new String("test"); String s2 = new String("test"); System.out.println(s1.equals(s2)); // true

  • hashcode :用于返回对象的哈希码,通常与 equals 一起使用,保证在哈希容器(如 HashMap)中一致性。
    java String s1 = new String("test"); System.out.println(s1.hashCode());


8. Java 反射

反射是 Java 中的一种强大机制,可以在运行时动态获取类的信息以及操作类的属性和方法。

  1. 获取类的信息
    java Class<?> clazz = Class.forName("java.lang.String"); System.out.println(clazz.getName());

  2. 动态调用方法
    java Method method = clazz.getMethod("substring", int.class); String result = (String) method.invoke("Hello, World!", 7); System.out.println(result); // 输出 "World!"

反射允许程序在运行时对类进行动态分析和修改,因此可以实现很多灵活的功能,但也可能影响性能,因此使用时需要谨慎。​编辑


通过掌握这些 Java 面试中的核心概念和常见问题,可以更好地准备面试,深入理解 Java 编程语言的各种机制。

相关推荐
勇哥java实战分享29 分钟前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要34 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
计算机毕设VX:Fegn089537 分钟前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
上进小菜猪1 小时前
基于 YOLOv8 的智能杂草检测识别实战 [目标检测完整源码]
后端
wzfj123451 小时前
ssh 远程pc如何不用每次都输入密码
github
韩师傅2 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
栈与堆2 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥3 小时前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似3 小时前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole
马卡巴卡3 小时前
Java CompletableFuture 接口与原理详解
后端