Java核心面試寶典】Day5、盤(pán)點(diǎn)常見(jiàn)基礎(chǔ)面試題之“方法與遞歸”

      網(wǎng)友投稿 738 2022-05-28

      Hello,你好呀,我是灰小猿!一個(gè)超會(huì)寫(xiě)bug的程序猿!

      用堅(jiān)持締造技術(shù)、用指尖敲動(dòng)未來(lái)!

      和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創(chuàng)造者”。也想靠技術(shù)來(lái)改變未來(lái),改變世界!因?yàn)槲覀儓?jiān)信每一次敲動(dòng)鍵盤(pán)都能讓生活變得更智能、世界變得更有趣!

      在此專(zhuān)欄《Java核心面試寶典》記錄我們備戰(zhàn)夢(mèng)想的【day 5】!

      【Java核心面試寶典】Day5、盤(pán)點(diǎn)常見(jiàn)基礎(chǔ)面試題之“方法與遞歸”

      每天一個(gè)面試技術(shù)點(diǎn),今天來(lái)和大家記錄在Java面試中在方法和遞歸上的常見(jiàn)面試題及解答。

      一、Java中參數(shù)的傳遞使用值傳遞還是引用傳遞?

      在Java中只有值傳遞而沒(méi)有引用傳遞,所以Java中參數(shù)的傳遞只能使用值傳遞。

      追問(wèn):那不同情況下具體是如何傳遞的?

      當(dāng)參數(shù)的類(lèi)型是基本數(shù)據(jù)類(lèi)型時(shí),傳遞的是實(shí)參的值,因此不能對(duì)實(shí)參進(jìn)行修改。

      當(dāng)參數(shù)類(lèi)型是對(duì)象時(shí),傳遞的是對(duì)象的引用,此時(shí)可以對(duì)實(shí)參引用的對(duì)象進(jìn)行修改,但是不能讓實(shí)參引用新的對(duì)象。

      二、方法的簽名由哪些部分組成?

      方法的簽名是由方法名和參數(shù)表共同構(gòu)成的,修飾符和返回值不屬于方法簽名,方法簽名一般用于方法的重載,方法的重載時(shí)方法簽名必須不同。

      三、使用方法的重載時(shí),什么情況下會(huì)出現(xiàn)編譯錯(cuò)誤?

      出現(xiàn)歧義調(diào)用的時(shí)候會(huì)出現(xiàn)編譯錯(cuò)誤,

      如果一個(gè)方法調(diào)用有多個(gè)可能的匹配,且編譯器無(wú)法判斷哪個(gè)方法最匹配,則稱(chēng)為歧義調(diào)用。

      四、使用遞歸算法的優(yōu)點(diǎn)和缺點(diǎn)分別有哪些?

      優(yōu)點(diǎn):使用遞歸算法的優(yōu)點(diǎn)是代碼簡(jiǎn)潔且容易理解,

      缺點(diǎn):時(shí)間和空間消耗比較大,每一次函數(shù)調(diào)用都需要在內(nèi)存棧中分配空間,對(duì)棧的操作可能還需要時(shí)間,因此時(shí)間和空間復(fù)雜度較高。

      如果子問(wèn)題之間存在重疊,則在不加記憶化的情況下,可能產(chǎn)生重復(fù)計(jì)算導(dǎo)致時(shí)間復(fù)雜度過(guò)高。

      由于棧的空間有限,如果遞歸調(diào)用的次數(shù)太多,則可能導(dǎo)致調(diào)用棧溢出。

      五、追問(wèn):那么可以通過(guò)什么方式解決遞歸的缺點(diǎn)?

      解決遞歸的缺點(diǎn)有多種方式,尾遞歸是一種做法,另外還可以通過(guò)加記憶化的方式避免重復(fù)計(jì)算,以及改用迭代實(shí)現(xiàn)。

      六、追問(wèn):闡述一下什么是尾遞歸?

      當(dāng)遞歸調(diào)用是方法中最后執(zhí)行的語(yǔ)句且它的返回值不屬于表達(dá)式的一部分時(shí),這個(gè)遞歸調(diào)用就是尾遞歸。

      尾遞歸的特點(diǎn)是在返回時(shí)直接傳回原始的調(diào)用者,而不用經(jīng)過(guò)中間的調(diào)用者,這個(gè)特點(diǎn)很重要,因?yàn)榇蠖鄶?shù)現(xiàn)代的編譯器會(huì)利用該特點(diǎn)自動(dòng)生成優(yōu)化的代碼。

      使用尾遞歸代替普通的遞歸,可以在時(shí)間和空間方面都帶來(lái)顯著的提升。

      七、能不能修改斐波那契數(shù)列的普通遞歸為尾遞歸?

      斐波那契數(shù)列的普通遞歸實(shí)現(xiàn):

      /** * 斐波那契數(shù)列普通遞歸實(shí)現(xiàn) * @param index * @return */ public static long fibonacci(long index) { if (index <= 1) { return index; } else { return fibonacci(index - 1) + fibonacci(index - 2); } }

      斐波那契數(shù)列的尾遞歸實(shí)現(xiàn):

      /** * 斐波那契數(shù)列尾遞歸實(shí)現(xiàn) * @param index * @return */ public static long fibonacciTailRecursion(long index) { return fibonacciTailRecursion(index, 0, 1); } /** *遞歸體 * @param index 循環(huán)序列 * @param present 當(dāng)前值 * @param next 下一個(gè)值 * @return */ public static long fibonacciTailRecursion(long index, int present, int next) { if (index == 0) { return present; } else { return fibonacciTailRecursion(index - 1, next, present + next); } }

      每日總結(jié)

      今天在關(guān)于方法的遞歸調(diào)用的核心面試考點(diǎn)中,我們需要掌握方法重載的特征是方法簽名必須不同,了解遞歸調(diào)用的基本思想以及遞歸算法的優(yōu)化策略。

      關(guān)于方法和遞歸這一塊的面試題就和大家分享這些,如果小伙伴們有遇到其他相關(guān)的面試題,歡迎在評(píng)論區(qū)留言提出,我會(huì)把大家提出的總結(jié)到文章內(nèi),歡迎小伙伴們一起評(píng)論區(qū)打卡學(xué)習(xí)!小伙伴們可也在左方加我好友一起探討學(xué)習(xí)!

      我是灰小猿,我們下期見(jiàn)!

      Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Windows10配置Git遠(yuǎn)程連接到github(全網(wǎng)簡(jiǎn)單教程)
      下一篇:華為開(kāi)發(fā)者十二時(shí)辰
      相關(guān)文章
      国产精品亚洲精品久久精品| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲美免无码中文字幕在线| 亚洲日产韩国一二三四区| 亚洲伊人久久成综合人影院| 国产亚洲福利一区二区免费看 | 亚洲欧好州第一的日产suv| 亚洲免费电影网站| 亚洲人成电影院在线观看| 亚洲理论在线观看| 亚洲国产成AV人天堂无码| 亚洲一区二区三区精品视频| 亚洲av日韩av永久在线观看| 亚洲av成人中文无码专区| 国产精品亚洲AV三区| 亚洲av手机在线观看| 亚洲国产精品碰碰| 77777亚洲午夜久久多人| 亚洲日韩一区二区三区| 亚洲人av高清无码| 亚洲av无码成人影院一区 | 亚洲Av永久无码精品三区在线 | 亚洲午夜福利在线视频| 亚洲av永久中文无码精品综合 | 亚洲黄色在线视频| 亚洲国产av一区二区三区丶| 国产成人精品日本亚洲专一区| 日本亚洲免费无线码| 精品亚洲国产成人av| 亚洲日韩VA无码中文字幕| 亚洲一区二区三区香蕉| 亚洲国产国产综合一区首页| 亚洲熟妇无码乱子AV电影| 国产AV无码专区亚洲AV毛网站| 内射干少妇亚洲69XXX| 亚洲一区二区三区不卡在线播放 | 亚洲毛片αv无线播放一区| 亚洲人成网www| 亚洲AV无码专区在线亚| 亚洲aⅴ无码专区在线观看 | 亚洲人成影院在线高清|