2018.1.3下午三点半视频面试。(全程34分钟)
面试之前自己还是很紧张的,毕竟也是我的初面。
1. 问:说一下Java内存管理机制。
答:(因为自己最近才开始看,所以了解的不多。)java内存主要分为这几部分:方法区、堆、java虚拟机栈、本地方法栈、程序计数器。堆里主要存放的是类的实例化对象,
方法区主要存放和方法相关的信息,比如方法中的变量等。方法区和堆是内存共享的,其他三个不是内存共享的。
问:堆里面存放哪些对象?
答:类的实例化对象。
问:堆里面可是存放什么样的对象?
答:……..就是一个类的实例化对象。。。。。(感觉自己这个问题没有回答对~)
2..问:说一下c++里面的const关键字。
答:我自己是这样认为的:const关键字和java中的final关键字有相同的地方,它修饰的变量相当于一个常量。
3.问:你也学过git,那说一下git如何解决冲突?
答:这个有点想不起来了。。。
4问:.来我们做题吧。
数组长度为n,数的范围{0,n-1};数组元素随机排放,可能有重复值,怎样判断是否有重复元素?
答:
最笨的方法,就是依次比较每个元素,看是否有重复(…….这个也太笨了。233333)
第二种:
可以先将这个数组排序,然后根据下标找到这个数组的中间的这个数,然后和(n/2)进行比较,如果小于则说明有重复的元素。
问:怎么排序?
答:如果数组不大的话可以用直接插入、直接选择进行排序;如果数组比较大可以用快排、归并、堆排序。
问:快排是怎么排的?
答:定义一个变量i,和一个变量j,i从左变跑找一个比基准元素大的,j从右边跑找一个比基准元素小的,然后如果I小于j那就将i处的元素和j出的元素交换。
问:那你写一下这个代码吧。
答:想了几秒开始写代码…………………..
问:讲一下代码吧(快排我写了至少5遍了,虽然一开始有点问题,改了之后依旧没有运行结果)
答:当数组中元素大于等于两个元素时,进行排序,i<j时变量i从左遍历找一个比a[low]大的元素,j从右便利找比a[low],小的,若i<j则a[i]和a[j]交换,当跳出循环while(i<j)将a[low]和a[j]进行交换,就把a[j]放到了该放的位置,就是把a[j]排好了,然后再递归去排low到j和j+1到high…..
问:那你这个时间复杂度是多少?
答:O(nlogn).
问:那你还有其他方法(时间复杂度小于onlogn)解决那个题吗(感觉他没怎么听太懂我说的那种方法..)?
答:…….目前没有其他办法了。
问:好了,那我们今天就到这吧,你还有什么问题?
答:对于刚才那道题,你有什么好的解法可以给我分享一下吗?
面试官:你可以创建一个map 长度为n,然后把他们按顺序放进去,如果有相同的让他+1(自我理解,应该是用到了hashMap数组+链表),….
我:也可以创建一个数组,分为数据域,重复的数目(初始为0),然后把题目中的数放进去,如果有重复的,就让数目+1,最后遍历一下这个数组,如果遇到一个重复的数目不为0就代表有重复的元素。(说的时候面试官一直点头,感觉我说的对)
面试官:好,那今天就到这,我还有其他的事,后期的事情再和你联系。
我:嗯嗯,好的,非常感谢您。(心里很虚,不知道还会不会再联系,不过也无所谓,又不是只有他们一家公司的) |