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

相关推荐
鬼火儿20 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin20 小时前
缓存三大问题及解决方案
redis·后端·缓存
yoke菜籽20 小时前
面试150——字典树
面试·职场和发展
赵文宇(温玉)21 小时前
构建内网离线的“github.com“,完美解决内网Go开发依赖
开发语言·golang·github
间彧21 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧1 天前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
牛奶咖啡131 天前
利用Github与Hexo搭建属于自己的在线个人博客
github·hexo创建静态博客·免费部署博客到公网上·创建自定义静态博客·将静态博客上传到github·将自己的网站发布到网上
散峰而望1 天前
C++入门(一)(算法竞赛)
c语言·开发语言·c++·编辑器·github
零雲1 天前
java面试:有了解过RocketMq架构么?详细讲解一下
java·面试·java-rocketmq
间彧1 天前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端