Java基礎學習總結(73)——Java最新面試題彙總

1.super()與this()的區別?html

this():當前類的對象,super父類對象。java

super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束web

而this他表明當前對象,固然全部的資源均可以訪問.算法

在構造函數中,若是第一行沒有寫super(),編譯器會自動插入.可是若是父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,由於它自己就進行實例化的構造.sql

而在方法中super和this使用的方法就差很少了.只不過super 要考慮是否能訪問其父類的資源.數據庫

2.做用域public,protected,private,以及不寫時的區別?編程

public:不一樣包、同一包、類內均可用數組

private:類內tomcat

protected: 不一樣包的子類、同一包、類內均可用安全

不寫時:同一包內、類內

3.編程輸出以下圖形。

* * * * *

* * * *

* * *

* *

*

代碼以下:

public class Print {

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {

for (int j = 5; j > i; j--) {

System.out.print("*");

}

System.out.println();

}

}

}

4.JAVA的事件委託機制和垃圾回收機制

java 事件委託機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。

垃圾回收機制 垃圾收集是將分配給對象但再也不使用的內存回收或釋放的過程。若是一個對象沒有指向它的引用或者其賦值爲null,則次對象適合進行垃圾回收

5.在JAVA中,如何跳出當前的多重嵌套循環?

用break; return 方法。

6.什麼是java序列化,如何實現java序列化?(寫一個實例)

序列化:

處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

序列化的實現:

將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

7.一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?

能夠。若是這個類的修飾符是public,其類名與文件名必須相同。

8.排序都有哪幾種方法?

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)

9.Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?

方法的

重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的仍是子類的方法。

重載Overloading 一個類多個方法,名稱相同,參數個數類型不一樣。

二者都是Java多態性的不一樣表現。

Overloaded的方法是能夠改變返回值的類型。

10.Final類有什麼特色?

屬性常量

方法不能夠overridding

類不能夠繼承

11.繼承時候類的執行順序問題,通常都是選擇題,問你將會打印出什麼?

答:父類:

package test;

public class FatherClass

{

public FatherClass()

{

System.out.println("FatherClass Create");

}

}

子類:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass

{

public ChildClass()

{

System.out.println("ChildClass Create");

}

public static void main(String[] args)

{

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

輸出結果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

12. 內部類的實現方式?

答:示例代碼以下:

package test;

public class OuterClass

{

private class InterClass

{

Public Interlass()

{

System.out.println("InterClass Create");

}

}

public OuterClass()

{

InterClass ic = new InterClass();

System.out.println("OuterClass Create");

}

public static void main(String[] args)

{

OuterClass oc = new OuterClass();

}

}

輸出結果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

13.. 用插入法進行排序代碼以下

package test;

import java.util.*;

class InsertSort

{

ArrayList al;

public InsertSort(int num,int mod)

{

al = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList Sort Before:");

for (int i=0;i<num ;i++ )

{

al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

System.out.println("al["+i+"]="+al.get(i));

}

}

public void SortIt()

{

Integer tempInt;

int MaxSize=1;

for(int i=1;i<al.size();i++)

{

tempInt = (Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())

{

al.add(MaxSize,tempInt);

MaxSize++;

System.out.println(al.toString());

} else {

for (int j=0;j<MaxSize ;j++ )

{

if

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

{

al.add(j,tempInt);

MaxSize++;

System.out.println(al.toString());

break;

}

}

}

}

System.out.println("The ArrayList Sort After:");

for(int i=0;i<al.size();i++)

{

System.out.println("al["+i+"]="+al.get(i));

}

}

public static void main(String[] args)

{

InsertSort is = new InsertSort(10,100);

is.SortIt();

}

}

14.編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。

答:代碼以下:

public static void split(String source,int num) throws Exception

{

int k=0;

String temp="";

for (int i = 0; i <source.length(); i++)

{

byte[] b=(source.charAt(i)+"").getBytes();

k=k+b.length;

if(k>num)

{

break;

}

temp=temp+source.charAt(i);

}

System.out.println(temp);

}


1.抽象類和接口的區別?

  1. 接口能夠被多重implements,抽象類只能被單一extends

  2. 接口只有定義,抽象類能夠有定義和實現

  3. 接口的字段定義默認爲:public static final, 抽象類字段默認是"friendly"(本包可見)

  4. 當功能須要累積時用抽象類,不須要累積時用接口。

2.什麼是類的返射機制?

經過類(Class對象),能夠得出當前類的fields、method、construtor、interface、superClass、modified等,同時能夠經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的返射進行開發的。

3.類的返射機制中的包及核心類?

java.lang.Class

java.lang.refrection.Method

java.lang.refrection.Field

java.lang.refrection.Constructor

java.lang.refrection.Modifier

java.lang.refrection.Interface

4.如何將數值型字符轉換爲數字(Integer,Double)?

Integer.parseInt(「1234」)

Double.parseDouble(「123.2」)

5.如何將數字轉換爲字符?

1+」」

1.0+」」

6.如何去小數點前兩位,並四捨五入。

double d=1256.22d;

d=d/100;

System.out.println(Math.round(d)*100);

7.如何取得年月日,小時分秒?

Calendar c=Calendar.getInstance();

System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH));

