总共面了两轮,没见着HR,应该是没戏了。
第一轮,自我介绍。项目简单了解了下、jvm GC相关的,然后现场手写代码,问题为:
二分查找的算法。第一次使用了递归,有点问题,面试官看了说不要用递归,不常用,于是改成了循环;写的时候还是有问题,忘记了使用循环的条件,最后面试官提醒了下最终完成了,最终的代码大概是如下:
public static int biSearch(int[]array,inta){ int lo=0; int hi=array.length-1; int mid; while(lo<=hi){ mid=(lo+hi)/2; if(array[mid]==a){ return mid+1; }else if(array[mid] lo=mid+1; }else{ hi=mid-1; } }return-1; }
第二轮,闲聊了会儿,问题比较不常见,但是比较深刻,如:
1.Java中如何实现多重继承,我说可以写接口啊,面试官说如果不适用接口呢?我没说上来,面试官说没想过用内部类啊?恍然大悟、羞愧啊、过了年全忘记了。
2.try...catch..finally中的代码执行顺序。回答了之后,又问:多个catch的执行顺序和catch的匹配原则,这个还是有基础的;最后来了个嵌套的try..catch..finally,在内部的finally中加入return会怎么样?这个没回答上来。接下来是现场手写代码:
给了个整形数组,把他看成是一个整数,实现加一的算法,返回加一后的数组。第一次直接在while循环里整个for循环,总后返回处理过的数组;忘记了处理都是9的情况,这个时候数组长度将会需要扩展一位;在面试官的提示下完成了。代码修改后如下:
public static int[] arrayPlus(int[]array){ int len=array.length; for(inti=len-1;i>=0;i--){ if(array[i]==9){ array[i]=0; }else{ array[i]++; break; } } if(array[0]==0){ int[] result=new int[len+1]; result[0]=1; return result; }else{ return array; }
还是一个数组,求元素的逆序数。比如两个元素下标为i、j,i>j && a[i]<a[j],表示逆序。我直接写了两个for循环,最终完成了,面试官说了俩次检查一下有没问题,我说没有了,就说那今天的面试就先到这里吧。
回家后马上code出来,发现有问题的,循环边界有问题,还有数组的长度是a.length,我给写成了a.length(),羞愧难当啊!如下是修改过的代码:
// 给一个整型数组,统计其中的逆序数量 public static intinvertedNum(int[]array) { int num=0; int len=array.length; for(int i=0;i<=len-1;i++){ for(int j=i+1;j<=len-1;j++){ if(array[i]>array[j]){ ++num; } } } return num; }
面试总共大概2小时,没有笔试比较意外,总体感觉难度一般吧,面试官态度挺好的,不管结果了,也算是一次经验。