目錄html
補充:面試未經過前端
一輪 電話面試
2019.04.28 16:21java
[w]:面試官,[m]:我,下面的內容來自電話錄音。git
[m]:喂,喂
[w]:餵你好,請問是xxx同窗嗎?
[m]:對,是的;
[w]:你好,我這邊是上海愛奇藝,以前和你約好下午有電話面試,你如今那邊OK嗎?
[m]:能夠啊
[w]:你那邊信號好嗎?聽我說話聽的清楚嗎?
[m]:聽得清楚呀,你那邊聽得清楚我說的嗎?
[w]:嗯,我這邊聽得清楚
[w]:行,那咱們就開始;
[w]:我先問一下,你如今人在哪一個城市啊?
[m]:在蘇州呀
[w]:蘇州,就是中科大蘇州這邊軟院是吧;
[m]:對
[w]:嗯好的,你平時開發的主語言是Java嗎?
[m]:對啊,是Java;
[w]:好的,那我主要是問一下Java相關的一些基礎知識
[m]:哦,行
[w]:Java有個最基本的類Object,這個類默認包含哪幾個方法?
[m]:wait,notify,notifyAll,finalize,toString,hashCode,equals;
[w]:還能想到其餘的嗎?
[m]:沒有了啊,想不到了;
記:還有:clone、getClass;
[w]:好,那我再換一個東西問,
Java裏面,你平常寫代碼中遇到過哪些Exception,能舉一些例子出來嗎?
[m]:空指針、角標越界,Emmm...能想到的是這兩個
[w]:還能想到其餘的嗎?
[m]:其餘的,在寫測試的時候會用到那個什麼...Interr...就是打斷的異常,Intercept異常。(實際上是InterruptedException)
記:面試官主要是想看你遇到哪些異常,而後來推斷你的實踐範圍和能力。
[w]:好,我問一下
Java裏面有那個==,它和Java的equals方法有什麼區別?
[m]:等號(==)就是看一下那兩個對象(引用)是否指向同一個內存空間,就真的是相等;equals的話,那個Object裏面equals()默認的話就是用==,因此你能夠覆寫的話,就能夠本身去定義一下是否相等;
[w]:能說一下
有沒有什麼很經典的場景,或者很經典的類是覆寫了這個方法嗎?
[m]:String類;
這塊答得還闊以;
[w]:好,問一下
Java建立線程有哪幾種方法?
[m]:能夠寫一個類去繼承Thread那個類,而後....(我還沒說完)
[w]:嗯,還有其餘的嗎?
[m]:還有直接寫個Runnable類(子類),傳到Thread的構造函數裏面;
[w]:還有其餘的嗎?
[m]:還有一個是Callable,就是實現這個接口,用Callable....(仍是沒說完)
[w]:
那個Callable和Runnable有什麼區別?
[m]:Callable它有個返回值,返回一個Future,而後...(再次沒說完)
[w]:問一下,
若是咱們建立了這個線程,我想執行這個線程中的具體邏輯,我能夠調用這個線程的start()方法去執行它,也能夠調用這個線程的.run()方法去執行它,這兩種執行方式有什麼區別嗎?
[m]:.run()的話就是不開啓線程,就是直接調用個方法,.start()方法就是開啓個線程吧;
[w]:好,問一下
Java線程中的sleep方法和wait方法有什麼區別?
[m]:sleep的話就是睡了,它不會釋放鎖,wait的話就是先要得到那個鎖,才能釋放;
[w]:
處於wait狀態的線程要用什麼命令去喚醒它?
[m]:用notify,notifyAll;
[w]:
notify和notifyAll有什麼區別?
[m]:notify就是喚醒其中一個吧,notifyAll的話就是喚醒等待這個鎖的全部線程;
[w]:若是如今有不少個線程在等待中,
你不調用notifyAll(),而是調用notify(),會喚醒哪個?
[m]:是喚醒隨機一個吧(其實我也不太肯定);
這塊答得馬馬虎虎,有一些問題不太肯定;
[w]:我再問一下,Java裏面的多態相關的概念,
多態裏面有兩個經典概念,一個叫重載,一個叫重寫,能說一下這兩個有什麼區別嗎?
[m]:重載的話,你能夠不用涉及到什麼父類之類的,定義一個方法的惟一標識就是方法名稱、參數類型、參數個數,方法名稱相同,參數類型,參數個數,這兩個不一樣的話,那就是重載;
[w]:嗯,重寫呢?
[m]:重寫的話,就是要和父類相關,方法名稱要相同,參數類型、參數個數要相同,能夠把父類的方法覆寫,實現本身的方法;
[w]:我問一個場景:
你在子類中寫了一個方法,它和父類的那個方法,方法名字是如出一轍的,參數的類型和參數的個數列表也都如出一轍,惟獨返回類型不一樣,這樣你調用這個子類方法,會返回哪個?
[m]:返回類型不一樣的是吧,就調用子類的呀;哦,不對,這個它也實現了嘛,重寫,由於標識就是方法名稱、參數個數、參數類型都相同的話,調的應該就是子類的;(其實我感受這裏是有問題的,可是不太肯定)
[w]:我問一下,
若是是在同一個類裏,你寫了兩個方法,方法名如出一轍,參數列表如出一轍,惟獨返回類型不一樣,調用的時候會執行哪個?
[m]:這能夠嗎?
[w]:這個不能夠在哪裏?
[m]:這個東西就是....它,若是你定義返回類型,哦...返回類型....(有點不自信)很差意思,剛纔忽然打斷了,就是兩個方法同名是嗎...(面試官get到個人疑惑了)
[w]:對,就是在同一個類裏,你寫了兩個方法,方法名如出一轍,參數列表如出一轍,惟獨返回類型不一樣;
[m]:返回類型不一樣,而後咧?而後調用哪一個???而後就沒有了嗎?但我以爲這個就,我沒見過這樣寫的,並且感受定義會有問題啊,返回類型不一樣定義會有錯誤,編譯會有問題;
[w]:若是這種編譯會錯誤,那麼前面那種編譯爲何不會錯誤?
[m]:對喔,前面那個也會有問題哦...
[w]:行,這塊你回去再理解一下,或者你再查查資料,可是還能夠;
這塊答得不行,就是對知識點理解的不充分,因此纔不自信;
[w]:我接着問一下
Java 的垃圾回收你有多少了解?
[m]:GC是吧,就是....額....也不是很深,但稍微瞭解過,看過那本《深刻理解JVM虛擬機》
[w]:我這麼問吧,
Java若是咱們想要了解它虛擬機的話,經常會在JVM虛擬機中設置一些參數,好比說:Xmx,Xms,這些參數有見過嗎?瞭解它什麼含義嗎?
[m]:就是指定那個堆空間大小吧,-Xms、-Xmx,就是指定堆空間的大小,會有限制,最大或最小;
記:
- 其實GC這部分我仍是瞭解過一些的,好比GC分代、回收算法、標記算法,可是我確實不敢說我瞭解的有多深;
- 對於Xms和Xmx的回答,我可能答錯了,因此面試官直接跳到下一個模塊來問;
[w]:嗯,行,我問一下那個Linux你瞭解嗎,我看到你簡歷有寫:你有Linux基本的使用技能;我問一些Linux的基礎命令;
[m]:呵....你問吧
[w]:
在Linux命令中,重命名一個文件用什麼命令?
[m]:move,mv
[w]:
若是在Linux裏面,想要找到這臺機器上的全部tomcat進程,要用什麼命令?
[m]:tomcat進程是吧,ps -aux | grep tomcat
這塊還能夠吧;
[w]:嗯,好,問一下一些基礎的....大家有沒有學數據結構和算法相關的東西?
[m]:學了一些;
[w]:嗯,
那個排序算法裏面有一個比較經典的概念,就是叫作「穩定性」吧,咱們常常說有些排序算法是穩定的,有些是非穩定的,這個穩定指的是什麼意思,知道嗎?
[m]:知道呀,好比說有原始數據,1,1,就是兩個1嘛,一個是在角標1,一個是在角標2,排序過程當中,若是是穩定性算法的話,這兩個數字的相對位置是不會發現變化的,不穩定的話....(還沒說完)
[w]:這樣,我接着這個問,
哪些是穩定的排序算法?
[m]:穩定的算法,冒泡吧,插入排序,Emmm....想想,如今想到的是這兩個;
[w]:嗯,行,就這個裏面我再抽一個追問一下,
剛剛你提到了冒泡排序,你如今能回憶一下冒泡排序的過程,我問這麼一個問題,若是須要咱們把冒泡排序改形成非穩定的,要怎麼改?
[m]:改形成非穩定的,就是它會跟前面一個元素比較嘛,若是相等的話就把那個位置給換一下;
這塊還闊以吧;
[w]:嗯,好的,OK,大家這邊的狀況我基本瞭解,我再問一下其餘的一些狀況,就是你期末考試是到何時啊?若是你可以過來實習的話,你是何時才能開始實習?
[m]:7月10多號結束吧,咱們這邊校歷上是這樣寫的;
[w]:7月多少號?
[m]:這個我具體時間我記不清楚了,應該就是7月10幾號,我如今就能夠看一下;
[w]:7月10幾號....
[m]:對,實習的話就是我結束以後,考完試後我就能夠去;
[w]:嗯,大概能夠實習多久呢?
[m]:大概的話,就是....(還沒說完)
[w]:能夠實習到明年這個時候嗎?
[m]:能夠呀,可是我想先問一下,就是那邊實習的話,工做內容是否能夠寫論文,就是咱們這邊實習須要寫論文;
[w]:額,放心,這邊都是這個樣子的,我把我這邊的狀況先給你介紹一下好吧;
[w]:咱們這邊其實大量是大家中科大的學長在這邊實習,通常就是在本身的工做崗位上,用開發的內容就順便把論文一塊兒寫了,一代一代都是這樣子(說到這裏,我噗笑了一下)。就是蘇州中科大軟院咱們這邊很是熟,大家的每一代學長都在咱們這邊有大量的同窗,因此你看到的貼子應該是由內網,或者由內部院裏發出來的對吧;
[m]:我看到的貼子是我同窗在羣裏轉發的;
[w]:哦(面試官笑了下),好吧,反正就是說是一代代學長們....大家的學長們都是在這邊寫畢業論文的,畢設的這個問題不是問題。全部同窗到來年3月份,你開題的時候,咱們都會給你題目,基本上就是跟你工做相關的內容,而後就是能夠....比較放心吧。畢設的這個事情不用太擔憂。
[m]:嗯;
[w]:嗯,行,我以爲基本上,電話這輪應該是過了。以後的話,HR還會和你約一個面試,我想一下,你在蘇州,實際上是這樣子,仍是有一輪代碼的面試,代碼面試就比電話裏複雜一點,會出一兩個代碼題讓你寫。儘量是...由於,其實從你從蘇州中科大來公司其實也很近,OK的話就約一個現場面試吧,到時候我通知HR。我具體說一下,其實你從蘇州學校到愛奇藝這邊來大概兩個小時左右,由於那蘇州高鐵站不是坐20塊錢的動車坐到上海虹橋火車站,愛奇藝就在上海虹橋火車站旁邊,那這樣的話你以爲OK的話,我就找HR約一下現場的面試,看你哪天有空你就來一下咱們這邊。
[m]:也行;
[w]:嗯,能夠吧,那就,那就,具體時間,到時候可能在51以後的那一週吧,看你哪一天有空都行,隨便抽一個下午過來,到了這邊現場的話應該須要2~3個小時,就是方便的話,最好在下午的2點鐘,或3點鐘來,你晚上還能作個高鐵回去。這樣OK嗎?
[m]:噢...噢...能夠能夠
[w]:行,好的,那我就跟你約一個下週的現場面試,到時候你能夠作點準備。可是其實就和網上差很少,無非就是紙上寫代碼,這樣子的,看一下你實際的代碼本領;好的,OK,那這樣,電話面試就到這邊了。嗯,額....你對咱們這邊有什麼問題想問的嗎?
[m]:我想問...(話還沒說完)
[w]:或者你能夠到現場來,咱們在現場聊也同樣的(面試官也笑了),到這邊,到愛奇藝公司來看一看,而後上海愛奇藝裏大家很近。大家往年有不少學長都在咱們這邊。好的,那就這樣,那今天電話就到這邊;
[m]:嗯,好好...謝謝
[w]:嗯,好,OK,拜拜
[m]:拜拜
二輪 代碼筆試
2019.05.07 14:00
寫代碼這一輪,是我到上海愛奇藝創新大廈現場進行的。面試官拿幾張白紙過來,而後現場給你想個題目,在紙上畫一畫,把題目給你說明白,下面就是你本身開始手寫代碼了。時間應該是1h,若是你在1h內解題數<=1,可能就不及格了。若是你能力很強,那固然是作出的題越多越好,面試官也是按難度:低->高的模式給你出題的。
解答我就不貼出來了,網上一查挺多的。(
解題不是隻寫個思路就OK,通常是要寫個函數,或者難一點的話要寫個類,要求你的代碼是可執行的,導包那些可能不用寫)
題目一 String轉double
給你一個String,內容相似:「3.14159」、「-1294.28842」,不用進行特殊的判斷,好比:小數點存不存在,整數部分存不存在等,讓你把這個String轉換爲double類型。
我當時寫的解題思路是:整數部分乘10累加,小數部分除以10累加;
題目二 二叉樹蛇形打印
輸出:a b c g f e d 1 2 3 4 5 6 7 8程序員
我當時寫的解題思路是:一層隊列一層棧;github
作完題目一、2,應該還剩20分鐘左右,面試官有點猶豫,一開始說:那咱們繼續作個題吧,後面又說:那咱們仍是看一下簡歷吧。而後花了幾分鐘問了我些簡歷上的基本狀況,後面可能他本身想「這部份內容也不是我負責的啊」,而後就給我出了第三個題目。面試
題目三 動態規劃算法
數字1對應字母a,2對應字母b....26對應z,咱們給你一個字母組成的字符串「abc」,你能夠轉爲「123」。如今是要給你一個數字組成的字符串「123」,讓你求出有多少種可轉成的字符串。好比:數據庫
- 123:1-a、2-b、3-c,最後可轉爲:abc
- 123:12-l(小寫字母L)、3-c,最後可轉爲:lc
- 123:1-a、23-w,最後可轉爲:aw
- 因此總共有3種可轉換成的字符串;
這個題我沒寫出來,一開始想分治,後來以爲不對,應該用動態規劃。後來時間到了,他說沒事,你回去看一下《算法導論》的動態規劃。bootstrap
回到目錄
三輪 技術面試
2019.05.07 15:00
這輪面試我感受本身徹底被吊打,前面打小怪感受良好,後面被Boss反殺。因爲是現場面試,就沒錄音,只是根據印象記了些內容,如今整理出來。依舊是[w]:面試官,[m]:我。
[w]:剛纔作了什麼題目呢?
[m]:一個字符串轉double的,還有一個二叉樹蛇形打印的,還有個動態規劃的,動態規劃那個題沒作出來。
[w]:嗯,你日常用的是Java是吧?
[m]:對
[w]:(面試官遞給我簡歷)來,
挑一個你熟悉的講一下吧
[m]:(我挑了研一上學期的J2EE課設做業:SimpleController)
[w]:
你這個項目是作什麼的?
[m]:(我吧啦吧啦半天好像也沒講明白,一方面表達能力不行,另外一方面我不清楚要基於什麼樣的粒度去講解)
[w]:
你從這個項目中學到了什麼?
[m]:反射機制...(我原本想說反射和動態代理的,但我剛說完反射機制就被[w]打斷了,後來想一想,我以爲仍是應該把話說完的)
[w]:
那你怎麼理解反射機制的呢?
[m]:通常調用對象方法都是用個對象,打點,而後調用的嘛,而反射機制缺能夠經過類名、方法名等拿到一個方法調用的句柄,而後經過這個句柄來間接調用方法。(其實我這裏寫的仍是我整理過的話語,現場我說的可能比這個亂一些)
[m]:(而後我很做死的補充道)有時候使用反射機制去調用對象的私有方法,可能會存在安全性問題。
[w]:
你說反射調用一個對象的私有方法,會有安全性問題對吧,那你怎麼解決這個問題呢?
[m]:(我一臉懵逼,後悔不應亂BB的,而後我開始基於事實的亂編),能夠經過在對象中設置校驗位來避免。
[w]:校驗位???(面試官腦殼3個問號)
[m]:一個對象的狀態是由它的屬性來表示的嘛,若是經過反射機制來調用對象私有方法,可能會讓對象轉爲不肯定的狀態(即:按理不該該出現的狀態),那這時候在對象中設置一個校驗位,在方法調用前都會檢測這個校驗位,若是校驗失敗則方法調用失敗。也就是直接調用私有方法會讓校驗位變成「沒法經過校驗的值」。能夠類比List集合迭代器的過程,若是在遍歷的過程當中刪除元素,就會報錯,這裏面就是經過一個modCount校驗位來實現的。(我當時的回答沒這麼清晰,大概思路就這樣)
[w]:哦(我也不知道他聽懂沒,而後直接跳到下一個話題了)
[w]:
經常使用的設計模式熟悉嗎?
[m]:我知道一些,好比:單例、工廠...(我話還沒說完)
[w]:
單例,你怎麼理解單例的?
[m]:有時候一個類並不須要建立多個對象,其建立一個對象就能夠向外提供服務,若是建立多個對象,就會形成內存空間的浪費,因此使用了單例模式來控制對象的建立,保證一個類只有一個實例對象。
[w]:
你能寫出單例模式嗎?
[m]:能夠。(而後我寫了第一個版本的:使用靜態內部類來實現)
[w]:你這個編譯有問題啊。(後來我看了下,確實有問題,但當時有點慌,就沒注意到)
[w]:
你爲何使用靜態內部類來實現呢?
[m]:能夠延遲加載
[w]:
何時會被加載呢?
[m]:當調用那個靜態方法的時候,會加載那個靜態內部類,而後開始加載。
[w]:
靜態內部類你不會寫,那你能寫出其餘實現方法嗎?
[m]:能夠。(而後我寫了第二個版本:volatile+雙重檢測)
[w]:
你能給我講一下爲何要用雙重檢測嗎?
[m]:(我講了開頭,而後中途不知道腦子怎麼想的,忽然以爲我寫的是否是哪裏有問題。其實我寫的是對的,並且我也確實知道爲何那樣寫。只是當時要給面試官講的時候,邏輯是: 若是這樣子寫,那就會有問題,可是我拿的是正確的代碼來說的,講到途中忽然發現沒有出現預想的那個問題,因此忽然腦子中斷了一下,就一直沒回過來。後來想一想,本身好搞笑。)
[w]:代碼寫的出來,殊不知道爲何?(他內心確定在想,這小夥子確定是爲了應付面試,去背了代碼。orz...我沒有)
[m]:呵呵...
[w]:
你以爲你的優點是什麼?
[m]:我以爲我學習能力仍是比較強的。
[w]:
你能舉個例子說明一下嗎?
[m]:(這個問題我以前從沒準備過,也是現場就編,但也是事實),咱們上學期課程高級數據庫有個大做業,要作一個完整的Web項目,旅遊預訂系統。我以前沒怎麼寫過前端,而後各類查資料看前端內容,包括:bootstrap、Vue等,而後開始寫代碼,最後花了5天時間把這個大做業完成了。雖然這個網站作的不是那麼完美,但我這5天看官方文檔、菜鳥教程,基本都是full time寫項目,算是挑戰了自我吧,在這以前我沒想過本身能夠完成。
[w]:
5天完成是嗎?只作了前端嗎?
[m]:不是,是所有,包括後端、數據庫這些。
[w]:
那你以爲你的缺點是什麼?
[m]:我可能英語要差一些,相對於其餘同窗。而後表達可能會弱一些,就是腦子裏面想得表達出來時不清晰。還有有點偏內向,不太善於社交。
(中間好像還問了什麼,沒印象了)
[w]:
好吧,如今來看這麼一個題:4x4的方格里,最左下角有一個點A,最右上角有一個點B,規定只有兩種操做:往上移1步,或往右移1步,(注:不會往回走),問:從點A到點B有多少種走法?
(我想了想)
[w]:有思路嗎?
[m]:將右移定位1,上移定爲0,那就是取4個1和4個0的排列組合...(我話還沒說完)
[w]:答案是多少?有多少種?
[m]:(我呵呵...)暫時沒想出來。(後來吃飯時候和同窗討論,他說是

,不過我當時想的是

,因此須要去重,而怎麼去重我一時間沒想到,因此只能老老實實說沒想出來)
[w]:
若是讓你用算法實現,你怎麼作呢?
[m]:(我想都沒想)作一個深度優先遍歷吧。
[w]:
你能用動態規劃的方法來作嗎?
[m]:(又是動態規劃,以前沒怎麼刷過這方面的題,撲街)Emmmm,就是定義一個3維數組,g[u][v][?],而後起點(0,0)到其中一個點(0,k),而後再從k開始到終點,計算出這兩個子部分的值,而後把它們相乘。
[w]:什麼?3維數組?爲何是3維嗎?我有點沒清楚,你說的(u,v)是啥意思?
(而後我又講了下,也沒講清楚)
[w]:你如今是有個比較清晰的解題思路呢,仍是隻是有個模糊的解答過程?
[m]:比較模糊吧,我是想定義(u,v),表示節點u到節點v的路徑總數,可是這個節點又是個2維的。
[w]:那你要定義個4維的嗎?(面試官好像笑了下)
[m]:Emmmm,應該不會那麼麻煩的,應該有更簡單的解題思路。
[w]:你動態規劃方面的題是否是作的很少,我看你簡歷上有些刷題的,有leetcode啊。
[m]:對,我動態規劃這部分練的比較少。
[w]:
好吧,那咱們再來看下一個場景:N維向量,稀疏矩陣,這個稀疏矩陣中絕大多數是0值,只有不多一部分是非0值。假設有1億維,如何設計一個類去表示這個稀疏矩陣,而且要提供其與另一個稀疏矩陣相加的操做。
[m]:(這就是涉及大數據的知識了,個人盲區,我想了想,而後說)要壓縮數據,創建一個小一點的數組,去記錄稀疏矩陣中一個非0數後面有多少個0...
[w]:你寫一寫吧,能夠寫在白板上。
(我隨便寫了下內部的數據結構,而後他就過來看了。我大概跟他講了一下思路,其實我挺迷的。一開始想到的是在源串上直接壓縮數據,就是1個非0數字後面跟上一個0,0後面有個count值,表示這個非0數字後面0出現的次數,若是非0數字後面直接就是非0值,表示其後面沒有0。這種壓縮方法雖然能夠解壓縮,可是一時間沒想到怎麼提供加法操做,因此就用了額外的數組來保存count,而後還對原串進行分片....)
[w]:好吧,我大概懂你的思路。(我本身也沒懂,我不知道他怎麼懂的😂)
[w]:
你有什麼問題想要問我嗎?
[m]:若是我能在愛奇藝工做了,我要作什麼內容呢?
(而後他給我講了講他們作的內容)
[m]:能舉個具體點的例子嗎?
(他又跟我說了一會,什麼客戶方寫了個spark,打包,交給咱們的基礎平臺運行。)
[m]:這個架構是什麼樣子的?能給我講講嗎?或者畫個圖?
[w]:畫圖就先不畫了,其實網上不少相似的架構,只是每一個公司的細節可能不太同樣。
[m]:嗯嗯,好的。
[w]:好吧,那就先面到這裏,等咱們有消息了再通知你。
[m]:好的。
[w]:我送你下去吧。
[m]:嗯,謝謝。
回到目錄
總結
參考:科軟-實習招聘-筆試面試感悟(2019.03.24~2019.05.12)
附:電話面試問題點解惑
針對電話面試中我不清楚的問題進行回顧。
1 Java有個最基本的類Object,這個類默認包含哪幾個方法?
toString()、equals()、hashCode()、clone()、finalize()、wait()(wait方法有3個重載)、notify()、notifyAll()、getClass();
其實 Object 中還有個靜態的私有本地方法:registerNatives();定義以下:
1 private static native void registerNatives();
2 static {
3 registerNatives();
4 }
關於 registerNatives() 方法,我查了一些資料,是和 JNI(Java Native Interface)有關,先記錄一下查到的資料,後期須要時再深刻理解。
相關資料:
2 不調用notifyAll(),而是調用notify(),會喚醒哪個線程?
notify() API 中有這麼一段話:
Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation. A thread waits on an object's monitor by calling one of the wait methods.
譯文:
喚醒正在此對象監視器上等待的單個線程。若是有任何線程正在等待這個對象,則選擇其中一個線程被喚醒。選擇是任意的,由實現決定。線程經過調用一個等待方法來等待對象的監視器。
3 重載和重寫相關問題
3.1 Java 多態裏面有兩個經典概念,一個叫重載,一個叫重寫,能說一下這兩個有什麼區別嗎?
何爲參數列表?
- 參數列表就是一個有序序列,序列的項就是參數類型;
- 好比:void foo(String name, int age, float salary) 這個方法,其參數列表就是[String, int, float],共有3個參數;
參考:《Java程序員面試筆試寶典》4.2.7 重載和覆蓋有什麼區別?
重載,是在一個類中多態性的一種表現,是指在一個類中定義了多個方法,這些方法的方法名都相同,參數列表都不一樣;
在使用重載時,須要注意如下幾點:
- 1)不能經過方法的訪問權限、返回值類型和拋出的異常類型來進行重載;
- 2)對於繼承來講,若是基類方法的訪問權限爲 private,那麼就不能在派生類對其重載;若是派生類也定義了一個同名的函數,這只是一個新的方法,不會達到重載的效果;
- 3)對於靜態方法,有重載的概念;
重寫,是指子類重寫父類函數。在重寫時須要注意如下幾點:
- 1)子類中的重寫方法必需要和基類中被重寫方法有相同的函數名稱和參數;
- 2)子類中的重寫方法的返回值必須和父類中被重寫方法的返回值相同;
- 3)子類中的重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常
- 4)父類中被重寫的方法不能爲 private,不然其子類只是定義了一個方法,並無對其重寫;
- 5)對於靜態方法,並無重寫的概念;
重載和重寫的區別主要有如下幾個方面:
- 1)重寫是子類和父類之間的關係,是垂直關係;重載是同一個類中方法之間的關係,是水平關係;
- 2)重寫只能由一個方法或只能由一對方法產生關係;重載是多個方法之間的關係;
- 3)重寫要求參數列表相同;重載要求參數列表不一樣;
- 4)重寫關係中,調用方法是根據對象的類型(對象對應存儲空間類型)來決定;而重載關係是根據調用時的實參表與形參表來選擇方法體的;(在JVM層面理解,重載是靜態分派過程,重寫是動態分派過程)