八、如何取得從1970年到如今的毫秒數

java.util.Date date = new java.util.Date();

long now = date.getTime();

System.out.println(now);

九、如何格式化日期?

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date date=new Date();

//把日期轉化爲字符串

String str=sdf.format(date);

System.out.println(str);

//將字符串轉化爲日期

Date d1=sdf.parse("yyyy-mm-dd");

十、編碼轉換,怎樣實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

十一、String s = new String("xyz");建立了幾個String Object?

兩個

new了一個,」xyz」原本又是一個

十二、float型float f=3.4是否正確?

報錯,應當是float f=3.4f

若是是float f=3(整數)正確

1三、說出一些經常使用的類,包,接口,請各舉5個

經常使用的類:BufferedReader、BufferedWriter、FileReader 、FileWirter 、String 、Integer

經常使用的包:java.lang、java.awt 、java.io、 java.util、 java.sql、 javax.xml、 javax.sevlet

經常使用的接口: List、Map、Document、 NodeList、EjbObject、EjbHome、SessionBean、EntityBean

1四、java中會存在內存泄漏嗎,請簡單描述。

會。如:int i,i2; return (i-i2); //當 i爲足夠大的正數,i2爲足夠大的負數。結果會形成溢位,致使錯誤。

1五、垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?

動態內存

存放類實例

靜態內存

類自己

垃圾收集主要針對的是動態內存,通常當內存不夠用時會進行垃圾收集。

或經過System.gc()手動收集,但不保證必定執行。

1六、是否能夠從一個static方法內部發出對非static方法的調用?

不能夠,若是其中包含對象的method();不能保證對象初始化.

1七、寫clone()方法時,一般都有一行代碼,是什麼?

Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。

1八、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別表明什麼意義?在try塊中能夠拋出異常嗎?

try:執行部分,產生異常

catch:捕捉異常

finally:無論有沒有異常都執行

throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。

throw:拋出一個異常

在try中能夠拋出異常,通常與聲明的異常相同。

自定義異常要繼承於Exception或Exception的子類

1九、String and StringBuffer的區別?

String:長度給定不可變,當多個字符串聯合時要先轉爲StringBuffer,再聯合,速度慢。

StringBuffer:長度可變,能夠將多個字符串值直接聯合,效率高

20、說出ArrayList,Vector, LinkedList的存儲性能和特性,HashMap和Hashtable的區別。

Vector:以數組的方式存儲,增、刪慢,查、改快

ArrayList:線程不安全,速度快

Vector:線程安全,速度慢(synchoronized)

LikedList: 以單鏈表的方式存儲,增、刪快,查、改慢

HashMap與Hashtable都實現的Map接口,HashTable線程安全,HashMap線程不安全


一、Collection 和 Collections的區別。

Collection是集合的根接口,其下有set及list

Collections是集合的算法。

二、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?用contains來區分是否有重複的對象。仍是都不用。

在比較時先調用hashCode方法,若是不相同,證實不相等。

若是相同,再調用equals方法,若是equals方法相同,證實相等,不相同,證實不相等。

==:主要用在基本數據類型及引用

equals:主要是對象或對象引用的比較。

集合中是否包含某一個元素用contains來判斷。

三、List, Set, Map是否繼承自Collection接口?

List,set繼承於Collection

Map沒有繼承於Collection,其相對是獨立的。

屬於Collection類型的對象,能夠經過構造函數將一個集合構形成另一個集合。

四、面向對象的特徵有哪些方面

1.抽象:

找共性,將共有的屬性、方法放到父類中

2.繼承:

子類繼承於父類,具備父類的全部屬性與方法,能夠重用,也能夠覆蓋。

3.封裝:

一個類包括多個屬性及方法。

4. 多態性:

五、String是最基本的數據類型嗎?

基本數據類型包括byte、int、char、long、float、double、boolean和short。

java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類

