2019年春杭州邦盛科技java面試題。
1,java基本類型
byte,char,short,int,long,float,double,boolean。
2,重寫重載
重寫,子類重寫父類的方法,方法名、參數類型、返回類型都和父類相同,所涉及到的權限修飾符必須大於被重寫的方法,public>private>default>protect,重寫方法不能出現新的檢查異常,或者比被重寫方法更寬泛的檢查型異常。
重載,發生在一個類中,方法名相同,參數不同,返回值不作為判定條件。
我個人對重寫和重載的理解就是:因為不論重寫和重載都是指的方法名相同的,所以當調用方法的時候,到底實際調用的哪個方法,重寫和重載的判定條件是不同的,重寫是根據實例,如果new出來的實例是那個類就調用哪個類的方法,是父類就調用父類的方法,是某一個子類,就調用這一個子類的方法,所以是運行時多態的表現,因為運行了才知道這個實例到底是哪個。重載是根據參數列表來判斷,java是嚴格參數匹配的,參數列表完全符合的就調用此方法,叫做編譯時多態。具體為啥叫做編譯時多態,可能是因為運行時多態被重寫給占了吧,來看一下標准答案。
方法的重載和重寫都是實現多態的方式,區別在於前者實現的是編譯時的多態性,而后者實現的是運行時的多態性。重載發生在一個類中,方法名相同但是參數列表不同則視為重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數列表,有兼容的返回類型,比被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。
這張圖是百度圖片,所謂里氏代換原則我的理解就是,能用基類的地方,必須能用超類,別管合不合適,反正是能用,因為超類是在基類的基礎行為上增加新的行為。
3,hashmap和hashtable
這個具體要看好多源碼才能徹底理解,面試的時候面試官可能會問hashmap和hashtable的區別,也可能穩hashmap和treemap的區別,有好多種文法,這個我會寫一個關於java容器的源碼解析。
這個問題回答主要我覺得只要回答這兩個就行,hashmap是線程不安全的,hashtable是線程安全的,線程安全的東西一般在單線程情況下就比較慢,線程不安全的在單線程情況下就比較快,但是多線程情況下就比較慢,我猜可能是因為不安全所以混亂、沒秩序。
4,socket
問我的是工作的時候如何用到的socket通信,我是在接口調用通信的時候,都會先調用一個通信類AbstractCommunicateClient,這是個基類,然后在子類里面重寫sendmsg()方法,在方法里面根據不同的通信方式調用不同的實例,比如socket通信就調用一個socketclient這樣一個實例,在socketclient里面實際上最終調用的也是java.net里面的socket類。
5,消息中間件
只用過阿帕奇的mq,了解太少。
6,svn管理項目
這個其實大家都會只是沒法說好,我覺得就是,不同的需求會有不同的需求編號,在被分配到一個需求的時候進行開發,提交代碼的時候將需求編號提交到備注里面,這樣打包的時候可以根據需求編號來判斷這部分是否需要更新。
7,項目流程
其實和上面一樣,現有需求后有開發,一個需求編號對應一次開發。
8,基本類型和引用
基本類型就是一個具體的值,直接存儲在棧空間里。引用類型是一個對象類型,它是存儲在棧空間的一個指向堆空間的地址,對象的具體信息存儲在堆空間里,而指向這個對象的地址就是這個引用類型,存儲在棧空間里。
9,==和equals
==比較的是引用,比較的是引用的地址值 ,equals方法,是object中的方法,如果不進行重寫的話,比較的也是引用的地址值,實際和==一樣。
如果自己所寫的類中已經重寫了equals方法,那么就按照用戶自定義的方式來比較兩個對象是否相等,如果沒有重寫過equal方法,那么會調用父類(Object)中的equals方法進行比較,也就是比較地址值。
10,多線程
參考另一篇java多線程學習的博客。https://www.cnblogs.com/m1996/p/10993685.html
11,什么情況出現線程不安全
一個變量同時被兩個線程操作的時候就會出現一些不想看到的結果,就是線程不安全的,可用通過與鎖或者同步塊的方式來解決,線程安全問題一般是由全局變量和靜態變量引起的。
12,web.xml配置
springboot里面的web.xml里面都配置哪些內容。
13,用的ext版本
版本號4.2
14,webservice實現
15,內存溢出情況
分為棧溢出和堆溢出
16,用過的設計模式
用過工廠模式,接口的部分,用過單例模式,數據庫連接池。
17,日期轉換類
SimpleDateFormat
18,數據庫池
19,線程池
20,優勢
相比應屆生多了一些經驗,遇到過的問題更多,解決問題的思路更多,抗壓能力更強。相比老員工更能吃苦,沒有家庭沒有壓力沒有牽掛。(更愛學習新的東西)
21,博客:現在有了。
22,如何學習:一般就是看視頻,現在可以再博客上面總結。
23,類和接口的區別
(1)含有抽象方法的類是抽象類,抽象類可以沒有抽象方法,同時也可以有實現方法,但是接口中只能有抽象方法。
(2)抽象類是類,java中是單繼承多實現,所以抽象類只能被單繼承,接口可以被多實現。
(3)抽象類中可以有構造器。
(4)抽象方法要被實現,所以不能使靜態的和私有的。
(5)接口的權限修飾符只能是public
(6)接口和抽象類都不能直接實例化,如果要實例化,抽象類的超類必須實現所有父類的抽象方法,子接口的實現要實現所有接口的方法。
我的理解,抽象類和接口的概念大概是,抽象類是把類抽象出來,把一些類的共有特性抽象出來,如果需要實現一些基本功能並且有默認的實現,不需要被多實現,那么使用抽象類。而接口更像是把行為抽象出來,如果要拓展一些新的功能,那么用接口。
抽象類適合用來定義某個領域的固有屬性,也就是本質,接口適合用來定義某個領域的擴展功能。
舉個例子:把男人和女人的基本屬性抽象出來,這個抽象類叫人,男人和女人都只能是人不能是豬,這叫做單繼承,但是把男人和女人的行為抽象出來,比如喝水接口、吃飯接口,男人和女人都可以實現很多接口。如果基本功能不斷改變就要使用抽象類,如果需要不斷拓展功能,就要使用接口。
總結一下:問的都是java基礎問題,有些東西問的深了還是會答不上來。面試題大概可以從三個方面去強化:
一、java線程、鎖相關的問題
二、java容器的相關問題
三、過去做過項目中的東西要多了解