深圳騰訊在線教育部後端研發實習生面經

一面(86分鐘)

自我介紹一下
項目
Java基礎
equals()和hashcode()?
HashMap原理
ConcurrentHashMap原理

JVM虛擬機
巴拉巴拉巴拉

數據庫
巴拉巴拉巴拉

算法
兩個鏈表找第一個公共節點?
第一次遍歷通過HashMap記錄節點,第二次遍歷鏈表二,找到第一個相同的就退出。時間O(n),空間O(n)
繼續想想
遍歷兩個鏈表,計算長度差,然後讓長的鏈表先走長度差步,然後讓兩個指針一起以相同速度往前走,每次判斷兩個節點是否相等。時間O(n),空間O(1)
還有別的想法嗎?
沒有了
已經給出最優解了,但還有其他解法,提示一下,用棧來做這個題
維護兩個棧,把第一個鏈表的節點全部壓入棧A,把第二個鏈表的節點全部壓入棧B,然後不斷從A、B棧中彈出元素,直到彈出的元素不相同,那麼上一個彈出的元素就是兩個鏈表中第一個相同的元素。時間O(n),空間O(n)

找數組中多於一半的元素
哦哦,這個題我見過,Leetcode原題嘛,可以用多數投票算法,思想就是每次消除兩個不相同的元素,最後剩下有可能就是多於一半的元素。實現是設置一個計數器count記錄出現最多的元素的次數,和一個變量major記錄當前出現最多的元素。然後遍歷數組,如果遇到的數和major相同,則count+1,不同則count-1,如果count=0,則把major置爲下一個元素。掃描完成後,最後的major就是數組中出現次數最多的元素,再次掃描數組,計算major出現的次數,判斷是否大於1/2次。時間O(n),空間O(1)
還有其他思路嗎
排序,然後數組的1/2處就是出現最多的元素,再掃一次判斷是否 出現次數超過數組長度的1/2。時間O(nlgn),空間O(1)
這個明顯效率不太好,你還有其他想法嗎?
沒有了
你再想想?提示一下,聽說過線性選擇算法嗎
哦哦,我知道了,就是其實就是用快速排序的中間過程,partition結合二分,每次隨機選擇一個數,把比他小的排在左邊,比他大的排在右邊,直到選中數字的下標最終被排在n/2的位置,就說明左邊都比他小了,右邊都比他大了。這個數字就是中位數,然後再掃一次數組,看看這個數字出現次數是否超過n/2。

Linux命令
看網絡用什麼命令?
netstat
看某個進程佔用的端口號?
netstat -ano?
怎麼看Java進程中哪個線程的cpu佔用最高?
不會,是用啥啊
top -H -p + 進程號
好的
怎麼查找某個文件的某個字段?
find 路徑 -name 文件名 | grep 字段名
怎麼定位內存泄漏?
用jmap把內存dump下來,然後再用工具分析堆棧。

智力題
一個班一共100人,喜歡足球60,喜歡籃球70,喜歡排球80,問同時喜歡足球和籃球的有多少人?
不會,我覺得應該是一個範圍,喜歡足球和籃球的最多有60人,最少不知道。

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章