今日头条(java后台开发)——实习生面试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lilamei170607/article/details/78963752

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就代表有重复的元素。(说的时候面试官一直点头,感觉我说的对)

 面试官:好,那今天就到这,我还有其他的事,后期的事情再和你联系。

 我:嗯嗯,好的,非常感谢您。(心里很虚,不知道还会不会再联系,不过也无所谓,又不是只有他们一家公司的)

展开阅读全文

没有更多推荐了,返回首页