六、int 和 Integer 有什麼區別?

int 是基本數據類型,不是對象,佔一個內存空間,沒有方法。與其同類的有long,char,doble

Integer是封裝類,具備方法及屬性。與其同類的有Long,Double.Float

七、運行時異常與通常異常有何異同?

運行時異常:JVM拋出的異常,代碼中不用處理。

通常異常:用戶拋出的異常,若是用throws 聲明瞭,調用這個方法的代碼必須對其處理。

八、&和&&的區別?

&:與: 左邊若爲false右邊還執行。

&&:短路與,左邊若爲false右邊不執行。

九、final, finally, finalize的區別?

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示老是執行。

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

十、heap和stack有什麼區別?

棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。

堆是棧的一個組成元素

十一、Static Nested Class 和 Inner Class的不一樣?

Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。

十二、GC是什麼? 爲何要有GC?

GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。

1三、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型)

short s1 = 1; s1 += 1;(能夠正確編譯)

1四、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回與參數最接近的長整數,參數加1/2後求其floor.

1五、Java有沒有goto?

java中的保留字,如今沒有在java中使用。

1六、給出一個你最多見到的runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

通常異常:

IOException

FileNotFoundException

SqlException

1七、數組有沒有length()這個方法? String有沒有length()這個方法?

數組沒有length()這個方法,有length這個屬性

String有length()這個方法.

1八、構造器Constructor是否可被override?

構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。

1九、是否能夠繼承String類?

String類是final類故不能夠繼承。

20、swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?

switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。

2一、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?

會執行,在return前執行。

2二、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?

不對,有相同的 hash code

這是java語言的定義:

1) 對象相等則hashCode必定相等;

2) hashCode相等對象未必相等

2三、四種會話跟蹤技術

Cookie

Session

Hidden

url 重寫

2四、寫一個Singleton出來。

Singleton模式主要做用是保證在Java應用程序中,一個類只有一個實例存在。

通常Singleton模式一般有幾種種形式:

第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {

private Singleton(){}

//在本身內部定義本身一個實例,是否是很奇怪?

//注意這是private 只供內部調用

private static Singleton instance = new Singleton();

//這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問

public static Singleton getInstance() {

return instance;

}

}

第二種形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次

//使用時生成實例,提升了效率!

if (instance==null)

instance=new Singleton();

return instance;   }

}

其餘形式:

定義一個類,它的構造函數爲private的,全部方法爲static的。

通常認爲第一種形式要更加安全些

2五、Java中的異常處理機制的簡單原理和應用。

原理: 有錯直接轉到異常處理部分或向上拋出。

應用:JAVA的異常就是錯誤,有兩種,一種是運行時,編碼能夠不用捕捉。一種是通常異常,若是throws聲明瞭,必須進行處理。

2六、描述一下JVM加載class文件的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。


一、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

字節流,字符流。

字節流繼承於InputStream、OutputStream,字符流繼承於Reader、Writer。在java.io包中還有許多其餘流,低層流與調層流,高層流主要是爲了提升性能和使用方便。

二、啓動一個線程是用run()仍是start()?

啓動一個線程是調用start()方法,啓動線程並調用run()方法。

三、線程的基本概念、線程的基本狀態以及狀態之間的關係

線程是進程內的併發,沒有自已內存空間,共享進程的,線程間的通訊成本較低。

Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。

四、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼關鍵字修飾同步方法? stop()和suspend()方法爲什麼不推薦使用?

多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口

同步的實現方面有兩種,分別是synchronized,wait與notify

反對使用stop(),是由於它不安全。它會解除由線程獲取的全部鎖定,並且若是對象處於一種不連貫狀態,那麼其餘線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其餘任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來講,若是它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()從新啓動線程。

五、sleep() 和 wait() 有什麼區別?

Sleep是指休眠給定的時間,當這個時間達到以後,線程會再次醒來。

Wait是等待狀態,多長時間不清楚,由另外一個線程將其喚醒。

六、輸入輸出流的理解

在java使用流的機制進行數據的傳送,從文件到內存是輸入流,從內存到文件是輸出流,輸入流能夠經過 read讀取,輸出流以write或print寫入,對於流能夠是分爲高層流和低層流,低層以一個字節或字符爲單位進行處理,高層流以一批數據爲單位進行處理。

分類:

字節(二進制)

FileInputStream(低層輸入流)

FileOutputStream(低層輸出流)

PrintStream(高層流) System.out.println()

字符(一個char)

FileReader

FileWriter

七、請寫一個程序的讀寫,要求用兩種方式一種是低層流另外一種是高層流。

