java常见面试题总结
生活随笔
收集整理的這篇文章主要介紹了
java常见面试题总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
面向?qū)ο缶幊?#xff08;OOP) Java是一個支持并發(fā)、基于類和面向?qū)ο蟮挠嬎銠C編程語言。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點:
23.Java中的HashMap的工作原理是什么? Java中的HashMap是以鍵值對(key-value)的形式存儲元素的。HashMap需要一個hash函數(shù),它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素。當調(diào)用put()方法的時候,HashMap會計算key的hash值,然后把鍵值對存儲在集合中合適的索引上。如果key已經(jīng)存在了,value會被更新成新值。HashMap的一些重要的特性是它的容量(capacity),負載因子(load factor)和擴容極限(threshold resizing)。 24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方? Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當根據(jù)鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實現(xiàn)這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發(fā)現(xiàn)重復元素。所以這兩個方法的實現(xiàn)對HashMap的精確性和正確性是至關重要的。 25.HashMap和Hashtable有什么區(qū)別?
77.數(shù)據(jù)庫連接池是什么意思? 像打開關閉數(shù)據(jù)庫連接這種和數(shù)據(jù)庫的交互可能是很費時的,尤其是當客戶端數(shù)量增加的時候,會消耗大量的資源,成本是非常高的。可以在應用服務器啟動的時候建立很多個數(shù)據(jù)庫連接并維護在一個池中。連接請求由池中的連接提供。在連接使用完畢以后,把連接歸還到池中,以用于滿足將來更多的請求。 遠程方法調(diào)用(RMI) 78.什么是RMI? Java遠程方法調(diào)用(Java RMI)是Java API對遠程過程調(diào)用(RPC)提供的面向?qū)ο蟮牡葍r形式,支持直接傳輸序列化的Java對象和分布式垃圾回收。遠程方法調(diào)用可以看做是激活遠程正在運行的對象上的方法的步驟。RMI對調(diào)用者是位置透明的,因為調(diào)用者感覺方法是執(zhí)行在本地運行的對象上的。看下RMI的一些注意事項。 79.RMI體系結構的基本原則是什么? RMI體系結構是基于一個非常重要的行為定義和行為實現(xiàn)相分離的原則。RMI允許定義行為的代碼和實現(xiàn)行為的代碼相分離,并且運行在不同的JVM上。 80.RMI體系結構分哪幾層? RMI體系結構分以下幾層: 存根和骨架層(Stub and Skeleton layer):這一層對程序員是透明的,它主要負責攔截客戶端發(fā)出的方法調(diào)用請求,然后把請求重定向給遠程的RMI服務。 遠程引用層(Remote Reference Layer):RMI體系結構的第二層用來解析客戶端對服務端遠程對象的引用。這一層解析并管理客戶端對服務端遠程對象的引用。連接是點到點的。 傳輸層(Transport layer):這一層負責連接參與服務的兩個JVM。這一層是建立在網(wǎng)絡上機器間的TCP/IP連接之上的。它提供了基本的連接服務,還有一些防火墻穿透策略。 81.RMI中的遠程接口(Remote Interface)扮演了什么樣的角色? 遠程接口用來標識哪些方法是可以被非本地虛擬機調(diào)用的接口。遠程對象必須要直接或者是間接實現(xiàn)遠程接口。實現(xiàn)了遠程接口的類應該聲明被實現(xiàn)的遠程接口,給每一個遠程對象定義構造函數(shù),給所有遠程接口的方法提供實現(xiàn)。 82.java.rmi.Naming類扮演了什么樣的角色? java.rmi.Naming類用來存儲和獲取在遠程對象注冊表里面的遠程對象的引用。Naming類的每一個方法接收一個URL格式的String對象作為它的參數(shù)。 83.RMI的綁定(Binding)是什么意思? 綁定是為了查詢找遠程對象而給遠程對象關聯(lián)或者是注冊以后會用到的名稱的過程。遠程對象可以使用Naming類的bind()或者rebind()方法跟名稱相關聯(lián)。 84.Naming類的bind()和rebind()方法有什么區(qū)別? bind()方法負責把指定名稱綁定給遠程對象,rebind()方法負責把指定名稱重新綁定到一個新的遠程對象。如果那個名稱已經(jīng)綁定過了,先前的綁定會被替換掉。 85.讓RMI程序能正確運行有哪些步驟? 為了讓RMI程序能正確運行必須要包含以下幾個步驟:
- 代碼開發(fā)模塊化,更易維護和修改。
- 代碼復用。
- 增強代碼的可靠性和靈活性。
- 增加代碼的可理解性。
- 通過隱藏對象的屬性來保護對象內(nèi)部的狀態(tài)。
- 提高了代碼的可用性和可維護性,因為對象的行為可以被單獨的改變或者是擴展。
- 禁止對象之間的不良交互提高模塊化。
- byte
- short
- int
- long
- float
- double
- boolean
- char
- 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
- 類可以實現(xiàn)很多個接口,但是只能繼承一個抽象類
- 類如果要實現(xiàn)一個接口,它必須要實現(xiàn)接口聲明的所有方法。但是,類可以不實現(xiàn)抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
- 抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。
- Java接口中聲明的變量默認都是final的。抽象類可以包含非final的變量。
- Java接口中的成員函數(shù)默認是public的。抽象類的成員函數(shù)可以是private,protected或者是public。
- 接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調(diào)用的。
- 繼承Thread類
- 實現(xiàn)Runnable接口
- 應用程序可以使用Executor框架來創(chuàng)建線程池
- 就緒(Runnable):線程準備運行,不一定立馬就能開始執(zhí)行。
- 運行中(Running):進程正在執(zhí)行線程的代碼。
- 等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結束。
- 睡眠中(Sleeping):線程被強制睡眠。
- I/O阻塞(Blocked on I/O):等待I/O操作完成。
- 同步阻塞(Blocked on Synchronization):等待獲取鎖。
- 死亡(Dead):線程完成了執(zhí)行。
- Collection:代表一組對象,每一個對象都是它的子元素。
- Set:不包含重復元素的Collection。
- List:有順序的collection,并且可以包含重復元素。
- Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復。
- Iterator可用來遍歷Set和List集合,但是ListIterator只能用來遍歷List。
- Iterator對集合只能是前向遍歷,ListIterator既可以前向也可以后向。
- ListIterator實現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前一個和后一個元素的索引,等等。
23.Java中的HashMap的工作原理是什么? Java中的HashMap是以鍵值對(key-value)的形式存儲元素的。HashMap需要一個hash函數(shù),它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素。當調(diào)用put()方法的時候,HashMap會計算key的hash值,然后把鍵值對存儲在集合中合適的索引上。如果key已經(jīng)存在了,value會被更新成新值。HashMap的一些重要的特性是它的容量(capacity),負載因子(load factor)和擴容極限(threshold resizing)。 24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方? Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當根據(jù)鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實現(xiàn)這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發(fā)現(xiàn)重復元素。所以這兩個方法的實現(xiàn)對HashMap的精確性和正確性是至關重要的。 25.HashMap和Hashtable有什么區(qū)別?
- HashMap和Hashtable都實現(xiàn)了Map接口,因此很多特性非常相似。但是,他們有以下不同點:
- HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。
- Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。
- HashMap提供了可供應用迭代的鍵的集合,因此,HashMap是快速失敗的。另一方面,Hashtable提供了對鍵的列舉(Enumeration)。
- 一般認為Hashtable是一個遺留的類。
- Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
- Array大小是固定的,ArrayList的大小是動態(tài)變化的。
- ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
- 對于基本類型數(shù)據(jù),集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數(shù)據(jù)類型的時候,這種方式相對比較慢。
- ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(1)時間復雜度對元素進行隨機訪問。與此對應,LinkedList是以元素列表的形式存儲它的數(shù)據(jù),每一個元素都和它的前一個和后一個元素鏈接在一起,在這種情況下,查找某個元素的時間復雜度是O(n)。
- 相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數(shù)組那樣重新計算大小或者是更新索引。
- LinkedList比ArrayList更占內(nèi)存,因為LinkedList為每一個節(jié)點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
- 根據(jù)應用的需要正確選擇要使用的集合的類型對性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應該用Array而不是ArrayList。
- 有些集合類允許指定初始容量。因此,如果我們能估計出存儲的元素的數(shù)目,我們可以設置初始容量來避免重新計算hash值或者是擴容。
- 為了類型安全,可讀性和健壯性的原因總是要使用泛型。同時,使用泛型還可以避免運行時的ClassCastException。
- 使用JDK提供的不變類(immutable class)作為Map的鍵可以避免為我們自己的類實現(xiàn)hashCode()和equals()方法。
- 編程的時候接口優(yōu)于實現(xiàn)。
- 底層的集合實際上是空的情況下,返回長度是0的集合或者是數(shù)組,不要返回null。
- Init:每次被載入的時候都會被初始化。
- Start:開始執(zhí)行applet。
- Stop:結束執(zhí)行applet。
- Destroy:卸載applet之前,做最后的清理工作。
- applet不能夠載入類庫或者定義本地方法。
- applet不能在宿主機上讀寫文件。
- applet不能讀取特定的系統(tǒng)屬性。
- applet不能發(fā)起網(wǎng)絡連接,除非是跟宿主機。
- applet不能夠開啟宿主機上其他任何的程序。
| 1 | CallableStament.prepareCall(); |
- 編譯所有的源文件。
- 使用rmic生成stub。
- 啟動rmiregistry。
- 啟動RMI服務器。
- 運行客戶端程序。
- 初始化到包含了遠程對象的JVM的連接。
- 序列化參數(shù)到遠程的JVM。
- 等待方法調(diào)用和執(zhí)行的結果。
- 反序列化返回的值或者是方法沒有執(zhí)行成功情況下的異常。
- 把值返回給調(diào)用者。
- 無論客戶端瀏覽器做怎么樣的設置,session都應該能正常工作。客戶端可以選擇禁用cookie,但是,session仍然是能夠工作的,因為客戶端無法禁用服務端的session。
- 在存儲的數(shù)據(jù)量方面session和cookies也是不一樣的。session能夠存儲任意的Java對象,cookie只能存儲String類型的對象。
- JSP頁面是被動態(tài)編譯成Servlet的,因此,開發(fā)者可以很容易的更新展現(xiàn)代碼。
- JSP頁面可以被預編譯。
- JSP頁面可以很容易的和靜態(tài)模板結合,包括:HTML或者XML,也可以很容易的和產(chǎn)生動態(tài)內(nèi)容的代碼結合起來。
- 開發(fā)者可以提供讓頁面設計者以類XML格式來訪問的自定義的JSP標簽庫。
- 開發(fā)者可以在組件層做邏輯上的改變,而不需要編輯單獨使用了應用層邏輯的頁面。
- 包含指令(Include directive):用來包含文件和合并文件內(nèi)容到當前的頁面。
- 頁面指令(Page directive):用來定義JSP頁面中特定的屬性,比如錯誤頁面和緩沖區(qū)。
- Taglib指令: 用來聲明頁面中使用的自定義的標簽庫。
- jsp:include-當JSP頁面被請求的時候包含一個文件。
- jsp:useBean-找出或者是初始化Javabean。
- jsp:setProperty-設置JavaBean的屬性。
- jsp:getProperty-獲取JavaBean的屬性。
- jsp:forward-把請求轉(zhuǎn)發(fā)到新的頁面。
- jsp:plugin-產(chǎn)生特定瀏覽器的代碼。
- application
- page
- request
- response
- session
- exception
- out
- config
- pageContext
轉(zhuǎn)載于:https://www.cnblogs.com/congcong1024/p/7772141.html
總結
以上是生活随笔為你收集整理的java常见面试题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中获取某段程序的执行时间
- 下一篇: JavaScript判断变量数据类型