您好,登錄后才能下訂單哦!
這篇文章主要介紹“有哪些常見的java面試題”,在日常操作中,相信很多人在有哪些常見的java面試題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”有哪些常見的java面試題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 面試第一步,自我介紹。
2. 請你簡述下對面向對象的理解,面向對象和面向過程的區(qū)別?
3. 那你再講下面向對象的特征有哪些方面
4. 請問:我們是否可以繼承 String類?
5. 我再問下final、finally、finalize這三者有什么區(qū)別嗎?
6. 請講下String和 StringBuilder、StringBuffer之間的區(qū)別?
這個自我介紹,在整個面試當中可以說是第一步,如果你能把你想說的重點說出來,把面試官帶到你準備好的技術點中,可以說,你這次自我介紹成功了!
那么說下自我介紹需要包含什么:基本信息,教育背景、工作經歷、項目經歷、個人成長等。
可以說模板基本類似,但是每個的技術點、工作經歷、項目經歷都大不相同。所以在自己把握的點當中突出出來,抓住面試官的眼球。
模板:
例如:面試官您好,我叫xxx,18年畢業(yè)xx學校本科xx專業(yè),畢業(yè)至今已有x年工作經驗,在從事Java開發(fā)期間任職于x家公司。
第一家公司是xxx,這家公司是做xxx的,在java這一塊我主要負責/參與的是xxx項目,在這個項目中主要負責xxx功能模塊。在這家公司我收獲成長最大的是xxx(技術和做事方面闡述),之所以離開這家公司是因為xxx(離職原因可以不說,就闡述下具體干了些什么)。
第二家公司也就是我上一任公司xxx,這家公司是做xxx,我在這家公司主要負責的是xxx,我在這家公司的收獲是xxx,離開這家公司是因為xxx(離職原因可以不說,就闡述下具體干了些什么)。
平時的話我也會經常去學習技術,或者寫一些技術博客比如我的公眾號、CSDN博客有太子爺哪吒(也可以加一些自己平時的愛好,甚至寫的什么博客,什么GitHub地址都行,能讓自己加分就行!)
所以來說,這個比較廣泛,可以自由發(fā)揮。打好第一步,后面的信息相對來說比較足點。我個人面試的話,經常特別緊張,但是一旦我自我介紹說好了,面試官問了我在自我介紹中提過的技術點,我個人就會相對自信點。跟面試官也會聊得比較久,比較開心。其實面試都是雙向,他在選擇你,你也在選擇他,所以不必擔心,不必過于緊張。把準備好的說出來就行啦!
那么在你自我介紹完后,我們開始進入面試階段。
那我們先考下你的基礎知識吧!請講述下這個問題。
1.個人理解:
軟件開發(fā)思想,先有面向過程,后有面向對象 。
在大型軟件系統(tǒng)中,面向過程的做法不足,從而推出了面向對象 。
都是解決實際問題的思維方式 。
兩者相輔相成,宏觀上面向對象把握復雜事物的關系;微觀上面向過程去處理。
面向過程以實現功能的函數開發(fā)為主;面向對象要首先抽象出類、屬性及其方法,然后通過實例化類、執(zhí)行方法來完成功能 。
面向過程是封裝的是功能;面向對象封裝的是數據和功能 。
面向對象具有繼承性和多態(tài)性;面向過程則沒有 。
2.面向對象
優(yōu)點:易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態(tài)性的特 性,可以設計出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護 。
缺點: 性能比面向過程低。
3.面向過程
優(yōu)點:性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗 資源;比如單片機、嵌入式開發(fā)、Linux/Unix 等一般采用面向過程開發(fā),性能是 最重要的因素。
缺點:沒有面向對象易維護、易復用、易擴展 。
嗯?講的不錯嘛!看來是有相對應的理解在里面??!不錯不錯,我再考你一個問題。
面向對象的特征有具體四個方面:封裝、繼承、抽象、多態(tài)。
封裝:封裝把一個對象的屬性私有化,同時提供一些可以被外界訪問的訪問。
繼承:繼承是從已有類得到繼承信息創(chuàng)建新類的過程,提供繼承信息的類叫做父類,得到繼承信息的類叫做子類。通過使用繼承我們能夠非常方便地復用以前的代碼。
抽象:抽象是將一類對象的共同特征總結出來構造類的過程,包括了數據抽象和行為抽象。
多態(tài):所謂多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā) 出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發(fā)出的方法調用到底是哪個類中 實現的方法,必須在由程序運行期間才能決定。實際上就是用同樣的對象調用同樣的方法會做出不同的反應事情。
不可以,在我們查看String源碼的時候,可以發(fā)現:String類是被final修飾,是不可以被繼承的。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ..... }
而final有什么作用呢?
修飾類時:表示著該類不能被繼承。
修飾方法時:表示方法不能被重寫。
修飾變量時:表示變量不能被一次賦值,不能再修改了。
所以String被final修飾的好處有:安全,高效。 并且在當只有字符串不可變的時候,我們才能實現字符串常量池,字符串常量池可以為我們緩存字符串,提高程序的運行效率。
可以啊,一問多答,秒啊!既然提到了final這個關鍵字。那么
final:修飾符(關鍵字)有三種用法:
如果一個類被聲明為 final,意味著它不能再派生出新的子類,即不能被繼承,因此它和 abstract 是反義詞。
將變量聲明為 final,可以保證它們在使用中不被改變,被聲明為 final 的變量必須在聲明時給定初值,而在以后的引用中只能讀取不可修改。
被聲明為 final 的方法也同樣只能使用,不能在子類中被重寫。
finally: 通常放在try…catch…處理異常中,代表著程序無論正常執(zhí)行還是發(fā)生異常,這里的代碼都會執(zhí)行。 一般是把釋放資源的代碼放在finally塊中。
finalize: 是Object類中定義的方法,Java中允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之 前做必要的清理工作。這個方法是由垃圾收集器在銷毀對象時調用的。
可以,那再回到String這里,
首先String和 StringBuilder、StringBuffer它們都是可以存儲和操作字符串的。
String它是使用final關鍵字字符數組來保存字符串,所以String對象是不可變的。
而StringBuilder和StringBuffer都是繼承自AbstractStringBuilder類,這其中也是用字符數組來保 存字符串,但是沒有被final修飾,所以是可變的。
但是StringBuilder中的方法沒有synchronized修飾,所以它的效率會比StringBuffer高。
安全方面的話:
String的對象是不可變的,所以它是線程安全的。
StringBuffer因為對方法加了同步鎖,所以也是線程安全,但是StringBuilder沒有加同步鎖,所以 線程不安全的。
性能方面的話:
每次對String類型進行改變的時候,都會生成一個新的String對象, 然后將指針指向新的String的對象。
StringBuffer和StringBuilder每次修改,會可以對對象本身進行操作修改,而不是生成新的對象并 改成對象引用。
使用場景:
如果要操作少量的數據用 String 。
單線程操作字符串緩沖區(qū)下操作大量數據用StringBuilder。
多線程操作字符串緩沖區(qū)下操作大量數據 用StringBuffer 。
小伙子不錯嘛!今天就到這里,期待你明天的到來,希望能讓我繼續(xù)保持驚喜!
到此,關于“有哪些常見的java面試題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。