更新時間:2020-03-16 10:25:33 來源:動力節點 瀏覽2188次
1.如何只掃描一遍就找到位于一個鏈表正中間的元素?
這是最受歡迎的算法題之一,經常在電話面試中被問到。很多程序員會想,要知道鏈表的長度,就要先掃描一遍鏈表,然后在第二遍中取其正中的元素。所以被要求只掃描一遍就解決問題的時候他們就會很困惑。要解決這個問題,你要維護兩個指針。一個每次往下走一個結點,而另一個每次走兩個結點。那么當走的快的指針到達鏈表末尾時,另一個指針就正好指在鏈表的正中間。
2.如何確定一個鏈表中是否存在環?
這跟第一題有點類似。同樣地維護兩個指針,分別以每步一個結點和每步兩個結點的速度走,那么如果當某一步結束以后兩個指針指向同一個結點,就說明我們找到了一個環。
3.如何只掃描一遍就找到一個鏈表倒數第三個元素?
這也是一個很經典的鏈表題,也可以用兩個指針的方法來解決。我們讓第一個指針先走,當它走出三步以后再讓第二個指針開始走。那么當第一個指針到達鏈表的末尾時,第二個指針就正好指向鏈表中的倒數第三個元素。
4.如何找到一個含有1~100的數組中唯一出現兩次的元素?
這是一個挺簡單的算法題。你可以把數組里面所有元素加起來,再減去1~100的和,就能得到那個重復的元素。當然你也可以暴力地去比對每一對元素,不過這樣的復雜度是O(N^2)。
5.如何在Java中反轉一個字符串?
這是我最喜歡的問題之一。因為String是編程中最重要的類型之一,所以在技術面試中你會遇到許多跟字符串有關的問題。Java和其他編程語言都有許多不同的方式可以反轉一個字符串,所以面試官往往會禁止你使用某些特性,比如reverse()和StringBuffer。之后他還可能會問如何用遞歸來反轉字符串。
6.如何用冒泡排序對數組進行排序?
在技術面試中我總是會問一些關于搜索和排序的問題。冒泡排序是最簡單的排序算法之一,但如果你讓一個候選人現場寫冒泡排序,這能夠很好地衡量他的編程技能。
7.棧和隊列這兩種數據結構之間的區別是什么?
這是一個經典的數據結構問題,應該沒有人不知道的吧?不管怎么說,最主要的區別在于棧是后進先出(LIFO),而隊列是先進先出(FIFO)的。
8.如何找到一個數組中所有重復出現的元素?
這個問題有時會作為第4題的后續出現。解決這個問題的一種途徑是使用哈希表。遍歷整個數組并將元素和出現次數存到哈希表中。最后你就可以統計那些出現超過一次的元素作為答案。在Java中,當一個元素已經在HashMap中時,調用get(index)就可以得到對應的值,否則會返回Null。這個性質可以用來插入和更新HashMap中的值。
9.單向鏈表和雙向鏈表之間有什么差別?
這又是一個經常在電話面試中被問到的數據結構題。單向鏈表和雙向鏈表之間主要的差別在于它們的可遍歷性不同。在單向鏈表中,每個結點只有指向下一個結點的指針,而沒有指向上一個結點的指針,所以你就不能倒回去遍歷。而雙向鏈表的結點則維護了兩個指針,往兩個方向都可以遍歷。
10.如何打印斐波那契數列?
這是一個在面試中經常出現的編程問題。斐波那契數列是這樣的一種數列:它的每一項都等于前兩項之和,例如:1,1,2,3,5,8,13,21。面試官往往會關心這兩件事情:一個能夠返回斐波那契數列第n項的函數,以及如何在Java中用遞歸解決這個問題。雖然這個問題很簡單,但遞歸的部分可能會困惑一些初學者。
以上就是動力節點Java培訓機構小編介紹的“2020年Java程序員面試題下載”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習