下面给大家分享一个小伙伴2020年的小米Java面试过程,内容具体为一面好二面的面试题,包含部分面试者的回答。
一面:
首先做了自我介绍,之后就是直接进入面试题部分了。
面试题:
1、数据库索引 b+树特点是什么?
2、还有一些就是面经里面都经常出现的问题,都是非常基础的,这里就不多说了
3、算法
leetcode 402 移掉K位数字使数字最大
代码:
public static String removeKdigits(String num, int k) { LinkedList < Character > stack = new LinkedList < > (); for (char digit: num.toCharArray()) { while (stack.size() > 0 && k > 0 && stack.peekLast() > digit) { stack.removeLast(); k--; } stack.addLast(digit); } for (int i = 0; i < k; i++) { stack.removeLast(); } StringBuilder sb = new StringBuilder(); boolean loadZero = true; for (Character c: stack) { if (loadZero && c == '0') continue; sb.append(c); } return sb.length() == 0 ? "" : sb.toString(); }
二面:
首先自我介绍,后来和面试官谈了一下,面试官问我为什么学JAVA之后就正式进入面试题部分了。
面试题:
1、String 、StringBuilder、StringBuffer的区别String是否线程安全?
2、wait()和sleep的区别是什么?
答:wait有参数和无参数
3、被final修饰的特点是什么?
4、接口和抽象类的区别是什么?(除了这个之外,面试官还继续向下问了,问的非常的仔细)
5、synchorized和lock的区别是什么?
一、synchronized是java内置关键字,在jvm层面,Lock是个java类;
二、synchronized不能够判断是否获取锁的状态,Lock能够判断是否获取到锁;
三、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
四、用synchronized关键字的两个线程1和线程2,当前线程1获得锁,线程2线程等待。当线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,假如尝试获取不到锁,线程可以不用一直等待就结束了;
五、synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者都可以)
六、Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。
6、算法 数组
{2,0,4,0,0,6,0,0} 把0 全部挪在后面其他数字挪到前面 ,并且保证非0数字的相对顺序不变。
代码:
public int[] swapZeroToRight(int[] arr) { int i = 0, j; while (i < arr.length && arr[i] != 0) i++; j = i + 1; while (j < arr.length) { if (arr[j] != 0) { int temp = arr[i]; arr[i++] = arr[j]; arr[j++] = temp; } else { j++; } } return arr; }
以上小米Java面试题大家都了解了吗?有一些都是很常见的就没有一一例举了,更多经典的小米Java面试题和面经,可以继续关注本站了解。