JSP企業(yè)面試題整理(1)
圖示三層架構,并說明其特點,如何實現(xiàn),每層實現(xiàn)什么功能?(企業(yè)筆試題)
在兩層應用中,應用程序直接同數(shù)據(jù)庫進行對話。三層結構在用戶接口代碼和數(shù)據(jù)庫中間加入了一個附加的邏輯層,通常這個層叫做“商務邏輯層”。在“商務邏輯層”,如果第一層和第二層在不同的計算機上,通常該層利用的技術是EJB(Enterprise JavaBean)技術、CORBA(Common Object Request Broker Architecture)技術和DCOM技術(Distributed Component Object Model,分布式組件對象模型)。在Java企業(yè)應用領域中,表示邏輯層通??梢允荋TML、Applet和JSP,商務邏輯層一般利用EJB來實現(xiàn)
Java包含哪三個版本,每個版本有什么功能,各個版本的應用領域?
SUN以J2EE為核心推出SUN-ONE(SUN Open Network Environment)戰(zhàn)略,該戰(zhàn)略包括三個部分:J2SE(Java 2 Standard Edition,Java 2標準版)、J2ME(Java 2 Micro Edition,Java 2微型版)和J2EE。
J2SE主要:用于創(chuàng)建典型的桌面與工作站應用的Java平臺。從配置上來說,只要安裝JDK(Java Development Kit),就建立了一個J2SE開發(fā)和運行平臺。
J2ME主要用于創(chuàng)建嵌入式應用程序(如PDA、儀表),J2ME開發(fā)平臺需要J2SE平臺的支持。開發(fā)領域包括:高端的信息家電,比如:電視機頂盒,網(wǎng)絡電視和網(wǎng)絡可視電話等,低端的信息家電,比如手機,尋呼機和PDA等。
J2EE的任務是提供一個平臺獨立的、便攜式、多用戶、安全以及標準的企業(yè)級平臺,服務器端部署用Java技術來完成。J2EE主要用于創(chuàng)建可擴展的企業(yè)應用,包括13種核心技術規(guī)范
1-3 名詞解釋:EJB JNDI RMI。(企業(yè)筆試題)
EJB(Enterprise Java Bean,企業(yè)級JavaBean)J2EE體系的最核心技術是EJB,提供了一個框架來開發(fā)分布式商務邏輯,顯著地簡化了具有可伸縮性和高度復雜的企業(yè)級應用的開發(fā)
JNDI(Java Naming and Directory Interface,Java命名和目錄接口)JNDI用于名字和目錄服務,提供了一致的接口來存取和操作企業(yè)級的資源,如DNS(Domain Name Service)和本地文件系統(tǒng)等
RMI(Remote Method Invocation,遠程方法調用)RMI是在遠程對象上調用一些方法,使用了連續(xù)的方式在客戶端和服務器端傳遞數(shù)據(jù),RMI是EJB技術基礎
JSP企業(yè)面試題整理(2)
2-1 簡述Java語言的核心機制。
Java語言包含三種核心機制:Java 虛擬機、垃圾收集機制和代碼安全檢測。
1、Java 虛擬機(Java Virtual Machine,JVM)
在一臺計算機上由軟件或硬件模擬的計算機。Java虛擬機讀取并處理經(jīng)編譯過的平臺無關的字節(jié)碼class文件。
2、垃圾收集機制(Garbage collection)
在C/C++ 等語言中,由程序員負責回收無用內存。Java語言解除了程序員回收無用內存空間的責任。它提供一種系統(tǒng)級線程跟蹤存儲空間的分配情況。并在JVM的空閑時,檢查并釋放那些可被釋放的存儲器空間。垃圾收集在Java程序運行過程中自動進行,程序員無法精確控制和干預。
3、代碼安全性檢測(Code Security)
Java執(zhí)行代碼的時候,由JVM對運行的代碼進行安全性檢測,當進行一些非法操作的時候,比如修改一些系統(tǒng)設置的時候,JVM會發(fā)出警告。
2-2 比較基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別。
Java 語言共有八種基本數(shù)據(jù)類型:四種整數(shù)類型(byte、short、int、long),兩種浮點數(shù)類型(float、double),一種字符類型(char),一種布爾類型(boolean)。
Java語言中除8種基本數(shù)據(jù)類型以外的數(shù)據(jù)類型稱為引用類型,也叫做復合數(shù)據(jù)類型。在程序中聲明的引用類型變量只是為該對象起的一個名字,或者說是對該對象的引用,變量的值是對象在內存空間中的存儲地址而不是對象本身,這就是稱之為引用類型的原因
2-4 構造函數(shù)有什么作用?簡述重載構造函數(shù)的好處。
構造函數(shù)也叫構造方法,是Java類中的一種特殊方法,其功能是創(chuàng)建其所屬類型的一個新的對象。聲明構造方法的語法規(guī)則如下:
< modifiers> <class_name>([< argu_list>]) {
[< statements>]
}
從中可以看到,構造方法與普通方法在聲明上的區(qū)別是,構造方法沒有返回值類型、構造方法必須取和所屬類相同的名字。
在定義Java類時可以根據(jù)需要定義一個或多個構造方法,通常在構造方法中進行一些初始化工作。
2-5 簡述super、static和final的功能和作用。
如果子類中發(fā)生了方法重寫,那么子類對象能調用父類中重寫前的方法,Java語言允許在子類中使用關鍵字super來引用父類的方法。
在Java類中聲明屬性和方法時,可使用關鍵字static做為修飾符。static標記的變量或方法由整個類共享,如訪問控制權限允許,可不必創(chuàng)建該類對象而直接用類名加‘.’調用。
在Java中聲明類、屬性和方法時,可使用關鍵字final來修飾。final所標記的成分具有“終態(tài)”的特征,其具體規(guī)定如下:
l final標記的類不能被繼承。
l final標記的方法不能被子類重寫。
l final標記的變量(成員變量或局部變量)即成為常量,只能賦值一次。
2-6 集合元素:集合、散列表和枚舉的特點和作用。
常用的集合元素有:向量(Vector)、枚舉(Enumeration)、散列表(Hashtable)和屬性(Properties)等
向量(Vector)不要求每個元素的類型相同,向量中可以混合多種數(shù)據(jù)類型。向量可以在增加元素時動態(tài)增大。
向量提供了集合內容的順序訪問,散列表可以對集合內容進行隨機訪問,散列表提供的主要方法及其說明為。
l 用put(Object key,Object value)加進關鍵字/數(shù)值對
l 用get(Object key)取得一個關鍵字的值
枚舉也可以存放許多元素。一般用來存儲其他集合的返回值。
2-7 關鍵字throw和throws的區(qū)別?(企業(yè)筆試題)
可以利用throw關鍵字自己拋出異常。
Throws一般在定義函數(shù)的時候使用,表明函數(shù)被調用的時候要拋出異常。
2-8 Java實現(xiàn)線程有幾種方式,各有什么優(yōu)點?
創(chuàng)建線程有兩種方式:使用Runnable接口和繼承Thread類。使用Runnable接口的實現(xiàn)類來提供線程體,這是創(chuàng)建線程的基本方式。還可以采用直接繼承Thread類、重寫其中的run()方法并以之作為線程體的方式創(chuàng)建線程,
兩種創(chuàng)建線程方式的有兩方面的區(qū)別。
l 使用Runnable接口創(chuàng)建線程時可以將CPU,代碼和數(shù)據(jù)分開,形成清晰的模型。線程體run()方法所在的類還可以從其他類繼承一些有用的屬性或方法,并有利于保持程序風格的一致性。
l 直接繼承Thread類創(chuàng)建線程時,Thread子類無法再從其他類繼承。但這種情況編寫簡單,run()方法的當前對象就是線程對象,可直接操縱。
JSP企業(yè)面試題整理(3)
4-1. 有幾種方法實現(xiàn)頁面的跳轉,如何實現(xiàn)?
jsp:forward操作指令用于把當前的JSP頁面轉發(fā)到另一個頁面上?;菊Z法為:“<jsp:forward page="test2.jsp"/>”,使用該功能時,瀏覽器的地址欄中地址不會發(fā)生任何變化。
對于response對象,最常用到的是sendRedirect()方法,可以使用這個方法將當前客戶端的請求轉到其它頁面去。相應的代碼格式為:“response.sendRedirect("URL地址");
4-2 synchronized關鍵字有什么功能?
,一般會在函數(shù)前面加上synchronized關鍵字,功能是當前一個用戶在執(zhí)行該方法的時候,其他的用戶必須等待,直到該用戶完成操作
4-3. out對象有什么功能,out.print和document.write有什么區(qū)別?
out對象是javax.servlet.jsp.JspWriter類的一個子類的對象,它的作用是把信息回送到客戶端的瀏覽器中。在out對象中,最常用的方法就是print()和println()。在使用print()或println()方法時,由于客戶端是瀏覽器,因此向客戶端輸出時,可以使用HTML中的一些標記,例如:“out.println("<h1>Hello,JSP</h1>");
out.print是JSP代碼, 被服務器解釋執(zhí)行。
Document.write是JavaScript代碼,被客戶端瀏覽器解釋執(zhí)行。
4-4. 如何獲得獲得客戶端的IP地址?
利用request對象可以獲得客戶提交的信息,比如:JSP文件目錄、客戶端的地址、以及服務器的端口等、
<BR>獲取客戶的IP地址:
<% String IP=request.getRemoteAddr();
out.println(IP);%>
4-5. application對象有什么特點?和session對象有什么聯(lián)系和區(qū)別?
站點所有的用戶公用一個application對象,當站點服務器開啟的時候,application就被創(chuàng)建,直到網(wǎng)站關閉。
可以使用Session 對象存儲用戶登錄網(wǎng)站時候的信息。當用戶在頁面之間跳轉時,存儲在Session對象中的變量不會被清除
聯(lián)系是:數(shù)據(jù)都存儲在服務器端,而且都可以保留一段時間。
區(qū)別是:每個用戶有一個session,但是application是共有的。
4-6. 程序如何向瀏覽器寫入Cookie集合,如何從瀏覽器端讀取Cookie集合。
Cookie對象是由Web服務器端產生后被保存到瀏覽器中的信息。Cookie對象可以用來保存一些小量的信息在瀏覽器中。目前主流的瀏覽器(Internet Explorer和Netscape Navigator)都支持Cookie。
案例名稱:寫入Cookie
程序名稱:4-25.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%
String strName = "Zhourunfa";
Cookie c = new Cookie("Name1", strName);
response.addCookie(c);
%>
案例名稱:讀出Cookie
程序名稱:4-26.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML><BODY>
<%
Cookie cookies[] = request.getCookies();
for(int i=0; i<cookies.length; i++) {
if(cookies[i].getName().equals("Name1"))
out.print(cookies[i].getValue());
}
%>
JSP企業(yè)面試題整理(4)
5-1. 簡述Servlet和JSP的關系。
JSP是以另外一種方式實現(xiàn)的Servlet,Servlet是JSP的早期版本,在JSP中,更加注重頁面的表現(xiàn),而在Servlet中則更注重業(yè)務邏輯的實現(xiàn)。
因此,當編寫的頁面顯示效果比較復雜時,首選是JSP?;蛘咴陂_發(fā)過程中,HTML代碼經(jīng)常發(fā)生變化,而Java代碼則相對比較固定時,可以選擇JSP。而我們在處理業(yè)務邏輯時,首選則是Servlet。
同時,JSP只能處理瀏覽器的請求,而Servlet則可以處理一個客戶端的應用程序請求。因此,Servlet加強了Web服務器的功能。
5-2. 簡述Servlet的生命周期。(企業(yè)筆試題)
Servlet運行機制和Applet類似,Servlet是載服務器端運行的,但是Applet是在客戶端運行的。Servlet是javax.servlet包中HttpServlet類的子類,由服務器完成該子類的創(chuàng)建和初始化。
Servlet的生命周期主要由3個過程組成。
1、init()方法:服務器初始化Servlet。
2、service()方法:初始化完畢,Servlet對象調用該方法相應客戶的請求。
3、destroy()方法:調用該方法消滅Servlet對象。
其中,init()方法只在Servlet第一次被請求加載的時候被調用一次,當有客戶再請求Servlet服務時,Web服務器將啟動一個新的線程,在該線程中,調用service方法相應客戶的請求。
5-3. 簡述HttpSession接口的功能和使用方法。(企業(yè)筆試題)
這是一個java.servelt.http包中的接口,它封裝了會話的概念。定義為:“public interface HttpSession”,可以使用HttpServletRequest對象的getSession()方法來得到這種類型的對象,語法為:“HttpSession session = request.getSession();”。
5-5. 編寫一個HTML文件,利用Servelt的doPost方法實現(xiàn)Form表單內容的讀取。(上機完成)(企業(yè)筆試題)
案例名稱:使用doGet和doPost方法
程序名稱:j5_02.htm
<HTML>
<BODY>
<FORM ACTION="/doget" METHOD="get">
請輸入姓名:
<INPUT TYPE="TEXT" NAME="myname"><br>
您的興趣:
<SELECT NAME="love">
<OPTION value="Sleep">Sleep</OPTION>
<OPTION value="Dance">Dance</OPTION>
<OPTION value="Travel">Travel</OPTION>
</SELECT><br>
<INPUT TYPE="SUBMIT" NAME="mysubmit"><br>
<INPUT TYPE="RESET" VALUE="重新來過"><br>
</FORM>
</BODY>
</HTML>
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class j5_03 extends HttpServlet
{
//重寫doPost方法
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
//首先設置頭信息
res.setContentType("text/html");
//用 writer方法返回響應數(shù)據(jù)
PrintWriter out = res.getWriter();
out.println("<html><head></head><body>");
out.println("name: " + req.getParameter("myname"));
out.println("<br>");
out.println("love: " + req.getParameter("love"));
out.println("</body></html>");
out.close();
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException{
doPost(req,res);
}
}
6-1 什么是組件?使用組件有什么優(yōu)點?
現(xiàn)在軟件開發(fā)都已經(jīng)轉向了基于組件的開發(fā),目前具備代表性的組件技術有微軟的COM、COM+,有Sun的JavaBean和EJB(Enterprise Java Bean),另外還有CORBA(Common Object Request Broker Architecture,公共對象請求代理結構)
JavaBean規(guī)范將“軟件組件”的概念引入到Java編程的領域。組件是自包含的、可重用的軟件單元;而JavaBean組件,則可以使用可視的應用程序開發(fā)工具,可視地將它們編寫到Java程序中。JavaBean規(guī)范為Java開發(fā)人員提供了一種“組件化”其Java類的方法
6-2 編寫JavaBean的時候,要注意哪些?
1、如果類的成員變量的名字是xxx,那么為了更改或獲取成員變量的值,在類中使用兩個方法:
getXxx(),用來獲取屬性xxx。
setXxx(),用來修改屬性xxx。
2、對于boolean類型的成員變量,允許使用is代替get和set。
3、類中方法的訪問屬性必須是public的。
4、類中如果有構造方法,那么這個構造方法也是public的,并且是無參數(shù)的。
6-3 簡述JSP的設計模式。(企業(yè)筆試題)
JSP設計模式包括兩個:(1)Model1,JSP+JavaBean設計模式。(2)Model2,MVC設計模式。
在這種模式中,JSP頁面獨自響應請求并將處理結果返回客戶,所有的數(shù)據(jù)庫操作通過JavaBean來實現(xiàn)。大量地使用這種模式,常會導致在JSP頁面中嵌入大量的Java代碼,當需要處理的商業(yè)邏輯非常復雜時,這種情況就會變得很糟糕。大量的Java代碼使得JSP頁面變得非常臃腫。前端的頁面設計人員稍有不慎,就有可能破壞關系到商業(yè)邏輯的代碼。
“MVC”模式即是:“Model-View-Controller”模式。在這種模式中,通過JSP技術來表現(xiàn)頁面,通過Servlet技術來完成大量的事務處理工作,實現(xiàn)用戶的商業(yè)邏輯。
在這種模式中,Servlet用來處理請求的事務,充當了控制器(Controller即“C”)的角色,Servlet負責響應客戶對業(yè)務邏輯的請求并根據(jù)用戶的請求行為,決定將哪個JSP頁面發(fā)送給客戶。JSP頁面處于表現(xiàn)層,也就是視圖(View即“V”)的角色。JavaBean則負責數(shù)據(jù)的處理,也就是模型(Model即“M”)的角色。
JSP企業(yè)面試題整理(5)
7-2 圖示JDBC的工作原理,并列舉常用的對象。(企業(yè)筆試題)
建立是建立與數(shù)據(jù)庫之間的連接,也就是創(chuàng)建一個Connection的實例。DriverManager類的getConnection()方法將建立數(shù)據(jù)庫的連接:
Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。存在3種Statement對象:(1)Statement;(2)PreparedStatement(從Statement繼承而來);(3)CallableStatement(從PreparedStatement繼承而來)。
ResultSet包含符合SQL語句執(zhí)行結果所有行,并且它通過一套get方法提供了對這些行中數(shù)據(jù)的訪問
7-3 如圖7-16,要求:查找 “張三”選擇所有課程的名稱,寫出SQL語句。(企業(yè)筆試題)
SELECT c.cname FROM sc a, student b, course c
WHERE a.cno=c.cno
AND a.sno=b.sno and b.sname ='張三'
7-4 下面的代碼段是否正確?請說明。(企業(yè)筆試題)
pst = conn.prepareStatement("INSERT INTO grade(學號) VALUES (?)");
for (int i = 101; i < 111; i++) {
pst.setInt(1, i);
pst.addBatch();
}
pst.execute ();
}
錯,pst.executeBatch();
7-5 簡述事務的基本概念,如何在JDBC中實現(xiàn)事務?
事務是一些事件的集合,執(zhí)行一條SQL語句可以理解成一個事件。事務中包含多個事件,如果每一個事件都能執(zhí)行成功的時候,事務才執(zhí)行,如果有任何一個事件不能成功執(zhí)行,事務的其他事件也不被執(zhí)行
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
try {
stmt.executeUpdate(strSQL1);
stmt.executeUpdate(strSQL2);
conn.commit();
}
catch (Exception e) {
conn.rollback();
e.printStackTrace();
}
finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
conn.setAutoCommit(defaultCommit);
7-6 結果集類型和結果集并發(fā)性各有幾種情況,有什么作用。
決定這個Statement對象創(chuàng)建的ResultSet對象是否可以滾動,還可以指定結果集是否對數(shù)據(jù)庫中的修改敏感。使用ResultSet類中的int常量來表示結果集類型,結果集類型有3種:
l ResultSet.TYPE_FORWORD_ONLY:指定ResultSet對象是不可滾動,這是默認值。
l ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet對象是可滾動的,但是對數(shù)據(jù)庫中修改不敏感。
l ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet對象是可滾動的,而且對數(shù)據(jù)庫的修改敏感。
結果集的并發(fā)性(Concurrency)決定ResultSet對象是否可以修改數(shù)據(jù)庫中的行。可以使用ResultSet類中定義的int常量來指定結果集的并發(fā)性。
l ResultSet.CONCUR_READ_ONLY,指定ResultSet對象不能修改數(shù)據(jù)庫,默認值。
ResultSet.CONCUR_UPDATABLE,指定ResultSet對象可以修改數(shù)據(jù)庫。