import java.io.FileWriter;

import java.io.InputStream;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.FileReader;

public class Untitled1 {

public static void writeFileChar() throws Exception {

FileWriter f = new FileWriter("c:\\aa.txt");

InputStream is = System.in;

int c = is.read();

while (((char) c) != 'x') {

f.write(c);

c = is.read();

}

f.close();

is.close();

}

public static void writeFileString() throws Exception {

FileWriter f = new FileWriter("c:\\aa.txt");

BufferedWriter bwr=new BufferedWriter(f);

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

String c = bf.readLine();

while (!c.equals("stop")) {

bwr.write(c+"\r\n");

c = bf.readLine();

}

bwr.close();

f.close();

bf.close();

}

public static void readFileChar() throws Exception {

FileReader f = new FileReader("c:\\aa.txt");

int c = f.read();

while (c!=-1) {

System.out.print((char)c);

c=f.read();

}

f.close();

}

public static void readFileString() throws Exception {

BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt"));

String c = bf.readLine();

while (c!=null)

{

System.out.println(c);

c=bf.readLine();

}

bf.close();

}

public static void main(String[] args) throws Exception {

readFileString();

}

}

八、如何列出某個目錄下的全部文件

Import java.io.File;

File f=new File("C:\\");

File[] f1=f.listFiles();

for(int i=0;i<f1.length;i++)

{

if(f1[i].isDirectory())

{

System.out.println("dirctory is"+f1[i].getName());

}

else

{

System.out.println("file is"+f1[i].getName());

}

}

}

9.如何列出某個目錄下的全部子目錄

public static void main(String[] args) throws Exception

{

getFile(new File("C:\\entityBean"),"\t");

}

public static void getFile(File f,String sem) throws Exception

{

System.out.println(sem+f.getName());

File fl[]=f.listFiles();

if(fl.length>=1)

{

for(int i=0;i<fl.length;i++)

{

if(fl[i].isDirectory())

{

getFile(fl[i],sem+"\t");

}

}

}

}

10.判斷一個文件或目錄是否存在

File f=new File("C:\\entityBean");

if(f.exists())

{

System.out.println("exist");

}

else

{

System.out.println("not exist");

}

jdbc數據訪問技術

一、JDBC如何作事務處理?

Con.setAutoCommit(false)

Con.commit();

Con.rollback();

二、寫出幾個在Jdbc中經常使用的接口

preparedStatement,callableStatement,statement,Connection,ResultSet

三、簡述你對Statement,PreparedStatement,CallableStatement的理解

statement用於執行靜態 SQL 語句並返回它所生成結果的對象,在執行時肯定sql。

PreparedStatement表示預編譯的 SQL 語句的對象。 SQL 語句被預編譯而且存儲在 PreparedStatement對象中。而後可使用此對象高效地屢次執行該語句,能夠傳參數,在獲得PreparedStatement對象時肯定sql.

CallableStatement用於執行 SQL 存儲過程的接口。若是有輸出參數要註冊說明是輸出參數。

四、Java中訪問數據庫的步驟?

Class.forName(「oracle.jdbc.driver.OracleDriver」);

Connection con=DriverManager.openConnection(「jdbc:oracle:thin:@localhost:1521:DataBase 」,」 UserName」,」Password 」)

五、利用JDBC檢索出表中的數據

Class.forName(「」);

Connection con=DriverManager.openConnection(「 」,」 」,」 」)

preparedStatment ps=Con.preparedStatment(「select * from [table]」);

ResultSet rs=ps.executeQuery();

While(rs.next)

{

Rs.getString(1) 或rs.getString(「字段名」)

}

六、執行存儲過程用那一個類,如何操做輸出參數?(操做)

CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");

c.setString(1,"1");

c.registerOutParameter(2,java.sql.Types.VARCHAR);

c.execute();

c.getString(2);

七、Class.forName的做用?爲何要用?

註冊一個數據庫驅動,將驅動加載到當前的JVM中。

八、Jdo是什麼?

JDO是Java對象持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,所以對開發人員來講,存儲數據對象徹底不須要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工做已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,由於它能夠在任何數據底層上運行。JDBC只是面向關係數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,好比關係數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。

Web編程Jsp&Servlet技術

一、JSP中動態INCLUDE與靜態INCLUDE的區別?

jsp:include:在運行時調用另外一個頁面,變量是能夠重複的。

<%@include file=」」%>:在轉譯時合在一塊兒,會成爲同一個類,變量不能夠重複。

二、forward和redirect的區別?

