摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態是面向對象最精髓的東西,要實現運行時多態需要方法重寫子類繼承父類并重寫父類中已
1、簡述Java程序編譯和運行的過程:
答:① Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之后,程序會先被編譯成 “.class” 文件。
② 在編譯好的java程序得到“.class”文件后,使用命令java 運行這個 .class 文件,系統就會啟動一個jvm進程,并找到主函數的入口,開始執行main函數。
2、值傳遞和引用傳遞的區別:
答:①值傳遞:值傳遞是將進行傳遞的值進行拷貝,然后對拷貝之后的值進行傳遞,傳遞過程前后不改變原值的大小;
②引用傳遞:引用傳遞是將需要傳遞值的地址進行傳遞,傳遞過程前后會改變原值的大小。
3、‘==’和equals的區別:
答:“==”操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
equals方法是用于比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:
String a=new String("foo");
String b=new String("foo");
兩條new語句創建了兩個對象,然后用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內容是相同的,所以,表達式a.equals(b)將返回true。
4、String 和StringBuilder的區別:
答:①String創新的字符串建的字符串是不可變的,如果改變字符串變量的值,是在內存中創建一個新的字符串,字符串變量將引用新創建的字符串地址,而原來的字符串在內存中依然存在且內容不變,直至java的垃圾回收系統對其進行銷毀;
②StringBuilde創建一個可變的字符串,StringBuilder沒有實現線程安全,因此性能較好。
5、java中,throw和throws 有什么區別:
答:throw 用于拋出 java.lang.Throwable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個Exception,如:
throw new IllegalArgumentException(“XXXXXXXXX″)
而throws 的作用是作為方法聲明和簽名的一部分,方法被拋出相應的異常以便調用者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。
6、HashMap的hashcode的作用:
答:hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用來在散列存儲結構中確定對象的存儲地址的。
如果兩個對象相同,就是適用于equals(java.lang.Object) 方法,那么這兩個對象的hashCode一定要相同。
如果對象的equals方法被重寫,那么對象的hashCode也盡量重寫,并且產生hashCode使用的對象,一定要和equals方法中使用的一致,否則就會違反上面提到的第2點。
兩個對象的hashCode相同,并不一定表示兩個對象就相同,也就是不一定適用于equals(java.lang.Object) 方法,只能夠說明這兩個對象在散列存儲結構中,如Hashtable,他們“存放在同一個籃子里”。
7、什么時候需要重寫?
答:一般的地方不需要重載hashCode,只有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode,那么為什么要重載hashCode呢?
要比較兩個類的內容屬性值,是否相同時候,根據hashCode 重寫規則,重寫類的 指定字段的hashCode(),equals()方法。
8、Overload和Override的區別?
答:Overload是重載的意思,Override是覆蓋的意思,也就是重寫。
重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。
重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當于把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的訪問權限只能比父類的更大,不能更小。如果父類的方法是private類型,那么,子類則不存在覆蓋的限制,相當于子類中增加了一個全新的方法。
9、靜態變量和實例變量的區別?
答:在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區別:實例變量屬于某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象后才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
10.如果main方法被聲明為private會怎樣?
答:能正常編譯,但運行的時候會提示”main方法不是public的”。
11、說一說Servlet的生命周期?
答:Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init(),service()和destroy方法表達。
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do*()方法。結束服務,web容器調用servlet的destroy()方法。
12、Java的”一次編寫,處處運行”是如何實現的?
答:Java程序會被編譯成字節碼組成的class文件,這些字節碼可以運行在任何平臺,因此Java是平臺獨立的。
13、如果去掉了main方法的static修飾符會怎樣?
答:程序能正常編譯。運行時會拋NoSuchMethodError異常。
14、GC是什么?為什么要有GC?
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
15、為什么Java里沒有全局變量?
答:全局變量是全局可見的,Java不支持全局可見的變量,因為:全局變量破壞了引用透明性原則。全局變量導致了命名空間的沖突。
16、Java支持哪種參數傳遞類型?
答:Java參數都是進行傳值。對于對象而言,傳遞的值是對象的引用,也就是說原始引用和參數引用的那個拷貝,都是指向同一個對象。
17、get 和 post請求的區別
答:get:
1、請求的參數會附加在URL之后,多個參數用 & 連接。
2、因為URL的長度限制,get 方式傳輸的數據大小有所限制。
3、安全性低,因為傳輸的數據會顯示在請求的URL中。
post:
1、將請求參數放置在 HTTP 數據包,發送給服務器。
2、傳送的數據量比較大
3、安全性較高
18、是否可以從一個靜態(static)方法內部發出對非靜態(non-static)方法的調用?
答:不可以,靜態方法只能訪問靜態成員,因為非靜態方法的調用要先創建對象,然后在調用靜態方法時可能對象并沒有被初始化。
19、程序中可以允許多個類同時擁有都有main方法嗎?
答:可以。當程序運行的時候,我們會指定運行的類名。JVM只會在你指定的類中查找main方法。因此多個類擁有main方法并不存在命名沖突的問題。
20、什么是反射API?它是如何實現的?
答:反射是指在運行時能查看一個類的狀態及特征,并能進行動態管理的功能。這些功能是通過一些內建類的反射API提供的,比如Class,Method,Field, Constructors等。使用的例子:使用Java反射API的getName方法可以獲取到類名。
21、為什么重載hashCode方法?
答:一般的地方不需要重載hashCode,只有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode,那么為什么要重載hashCode呢?
如果你重寫了equals,比如說是基于對象的內容實現的,而保留hashCode的實現不變,那么很可能某兩個對象明明是“相等”,而hashCode卻不一樣。
這樣,當你用其中的一個作為鍵保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一個作為鍵值去查找他們的時候,則根本找不到。
22、Final在java中的作用
答:Final可以修飾類,修飾方法,修飾變量。
修飾的類叫最終類。該類不能被繼承。
修飾的方法不能被重寫。
修飾的變量叫常量,常量必須初始化,一旦初始化后,常量的值不能發生改變。
23、為什么需要hashCode?
答:1.通過hashCode可以很快的查到小內存塊。
2.通過hashCode比較比equal方法快,當get時先比較hashCode,如果hashCode不同,直接返回false。
24、Super與this表示什么?
答:Super表示當前類的父類對象
This表示當前類的對象
25、Cookie 和 Session 的區別
答:Cookie:是把數據保存在瀏覽器本地,并隨著每一次請求發送到服務器。
Session:是把用戶數據保存在服務器端。
26、IO 和 NIO 的區別,NIO的優點
答:1、IO是面向流的,NIO是面向緩沖區的。
2、IO是阻塞的,NIO是非阻塞的。
3、NIO有選擇器機制,可以讓一個線程來監視多個IO通道。
NIO的優點:
1、不需要使用 read() 或者 write() 就可以處理文件內容。
2、NIO的處理效率很快。
27、談談對Java中多態的理解?
答:多態是指允許不同子類型的對象對同一消息作出不同的響應。
多態包括編譯時多態和運行時多態。
方法重載(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為后綁定)。
運行時多態是面向對象最精髓的東西,要實現運行時多態需要:
方法重寫:子類繼承父類并重寫父類中已有的或抽象的方法。
對象造型:將父類型的引用指向子類型的對象,這樣父類的引用調用同樣的方法時即會根據子類對象的不同而表現出不同的行為。
28、Integer內部緩存?
答:Integer類內部有一個staitic 的Integer數組,存儲的是一些已經完成初始化的Integer對象,一般值為(-128~127),若用==比較,則有時候會因為值不在緩存中而返回false,所以應該用equals比較。
29、LinkedList的原理?
答:(1)底層是一個雙向鏈表,維護著一個first指針和一個last指針。
(2)隨機讀寫(get,set)的時間復雜度為O(n)。
(3)插入操作add(object)的時間復雜度為O(1);add(index, object)的時間復雜度為O(n)。
(4)刪除操作remove(object)的時間復雜度為O(1);remove(index)的時間復雜度為O(n)。
30、什么是拆裝箱?
答:拆箱:把包裝類型轉成基本數據類型
裝箱:把基本數據類型轉成包裝類型
31、Static關鍵字有什么作用?
答:Static可以修飾內部類、方法、變量、代碼塊
Static修飾的類是靜態內部類
Static修飾的方法是靜態方法,表示該方法屬于當前類的,而不屬于某個對象的,靜態方法也不能被重寫,可以直接使用類名來調用。在static方法中不能使用this或者super關鍵字。
Static修飾變量是靜態變量或者叫類變量,靜態變量被所有實例所共享,不會依賴于對象。靜態變量在內存中只有一份拷貝,在JVM加載類的時候,只為靜態分配一次內存。
Static修飾的代碼塊叫靜態代碼塊,通常用來做程序優化的。靜態代碼塊中的代碼在整個類加載的時候只會執行一次。靜態代碼塊可以有多個,如果有多個,按照先后順序依次執行。
32、為什么equals()相等,hashCode就一定要相等,而hashCode相等,卻不要求equals相等?
答:1.因為是按照hashCode來訪問小內存塊,所以hashCode必須相等。
2.HashMap獲取一個對象是比較key的hashCode相等和equal為true。
之所以hashCode相等,卻可以equal不等,就比如ObjectA和ObjectB他們都有屬性name,那么hashCode都以name計算,所以hashCode一樣,但是兩個對象屬于不同類型,所以equal為false。
33、heap和stack有什么區別。
答:java的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,會為這個方法多帶帶分配一塊私屬存儲空間,用于存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。
堆是與棧作用不同的內存,一般用于存放不在當前方法棧中的那些數據,例如,使用new創建的對象都放在堆里,所以,它不會隨方法的結束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。
34、String 是最基本的數據類型嗎?
答:不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitivetype)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
35、數組有沒有length()這個方法? String有沒有length()這個方法
答: 數組沒有length()這個方法,有length的屬性。String有有length()這個方法
36、接口有什么特點?
答:接口中聲明全是public static final修飾的常量
接口中所有方法都是抽象方法
接口是沒有構造方法的
接口也不能直接實例化
接口可以多繼承
37、JDK 中常用的包有哪些?
答:java.lang、java.util、java.io、java.net、java.sql。
38、Collection 和 Collections的區別
答: Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作
39、什么是 Java 的反射機制
答:反射機制:是指程序可以在運行時 訪問 或 修改 它本身狀態和方法的這種能力。
40、JDK、JRE、JVM 分別是什么關系?
答:JDK 即為 Java 開發工具包,包含編寫 Java 程序所必須的編譯、運行等開發工具以及 JRE。開發工具如:用于編譯 Java 程序的 javac 命令、用于啟動 JVM 運行 Java 程序的 Java 命令、用于生成文檔的 Javadoc 命令以及用于打包的 jar 命令等等。
JRE 即為 Java 運行環境,提供了運行 Java 應用程序所必須的軟件環境,包含有 Java 虛擬機(JVM)和豐富的系統類庫。系統類庫即為 Java 提前封裝好的功能類,只需拿來直接使用即可,可以大大的提高開發效率。
JVM 即為 Java 虛擬機,提供了字節碼文件(.class)的運行環境支持。 簡單說,就是 JDK 包含 JRE 包含 JVM
更多優質文章請關注我的微信公眾號:細說架構
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73551.html
摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態是面向對象最精髓的東西,要實現運行時多態需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...
摘要:這是我在一次面試中,被面試官所提問的一道題在這次面試題中相等指的是對象的屬性個數值相等有這樣兩個李德華張德華我能想到的一種方案解答過程的思考由于沒有,我只能通過轉化成數組進入第二步,對象中的屬性在另一個中是否存在。 這是我在一次面試中,被面試官所提問的一道題 在這次面試題中 相等:指的是對象的屬性個數值相等 有這樣兩個obj let obj1 = { name:李德華, ...
摘要:為程序員金三銀四精心挑選的余道面試題與答案,歡迎大家向我推薦你在面試過程中遇到的問題我會把大家推薦的問題添加到下面的常用面試題清單中供大家參考。 為Java程序員金三銀四精心挑選的300余道Java面試題與答案,歡迎大家向我推薦你在面試過程中遇到的問題,我會把大家推薦的問題添加到下面的常用面試題清單中供大家參考。 前兩天寫的以下博客,大家比較認可,熱度不錯,希望可以幫到準備或者正在參加...
摘要:到十二月份,公司開始第二波裁員,我決定主動拿賠償走人。加一個小插曲上面的題是餓了嗎面試問到的。想去的公司沒有面試好,不要氣餒,繼續加油準備。避免打擊自信心。 回顧一下自己這段時間的經歷,九月份的時候,公司通知了裁員,我匆匆忙忙地出去面了幾家,但最終都沒有拿到offer,我感覺今年的寒冬有點冷。到十二月份,公司開始第二波裁員,我決定主動拿賠償走人。后續的面試過程我做了一些準備,基本都能走...
閱讀 3244·2021-09-22 16:06
閱讀 3236·2021-09-02 15:40
閱讀 632·2019-08-30 15:54
閱讀 1035·2019-08-26 12:22
閱讀 1375·2019-08-26 12:17
閱讀 2742·2019-08-26 12:09
閱讀 502·2019-08-26 10:20
閱讀 783·2019-08-23 16:28