JAVA 開發常見面試題
1、Java中連線資料庫
1) 載入驅動
2) 建立資料庫連線
3) 建立執行sql的語句
4) 執行語句
5) 處理執行結果
6) 釋放資源
2、Throwable是所有異常Exception和錯誤Error的祖先
public class Throwable extends Object implementsSerializable
Throwable 類是Java語言中所有錯誤或異常的超類。只有當物件是此類(或其子類之一)的例項時,才能通過Java虛擬機器或者Java throw 語句丟擲。類似地,只有此類或其子類之一才可以是 catch 子句中的引數型別。兩個子類的例項,Error 和 Exception
3、陣列(array)和列表(arrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
1)Array陣列可以包含基本型別和物件型別, ArrayList卻只能包含物件型別。
2) Array陣列在存放的時候一定是同種型別的元素。ArrayList就不一定了,因為ArrayList可以儲存Object。
3)Array的空間大小是固定的,空間不夠時也不能再次申請,所以需要事前確定合適的空間大小。
ArrayList的空間是動態增長的,如果空間不夠,它會建立一個空間比原空間大一倍的新陣列,然後將所有元素複製到新陣列中,接著拋棄舊陣列。而且,每次新增新的元素的時候都會檢查內部陣列的空間是否足夠。(比較麻煩的地方)。
4)方法上的比較:ArrayList作為Array的增強版,當然是在方法上比Array更多樣化,比如新增全部addAll()、刪除全部removeAll()、返回迭代器iterator()等。
5)適用場景:如果想要儲存一些在整個程式執行期間都會存在而且不變的資料,我們可以將它們放進一個全域性數組裡,但是如果我們單純只是想要以陣列的形式儲存資料,而不對資料進行增加等操作,只是方便我們進行查詢的話,那麼,我們就選擇ArrayList。而且還有一個地方是必須知道的,就是如果我們需要對元素進行頻繁的移動或刪除,或者是處理的是超大量的資料,那麼,使用ArrayList就真的不是一個好的選擇,因為它的效率很低,使用陣列進行這樣的動作就很麻煩,那麼,我們可以
4、jsp的四大作用域?
(1)、如果把變數放到pageContext裡,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裡。從把變數放到pageContext開始,到jsp頁面結束,你都可以使用這個變數
(2)、如果把變數放到request裡,就說明它的作用域是request,它的有效範圍是當前請求週期。所謂請求週期,就是指從http請求發起,到伺服器處理結束,返回響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裡你都可以使用這個變數。
(3)如果把變數放到session裡,就說明它的作用域是session,它的有效範圍是當前會話。所謂當前會話,就是指從使用者開啟瀏覽器開始,到使用者關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要使用者不關瀏覽器,伺服器就有辦法知道這些請求是一個人發起的,整個過程被稱為一個會話(session),而放到會話中的變數,session預設的實效時間是30分鐘,可在web.xml裡面或者tomcat配置檔案裡修改!
(4)如果把變數放到application裡,就說明它的作用域是application,它的有效範圍是整個應用。整個應用是指從應用啟動,到應用結束
所謂“作用域”就是“資訊共享的範圍”,也就是說一個資訊能夠在多大的範圍內有效。
JSP中九個內建物件及其相應所屬作用域如下表:
編號 | 物件 | 所屬作用域 | 作用域描述 |
1 | request | request | 在當前請求中有效 |
2 | response | page | 在當前頁面有效 |
3 | out | page | 在當前頁面有效 |
4 | session | session | 在當前會話中有效 |
5 | application | application | 在所有應用程式中有效 |
6 | config | page | 在當前頁面有效 |
7 | pageContext | page | 在當前頁面有效 |
8 | page | page | 在當前頁面有效 |
9 | Exception | page | 在當前頁面有效 |
5、下表列出了JSP支援的九個隱式物件 -
1. request物件
request物件是javax.servlet.http.HttpServletRequest物件的一個例項。每當客戶端請求頁面時,JSP引擎將建立一個新物件來表示該請求。
request物件提供了獲取包括表單資料,Cookie,HTTP方法等HTTP頭資訊的方法。
2. response物件
response
物件是javax.servlet.http.HttpServletResponse
物件的一個例項。就像伺服器建立request
物件一樣,它還建立一個物件來表示對客戶端的響應。
response
物件還定義了處理建立新HTTP頭的介面。通過此物件,JSP程式設計師可以新增新的Cookie或日期戳,HTTP狀態程式碼等。
3. out物件
out
隱式物件是javax.servlet.jsp.JspWriter
物件的一個例項,用於在響應中傳送內容。
初始化JspWriter
物件根據頁面是否快取而不同地例項化。緩衝可以通過使用page
指令的buffered ='false'
屬性來關閉。
JspWriter
物件包含與java.io.PrintWriter
類大部分相同的方法。但是,JspWriter
還有一些額外的方法用來處理緩衝。與PrintWriter
物件不同,JspWriter
會丟擲IOExceptions
異常。
4. session物件
session
物件是javax.servlet.http.HttpSession
的一個例項,其行為與Java Servlet下的會話物件行為完全相同。session
物件用於跟蹤客戶端請求之間的客戶端會話。
5. application物件
application
物件是生成的Servlet
的ServletContext
物件的直接包裝,實際上是javax.servlet.ServletContext
物件的一個例項。
application
物件是JSP頁面在其整個生命週期中的表示。當JSP頁面被初始化時,將建立此物件,並且在JSP頁面被jspDestroy()
方法刪除時application
物件也將被刪除。
通過向application
物件新增屬性值,可以確保組成Web應用程式的所有JSP檔案都可以訪問它。
6. config物件
config
物件是javax.servlet.ServletConfig
的例項化,是生成的servlet的ServletConfig
物件周圍的直接包裝。
7. pageContext物件
pageContext
物件是javax.servlet.jsp.PageContext
物件的一個例項。pageContext
物件用於表示整個JSP頁面。
8. page物件
page
物件是對該頁面例項的實際引用。可以認為它是表示整個JSP頁面的物件。
page
物件是this
物件的直接同義詞。
9. exception物件
exception
物件是一個包含上一頁丟擲的異常的包裝器。它通常用於生成對錯誤條件的適當響應。
7、Redis整理
8、執行緒整理
9、MyBatis中的動態SQL是什麼意思?MyBatis中用於實現動態SQL的元素主要有?
MyBatis
的動態SQL是基於OGNL表示式的,它可以幫助我們方便的在SQL語句中實現某些邏輯。
MyBatis
中用於實現動態SQL的元素主要有:
1)
if
2)
choose
(when,otherwise)
3)
trim
4)
where
5)
set
6)
foreach
10、 獲得一個類的類物件有哪些方式?
通過類本身來獲得物件,通過子類的例項獲取父類物件,通過類名加.class獲取物件
11、 當一個執行緒進入一個物件的synchronized方法A之後,其它執行緒是否可進入此物件的synchronized方法B?
1) 其他方法前是否加了synchronized關鍵字,如果沒加,則能。
2) 如果這個方法內部呼叫了wait,則可以進入其他synchronized方法。
3) 如果其他個方法都加了synchronized關鍵字,並且內部沒有呼叫wait,則不能。
4) 如果其他方法是static,它用的同步鎖是當前類的位元組碼,與非靜態的方法不能同步,因為非靜態的方法用的是this。
12、介面是否可繼承(extends)介面?抽象類是否可實現(implements)介面?抽象類是否可繼承具體類(concreteclass)?
介面可以繼承介面,而且支援多重繼承。抽象類可以實現(implements)介面。抽象類可繼承具體類也可以繼承抽象類。
13、隨機產生20個字元並且排序?要求字元不能相同?
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class bb {
public static void main(String[] args) {
Set noreapeat =new TreeSet();
Random rdm = new Random();
while (noreapeat.size()<20){
int bb=Math.abs(rdm.nextInt())%26+97;
char cc =(char)bb;
noreapeat.add(cc);
}
System.out.println(noreapeat);
}
}
注:treeSet本身就具有去重排序作用