Java的一些知識點對比參照?

= =與equals的區別

1.如果是基本類型比較,那麼只能用==來比較,不能用 equals
2.
對象間的比較使用equals ==比較的是對象中的地址equals比較的時候一定要重寫對象的equals方法,

3.如果對象沒有覆寫equals,那麼調用這個對象equals時候就默認調用Objectequals方法,Objectequals默認實現的是用==比較,所以一定要覆寫對象的equals方法

 

ArrayListLinkedList的區別和聯繫

 

 1. ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。

 2. 對於隨機訪問getsetArrayList覺得優於LinkedList,因爲LinkedList要移動指針。

 3. 對於新增和刪除操作addremoveLinedList比較佔優勢,因爲ArrayList要移動數據 

CookieSession的區別


getpost的區別

1. get是從服務器上獲取數據,post是向服務器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認爲不受限制。
4. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。

建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;
2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;

HashMapHashtable的區別


HibernateIBatis的區別

1 iBATIS非常簡單易學,Hibernate相對較複雜,門檻較高。

2二者都是比較優秀的開源產品

3當系統屬於二次開發,無法對數據庫結構做到控制和修改,iBATIS的靈活性將比Hibernate更適合

4系統數據處理量巨大,性能要求極爲苛刻,這往往意味着我們必須通過經過高度優化的SQL語句(或存儲過程)才能達到系統性能設計指標。在這種情況下iBATIS會有更好的可控性和表現。

5 iBATIS需要手寫sql語句,也可以生成一部分,Hibernate則基本上可以自動生成,偶爾會寫一些Hql。同樣的需求,iBATIS的工作量比Hibernate要大很多。類似的,如果涉及到數據庫字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。

6以數據庫字段一一對應映射得到的POHibernte這種對象化映射得到的PO是截然不同的,本質區別在於這種PO是扁平化的,不像Hibernate映射的PO是可以表達立體的對象繼承,聚合等等關係的,這將會直接影響到你的整個軟件系統的設計思路。

7 Hibernate現在已經是主流O/RMapping框架,從文檔的豐富性,產品的完善性,版本的開發速度都要強於iBATIS

8.   如果項目不復雜,那麼開發速度上面Hibernate要遠遠高於IBatis

9.   調試方面IBatis要比Hibernate簡單

 

 

 

 

Hibernate裏面一級緩存,二級緩存,查詢緩存的區別

IBatis和MyBatis的區別和聯繫


Java程序運行時候靜態綁定和動態綁定區別

一個Java程序的執行要經過編譯和執行(解釋)這兩個步驟,同時Java又是面向對象的編程語言。當子類和父類存在同一個方法,子類重寫了父類的方法,程序在運行時調用方法是調用父類的方法還是子類的重寫方法呢,這應該是我們在初學Java時遇到的問題。這裏首先我們將確定這種調用何種方法實現或者變量的操作叫做綁定。

Java中存在兩種綁定方式,一種爲靜態綁定,又稱作早期綁定。另一種就是動態綁定,亦稱爲後期綁定。

區別對比

·        靜態綁定發生在編譯時期,動態綁定發生在運行時

·        使用privatestaticfinal修飾的變量或者方法,使用靜態綁定。而虛方法(可以被子類重寫的方法)則會根據運行時的對象進行動態綁定。

·        靜態綁定使用類信息來完成,而動態綁定則需要使用對象信息來完成。

·        重載(Overload)的方法使用靜態綁定完成,而重寫(Override)的方法則使用動態綁定完成。

Java內存中棧(Stack)和堆(Heap)的區別

stack 和 heep 都是內存的一部分
stack 空間小,速度比較快, 用來放對象的引用
heep 大,一般所有創建的對象都放在這裏。

棧(stack):是一個先進後出的數據結構,通常用於保存方法(函數)中的參數,局部變量.
在java中,所有基本類型和引用類型都在棧中存儲.棧中數據的生存空間一般在當前scopes內(就是由{...}括起來的區域).
堆(heap):是一個可動態申請的內存空間(其記錄空閒內存空間的鏈表由操作系統維護),C中的malloc語句所產生的內存空間就在堆中.
在java中,所有使用new xxx()構造出來的對象都在堆中存儲,當垃圾回收器檢測到某對象未被引用,則自動銷燬該對象.所以,理論上說java中對象的生存空間是沒有限制的,只要有引用類型指向它,則它就可以在任意地方被使用.

        1. 棧(stack)與堆(heap)都是Java用來在Ram中存放數據的地方。與C++不同,Java自動管理棧和堆,程序員不能直接地設置棧或堆。
        2. 棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據可以共享,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
        3. Java中的數據類型有兩種。
        一種是基本類型(primitivetypes), 共有8種,即int,short, long, byte, float, double, boolean, char(注意,並沒有string的基本類型)。這種類型的定義是通過諸如int a =3; long b = 255L;的形式來定義的,稱爲自動變量。值得注意的是,自動變量存的是字面值,不是類的實例,即不是類的引用,這裏並沒有類的存在。如inta = 3; 這裏的a是一個指向int類型的引用,指向3這個字面值。這些字面值的數據,由於大小可知,生存期可知(這些字面值固定定義在某個程序塊裏面,程序塊退出後,字段值就消失了),出於追求速度的原因,就存在於棧中。
另外,棧有一個很重要的特殊性,就是存在棧中的數據可以共享。假設我們同時定義:
            int a =3;
            int b = 3;
