2019 java面試題基礎 全面正確詳解

【點擊領取】阿里雲代金券 | 阿里雲優惠券 |阿里雲優惠碼|雲服務器|阿里雲|阿里雲代金券 – 限時領取1888元阿里雲代金券
javascript

【3折購買ECS服務器入口】promotion.aliyun.com/ntms/act/qw…
css

【9塊9雲服務 學生計劃】https://promotion.aliyun.com/ntms/act/campus2018.html?userCode=g6nivc1vhtml

1.什麼是Java虛擬機?爲何Java被稱做是「平臺無關的編程語言」?

Java虛擬機是一個能夠執行Java字節碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的字節碼文件。 Java被設計成容許應用程序能夠運行在任意的平臺,而不須要程序員爲每個平臺單獨重寫或者是從新編譯。Java虛擬機讓這個變爲可能,由於它知道底層硬件平臺的指令長度和其餘特性。 java

2.JDK和JRE的區別是什麼? 

Java運行時環境(JRE)是將要執行Java程序的Java虛擬機。它同時也包含了執行applet須要的瀏覽器插件。Java開發工具包(JDK)是完整的Java軟件開發包,包含了JRE,編譯器和其餘的工具(好比:JavaDoc,Java調試器),可讓開發者開發、編譯、執行Java應用程序。 linux

三、自動裝箱  

自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間作的一個轉化。好比:把int轉化成Integer,double轉化成double,等等。反之就是自動拆箱。c++

四、&和&&的區別  

答: &是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and) 程序員

五、Collection 和 Collections的區別  

答: Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做 
數據庫

六、$(document).ready() 是個什麼函數?爲何要用它?(answer)    

ready() 函數用於在文檔進入ready狀態時執行代碼。當DOM 徹底加載(例如HTML被徹底解析DOM樹構建完成時),jQuery容許你執行代碼。使用$(document).ready()的最大好處在於它適用於全部瀏覽器,jQuery幫你解決了跨瀏覽器的難題。 編程

七、JavaScript window.onload 事件和 jQuery ready 函數有何不一樣?

JavaScript window.onload 事件和 jQuery ready 函數之間的主要區別是,前者除了要等待 DOM 被建立還要等到包括大型圖片、音頻、視頻在內的全部外部資源都徹底加載。若是加載圖片和媒體內容花費了大量時間,用戶就會感覺到定義在 window.onload 事件上的代碼在執行時有明顯的延遲。   windows

另外一方面,jQuery ready() 函數只需對 DOM 樹的等待,而無需對圖像或外部資源加載的等待,從而執行起來更快。使用 jQuery $(document).ready() 的另外一個優點是你能夠在網頁裏屢次使用它,瀏覽器會按它們在 HTML 頁面裏出現的順序執行它們,相反對於 onload 技術而言,只能在單一函數裏使用。鑑於這個好處,用 jQuery ready() 函數比用 JavaScript window.onload 事件要更好些。 

八、什麼是未聲明和未定義的變量?

未聲明的變量是程序中不存在且未聲明的變量。若是程序嘗試讀取未聲明變量的值,則會遇到運行時錯誤。未定義的變量是在程序中聲明但還沒有給出任何值的變量。若是程序嘗試讀取未定義變量的值,則返回未定義的值。

九、 jQuery 庫中的 $() 是什麼?

$() 函數用於將任何對象包裹成 jQuery 對象,接着你就被容許調用定義在 jQuery 對象上的多個不一樣方法。你甚至能夠將一個選擇器字符串傳入 $() 函數,它會返回一個包含全部匹配的 DOM 元素數組的 jQuery 對象。 

十、Jquery中有哪幾種類型的選擇器?  

從我本身的角度來說,能夠有3種類型的選擇器,以下: 一、基本選擇器:直接根據id、css類名、元素名返回匹配的dom元素。 二、層次選擇器:也叫作路徑選擇器,能夠根據路徑層次來選擇相應的DOM元素。 三、過濾選擇器:在前面的基礎上過濾相關條件,獲得匹配的dom元素。

