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