小米面经
小米 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不会写代码啦。 老是写的有点问题。