更新時(shí)間:2020-03-16 10:25:33 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2498次
1.如何只掃描一遍就找到位于一個(gè)鏈表正中間的元素?
這是最受歡迎的算法題之一,經(jīng)常在電話面試中被問到。很多程序員會(huì)想,要知道鏈表的長(zhǎng)度,就要先掃描一遍鏈表,然后在第二遍中取其正中的元素。所以被要求只掃描一遍就解決問題的時(shí)候他們就會(huì)很困惑。要解決這個(gè)問題,你要維護(hù)兩個(gè)指針。一個(gè)每次往下走一個(gè)結(jié)點(diǎn),而另一個(gè)每次走兩個(gè)結(jié)點(diǎn)。那么當(dāng)走的快的指針到達(dá)鏈表末尾時(shí),另一個(gè)指針就正好指在鏈表的正中間。
2.如何確定一個(gè)鏈表中是否存在環(huán)?
這跟第一題有點(diǎn)類似。同樣地維護(hù)兩個(gè)指針,分別以每步一個(gè)結(jié)點(diǎn)和每步兩個(gè)結(jié)點(diǎn)的速度走,那么如果當(dāng)某一步結(jié)束以后兩個(gè)指針指向同一個(gè)結(jié)點(diǎn),就說明我們找到了一個(gè)環(huán)。
3.如何只掃描一遍就找到一個(gè)鏈表倒數(shù)第三個(gè)元素?
這也是一個(gè)很經(jīng)典的鏈表題,也可以用兩個(gè)指針的方法來解決。我們讓第一個(gè)指針先走,當(dāng)它走出三步以后再讓第二個(gè)指針開始走。那么當(dāng)?shù)谝粋€(gè)指針到達(dá)鏈表的末尾時(shí),第二個(gè)指針就正好指向鏈表中的倒數(shù)第三個(gè)元素。
4.如何找到一個(gè)含有1~100的數(shù)組中唯一出現(xiàn)兩次的元素?
這是一個(gè)挺簡(jiǎn)單的算法題。你可以把數(shù)組里面所有元素加起來,再減去1~100的和,就能得到那個(gè)重復(fù)的元素。當(dāng)然你也可以暴力地去比對(duì)每一對(duì)元素,不過這樣的復(fù)雜度是O(N^2)。
5.如何在Java中反轉(zhuǎn)一個(gè)字符串?
這是我最喜歡的問題之一。因?yàn)镾tring是編程中最重要的類型之一,所以在技術(shù)面試中你會(huì)遇到許多跟字符串有關(guān)的問題。Java和其他編程語言都有許多不同的方式可以反轉(zhuǎn)一個(gè)字符串,所以面試官往往會(huì)禁止你使用某些特性,比如reverse()和StringBuffer。之后他還可能會(huì)問如何用遞歸來反轉(zhuǎn)字符串。
6.如何用冒泡排序?qū)?shù)組進(jìn)行排序?
在技術(shù)面試中我總是會(huì)問一些關(guān)于搜索和排序的問題。冒泡排序是最簡(jiǎn)單的排序算法之一,但如果你讓一個(gè)候選人現(xiàn)場(chǎng)寫冒泡排序,這能夠很好地衡量他的編程技能。
7.棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)之間的區(qū)別是什么?
這是一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu)問題,應(yīng)該沒有人不知道的吧?不管怎么說,最主要的區(qū)別在于棧是后進(jìn)先出(LIFO),而隊(duì)列是先進(jìn)先出(FIFO)的。
8.如何找到一個(gè)數(shù)組中所有重復(fù)出現(xiàn)的元素?
這個(gè)問題有時(shí)會(huì)作為第4題的后續(xù)出現(xiàn)。解決這個(gè)問題的一種途徑是使用哈希表。遍歷整個(gè)數(shù)組并將元素和出現(xiàn)次數(shù)存到哈希表中。最后你就可以統(tǒng)計(jì)那些出現(xiàn)超過一次的元素作為答案。在Java中,當(dāng)一個(gè)元素已經(jīng)在HashMap中時(shí),調(diào)用get(index)就可以得到對(duì)應(yīng)的值,否則會(huì)返回Null。這個(gè)性質(zhì)可以用來插入和更新HashMap中的值。
9.單向鏈表和雙向鏈表之間有什么差別?
這又是一個(gè)經(jīng)常在電話面試中被問到的數(shù)據(jù)結(jié)構(gòu)題。單向鏈表和雙向鏈表之間主要的差別在于它們的可遍歷性不同。在單向鏈表中,每個(gè)結(jié)點(diǎn)只有指向下一個(gè)結(jié)點(diǎn)的指針,而沒有指向上一個(gè)結(jié)點(diǎn)的指針,所以你就不能倒回去遍歷。而雙向鏈表的結(jié)點(diǎn)則維護(hù)了兩個(gè)指針,往兩個(gè)方向都可以遍歷。
10.如何打印斐波那契數(shù)列?
這是一個(gè)在面試中經(jīng)常出現(xiàn)的編程問題。斐波那契數(shù)列是這樣的一種數(shù)列:它的每一項(xiàng)都等于前兩項(xiàng)之和,例如:1,1,2,3,5,8,13,21。面試官往往會(huì)關(guān)心這兩件事情:一個(gè)能夠返回斐波那契數(shù)列第n項(xiàng)的函數(shù),以及如何在Java中用遞歸解決這個(gè)問題。雖然這個(gè)問題很簡(jiǎn)單,但遞歸的部分可能會(huì)困惑一些初學(xué)者。

以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年Java程序員面試題下載”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)