1、面向對象的語言特征
封裝、繼承、多態
2、Java I/O中字符流和字節流的區別
字節流是傳遞0~255的整數而Java中有一些(如unicode代碼)不能使用字符流,是特殊的字節流,
3、HashTable和HashMap的區別
HashTable和HashMap類有三個重要的不同之處,第一個不同主要是歷史原因,HashTable是基于陳舊的Dictionary類,而HashMap是Java1.2引進的Map接口的一個實現
HashTable的方法是同步的,而HashMap的方法不是,這就意味著,雖然你可以采用任何的行為就可在一個多線程的應用程序中使用一個HashTable,但你必須同樣地為HashMap提供外同步,一個方便的方法就是利用Collection類的靜態的SynchronizedMap()方法,它創建了一個線程安全的Map對象,并把它作為一個封裝的對象來返回,這個對象的方法可以讓你同步訪問潛在的hashmap,這么做的結構就是當你不需要同步時,你不能切斷HashTable中的同步(比如在一個單線程的應用程序中)而且同步增加了很多處理法費用。
第三不同是,只有HashMap可以讓你裝空值作為一個表的條目和Key和Value,Hashmap中只有一條記錄可以是一個空白的Key,但任意數量的條目可以是空白Value。這就是說,如果一個表中沒有發現搜索,或者如果發現了搜索鍵,但是它是一個空值,那么get()將返回Null,如果有必要,用ContainKey()方法來區別這兩種情況。
4、Servlet的生命周期
初始化時期:當一個服務器裝載Servlet時,他運行的init()方法;
Servlet的執行時期:在服務器初始化servlet后,servlet就能夠處理客戶端的請求,我們用service方法來實現;
Servlet的結束時期:Servlet一直運行到他們被服務器卸載,在結束的時候需要回收init()方法中使用的資源,在Servlet中通過destory()方法來實現的。
5、Http協議是長連接還是短鏈接
Http協議是無狀態連接,所以是段連接。
6、java的基本數據類型有哪些,String是不是基本類型
boolean,int,byte,char,short,long,float,double,void,
String不是基本類型。
7、如何避免多個socket的讀寫堵塞,jdk1.4新增了哪些方法來解決這個問題?
在JDK1.4以前的版本中,要避免堵塞發生,有發以下兩種方法:
采用多線程處理不同的socket操作,如果一個線程處理讀,一個處理寫.
使用第三方程序庫,non-JDK方法.
在JDK1.4及以后的版本中引入了NIO,引入了非阻塞socket,可以不用堵塞進行網絡操作.
8、JSP中有哪些重定向方法,它們的區別?
<jsp:forward page=”url”/>
<jsp:include file=”url”/> 前者將當前頁面重定向到指定的URL的頁面,而后者是在當前頁面中包含指定的URL的頁面。
9、Jsp有哪些內置對象?作用分別是什么地?
request:用戶端請求,此請求會包含來自GET/POST請求的參數
getParameter() 、setAttribute()、 getAttribute()、reponse():網頁傳回用戶端的回應
encode()、 sendRedirect() 、setContextf()、pageContext: 網頁的屬性是在這里管理
getServletContext()、 getSessin() 、setAttribute()、session :與請求有關的會話期
getAttribute() 、setAttribute() 、invalidate()、application() :servlet正在執行的內容
setAttribute()、 getAttribute():config servlet的構架部件
getServletContext() 、getServletName() 、getINitParameter():out 用來傳送回應的輸出(用來向客戶端輸出數據)
println()\ flush() 、close():page Jsp網頁本身
exception針對錯誤網頁,未捕捉的例外(異常)
10、Jsp有哪些動作?作用分別是什么?
jsp共有以下6個動作:
Jsp:include::在網頁被請求的時候引入一個文件
Jsp:useBean:尋找或者實例化一個javaBean
Jsp:setProperty :設置某個javaBean的屬性
Jsp:getProperty:輸出某個javaBean的屬性
Jsp:forward:把請求轉到一個新的頁面。
Jsp:plugin:根據瀏覽器類型為java插件或生成object或embed標記
11、jsp中動態的include與靜態的include的區別?
動態的include用jsp:include動作實現
<jsp:include page=”include.jsp” flush=”true”/>
它總是會檢查所含文件的變化,適合用于包含動態頁面,并且可以帶參數
靜態include用include偽碼實現定不會檢查,所含文件的變化,適用于包含靜態頁面
12、連接池的解決方案,它有哪些優點?
解決方案:在應用程序啟動時建立足夠的數據庫連接,并將這些連接組成一個連接池,由應用程序動態地對池中的連接進行申請,使用,和釋放。對于連接池的并發請求,應在請求隊列中排隊等待,并應用程序可根據池中連接的使用率,動態地增加或減少池中的連接數。
優點,盡可能多地重用沙消耗內存的資源,大大地節省了內存,提高了服務器的服務效率,能夠支持更多的客戶服務,通過使用連接池,將大大的提高程序運行效率,同時,我們可以通過其自身的管理機制監視數據庫的數量,使用情況等。
13、在Oracle 大數據量下的分頁解決方法
一般截取ID方法,還有是三層嵌套方法。
一種分頁方法:
<%
int i=1;
int numPage =14;
Stirng pages =reques.getParameter(“page”);
int currentPage=1;
currentPage=(pages==null)?(1):{integer.parseInt(pages)};
sql=”select count(*) from tables”
ResultSet rs =DBLink.executeQuery(sql);
While(rs.next())
i =rs.getInt(1);
int intPageCount=1;
intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1)
int nextPageCount=1;
int upPage;
nextPage=currentPage;
upPage=currentPage-1;
if (nextPage>=intPageCount){
nextPage=intPageCount;
}
upPage=currentPage-1;
if(upPage<=1){
upPage=1;
}
rs.close();
sql=”select * from tables”;
rs=DBLink.excecuteQuery(sql);
i=0;
while((i<numPages*(currentPage-1)&&rs.next()){
i++;
}
%>
//輸出內容
//輸出翻頁連接
合計:
<%=currtPage%>/<%intPageCount%><a href=”List.jsp?page=1”>第一頁</a><a href=”list.jsp?page=<%upPage%>”>上一頁</a>
<%
for(int j=1;j<intPageCount;j++){
if(currentPage!=j){
%>
<a href =“list.jsp?page=<%=j%>”>
else{out.println(j)}
}
%>
<a href =”list.jsp?page=<%=nextPage%>”>下一頁</a>
<a href =”list.jsp?page=<%=intPageCont%>”>最后一頁</a>
}
%>
14、XML 有哪些解技術?區別是什么?
有DOM,SAX,STAT
DOM處理大型文件時其性能下降非常厲害。這個問題是由DOM的樹型結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合XML的隨機訪問
SAX不同DOM文檔驅動型,SAX是事件驅動型XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件。用戶通過在其回調事件,用戶通過在其回調事件寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:StreamingAPI for XMl(STAX)
15、你在項目中用到XML技術的哪些方面?如何實現的?
用到了 數據存貯,信息配置兩個方面
在做數據交換平臺時,將數據源數據組裝XML文件,然后XML文件壓縮打包加密后通過網絡傳送給接收都,接收解密與名解壓縮后再對XML文件中還原的相關信息進行處理。
在做軟件配置時,利用XML可以很方便,軟件和各種配置參數都貯存在XML文件中
16、用jdom解析XML文件時,如何解決中文問題?如何解析?
package test;
import java.io.*;
public class DOMTest{
private String inFile=”c:\\people.xml”;
private String outFile=”c:\\people.xml”;
public static void main(String args[]){
new DOMTest();
}
public DOMTest(){
try{
javax.xml.parsers.DocuMentBuilderbuilder=javax.xml.parsers.DocumentBuilderFartory.newInstance().newDocumentBuilder();
org.w3c.dom.Ddocument doc= buildr.newDocument();
org.w3c.dom.Element root=doc.creatElement(“老師”);
org.w3c.dom.Element wang= doc.createElement(“王”);
org.w3c.dom.Element liu=doc.creatElement(“劉”);
wang.appendChild(doc.creatTextNode(“我是王老師”)).;
root.appendChild(wnag);
dco.appendChild(root);
javax.xml.transform.Transformer transformer=javax.xml.transform.TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(javax.xml.trnasformer.OutputKeys.ENCODING’gb3212’);
transtromer.transfrom(new javax.xml.transfrom.dom.DOMSource(doc),
new javax.xml.transfrom.stream.StremResult(outFile));
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
17、編程用Java解析XML的方式
用SAX方式解析,XML文件如下:
<?xml version=”1.0” encoding=”gb2312”?>
<person>
<name>王小明</name>
<college>信息學院</college>
<telephone>6258113</telephone>
<notes>男1995年,博士,95年調入海南大學</notes>
</person> 事件回調類SAXHanmder.java:
import org.xml.sax.*;
import io.*;
import java.util.Hashtable;
public void class SAXHandler extends HandlerBase{
private Hashtable table= new Hashtable();
private String currentElement=null;
private String currentValue=null;
public void settable(Hashtalbe table){
this.table=table;
}
public Hashtable getTabel(){
Return talble;
}
public void startElement(String tag.AttributeList attrs)throws SAXException{
currentElement=tag;
}
public void characters(char[] ch,int star,int length){
currentValue= new String (ch,start,length);
}
public void endElement(String name)throws SAXException{
if (currentElement.equals(name))
table.put(currentElement,currentValue);
}
} JSP內容顯示源碼:SaxXML.jsp
<html>
<head>
<title>剖析XML文件peple.xml</title>
</hea
<body>
<%@ page errorPage=”error.jsp” contentType=”text/html”;charset=”GB2312”%>
<%@ page import =”java.io.*”%>
<%@ page import =”java.util.Hashtalbe”%>
<%@ page import =”org.w3c.dom.*”%>
<%@ page import =”org.xml.sax.*”%>
<%@ page import =”javax.xml.parsers.SAXParserFactory”%>
<%@ page import =”javax.xml.parsers.SAXParser”%>
<%@ page import=”SAXHander”%>
<%
File file= new File(“c:\\people.xml”);
FileReader reader=new FileReader(file);
Parser parser;
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXHandler();
sp.parse(new InputSource(reder),handler);
Hashtable hashTable=handler.getTable();
Out.println(“<Table border=2><CAPTION>教師信息表</CAPTION>”);
Out.println(“<TR><TD>姓名</TD>+”<TD>”+
(String)hash.Table.get(new String(“name”))+”</TD>”</TR>”);
out.println(“<TR><TD>學院</TD>”+”<TD>+
(String)hashTable.get(new String (“college”))+”</TD></TR>”);
out.println(“<TR><TD>電話”</TD>”+<TD>+
(String)hashTable.get(new String (“telephone”))+”</TD></TR>”);
Out.pirntln(“<TR><TD>”備注”</TD>”+”<TD>”+
(Stirng hashTable.get(new String(“notes”))+”<TD><TR>”);
Out.println(“<Table>”);
</BODY>
</Html>
%>