其餘參考資料:
3.2 在子類中寫了一個方法,它和父類的那個方法,方法名字是如出一轍的,參數的類型和參數的個數列表也都同樣,惟獨返回類型不一樣,這樣你調用這個子類方法,會返回哪個?
代碼:
1 public class Father {
2 public void foo(String s, int i) {
3 System.out.println("Father: " + s + ", " + i);
4 }
5 }
6
7 public class Son extends Father {
8 public int foo(String s, int i) {
9 System.out.println("Son: " + s + ", " + i);
10 return 0;
11 }
12 }
編譯錯誤:

3.3 若是是在同一個類裏,你寫了兩個方法,方法名如出一轍,參數列表如出一轍,惟獨返回類型不一樣,調用的時候會執行哪個?
代碼:
1 public class Son {
2 public int foo(String name, int age) {
3 System.out.println("Son, name = " + name + ", age = " + age);
4 return 0;
5 }
6
7 public void foo(String name, int age) {
8 System.out.println("Son, name = " + name + ", age = " + age);
9 }
10 }
編譯錯誤:

4 有哪些排序算法是穩定的?

我當時答的是:直接插入排序、冒泡排序;
除此外還有:歸併排序、基數排序、計數排序,仍是由於不經常使用的緣由,因此印象不深入;
歸併排序:
轉載請說明出處!have a good time :-)