最重要的事情应该是在一个适合思考的时刻,去思考和总结自己所经历的过去以及所掌握的技术,要总结到精髓,并且挖掘出自己至少一个亮点,在每次跳槽和面试的时候,不断总结自己,深度挖掘自己的亮点
面试问题:项目经验,缓存,并发,JVM内存,算法
题目内容是,写一个函数,它的作用是接受一个整数(假设为length),返回一个数组,数组的长度为length,数组中的内容为随机的0至(length-1)的值,并且不能重复。比如length为5的话,数组可能是[1,0,3,2,4],核心代码:
List<Integer> list = new ArrayList<Integer>(length);
for (int i = 0; i < length; i++) {
list.add(i);
}
int[] array = new int[length];
for (int i = 0; i < length; i++) {
array[i] = list.remove(new Random().nextInt(length - i));
};return array[];
计算两个长整数的减法,每个长整数用一个整数数字来保存:
比如计算16789-123=6666.则A=[6,7,8,9],B=[1,2,3],返回:[6,6,6,6]
public static int[] function(int[] array1, int[] array2) {
if ((array1.length == 0) || (array2.length == 0)) {
return null;
}
int len1 = array1.length - 1;
int len2 = array2.length - 1;
int lenRes = len1 > len2 ? len1 : len2;
int[] res = new int[lenRes + 1];
int jie = 0;
int j = len2;
for (int i = lenRes; i >= 0; i--) {
if (j >= 0) {
if (array1[i] - array2[j] - jie >= 0) {
res[i] = array1[i] - array2[j--] - jie;
jie = 0;
} else {
res[i] = array1[i] + 10 - array2[j--] - jie;
jie = 1;
}
} else {
res[i] = array1[i] - jie;
jie = 0;
}
}
return res;
}
public static void main(String[] args) {
int[] a = { 1, 0, 8, 3 };
int[] b = { 9, 9, 9 };
// int[] res = function(a, b);
// for (int i : res) {
// System.out.print(i);
// }
System.out.println();
System.out.println("--------------------");
int res2 = arrayToNumber(b) - arrayToNumber(a);
System.out.println(res2);
for (int i : numberToArray(res2)) {
System.out.print(i);
}
}
public static int arrayToNumber(int[] array) {
int len = array.length - 1;
int res = 0;
for (int i = len; i >= 0; i--) {
res = (int) (array[i] * Math.pow(10, len - i)) + res;
}
return res;
}
public static int[] numberToArray(int number) {
String a = number + "";
int len = a.length();
int[] res = new int[len];
for (int i = len - 1; i >= 0; i--) {
res[i] = number % 10;
number /= 10;
}
return res;
}