十一、什麼是值傳遞和引用傳遞?

對象被值傳遞,意味着傳遞了對象的一個副本。所以,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味着傳遞的並非實際的對象,而是對象的引用。所以,外部對引用對象所作的改變會反映到全部的對象上。

十二、Servlet和CGI的區別。 

與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。 

1三、final, finally, finalize的區別。 

inal 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 finally是異常處理語句結構的一部分,表示老是執行。 

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。 

1四、說明「==」和「===」之間的區別? 

當進行雙等號比較時候: 先檢查兩個操做數數據類型,若是相同, 則進行===比較, 若是不一樣, 則願意爲你進行一次類型轉換, 轉換成相同類型後再進行比較, 而===比較時, 若是類型不一樣,直接就是false. 

1五、 javascript是一種什麼樣的語言 

解釋性腳本語言,代碼不進行預編譯 主要用來向HTML頁面添加交互行爲 能夠直接嵌入HTML頁面,但單獨寫成js文件有利於結構和行爲的分離 跨平臺性,在絕大多數瀏覽器支持下,能夠在多種平臺下運行,linux,windows

1六、null和undefind的區別 

null是表示一個空的對象,轉爲數值爲0,undefind表示一個空的原始值,轉爲數值爲NAN undefind指本該有一個值,但卻並有定義,null表示沒有對象,不該該有值 

1七、哪些操做會形成內存泄露 

內存泄露指任何對象在再也不擁有或再也不須要它以後依然存在 setTimeout第一個參數是字符串而不是函數的時候就會形成內存泄露 閉包 控制檯日誌 循環(兩個對象彼此引用且彼此保留)

1八、js垃圾回收方式 

標記清除:這是js最經常使用的垃圾回收方法,當一個變量進入執行環境時,例如函數中聲明一個變量,將其標記爲進入環境,當變量離開環境時,(函數執行結束),標記爲離開環境 引用計數: 跟蹤記錄每一個值被引用的次數,聲明一個變量,並將引用 類型賦值給這個變量,則這個值的引用次數+1,當變量的值變成了另外一個,則這個值的引用次數-1,當值的引用次數爲0的時候,就回收 

1九、Iterator和ListIterator的區別是什麼?  

Iterator可用來遍歷Set和List集合,可是ListIterator只能用來遍歷List。 Iterator對集合只能是前向遍歷,ListIterator既能夠前向也能夠後向。 ListIterator實現了Iterator接口,幷包含其餘的功能,好比:增長元素,替換元素,獲取前一個和後一個元素的索引,等等。 

20、HashMap和Hashtable有什麼區別?  

HashMap和Hashtable都實現了Map接口,所以不少特性很是類似。可是,他們有如下不一樣點: HashMap容許鍵和值是null,而Hashtable不容許鍵或者值是null。 

Hashtable是同步的,而HashMap不是。所以,HashMap更適合於單線程環境,而Hashtable適合於多線程環境。 

HashMap提供了可供應用迭代的鍵的集合,所以,HashMap是快速失敗的。另外一方面,Hashtable提供了對鍵的列舉(Enumeration)。 通常認爲Hashtable是一個遺留的類。

2一、Enumeration接口和Iterator接口的區別有哪些? 

Enumeration速度是Iterator的2倍,同時佔用更少的內存。可是,Iterator遠遠比Enumeration安全,由於其餘線程不可以修改正在被iterator遍歷的集合裏面的對象。同時,Iterator容許調用者刪除底層集合裏面的元素,這對Enumeration來講是不可能的。  

2二、HashSet和TreeSet有什麼區別? 

HashSet是由一個hash表來實現的,所以,它的元素是無序的。add(),remove(),contains()方法的時間複雜度是O(1)。  

