java/javaee基础面试问题
1.面向對象和面向過程的區別對比:
面向對象易維護、易擴展、易復用,由于面向對象繼承、封裝、多態的特性,可以設計低耦合的系統易于維護,但因為類的實例化開銷較大,所以面向過程性能更高,一般性能是最主要的因素時采用面向過程開發,它沒有面向對象那么易維護易擴展易復用。
?
2.java語言的特點
跨平臺、面向對象,支持多線程、支持網絡編程。
?
3.JVM,JDK,JRE都是什么
jvm是運行java字節碼的虛擬機,對不同的系統又不同的實現,讓相同的代碼在不同的機器上都能出一樣的結果。
JRE是java的運行環境,它是運行已編譯 Java 程序所需的所有內容的集合,包括 Java虛擬機(JVM),Java類庫,java命令和其他的一些基礎構件。
JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE所擁有的一切,還有編譯器(javac)和工具(如javadoc和jdb)。它能夠創建和編譯程序。
?
4.什么是java字節碼
jvm可以理解的代碼就是字節碼,(就是擴展名是.class文件),它不需要任何特定的處理器,只面向虛擬機。jvm和字節碼實現一次編譯隨處運行。
?
5.從java代碼到運行起來又哪些步驟?
java源代碼通過jdk中的編譯器編譯生成jvm理解的lava字節碼,然后jvm可以運行字節碼。
?
6.java和c++區別是什么?
都是面向對象語言,都支持封裝、繼承和多態。c++可以操作指針,Java 不提供指針來直接訪問內存。Java 的類是單繼承的,C++ 支持多重繼承;java的接口可以多繼承。Java 有自動內存管理機制,不需要程序員手動釋放無用內存。
?
7.構造器是否可以被重寫?
構造器不可以,在繼承的時候,子類也無法獲得父類的構造器和私有的屬性。一般要用父類的構造器都是用super,加載順序?先加載父類吧,那super什么時候執行?
補充:可以重載。
?
8.說說面向對象
面向對象有封裝、多態繼承三個特征。
封裝是屬性私有化,對外提供訪問的方法,繼承可以通過繼承父類實現方法的復用,多態是聲明父類指向子類的實例。
好處是什么?常用的場景
?
9.String,StringBuffer,StringBuilder的區別,為什么String不可變
1.String是不可變的,StringBuffer,StringBuilder可變
2.線程安全上的差別,String因為不可變是線程安全的的,StringBuffer加了同步鎖也是線程安全的,StringBuilder線程不安全。 使用上的選擇:如果字符串不會更改,使用String類。如果字符串可以更改并且只能從單個線程訪問,則使用a?StringBuilder就足夠了。如果字符串可以更改,并且將從多個線程訪問,請使用StringBuffer。 10.java中定義一個不做事且沒有參數的構造方法是干什么的? java程序在執行子類的構造方法的時候,如果沒有一個super明確調用一個父類的構造方法,就會調用父類無參數的構造方法,為了防止子類不寫super發生編譯錯誤,就加上一個沒有參數的構造方法。 11.類可不可以不寫構造方法? 如果類一個構造方法都沒寫,那默認會給它一個無參的。 12.接口和抽象類的區別:? 從設計層面上看,抽象類提供了一種 IS-A 關系,子類對象必須能夠替換掉所有父類對象(里氏替換)。而接口更像是一種 LIKE-A 關系,它只是提供一種方法實現契約,并不要求接口和實現接口的類具有 IS-A 關系??床?明白
從使用上來看,一個類可以實現多個接口,但是不能繼承多個抽象類。
接口的字段只能是 static 和 final 類型的,而抽象類的字段沒有這種限制。
接口的成員只能是 public 的,而抽象類的成員可以有多種訪問權限。
抽象類一般會包含抽象方法,抽象方法一定位于抽象類中。
接口是抽象類的延伸,在 Java 8 之前,它可以看成是一個完全抽象的類,從 Java 8 開始,接口也可以擁有默認的方法實現,因為不支持默認方法的接口的維護成本太高了。在 Java 8 之前,如果一個接口想要添加新的方法,那么要修改所有實現了該接口的類。
備注:在JDK8中,接口也可以定義靜態方法,可以直接用接口名調用。實現類和實現是不可以調用的。如果同時實現兩個接口,接口中定義了一樣的默認方法,必須重寫,不然會報錯。
?
13.對象相等和引用相等的區別:對象相等比較的是內存中的內容,引用比較的是地址
?
14.==和equals,==對于基本類型比較值,對于引用類型比較地址;equals方法如果沒有被覆蓋和==一樣,如果被覆蓋了就根據內容比較。42 == 42.0為什么是true
?
15.為什么重寫equasl的時候也要重寫hashCOde?
因為equals()用來判斷兩個對象是否等價,hashCode是根據對象的內容算出散列值,要求等價的兩個對象散列值一定相等,所以equals()的時候應該一起覆蓋hashcode(),保證等價的兩個對象散列值也相等。 16。線程,程序,進程 程序是靜態的概念,是靜態的代碼,進程是程序的一次執行過程,是資源分配和調度的基本單位。 17.關于final關鍵字 ?final修飾的基本類型數據,那么值不可改變,如果是引用類型,那么引用不可變。 ?final修飾一個類,那么類不能被繼承, ?final修飾的方法,在繼承體系中可以防止子類重寫。 18.java中的異常 異常的祖先是Throwable類,下面有Error和Exception兩個子類,Error一般是程序運行時jvm出現的問題,比如oom,Exception是程序本身可以處理的異常。 finally哪怕try和catch里面有return也會執行。 19.什么是受檢異常和非受檢異常? 受檢異常是編程錯誤,自己無法預料的,所有 RuntimeException和它的子類還有 Error,他們不需要不需要在編譯的時候處理。 受檢異常是可以恢復的,比如讀寫文件要catch IOException。 20.java序列化中有些字段不想序列化怎么辦? 對不想序列化的變量用transient。 transient關鍵字的作用是:阻止實例中那些用此關鍵字修飾的的變量序列化;當對象被反序列化時,被transient修飾的變量值不會被持久化和恢復。transient只能修飾變量,不能修飾類和方法。 21.static的用法: ?修飾變量和方法。被static修飾的東西放在方法區。 ?靜態代碼塊(靜態代碼塊—>非靜態代碼塊—>構造方法,該類不管創建多少對象,靜態代碼塊只執行一次) ?靜態內部類。 ?靜態倒包。 22.Java反射 23.對象的深淺拷貝 在拷貝的時候,如果對于基本數據類型進行值傳遞,對于引用數據類型進行引用傳遞,那么就是淺拷貝。 深拷貝是基本類型值傳遞,引用類型創建一個新對象,并復制其中的內容是深拷貝。 java中的clone(),來自Object類,無論深淺拷貝都用它。 https://segmentfault.com/a/1190000010648514 來自https://github.com/Snailclimb/JavaGuide
轉載于:https://www.cnblogs.com/coolBing/p/10461739.html
總結
以上是生活随笔為你收集整理的java/javaee基础面试问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序和其两种优化
- 下一篇: apply,call,bind区别