面试真实经历某商银行大厂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 编程语言的各种机制。

相关推荐
绝无仅有4 小时前
面试真实经历某商银行大厂Java问题和答案总结(六)
后端·面试·github
IT_陈寒4 小时前
Vue3性能优化实战:这7个技巧让我的应用提速50%,尤雨溪都点赞!
前端·人工智能·后端
xurime4 小时前
Excelize 开源基础库发布 2.10.0 版本更新
golang·开源·github·excel·ai编程·go语言
yuniko-n4 小时前
【力扣 SQL 50】连接
数据库·后端·sql·算法·leetcode
白萤4 小时前
SpringBoot用户登录注册系统设计与实现
java·spring boot·后端
canonical_entropy4 小时前
告别异常继承树:从 NopException 的设计看“组合”模式如何重塑错误处理
后端·架构
Victor3565 小时前
Redis(65)如何优化Redis的AOF持久化?
后端
Victor3565 小时前
Redis(64)Redis的Lua脚本有哪些常见场景?
后端
Arva .7 小时前
面试题02
后端