小米面经
小米 java开发工程师一面
主要是问了三个问题
1. jvm类加载机制,方法调用(这个是我自己项目中的问题)
2. AOP原理,自己实现AOP的逻辑
3. 链表合并去重, 这个问题当时脑子坏啦, 当时括号太多啦, 写代码的时候括号作用域写错啦。 最后找了半天原来括号范围错啦。
import java.util.Scanner;
public class Main {
static class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
this.next = null;
}
}
public static void main(String[] args) {
ListNode root1 = new ListNode(1);
ListNode root11 = new ListNode(3);
ListNode root12 = new ListNode(5);
ListNode root13 = new ListNode(7);
root1.next = root11;
root11.next = root12;
root12.next = root13;
ListNode root2 = new ListNode(2);
ListNode root21 = new ListNode(3);
ListNode root22 = new ListNode(6);
ListNode root23 = new ListNode(8);
root2.next = root21;
root21.next = root22;
root22.next = root23;
ListNode nroot = null, nhead = null;
ListNode nroot1 = null, nroot2 = null;
while (root2 != null && root1 != null) {
if (root2.val > root1.val) {
nroot1 = root1.next;
root1.next = null;
if (nroot == null) {
nhead = nroot = root1;
} else if (nroot.val != root1.val) {
nroot.next = root1;
nroot = root1;
}
root1 = nroot1;
} else if (root1.val >= root2.val) {
nroot2 = root2.next;
root2.next = null;
if (nroot == null) {
nhead = nroot = root2;
} else if (nroot.val != root2.val) {
nroot.next = root2;
nroot = root2;
}
root2 = nroot2;
}
}
while (root1 != null) {
if (nroot == null) {
nroot1 = root1.next;
root1.next = null;
nroot = nhead = root1;
root1 = nroot1;
} else if (nroot.val == root1.val) {
root1 = root1.next;
} else {
nroot1 = root1.next;
root1.next = null;
nroot.next = root1;
nroot = root1;
root1 = nroot1;
}
}
while (root2 != null) {
if (nroot != null) {
nroot2 = root2.next;
root2.next = null;
nroot = nhead = root2;
root2 = nroot2;
} else if (nroot.val == root2.val) {
root2 = root2.next;
} else {
nroot2 = root2.next;
root2.next = null;
nroot.next = root2;
nroot = root2;
root2 = nroot2;
}
}
while (nhead != null) {
System.out.println(nhead.val); nhead = nhead.next; }
} 对于第三题当时想直接用LinkedHashSet, 面试官说, 你敢用我直接给你挂。。。。。。。。
总体来说不难,还是自己太菜啦。 离开idea不会写代码啦。 老是写的有点问题。

曼迪匹艾公司福利 122人发布