1. 程式人生 > >阿里Java面試題前200頁和答案

阿里Java面試題前200頁和答案

有興趣可以加入我QQ 981713155
1.關鍵字transient
1)一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。
2)transient關鍵字只能修飾變數,而不能修飾方法和類。注意,本地變數是不能被transient關鍵字修飾的。變數如果是使用者自定義類變數,則該類需要實現Serializable介面。
3)被transient關鍵字修飾的變數不再能被序列化,一個靜態變數不管是否被transient修飾,均不能被序列化。

InnoDB
InnoDB在MySQL 5.5後成為預設索引,它的特點是:
支援行鎖,採用MVCC來支援高併發
支援事務
支援外來鍵
支援崩潰後的安全恢復
不支援全文索引

重寫和過載
(1)重寫:需要繼承;方法嗎和引數、返回值必須相同,許可權修飾符必須大於等於父類;不可以重寫父類的private方法;不可以丟擲父類沒有丟擲的異常;
(2)過載:方法名必須相同;引數個數、型別有一個不相同;返回值可以相同也可以不同;可以有不同的訪問修飾符;可以丟擲不同異常。

Get和post區別。
(1)get用於獲取資料,而且應該是安全的和冪等的。post用於提交資料。(多用於新建)。
(2)GET請求的資料會附在URL之後,最多隻能是1024位元組;POST把提交的資料則放置在是HTTP包的包體中,理論上資料大小沒有限制。
(3)POST的安全性要比GET的安全性高

Http協議相關。
HTTP 是基於 TCP/IP 協議的應用層協議。它不涉及資料包(packet)傳輸,主要規定了客戶端和伺服器之間的通訊格式,預設使用80埠。
HTTP/1.0不支援連線保持,所以後來HTTP/1.1增加了Connection:keep-alive以及管道,管道機制則是允許瀏覽器同時發出A請求和B請求,但是伺服器還是按照順序。
HTTP/2.0是一個徹底的二進位制協議;實現雙向的、實時的通訊(多工),避免了隊頭阻塞;用ID來區分資料流,客戶端發出的資料流,ID一律為奇數,伺服器發出的,ID為偶數;可以取消資料流;客戶端還可以指定資料流的優先順序。優先順序越高,伺服器就會越早迴應;引入了頭資訊壓縮機制和資訊表;允許伺服器未經請求,主動向客戶端傳送資源,這叫做伺服器推送;

Java有沒有多繼承,介面和抽象類區別。jvm 理解
介面可以多繼承,類不可以。
(1)抽象類是由abstract關鍵字修飾,允許包含未實現的方法。
介面是方法宣告和常量值定義的集合,不允許包含變數。
(2)介面是絕對抽象的,不可以被例項化。抽象類不能被例項化。
(3)定義介面時可以使用繼承,而且可以使用多繼承。抽象類只能單繼承。類可以實現很多個介面,但是隻能繼承一個抽象類;
(4)介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。Java介面中宣告的變數預設都是final的。抽象類可以包含非final的變數。
(5)Java介面中的成員函式預設是public的。抽象類的成員函式可以是private,protected或者是public。
類可以不實現抽象類和介面宣告的所有方法,當然,在這種情況下,類也必須得宣告成是抽象的。
抽象類也不可以被例項化,但是,如果它包含main方法的話是可以被呼叫的。
public是在不同包中也可以訪問;protected是必須在同一個包中或者子類才能訪問;default是不允許子類訪問,可以在類內部或者同一個包中訪問;private是隻能在類內部訪問。

JDK和JRE的區別是什麼?
Java執行時環境(JRE)是將要執行Java程式的Java虛擬機器。它同時也包含了執行applet需要的瀏覽器外掛。Java開發工具包(JDK) 是完整的Java軟體開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java偵錯程式),可以讓開發者開發、編譯、執行Java應用程 序。
JDK中包含JRE,JRE中包含JVM。
JDK中包含的JRE主要是為JDK自帶的開發工具提供執行環境,與JDK並列的那個JRE是為使用者編寫的JAVA程式碼提供執行環境的。
classpath配置的是JDK的lib目錄,path配置的是JDK的bin目錄。

資料庫四個正規化的區別。在設計資料庫的時候如何考量。
第一正規化(1NF)屬性不可拆分 或 無重複的列(保證列唯一)
第二正規化(2NF)要求實體的屬性完全依賴於主關鍵字。存在一個列被定義為唯一主鍵的表就是第二正規化。(保證行唯一)
第三正規化(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字資訊。(外來鍵關係)
第四正規化(4NF)禁止主鍵列和非主鍵列一對多關係不受約束用複合列做主鍵的表。

1.如何停止執行一個執行緒
interrupt

2.如何實現一個hashmap,需要考慮哪些問題
hashcode

3.equal和==的區別
值型別是儲存在記憶體中的堆疊(以後簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的地址,而其本身則儲存在堆中。
==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。
equals操作表示的兩個變數是否是對同一個物件的引用,即堆中的內容是否相同。
String s2 = new String(“Monday”).intern();會放入緩衝池。

5.為什麼四次揮手比三次握手多一次
因為三次握手是要建立和確認客戶端和伺服器之間的通訊線路;而四次揮手是為了關閉兩方之間的資料傳遞,因為是雙工的,所以被動方和主動方兩個流向都需要關閉和確認,所以是四次。