1. 程式人生 > >今日頭條(java後臺開發)——實習生面試

今日頭條(java後臺開發)——實習生面試

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就代表有重複的元素。(說的時候面試官一直點頭,感覺我說的對)

 面試官:好,那今天就到這,我還有其他的事,後期的事情再和你聯絡。

 我:嗯嗯,好的,非常感謝您。(心裡很虛,不知道還會不會再聯絡,不過也無所謂,又不是隻有他們一家公司的)