編譯器先處理int a = 3;首先它會在棧中創建一個變量爲a的引用,然後查找有沒有字面值爲3的地址,沒找到,就開闢一個存放3這個字面值的地址,然後將a指向3的地址。接着處理int b = 3;在創建完b的引用變量後,由於在棧中已經有3這個字面值,便將b直接指向3的地址。
這樣,就出現了a與b同時均指向3的情況。特別注意的是,這種字面值的引用與類對象的引用不同。
假定兩個類對象的引用同時指向一個對象,如果一個對象引用變量修改了這個對象的內部狀態,那麼另一個對象引用變量也即刻反映出這個變化。
相反,通過字面值的引用來修改其值,不會導致另一個指向此字面值的引用的值也跟着改變的情況。
如上例,我們定義完a與b的值後,再令a=4;那麼,b不會等於4,還是等於3。在編譯器內部,遇到a=4;時,它就會重新搜索棧中是否有4的字面值,如果沒有,重新開闢地址存放4的值;如果已經有了,則直接將a指向這個地址。因此a值的改變不會影響到b的值。
        另一種是包裝類數據,如Integer,String, Double等將相應的基本數據類型包裝起來的類。這些類數據全部存在於堆中,Java用new()語句來顯示地告訴編譯器,在運行時才根據需要動態創建,因此比較靈活,但缺點是要佔用更多的時間。

 jsp中動態包含和靜態包含的區別

1. 語法格式

          1)靜態包含:<%@include file="被包含文件"%>

          2)動態包含:<jsp:includepage="被包含文件"/>

2. 包含時間

          1)靜態包含:JSP程序被翻譯成Servlet之前包含;

          2)動態包含:JSP程序運行時包含。

3.  邏輯性

          1)靜態包含:包含文件和被包含文件在邏輯上是統一的;

          2)動態包含:包含文件和被包含文件在邏輯上是獨立的。

4. 性能

          (1) 靜態包含:因爲提前已經預編譯好了,性能較高

          (2)動態包含:是後面把兩個文件合併在一起的,性能較低

JVM,JRE,JDK的區別和聯繫

 

Java開發工具包 (JDK)

Java開發工具包是Java環境的核心組件,並提供編譯、調試和運行一個Java程序所需的所有工具,可執行文件和二進制文件。JDK是一個平臺特定的軟件,有針對WindowsMacUnix系統的不同的安裝包。可以說JDKJRE的超集,它包含了JREJava編譯器,調試器和核心類。目前JDK的版本號是1.7,也被稱爲Java 7

Java虛擬機(JVM)

JVMJava編程語言的核心。當我們運行一個程序時,JVM負責將字節碼轉換爲特定機器代碼。JVM也是平臺特定的,並提供核心的Java方法,例如內存管理、垃圾回收和安全機制等。JVM是可定製化的,我們可以通過Java選項(javaoptions)定製它,比如配置JVM內存的上下界。JVM之所以被稱爲虛擬的是因爲它提供了一個不依賴於底層操作系統和機器硬件的接口。這種獨立於硬件和操作系統的特性正是Java程序可以一次編寫多處執行的原因。

Java運行時環境(JRE)

JREJVM的實施實現,它提供了運行Java程序的平臺。JRE包含了JVMJava二進制文件和其它成功執行程序的類文件。JRE不包含任何像Java編譯器、調試器之類的開發工具。如果你只是想要執行Java程序,你只需安裝JRE即可,沒有安裝JDK的必要。

JDK,JRE JVM的區別

JDK是用於開發的而JRE是用於運行Java程序的。
JDK
JRE都包含了JVM,從而使得我們可以運行Java程序。
JVM
Java編程語言的核心並且具有平臺獨立性。
即時編譯器(JIT)

有時我們會聽到JIT這個概念,並說它是JVM的一部分,這讓我們很困惑。JITJVM的一部分,它可以在同一時間編譯類似的字節碼來優化將字節碼轉換爲機器特定語言的過程相似的字節碼,從而將優化字節碼轉換爲機器特定語言的過程,這樣減少轉換過程所需要花費的時間。

 

 

StringStringBuffer的區別

String 是不可變的可以直接使用它的方法用來創建字符串
Stringbuffer無論怎麼修改都是一個對象
Stringbuffer
String運行快

Struts1Struts2的區別

 

 

存儲過程和函數的區別

不同點:
1、標識符不同。函數的標識符爲FUNCTION,過程爲:PROCEDURE。
2、函數中有返回值,且必須返回,而過程沒有返回值。
3、過程無返回值類型,不能將結果直接賦值給變量;函數有返回值類型,調用時,除在select中,必須將返回值賦給變量。
4、函數可以在select語句中直接使用,而過程不能,例如:假設已有函數fun_getAVG() 返回number類型絕對值。那麼select fun_getAVG(col_a) from table 這樣是可以的。
 
相同點:
二者都可以有出參

接口和抽象類的區別

接口和抽象類的概念不一樣。接口是對動作的抽象,抽象類是對根源的抽象。

接口表示行爲,或者定義規範。一般是動詞

抽象類表示對象,一般是名詞

抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。

人可以喫東西,狗也可以喫東西,你可以把喫東西定義成一個接口,然後讓這些類去實現它.

所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(喫飯接口、走路接口)

第一點. 接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實現它的類。
第二點. 接口可以多繼承,抽象類不行
第三點. 接口定義方法,不能實現,而抽象類可以實現部分方法。
第四點. 接口中基本數據類型爲static而抽類象不是的。

當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。

 

抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因爲高級語言來說(從實際設計上來說也是)每個類只能繼承一個類。在這個類中,你必須繼承或編寫出其所有子類的

所有共性。雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述。而且你可以在一個類中同時實現多個接口。在設計階段會降低難度的。

數組和集合的區別

重載(overloading)與重寫(override)的區別

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。

轉發和重定向的區別

 

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章