某大厂跳动Java面试真题之问题与解答总结(三)

Java 面试题解析​编辑

在 Java 面试中,除了基础的语法和数据结构问题外,常常会涉及到框架的使用和设计模式的理解。本文将解答一些常见的 Java 面试题,涵盖 Spring AOP、面向对象的特性、集合类的区别等内容。

​编辑---

1. Spring AOP 怎么实现,围绕 Bean 生命周期去讲

Spring AOP(面向切面编程)通过动态代理技术为目标对象提供横切功能,如日志、事务等。Spring AOP 主要有两种实现方式:基于 JDK 动态代理和基于 CGLIB 的字节码生成。​编辑

Spring AOP 实现过程:
  1. Bean 生命周期 :在 Spring 容器启动时,Spring 会通过 BeanFactoryApplicationContext 实例化 Bean。Bean 生命周期包括:实例化、依赖注入、初始化、销毁等过程。
  2. 代理的创建:当一个 Bean 被标记为需要 AOP 处理时,Spring 会根据配置的切面(如日志切面、事务切面)生成代理对象。代理对象会拦截方法调用并加入横切逻辑。
  3. 切面和通知:Spring AOP 使用切面(Aspect)来描述横切逻辑,通知(Advice)来定义具体的操作。常见的通知类型有前置通知、后置通知、环绕通知等。
  4. 动态代理 :Spring AOP 使用代理模式来实现切面功能。当一个方法被调用时,代理对象会先执行切面逻辑,再调用原始方法。编辑

通过这种方式,Spring AOP 将关注点分离,不影响核心业务逻辑,从而增强了代码的可维护性和扩展性。


2. 三大特性:封装、继承、多态

面向对象编程的核心三大特性是封装、继承和多态,它们是构建 Java 应用程序的基础。

  1. 封装
    • 封装指的是将对象的状态(字段)和行为(方法)封装到一个类中,并通过公开的接口(如 getter 和 setter)来访问数据。封装有助于数据隐藏、减少代码耦合,增强安全性。
    • 示例:
      ```java
      public class Person {
      private String name;
      private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

```

  1. 继承
    • 继承是通过一个类继承另一个类的属性和方法,形成类与类之间的关系。继承有助于代码复用并且促进代码的扩展。
    • 示例:
      ```java
      public class Animal {
      public void eat() {
      System.out.println("Eating...");
      }
      }

public class Dog extends Animal {

public void bark() {

System.out.println("Barking...");

}

}

```

  1. 多态
    • 多态是指同一个方法或操作可以作用于不同的对象,并产生不同的行为。多态主要通过方法重载和方法重写来实现。
    • 示例:
      java Animal a = new Dog(); a.eat(); // Dog类中的eat()方法,表现出不同的行为

3. 谈谈多态

多态是面向对象编程的核心概念之一。它的含义是同一个方法名可以根据不同对象的类型,执行不同的操作。多态可以分为两种类型:

  • 方法重载(Compile-time Polymorphism) :同一个类中方法的名字相同,但参数不同(数量、类型、顺序等)。编译时通过参数的不同来决定调用哪个方法。
    java class Printer { public void print(String message) { System.out.println(message); } public void print(int number) { System.out.println(number); } }

  • 方法重写(Runtime Polymorphism) :子类重写父类的方法,并且通过父类的引用指向子类对象。运行时根据对象的实际类型来决定调用哪个方法。

    ```java

    class Animal {

    public void sound() {

    System.out.println("Animal sound");

    }

    }

class Dog extends Animal {

@Override

public void sound() {

System.out.println("Bark");

}

}

public class Test {

public static void main(String[] args) {

Animal animal = new Dog();

animal.sound(); // 输出 "Bark"

}

}

```


4. 接口和抽象类的区别