forward是服務器內部重定向,程序收到請求後從新定向到另外一個程序,客戶機並不知道;redirect則是服務器收到請求後發送一個狀態頭給客 戶,客戶將再請求一次,這裏多了兩次網絡通訊的來往。固然forward也有缺點,就是forward的頁面的路徑若是是相對路徑就會有些問題了。

forward 會將 request state ,、bean 等等信息帶往下一個 jsp

redirect 是送到 client 端後再一次 request , 因此資料不被保留.

使用 forward 你就能夠用 getAttribute() 來取前一個 jsp 所放入的 資料

三、如何實現一個自定義的servlet?

extends HttpServlet 並覆蓋doPost或doGet方法

在web.xml中進行部署

四、Servlet的生命週期是什麼?

在容器tomcat啓動以後,servlet不會當即被訪問,除非在配置文件中加上了啓動即初始化,不然,servlet將會在第一次被訪問的時候被初始化,而後用這個初始化對象響應用戶請求,當該請求結束了,servlet將不會被銷燬,等到第二次,第三次....以後全部的請求都將是同一個servlet對象在處理,直到tomcat容器關閉,servlet被銷燬。

五、jsp就是一個servlet是否正確?

六、JSP的內置對象及方法

Request request表示HttpServletRequest對象。取客戶端表單域信息及cookie, header, 和session

responseresponse表示HttpServletResponse對象,對客戶端的響應返回文本、寫cookies。

out out 向客戶端打印html文本.

pageContext :當前jsp頁面的上下文環境,能夠獲得session、request、application等內置對象,在自定義標籤中使用的不少。

session session表示一個請求的javax.servlet.http.HttpSession對象。Session一個用戶多個頁面共享同一變量。

application applicaton 表示一個javax.servle.ServletContext對象。存放容器級的變量。

config config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。

pagepage表示從該頁面產生的一個servlet實例

exception:異常,當iserrorpage=true

七、描述JSP和Servlet的區別、共同點、各自應用的範圍

Jsp主要在於頁面的顯示動態生成頁面,能夠與html標記一塊兒使用,其仍是要生成爲一個servlet。

Servlet:主要是控制的處理,如調用業務層,跳轉不一樣的jsp頁面。

一、描述Cookie和Session的做用,區別和各自的應用範圍,Session工做原理。

Cookie:主要用在保存客戶端,其值在客戶端與服務端之間傳送,不安全,存儲的數據量有限。

Session:保存在服務端,每個session在服務端有一個sessionID做爲一個標識。存儲的數據量大,安全性高,佔用服務端的內存資源。

二、說出servlet的生命週期,並說出Servlet和CGI的區別?

servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。

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

三、什麼狀況下調用doGet()和doPost()?

Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。

四、Request對象的主要方法:

setAttribute(String name,Object):設置名字爲name的request的參數值

getAttribute(String name):返回由name指定的屬性值

getAttributeNames():返回request對象全部屬性的名字集合,結果是一個枚舉的實例

getCookies():返回客戶端的全部Cookie對象,結果是一個Cookie數組

getCharacterEncoding():返回請求中的字符編碼方式

getContentLength():返回請求的Body的長度

getInputStream():返回請求的輸入流,用於得到請求中的數據

getMethod():得到客戶端向服務器端傳送數據的方法

getParameter(String name):得到客戶端傳送給服務器端有name指定的參數值

getParameterNames():得到客戶端傳送給服務器端的全部參數的名字,結果是一個枚舉的實例

getParameterValues(String name):得到有name指定的參數的全部值

getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱

getQueryString():得到查詢字符串

getRequestURI():獲取發出請求字符串的客戶端地址

getRemoteAddr():獲取客戶端的IP地址

getRemoteHost():獲取客戶端的名字

getSession([Boolean create]):返回和請求相關Session

getServerName():獲取服務器的名字

getServletPath():獲取客戶端所請求的腳本文件的路徑

getServerPort():獲取服務器的端口號

removeAttribute(String name):刪除請求中的一個屬性

五、咱們在web應用開發過程當中常常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?

Public String translate (String str) {

String tempStr = "";

try {

tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

tempStr = tempStr.trim();

} catch (Exception e) {

System.err.println(e.getMessage());

}

return tempStr;

}

六、Servlet執行時通常實現哪幾個方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()


八、在JSP中如何讀取客戶端的請求,如何肯定某個Jsp文件的真實路徑?

Request.getparameter(「」)

<%=application.getRealPath("aa.jsp") %>

相關文章
相關標籤/搜索