记录一下小米实习的面经
二面
1 String 、StringBuilder、StringBuffer的区别 String是否线程安全
2 wait() 和 sleep 的区别 (wait有参数和无参数)
3 被final修饰的特点 (细)
4 接口和抽象类的区别(问的巨细)
5 synchorized 和 lock 的区别
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;
} 一面
1.数据库索引 b+树特点
2 剩下的都是一些面经里有的基础
3 多态
4 算法
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();
} 