接口(Interface)和抽象类(Abstract Class)都可以用来定义方法,但它们有一些重要的区别:

  • 定义方式 :接口中的所有方法默认为 public abstract,不需要显式声明;而抽象类可以有具体方法和抽象方法。
  • 继承方式:类可以实现多个接口,但只能继承一个抽象类。
  • 构造器:接口不能有构造函数,而抽象类可以有构造函数。
  • 默认方法 :接口可以有默认方法(default),而抽象类则没有此限制。

5. 谈谈集合

集合是存储一组数据的容器,在 Java 中主要有两种类型的集合:

  1. List :有序的集合,允许重复元素。常见实现类有 ArrayListLinkedList
  2. Set :无序的集合,不允许重复元素。常见实现类有 HashSetTreeSet
  3. Map :键值对集合,允许根据键来查找值。常见实现类有 HashMapTreeMap

6. ArrayList 和 LinkedList 的区别

ArrayListLinkedList 都是实现 List 接口的集合类,但它们在底层实现和性能上有所不同:

  • 底层数据结构

    • ArrayList:基于动态数组实现。

    • LinkedList:基于双向链表实现。

  • 访问速度

    • ArrayList:访问元素的时间复杂度是 O(1),适合频繁读取操作。

    • LinkedList:访问元素的时间复杂度是 O(n),因为需要遍历链表。

  • 插入和删除操作

    • ArrayList:在数组的中间插入或删除元素需要移动大量元素,时间复杂度是 O(n)。

    • LinkedList:插入或删除操作只需要修改链表节点的引用,时间复杂度是 O(1)。


7. HashMap 底层

HashMap 是基于哈希表实现的,它的底层结构是一个数组加链表/红黑树(Java 8 引入)。每个元素根据哈希值存储在数组的特定位置,如果发生哈希冲突,则通过链表或红黑树解决冲突。主要操作有 putgetremove

  • 数组:每个数组槽位存储一个链表的头结点,链表中的每个节点存储一个键值对。
  • 链表:当两个不同的键具有相同的哈希值时,它们会被存储在同一个数组槽位的链表中。
  • 红黑树:当链表长度超过一定阈值时(默认是 8),链表会转换为红黑树,以提高查询效率。

8. ==equals 的区别

  • == 运算符:用于比较两个对象的内存地址(引用)是否相同。如果是基本数据类型,比较的是值;如果是对象类型,比较的是引用。
  • equals 方法 :用于比较两个对象的内容是否相等。equalsObject 类中的方法,通常会被重写来实现对象的内容比较。

总结

这些问题涵盖了 Java 编程中的一些核心概念,包括面向对象的特性、Spring AOP 实现、集合类的使用、以及一些常见的性能优化技巧。理解这些概念并能够清晰地回答问题,是面试中展示自己技术水平的重要步骤。

相关推荐
绝无仅有3 小时前
某大厂跳动Java面试真题之问题与解答总结(二)
后端·面试·github
大前端helloworld3 小时前
前端梳理体系从常问问题去完善-框架篇(Vue2&Vue3)
前端·javascript·面试
野犬寒鸦3 小时前
从零起步学习Redis || 第十章:主从复制的实现流程与常见问题处理方案深层解析
java·服务器·数据库·redis·后端·缓存
陈敬雷-充电了么-CEO兼CTO4 小时前
DeepSeek vs ChatGPT 技术架构、成本与场景全解析
人工智能·chatgpt·架构
迎風吹頭髮6 小时前
Linux内核架构浅谈9-Linux内核的开源生态:开发者协作与版本迭代机制
linux·运维·架构
江上月5136 小时前
django与vue3的对接流程详解(上)
后端·python·django
秦禹辰6 小时前
轻量级开源文件共享系统PicoShare本地部署并实现公网环境文件共享
开发语言·后端·golang
可触的未来,发芽的智生6 小时前
触摸未来2025.10.09:记忆的突围,从64个神经元到人工海马体神经网络
人工智能·python·神经网络·机器学习·架构