下面要给大家带来的是2020年的小米java面试题分享,主要包括了一面二面的面试题,以及面试者的一些相关回答,一起来了解一下吧。
面试题(一面)
1、谈一下数据库索引
数据库索引是为了让查询数据效率更快,数据库索引主要包括了聚集索引(主键索引)、非聚集索引以及联合索引。
2、b+树特点是什么?
B+树是应文件系统产生的B树的变种。
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(); }
4、其他的都是一些面经当中很常见会出现的内容
面试题(二面)
1、String 、StringBuilder和StringBuffer的区别是什么?
(1)速度:StringBuilder > StringBuffer > String
(2)StringBuffer:字符串变量,假如要操作少量的数据用=String
(3)String:字符串常量,假如要操作少量的数据用=String
(4)StringBuilder:字符串变量,假如要操作少量的数据用=String
2、String是否线程安全?
String中的对象是不可变的,我们可以理解为常量,显然线程安全。
3、wait()和sleep的区别是什么?
wait有参数和无参数
4、被final修饰的特点是什么?(这个问的比较细)
5、接口和抽象类的区别是什么?(这个问的非常的细)
6、synchorized和lock的区别有哪些?
(1)Lock是一个接口,synchronized是关键字
(2)synchronized可以锁住类、方法和代码块,而Lock是块范围内的
(3)Lock能够让等待锁的线程响应中断,但是synchronized不会,线程会一直等待下去
(4)synchronized可以自动释放锁,但是Lock要手动释放锁
(5)通过Lock能够知道线程有没有拿到锁,但是synchronized不可以
(6)Lock可以提高多个线程读操作的效率
7、算法(数组)
{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面试题,请继续关注本站的面试题专栏了解吧。