大厂Java面经

导言

在面试大厂Java岗位时,经常会遇到高难度的问题和题目。通过本文的科普,我们将介绍一些常见的面试问题,并提供代码示例来帮助读者更好地理解和准备面试。

状态图

下面是一个示例的状态图,展示了一个简单的状态机:

stateDiagram
    [*] --> A
    A --> B
    B --> C
    C --> D
    D --> [*]

类图

下面是一个示例的类图,展示了一个简单的类结构:

classDiagram
    class Animal {
        +int age
        +void eat()
    }
    class Dog {
        +String name
        +void bark()
    }
    class Cat {
        +String name
        +void meow()
    }

    Animal <|-- Dog
    Animal <|-- Cat

Java面试题

题目一:反转链表

给定一个单链表,将其反转。

class ListNode {
    int val;
    ListNode next;
    ListNode(int val) {
        this.val = val;
    }
}

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

题目二:二叉树的最近公共祖先

给定一个二叉树,找到该树中两个指定节点的最近公共祖先。

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val) {
        this.val = val;
    }
}

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    if (root == null || root == p || root == q) {
        return root;
    }
    TreeNode left = lowestCommonAncestor(root.left, p, q);
    TreeNode right = lowestCommonAncestor(root.right, p, q);
    if (left != null && right != null) {
        return root;
    } else if (left == null) {
        return right;
    } else {
        return left;
    }
}

总结

通过本文的科普,我们了解了一些大厂Java面试中常见的问题,并提供了相应的代码示例。在准备面试时,不仅要熟练掌握基础知识,还要注重练习和理解算法和数据结构。希望读者能够通过本文的帮助,在面试中取得好的成绩!