另外一方面,TreeSet是由一個樹形的結構來實現的,它裏面的元素是有序的。所以,add(),remove(),contains()方法的時間複雜度是O(logn)。

2三、JVM的永久代中會發生垃圾回收麼? 

垃圾回收不會發生在永久代,若是永久代滿了或者是超過了臨界值,會觸發徹底垃圾回收(Full GC)。若是你仔細查看垃圾收集器的輸出信息,就會發現永久代也是被回收的。這就是爲何正確的永久代大小對避免Full GC是很是重要的緣由。請參考下Java8:從永久代到元數據區 

2四、Java中的兩種異常類型是什麼?他們有什麼區別?  

Java中有兩種異常:受檢查的(checked)異常和不受檢查的(unchecked)異常。不受檢查的異常不須要在方法或者是構造函數上聲明,就算方法或者是構造函數的執行可能會拋出這樣的異常,而且不受檢查的異常能夠傳播到方法或者是構造函數的外面。相反,受檢查的異常必需要用throws語句在方法或者是構造函數上聲明。這裏有Java異常處理的一些小建議。 

2五、throw和throws有什麼區別?  

throw關鍵字用來在程序中明確的拋出異常,相反,throws語句用來代表方法不能處理的異常。每個方法都必需要指定哪些異常不能處理,因此方法的調用者纔可以確保處理可能發生的異常,多個異常是用逗號分隔的。 

2六、異常處理的時候,finally代碼塊的重要性是什麼? 

不管是否拋出異常,finally代碼塊老是會被執行。就算是沒有catch語句同時又拋出異常的狀況下,finally代碼塊仍然會被執行。最後要說的是,finally代碼塊主要用來釋放資源,好比:I/O緩衝區,數據庫鏈接。 

2七、垃圾回收的優勢和原理。並考慮2種回收機制。 

Java語言中一個顯着的特色就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候再也不須要考慮內存管理。因爲有個垃圾回收機制, Java中的對象再也不有"做用域"的概念,只有對象的引用纔有"做用域"。垃圾回收能夠有效的防止內存泄露,有效的使用可使用的內存。垃圾回收器一般是做爲一個單獨的低級別的線程運行,不可預知的狀況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或全部對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。 

2八、請說出你所知道的線程同步的方法。 

wait():使一個線程處於等待狀態,而且釋放所持有的對象的lock。 

sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。 

notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。  

Allnotity():喚醒全部處入等待狀態的線程,注意並非給全部喚醒線程一個對象的鎖,而是讓它們競爭。

2九、PreparedStatement比Statement有什麼優點? 

PreparedStatements是預編譯的,所以,性能會更好。同時,不一樣的查詢參數值,PreparedStatement能夠重用。 

30、何時使用CallableStatement?用來準備CallableStatement的方法是什麼? 

CallableStatement用來執行存儲過程。存儲過程是由數據庫存儲和提供的。存儲過程能夠接受輸入參數,也能夠有返回結果。很是鼓勵使用存儲過程,由於它提供了安全性和模塊化。 

3一、數據庫鏈接池是什麼意思? 

像打開關閉數據庫鏈接這種和數據庫的交互多是很費時的,尤爲是當客戶端數量增長的時候,會消耗大量的資源,成本是很是高的。能夠在應用服務器啓動的時候創建不少個數據庫鏈接並維護在一個池中。鏈接請求由池中的鏈接提供。在鏈接使用完畢之後,把鏈接歸還到池中,以用於知足未來更多的請求。

3二、解釋下Servlet的生命週期。  

Servlet生命週期能夠分紅四個階段:加載和實例化、初始化、服務、銷燬。   

當客戶第一次請求時,首先判斷是否存在Servlet對象,若不存在,則由Web容器建立對象,然後調用init()方法對其初始化,此初始化方法在整個Servlet生命週期中只調用一次。   

完成Servlet對象的建立和實例化以後,Web容器會調用Servlet對象的service()方法來處理請求。   

當Web容器關閉或者Servlet對象要從容器中被刪除時,會自動調用destory()方法。 

3三、doGet()方法和doPost()方法有什麼區別?  

doGet:GET方法會把名值對追加在請求的URL後面。由於URL對字符數目有限制,進而限制了用在客戶端請求的參數值的數目。而且請求中的參數值是可見的,所以,敏感信息不能用這種方式傳遞。 

doPOST:POST方法經過把請求參數值放在請求體中來克服GET方法的限制,所以,能夠發送的參數的數目是沒有限制的。最後,經過POST請求傳遞的敏感信息對外部客戶端是不可見的。 

3四、HTTP響應的結構是怎麼樣的? 

 HTTP響應由三個部分組成: 

狀態碼(Status Code):描述了響應的狀態。能夠用來檢查是否成功的完成了請求。請求失敗的狀況下,狀態碼可用來找出失敗的緣由。若是Servlet沒有返回狀態碼,默認會返回成功的狀態碼HttpServletResponse.SC_OK。 

HTTP頭部(HTTP Header):它們包含了更多關於響應的信息。好比:頭部能夠指定認爲響應過時的過時日期,或者是指定用來給用戶安全的傳輸實體內容的編碼格式。如何在Serlet中檢索HTTP的頭部看這裏。  

主體(Body):它包含了響應的內容。它能夠包含HTML代碼,圖片,等等。主體是由傳輸在HTTP消息中緊跟在頭部後面的數據字節組成的。 

3五、什麼是cookie?session和cookie有什麼區別?  

cookie是Web服務器發送給瀏覽器的一塊信息。瀏覽器會在本地文件中給每個Web服務器存儲cookie。之後瀏覽器在給特定的Web服務器發請求的時候,同時會發送全部爲該服務器存儲的cookie。下面列出了session和cookie的區別:  

不管客戶端瀏覽器作怎麼樣的設置,session都應該能正常工做。客戶端能夠選擇禁用cookie,可是,session仍然是可以工做的,由於客戶端沒法禁用服務端的session。 

在存儲的數據量方面session和cookies也是不同的。session可以存儲任意的Java對象,cookie只能存儲String類型的對象。

3六、什麼是HTTP隧道?  

HTTP隧道是一種利用HTTP或者是HTTPS把多種網絡協議封裝起來進行通訊的技術。所以,HTTP協議扮演了一個打通用於通訊的網絡協議的管道的包裝器的角色。把其餘協議的請求掩蓋成HTTP的請求就是HTTP隧道。  

3七、sendRedirect()和forward()方法有什麼區別?  

sendRedirect()方法會建立一個新的請求,而forward()方法只是把請求轉發到一個新的目標上。重定向(redirect)之後,以前請求做用域範圍之內的對象就失效了,由於會產生一個新的請求,而轉發(forwarding)之後,以前請求做用域範圍之內的對象仍是能訪問的。通常認爲sendRedirect()比forward()要慢。 

3八、JSP有什麼優勢? 

下面列出了使用JSP的優勢:  

JSP頁面是被動態編譯成Servlet的,所以,開發者能夠很容易的更新展示代碼。 JSP頁面能夠被預編譯。 JSP頁面能夠很容易的和靜態模板結合,包括:HTML或者XML,也能夠很容易的和產生動態內容的代碼結合起來。 開發者能夠提供讓頁面設計者以類XML格式來訪問的自定義的JSP標籤庫。 開發者能夠在組件層作邏輯上的改變,而不須要編輯單獨使用了應用層邏輯的頁面。

【點擊領取】阿里雲代金券 | 阿里雲優惠券 |阿里雲優惠碼|雲服務器|阿里雲|阿里雲代金券 – 限時領取1888元阿里雲代金券

【3折購買ECS服務器入口】promotion.aliyun.com/ntms/act/qw…

【9塊9雲服務 學生計劃】promotion.aliyun.com/ntms/act/ca…

相關文章
相關標籤/搜索