第一篇:Java編程語言基礎(chǔ)總結(jié)
第一章初識(shí)Java 1.程序是為了讓計(jì)算機(jī)執(zhí)行某些操作或解決某個(gè)問題而編寫的一系列有序指令的集合。
2.Java包括編程語言和相關(guān)的技術(shù)。
3.Java主要用于開發(fā),桌面應(yīng)用程序和Internet應(yīng)用程序。4.開發(fā)一個(gè)Java應(yīng)用程序的基本步驟:編寫源程序,編譯程序和運(yùn)行程序。源程序以.java為擴(kuò)展名,編譯后生成的文件以.class為擴(kuò)展名。使用javac命令可以編譯.java文件,使用java命令可以運(yùn)行編譯后生成的.class文件。
5.編寫Java程序要符合Java編碼規(guī)范,為程序編寫注釋可大大增加程序的閱讀性。
6.MyEcplise是一個(gè)功能強(qiáng)大的集成開發(fā)環(huán)境(IDE)。它的各種窗口便于Java程序的開發(fā),調(diào)試和管理。
第二章變量、數(shù)據(jù)類型和運(yùn)算符
1.變量是一個(gè)數(shù)據(jù)存儲(chǔ)空間的表示,它是存儲(chǔ)數(shù)據(jù)的基本單元。變量的命名規(guī)則:
(1)必須以字母,“_”,“$”開頭。(2)可以包括數(shù)字,但不能以數(shù)字開頭(3)不能包括除“_”,“$”以外的特殊符號(hào)(4)不能使用Java語言關(guān)鍵字或者保留字(goto)
2.Java中數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,基本數(shù)據(jù)類型有整型(int),雙精度浮點(diǎn)型(double),字符型(char)和字符串(String)。3.變量要先聲明并賦值,才能使用。4.Java提供各種類型的運(yùn)算符,具體如下。
(1)賦值運(yùn)算(=)(2)算術(shù)運(yùn)算符(+,-,*,/,%)(3)關(guān)系運(yùn)算符(>,>=,<,<=,==,!=)(4)條件運(yùn)算符(條件?表達(dá)式1:表達(dá)式2)(5)邏輯運(yùn)算符(&& , || ,!, & , |)&&(短路與)與&的區(qū)別:&&進(jìn)行判斷時(shí),當(dāng)?shù)谝粋€(gè)條件為假,則不需要判斷第二個(gè)條件,結(jié)果為假。&進(jìn)行判斷時(shí),即使第一個(gè)條件為假時(shí),也需要判斷完第二個(gè)條件才能給出結(jié)果為假。||(短路或)與|的區(qū)別:與上同理(5)位運(yùn)算符(&, | , << , >> , >>>)5.數(shù)據(jù)類型轉(zhuǎn)換是為了方便不同類型的數(shù)據(jù)之間進(jìn)行運(yùn)算
6.數(shù)據(jù)類型轉(zhuǎn)換包括了自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換,自動(dòng)類型轉(zhuǎn)換需要滿足類型兼容且目標(biāo)類型大于源類型的條件
7.Java中使用boolean類型表示真假,boolean類型的兩個(gè)值為true和false。
8.Java中的關(guān)系運(yùn)算符可以用于來比較大小,高低,多少等,比較厚的結(jié)果是boolean類型。
9.Java提供Scanner類,可以實(shí)現(xiàn)從控制臺(tái)獲取鍵盤上輸入的信息
第三章選擇結(jié)構(gòu)(一)Java中的if選擇結(jié)構(gòu),包括以下形式
(1)基本的if選擇結(jié)構(gòu):可以處理單一或組合條件的情況(2)if-else選擇結(jié)構(gòu):可以處理簡單的條件分支情況(3)多重if選擇結(jié)構(gòu):可以處理連續(xù)區(qū)間的條件分支情況(4)嵌套if選擇結(jié)構(gòu):可以處理復(fù)雜的條件分支情況
第四章選擇結(jié)構(gòu)(二)1.switch選擇結(jié)構(gòu)適用于進(jìn)行等值判斷
2.switch關(guān)鍵字后面小括號(hào)里表達(dá)式的值可以是int , short , byte , char , 枚舉 , String(JDK1.7開始支持)
第五章循環(huán)結(jié)構(gòu)(一)1.循環(huán)結(jié)構(gòu)由循環(huán)結(jié)構(gòu)和循環(huán)操作構(gòu)成,只要滿足循環(huán)條件,循環(huán)操作就會(huì)反復(fù)執(zhí)行
2.使用循環(huán)結(jié)構(gòu)解決問題問題的步驟:分析循環(huán)條件和循環(huán)操作,套用循環(huán)結(jié)構(gòu)的語法寫出代碼,檢查循環(huán)能否退出
3.while循環(huán)結(jié)構(gòu)是先判斷后執(zhí)行,do-while是先執(zhí)行,后判斷。Do-while至少執(zhí)行一次。
4.debug調(diào)試:設(shè)置斷點(diǎn),單步運(yùn)行,觀察變量
第六章循環(huán)結(jié)構(gòu)(二)1.for循環(huán)結(jié)構(gòu)的語法結(jié)構(gòu)如下
for(表達(dá)式1:表達(dá)式2:表達(dá)式3){
} //循環(huán)體
表達(dá)式1:循環(huán)結(jié)構(gòu)的初始部分,為循環(huán)變量賦初值 表達(dá)式2:循環(huán)結(jié)構(gòu)的循環(huán)條件
表達(dá)式3:循環(huán)條件的迭代部分,通常用來修改循環(huán)變量的值 2.用break和continue語句控制流程
(1)break語句用于終止某個(gè)循環(huán),程序跳轉(zhuǎn)到循環(huán)體外的下一條語句。Break也可以在switch語句中使用
(2)continue語句用于跳出本次循環(huán),進(jìn)入下一次循環(huán)
(3)return可以結(jié)束當(dāng)前方法的執(zhí)行并退出,返回調(diào)用該方法的語句處
第七章數(shù)組
1.數(shù)組是可以在內(nèi)存中連續(xù)存儲(chǔ)多個(gè)元素的結(jié)構(gòu),數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型
2.數(shù)組中的元素通過數(shù)組的下標(biāo)進(jìn)行訪問,數(shù)組的下標(biāo)從0開始 3數(shù)組可用一個(gè)循環(huán)為元素賦值,或用一個(gè)循環(huán)輸出數(shù)組中的元素信息
4.通過數(shù)組名.length可獲得數(shù)組長度
5.利用Arrays.提供的sort()方法可以方便的對(duì)數(shù)組中的元素進(jìn)行排序 6.二維數(shù)組實(shí)際上就是一個(gè)一維數(shù)組,他的每個(gè)元素又是一個(gè)一維數(shù)組。
第八章循環(huán)結(jié)構(gòu)進(jìn)階
1.數(shù)組的輸入排序,選擇排序,冒泡排序
2.在二重循環(huán)中可以使用break、continue語句控制程序的執(zhí)行 選擇排序:
思路:每次循環(huán)得到最小值的下標(biāo),然后交換數(shù)據(jù)。如果交換的位置等于原來的位置,則不交換。插入排序:
思路:將數(shù)據(jù)插入到已排序的數(shù)組中。
第二篇:Java編程語言面試題
西安英泰移動(dòng)通信學(xué)院S2級(jí)Java編程語言測試題 1
Java編程語言面試題
一、簡答題
1、簡述用Java編程語言編寫、編譯、解釋和執(zhí)行過程。
2、簡述在Java JDK中,java.exe程序的作用。
3、簡述Java編程語言中的數(shù)組和C編程語言中定義數(shù)組有什么區(qū)別。
4、簡述類與對(duì)象的關(guān)系。對(duì)象的方法和類的方法是否為一回事?
5、JVM在解析代碼Person p1=new Person()和new Person()時(shí)有什么區(qū)別?
6、簡述this關(guān)鍵字的四中用途。
7、簡述構(gòu)造函數(shù)的作用。
8、分別簡述static和final關(guān)鍵字的意義。
9、簡述抽象類和接口的區(qū)別,并闡明抽象類和接口的用途。
10、簡述多態(tài)的概念和意義。
11、簡述異常和錯(cuò)誤的區(qū)別。
12、簡述如何創(chuàng)建和啟動(dòng)一個(gè)線程的兩種方法
13、簡述棧內(nèi)存和堆內(nèi)存分別用來做什么。
14、簡述throw關(guān)鍵字在程序中拋出的是什么。
15、在一個(gè)類的public static void method()中,能夠直接使用該類什么類型的成員。
二、計(jì)算題
1、在類Runner中定義一個(gè)方法move(),要求這個(gè)方法的參數(shù)是一個(gè)實(shí)現(xiàn)了接口Runnable的匿名內(nèi)部類的對(duì)象,該接口中的方法中的內(nèi)容自己可以決定。
2、類Outer中與方法屬性平行定義的內(nèi)部類為Inner{ public void doStuff(){}},寫出在另一個(gè)類TestInner的public static void main(String s)中調(diào)用方法doStuff()的代碼。
3、類Book{ public void insert(String id)throws Exception{…}}中的方法被類TestBook中public void testInser()方法調(diào)用,寫出該方法中的主要代碼。
4、兩個(gè)頂級(jí)包test1和test2,需要將它們壓縮成一個(gè)文件myjava.jar,再用WinRaR打開時(shí),會(huì)在瀏覽器上看到下列層次;
◎META-INF
◎test1
◎test2
注:◎?yàn)槲募A
請(qǐng)寫出操作過程,并寫出運(yùn)行的命令行程序(提示:用jar.......).5、同一個(gè)線程類ThreadTest中定義了:
public synchronized void sale(){...}
synchronized(str){...}
寫出能使這兩個(gè)類成員保持同步的改進(jìn)代碼。
6、解釋類class Q{
private String name=“李四”;
private String sex=“女”;
boolean bFull=false;
public synchronized void put(String name,String sex){
if(bFull)
try{
wait();
this.name=name;
}catch(InterruptedException e){}
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{
wait();
}catch(InterruptedException e){}
System.out.println(name + “----” + sex);
bFull=false;
notify();
}
}
中wait()、notify()、sleep()諸方法的作用。
7、在類class TestInteger{
public static void main(String[] args){
int w =。。。。。。。。。。。。。。。。。。。。// 將args[0]轉(zhuǎn)換int型的方法
int h =。。。。。。。。。。。。。。。。。。。。//將args[1]轉(zhuǎn)換int型的另一種方法//int h = Integer.valueOf(args[1]).intValue();//第三種方法
for(int i=0;i StringBuffer sb=new StringBuffer(); for(int j=0;j sb.append('*'); } System.out.println(sb.toString()); } } } 中,args[0]的值為:“1234”,args[1]的值為:“5678”,請(qǐng)上面代碼塊中的……………處填寫代碼。 8、下面類 import java.util.*; public class TestVector{ public static void main(String [] args){ int b=0; Vector v=new Vector();System.out.println(“Please Enter Number:”); while(true){ try{ b= System.in.read();//……….} catch(Exception e){ System.out.println(e.getMessage()); } if(b=='r' || b== 'n') break; else{ int num=b-'0'; v.addElement(new Integer(num));//………..} } int sum=0; Enumeration e=v.elements();//………………… while(e.hasMoreElements()){ Integer intObj=(Integer)e.nextElement();//………………..sum += intObj.intValue(); } System.out.println(sum); } } 中,請(qǐng)?jiān)谥T單行注釋//。。。。中解釋其左邊一行代碼的意義。 9、下面類 import java.io.*; public class DataStreamTest{ public static void main(String[] args){ try{ FileOutputStream fos=new FileOutputStream(“c:hello.txt”);//…….BufferedOutputStream bos= new BufferedOutputStream(fos);//…… DataOutputStream dos= new DataOutputStream(bos);//……..dos.writeUTF(“ab中國”);//……… dos.writeBytes(“ab中國”); dos.writeChars(“ab中國”); dos.close();//………… FileInputStream fis=new FileInputStream(“hello.txt”);//…….BufferedInputStream bis=new BufferedInputStream(fis);//…….DataInputStream dis=new DataInputStream(bis);//…….System.out.println(dis.readUTF()); dis.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } } 中,請(qǐng)?jiān)谥T單行注釋//。。。。中解釋其左邊一行代碼的意義。 10、已知接口:interface PCI { voidstart(); voidstop(); } 要求:寫兩個(gè)類:NetWorkCard,SoundCard分別實(shí)現(xiàn)上面接口的方法(內(nèi)容自編),并寫第三個(gè)類MainBoard,該類中的方法install(PCI p)應(yīng)用NetWorkCard,SoundCard兩個(gè)類對(duì)象的方法。根據(jù)上面的要求,填寫下面的代碼: class Assembler { public static void main(String []args) { //在下面寫代碼….} } class NetWorkCard ….{ } class SoundCard…………{ } class MainBoard…………………………………..{ install(PCI p){ } } 【程序1】 題目:古典問題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問每個(gè)月的兔子總數(shù)為多少? 1.程序分析: 兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....【程序2】 題目:判斷101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。 1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。 【程序3】 題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個(gè)“水仙花數(shù)”,因?yàn)?53=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循環(huán)控制100-999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。 【程序4】 題目:將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。 程序分析:對(duì)n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成: (1)如果這個(gè)質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束,打印出即可。 (2)如果n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)你n,重復(fù)執(zhí)行第一步。 (3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。 【程序5】 題目:利用條件運(yùn)算符的嵌套來完成此題:學(xué)習(xí)成績>=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b這是條件運(yùn)算符的基本例子。 【程序6】 題目:輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。 1.程序分析:利用輾除法。 【程序7】 題目:輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)。 1.程序分析:利用while語句,條件為輸入的字符不為'n'.【程序8】 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制。 1.程序分析:關(guān)鍵是計(jì)算出每一項(xiàng)的值。 【程序9】 題目:一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程 找出1000以內(nèi)的所有完數(shù)。 【程序10】 題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時(shí),共經(jīng)過多少米?第10次反彈多高? 【程序11】 題目:有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無重復(fù)數(shù)字的三位數(shù)?都是多少? 1.程序分析:可填在百位、十位、個(gè)位的數(shù)字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 【程序12】 題目:企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤提成。利潤(I)低于或等于10萬元時(shí),獎(jiǎng)金可提10%;利潤高于10萬元,低于20萬元時(shí),低于10萬元的部分按10%提成,高于10萬元的部分,可可提成7.5%;20萬到40萬之間時(shí),高于20萬元的部分,可提成5%;40萬到60萬之間時(shí)高于40萬元的部分,可提成3%;60萬到100萬之間時(shí),高于60萬元的部分,可提成1.5%,高于100萬元時(shí),超過100萬元的部分按1%提成,從鍵盤輸入當(dāng)月利潤I,求應(yīng)發(fā)放獎(jiǎng)金總數(shù)? 1.程序分析:請(qǐng)利用數(shù)軸來分界,定位。注意定義時(shí)需把獎(jiǎng)金定義成長整型。 【程序13】 題目:一個(gè)整數(shù),它加上100后是一個(gè)完全平方數(shù),再加上168又是一個(gè)完全平方數(shù),請(qǐng)問該數(shù)是多少? 1.程序分析:在10萬以內(nèi)判斷,先將該數(shù)加上100后再開方,再將該數(shù)加上268后再開方,如果開方后的結(jié)果滿足如下條件,即是結(jié)果。請(qǐng)看具體分析: 【程序14】 題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 1.程序分析:以3月5日為例,應(yīng)該先把前兩個(gè)月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大于3時(shí)需考慮多加一天。 【程序15】 題目:輸入三個(gè)整數(shù)x,y,z,請(qǐng)把這三個(gè)數(shù)由小到大輸出。 1.程序分析:我們想辦法把最小的數(shù)放到x上,先將x與y進(jìn)行比較,如果x>y則將x與y的值進(jìn)行交換,然后再用x與z進(jìn)行比較,如果x>z則將x與z的值進(jìn)行交換,這樣能使x最小。 【程序16】 題目:輸出9*9口訣。 1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。 【程序17】 題目:猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè) 第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下 的一半零一個(gè)。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了。求第一天共摘了多少。 1.程序分析:采取逆向思維的方法,從后往前推斷。 【程序18】 題目:兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出三人。甲隊(duì)為a,b,c三人,乙隊(duì)為x,y,z三人。已抽簽決定比賽名單。有人向隊(duì)員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請(qǐng)編程序找出三隊(duì)賽手的名單。 1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。 【程序19】 題目:打印出如下圖案(菱形) * *** ****** ******** ****** *** * 1.程序分析:先把圖形分成兩部分來看待,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律,利用雙重 for循環(huán),第一層控制行,第二層控制列。 【程序20】 題目:有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個(gè)數(shù)列的前20項(xiàng)之和。 1.程序分析:請(qǐng)抓住分子與分母的變化規(guī)律。 【程序21】 題目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加變成了累乘。 【程序22】 題目:利用遞歸方法求5!。 1.程序分析:遞歸公式:fn=fn_1*4! 【程序23】 題目:有5個(gè)人坐在一起,問第五個(gè)人多少歲?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大2歲。問第三個(gè)人,又說比第2人大兩歲。問第2個(gè)人,說比第一個(gè)人大兩歲。最后問第一個(gè)人,他說是10歲。請(qǐng)問第五個(gè)人多大? 1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第五個(gè)人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推。 【程序24】 題目:給一個(gè)不多于5位的正整數(shù),要求: 一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。 【程序25】 題目:一個(gè)5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個(gè)位與萬位相同,十位與千位相同。 【程序26】 題目:請(qǐng)輸入星期幾的第一個(gè)字母來判斷一下是星期幾,如果第一個(gè)字母一樣,則繼續(xù) 判斷第二個(gè)字母。 1.程序分析:用情況語句比較好,如果第一個(gè)字母一樣,則判斷用情況語句或if語句判斷第二個(gè)字母。 【程序27】 題目:求100之內(nèi)的素?cái)?shù) 【程序28】 題目:對(duì)10個(gè)數(shù)進(jìn)行排序 1.程序分析:可以利用選擇法,即從后9個(gè)比較過程中,選擇一個(gè)最小的與第一個(gè)元素交換,下次類推,即用第二個(gè)元素與后8個(gè)進(jìn)行比較,并進(jìn)行交換。 【程序29】 題目:求一個(gè)3*3矩陣對(duì)角線元素之和 1.程序分析:利用雙重for循環(huán)控制輸入二維數(shù)組,再將a[i][i]累加后輸出。 【程序30】 題目:有一個(gè)已經(jīng)排好序的數(shù)組。現(xiàn)輸入一個(gè)數(shù),要求按原來的規(guī)律將它插入數(shù)組中。 1.程序分析:首先判斷此數(shù)是否大于最后一個(gè)數(shù),然后再考慮插入中間的數(shù)的情況,插入后此元素之后的數(shù),依次后移一個(gè)位置。 【程序31】 題目:將一個(gè)數(shù)組逆序輸出。 1.程序分析:用第一個(gè)與最后一個(gè)交換。 【程序32】 題目:取一個(gè)整數(shù)a從右端開始的4~7位。 程序分析:可以這樣考慮: (1)先使a右移4位。 (2)設(shè)置一個(gè)低4位全為1,其余全為0的數(shù)。可用~(~0<<4) (3)將上面二者進(jìn)行&運(yùn)算。 【程序33】 題目:打印出楊輝三角形(要求打印出10行如下圖) 1.程序分析:2 13 3 14 6 4 15 10 10 5 1 【程序34】 題目:輸入3個(gè)數(shù)a,b,c,按大小順序輸出。 1.程序分析:利用指針方法。 【程序35】 題目:輸入數(shù)組,最大的與第一個(gè)元素交換,最小的與最后一個(gè)元素交換,輸出數(shù)組。 【程序36】 題目:有n個(gè)整數(shù),使其前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成最前面的m個(gè)數(shù) 【程序37】 題目:有n個(gè)人圍成一圈,順序排號(hào)。從第一個(gè)人開始報(bào)數(shù)(從1到3報(bào)數(shù)),凡報(bào)到3的人退出圈子,問最后留下的是原來第幾號(hào)的那位。 【程序38】 題目:寫一個(gè)函數(shù),求一個(gè)字符串的長度,在main函數(shù)中輸入字符串,并輸出其長度。 【程序39】 題目:編寫一個(gè)函數(shù),輸入n為偶數(shù)時(shí),調(diào)用函數(shù)求1/2+1/4+...+1/n,當(dāng)輸入n為奇數(shù)時(shí),調(diào)用函數(shù)1/1+1/3+...+1/n(利用指針函數(shù)) 【程序40】 題目:字符串排序。 【程序41】 題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據(jù)分為五份,多了一個(gè),這只猴子把多的一個(gè)扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個(gè),它同樣把多的一個(gè)扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個(gè)桃子? 【程序42】 題目:809*??=800*??+9*??+1 其中??代表的兩位數(shù),8*??的結(jié)果為兩位數(shù),9*??的結(jié)果為3位數(shù)。求??代表的兩位數(shù),及809*??后的結(jié)果。 【程序43】 題目:求0—7所能組成的奇數(shù)個(gè)數(shù)。 【程序44】 題目:一個(gè)偶數(shù)總能表示為兩個(gè)素?cái)?shù)之和。 【程序45】 題目:判斷一個(gè)素?cái)?shù)能被幾個(gè)9整除 【程序46】 題目:兩個(gè)字符串連接程序 【程序47】 題目:讀取7個(gè)數(shù)(1—50)的整數(shù)值,每讀取一個(gè)值,程序打印出該值個(gè)數(shù)的*。 【程序48】 題目:某個(gè)公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。 【程序49】 題目:計(jì)算字符串中子串出現(xiàn)的次數(shù) 【程序50】 題目:有五個(gè)學(xué)生,每個(gè)學(xué)生有3門課的成績,從鍵盤輸入以上數(shù)據(jù)(包括學(xué)生號(hào),姓名,三門課成績),計(jì)算出平均成績,況原有的數(shù)據(jù)和計(jì)算出的平均分?jǐn)?shù)存放在磁盤文件“stud”中。 1.什么是GUI? a)GUI是Graphics User Interface的全稱,意思是圖形用戶界面.2.為什么需要GUI? a)圖形用戶界面能夠讓最終用戶通過鼠標(biāo)拖動(dòng)、單擊等動(dòng)作就可以操作整個(gè)應(yīng)用,從而提高應(yīng)用的用戶體驗(yàn)效果,使程序受到用戶的歡迎.3.Java通過AWT和SWING來完成GUI圖形用戶界面編程.4.AWT a)AWT是SUN公司提供的一個(gè)基本的GUI類庫,被稱為抽象工具集(Abstract Window-Toolkit),它為Java應(yīng)用程序提供了基本的組件.b)AWT組件需要調(diào)用運(yùn)行平臺(tái)的圖形界面來創(chuàng)建和平臺(tái)一致的對(duì)等體,所以AWT只 能使用所有平臺(tái)都支持的公共組件,因此AWT只能夠提供一些 常用的GUI組件.5.AWT的主要組成部分 a)Component,代表一個(gè)具體圖形表示能力的對(duì)象,可以在屏幕上顯示,并與用戶交互.通常我們把它稱為”組件”.b)MenuComponent,代表圖形界面的菜單.i.MenuBar,代表菜單條.ii.Menu,代表一個(gè)菜單項(xiàng)的集合.iii.MenuItem,代表一個(gè)菜單項(xiàng).c)Container,代表一個(gè)AWT組件容器,可以盛裝其他Commponent組件,它繼承自 Component抽象類,本身也代表一個(gè)Component組件.i.Window,可獨(dú)立存在的頂級(jí)窗口.1.Frame,代表一個(gè)窗體.2.Dialog,代表一個(gè)對(duì)話框 a)FileDialog代表一個(gè)文件對(duì)話框,用于打開或保存文件.Panel,可容納其他組件,但不能獨(dú)立存在,必須被添加到其他容器中.ii.iii.ScrollPane,帶滾動(dòng)條的容器.d)LayoutManager,布局管理器,表示容器管理其他組件的方式.i.ii.iii.iv.v.vi.FlowLayout,流式布局,類似于Window平臺(tái)記事本的文本布局方式.BorderLayout,邊框布局,只能盛裝5個(gè)組件,這5個(gè)組件分別位于邊框布局容器的東西南北中五個(gè)方位.GridLayout,網(wǎng)格布局,將組件以網(wǎng)格形式顯示在容器中.GridBagLayout,網(wǎng)格包布局,一種較為復(fù)雜的布局管理器,依賴GridBagConstraints來約束組件.CardLayout,卡片布局,以時(shí)間來管理容器內(nèi)的組件,將組件看作是一張張卡片,每次顯示最外面一張卡片(組件).BoxLayou,箱式布局,通常與Box容器結(jié)合使用.6.AWT 的事件 a)應(yīng)用程序響應(yīng)用戶的某個(gè)動(dòng)作或請(qǐng)求,如用戶單擊了一下鼠標(biāo),用戶請(qǐng)求關(guān)閉應(yīng)用 程序窗口等.b)AWT編程中,所有事件的處理都必須交給特定的對(duì)象來完成,我們將這個(gè)特定的對(duì) 象稱為事件監(jiān)聽器.c)AWT的事件處理機(jī)制是一種委派式的事件處理方式,通過將某個(gè)事件監(jiān)聽器注冊(cè) 到用戶指定的組件,當(dāng)用戶進(jìn)行某個(gè)操作并觸發(fā)指定事件時(shí),應(yīng)用程序會(huì)自動(dòng)產(chǎn)生一個(gè)事件(Event)對(duì)象并作為參數(shù)傳給事件監(jiān)聽器中的事件處理器,然后由事件監(jiān) 聽器通知事件處理器來響應(yīng)用戶,完成用戶的請(qǐng)求.d)不同的事件需要不同的事件監(jiān)聽器,不同的監(jiān)聽器需要實(shí)現(xiàn)不同的監(jiān)聽器接口.e)事件監(jiān)聽器接口:為某個(gè)特定事件定義了響應(yīng)用戶請(qǐng)求的方法,當(dāng)用戶將某個(gè)事件 監(jiān)聽器注冊(cè)到指定組件上以響應(yīng)特定的事件時(shí),則該事件監(jiān)聽器必須實(shí)現(xiàn)對(duì)應(yīng)的事件監(jiān)聽器接口才能對(duì)用戶的請(qǐng)求進(jìn)行有效處理.例如,用戶點(diǎn)擊了鼠標(biāo)右鍵,希望打開某個(gè)應(yīng)用程序的右鍵菜單,則注冊(cè)到該應(yīng)用程序上的事件監(jiān)聽器必須實(shí)現(xiàn)鼠標(biāo)事件監(jiān)聽器接口,并實(shí)現(xiàn)該接口內(nèi)部某些方法來完成用戶的請(qǐng)求.f)事件適配器,很多時(shí)候,我們只需要實(shí)現(xiàn)某個(gè)事件監(jiān)聽器接口中個(gè)別方法就能完成應(yīng)用程序的實(shí)際需求,但實(shí)現(xiàn)該事件監(jiān)聽器接口的類必須實(shí)現(xiàn)該接口中所有的抽象方法,這會(huì)造成代碼的冗余.而事件適配器可以幫我們解決這個(gè)問題,事件適配器實(shí)現(xiàn)了所有的擁有多個(gè)抽象方法的事件監(jiān)聽器接口,并空實(shí)現(xiàn)了這些接口中所有的抽象方法,所謂空實(shí)現(xiàn),就是方法中沒有任何實(shí)現(xiàn)代碼,因此,我們可以通過繼承對(duì)應(yīng)事件監(jiān)聽器接口的事件適配器抽象類,并實(shí)現(xiàn)我們感興趣的方法來完成應(yīng)用需求即可.g)Java事件處理過程中主要涉及的三類對(duì)象 i.事件源,通常為普通組件.ii.事件,通常指用戶的某個(gè)操作,如單擊了一下鼠標(biāo),按了一下回車鍵.iii.事件監(jiān)聽器,負(fù)責(zé)監(jiān)聽事件源上所發(fā)生的事件,并作出響應(yīng).h)AWT事件監(jiān)聽器的實(shí)現(xiàn)形式 i.ii.內(nèi)部類形式 頂級(jí)類形式 iii.類本身作為事件監(jiān)聽器 iv.匿名內(nèi)部類形式 v.注:目前最為流行的事件監(jiān)聽器的實(shí)現(xiàn)形式是內(nèi)部類形式和匿名內(nèi)部類形式.7.AWT繪圖 a)AWT繪圖的實(shí)現(xiàn)過程.i.重寫畫布類的paint方法,繪圖圖形.ii.注冊(cè)事件監(jiān)聽器到指定的組件.iii.調(diào)用Component類的repaint方法繪制圖形.b)AWT實(shí)現(xiàn)繪圖主要涉及的對(duì)象 i.ii.c)Component類的子類Canvas類,它代表一個(gè)畫布.Graphics,代表一個(gè)畫筆,可以在Canvas的子類中繪制用戶自訂的圖形.Image類代表了位圖,它的一個(gè)主要的實(shí)現(xiàn)類BufferedImage是可以訪問圖形數(shù)據(jù) 緩沖區(qū),并可以返回一個(gè)Graphics對(duì)象來繪制該BuuferedImage.d)可以使用ImageIO工具類的ImageReader和ImageWriter讀寫磁盤上的位圖文件.8.AWT的優(yōu)缺點(diǎn) a)AWT在許多非桌面環(huán)境,如嵌入式設(shè)備中有著自己的優(yōu)勢,它的主要優(yōu)點(diǎn)如下:i.ii.iii.iv.更少的內(nèi)存:對(duì)運(yùn)行在有限環(huán)境中的GUI程序的開發(fā),是合適的。2.更少的啟動(dòng)事件:由于AWT組件是本地由操作系統(tǒng)實(shí)現(xiàn)的。絕大多數(shù)的二進(jìn)制代碼已經(jīng)在如系統(tǒng)啟動(dòng)的時(shí)候被預(yù)裝載了,這降低了它的啟動(dòng)事件。3.更好的響應(yīng):由于本地組件由操作系統(tǒng)渲染。4.成熟穩(wěn)定的:能夠正常工作并很少使你的程序崩潰。 b)同樣它也有不少的缺點(diǎn) i.ii.iii.更少組件類型:表和樹這些重要的組件缺失了。它們是桌面應(yīng)用程序中普遍使用的。2.缺乏豐富的組件特征:按鈕不支持圖片。3.無擴(kuò)展性:AWT的組件是本地組件。JVM中的AWT類實(shí)例實(shí)際只是包含本地 組件的引用。唯一的擴(kuò)展點(diǎn)是AWT的Canvas組件,可以從零開始創(chuàng)建自定義組 件。然而無法繼承和重用一個(gè)已有的AWT組件 9.AWT總結(jié):AWT是SUN不推薦使用的工具集,實(shí)際開發(fā)中很少使用AWT而是使用SUN公司 和Netscape公司共同開發(fā)的一個(gè)新的用戶界面庫-Swing來開發(fā)GUI應(yīng)用程序,AWT是圖形用戶界面編程的基礎(chǔ),它的布局管理、事件機(jī)制、剪貼板操作等內(nèi)容仍然適用于Swing GUI編程. 線程編程方面 60、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用? 答:有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 用synchronized關(guān)鍵字修飾同步方法 反對(duì)使用stop(),是因?yàn)樗话踩K鼤?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來,但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被“掛起”的線程恢復(fù)運(yùn)行。對(duì)任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。61、sleep()和 wait()有什么區(qū)別? 答:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。 wait是Object類的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。 62、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。 答:如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。 當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長時(shí)間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。63、啟動(dòng)一個(gè)線程是用run()還是start()? 答:啟動(dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。 64、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法? 答:不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問。 我認(rèn)為:其他線程可以進(jìn)入非synchronized方法,但不能進(jìn)入這個(gè)對(duì)象的synchronized方法。65、請(qǐng)說出你所知道的線程同步的方法。 答:wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。 sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。 notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。 Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競爭。 66、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么? 答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify 67、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系 答:線程指在程序執(zhí)行過程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。 Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束 68、簡述synchronized和java.util.concurrent.locks.Lock的異同 ? 答:主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能 主要不同點(diǎn):Lock有比synchronized更精確的線程語義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。 Jsp方面 69、forward 和redirect的區(qū)別 答:forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。 redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。70、jsp有哪些內(nèi)置對(duì)象?作用分別是什么? 答:JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)): request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來自GET/POST請(qǐng)求的參數(shù) response 網(wǎng)頁傳回用戶端的回應(yīng) pageContext 網(wǎng)頁的屬性是在這里管理 session 與請(qǐng)求有關(guān)的會(huì)話期 application servlet 正在執(zhí)行的內(nèi)容 out 用來傳送回應(yīng)的輸出 config servlet的構(gòu)架部件 page JSP網(wǎng)頁本身 exception 針對(duì)錯(cuò)誤網(wǎng)頁,未捕捉的例外 71、jsp有哪些動(dòng)作?作用分別是什么? 答:JSP共有以下6種基本動(dòng)作 jsp:include:在頁面被請(qǐng)求的時(shí)候引入一個(gè)文件。 jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。 jsp:setProperty:設(shè)置JavaBean的屬性。 jsp:getProperty:輸出某個(gè)JavaBean的屬性。 jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁面。 jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記 72、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別? 答:動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn) 靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁面 <%@ include file=“included.htm” %> 73、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別? 答:有兩種,分別為: 74、JSP的內(nèi)置對(duì)象及方法。 答:request表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了幾個(gè)用于獲取cookie, header, 和session數(shù)據(jù)的有用的方法。 response表示HttpServletResponse對(duì)象,并提供了幾個(gè)用于設(shè)置送回 瀏覽器的響應(yīng)的方法(如cookies,頭信息等) out對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。 pageContext表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對(duì)象的API,并且包裝了通用的servlet相關(guān)功能的方法。 session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存貯用戶的狀態(tài)信息 applicaton 表示一個(gè)javax.servle.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息 config表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。page表示從該頁面產(chǎn)生的一個(gè)servlet實(shí)例 Servlet方面 75、說一說Servlet的生命周期? 答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請(qǐng)求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。 與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請(qǐng)求,并且其實(shí)例一般不會(huì)銷毀,而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。 76、JAVA SERVLET API中forward()與redirect()的區(qū)別? 答:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。77、Servlet的基本架構(gòu) 答: public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { } public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { } } 78、什么情況下調(diào)用doGet()和doPost()? 答:Jsp頁面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()。79、servlet的生命周期 答:web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進(jìn)行servlet的初始化。通過調(diào)用service()方法實(shí)現(xiàn),根據(jù)請(qǐng)求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容器調(diào)用servlet的destroy()方法。 80、如何現(xiàn)實(shí)servlet的單線程模式 答:<%@ page isThreadSafe=“false”%> 81、頁面間對(duì)象傳遞的方法 答:request,session,application,cookie等 82、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么? 答:JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。83、四種會(huì)話跟蹤技術(shù) 答:會(huì)話作用域ServletsJSP 頁面描述 page否是代表與一個(gè)頁面相關(guān)的對(duì)象和屬性。一個(gè)頁面由一個(gè)編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動(dòng)作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面 request是是代表與 Web 客戶機(jī)發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁面,涉及多個(gè) Web 組件(由于 forward 指令和 include 動(dòng)作的關(guān)系) session是是代表與用于某個(gè) Web 客戶機(jī)的一個(gè)用戶體驗(yàn)相關(guān)的對(duì)象和屬性。一個(gè) Web 會(huì)話可以也經(jīng)常會(huì)跨越多個(gè)客戶機(jī)請(qǐng)求 application是是代表與整個(gè) Web 應(yīng)用程序相關(guān)的對(duì)象和屬性。這實(shí)質(zhì)上是跨越整個(gè) Web 應(yīng)用程序,包括多個(gè)頁面、請(qǐng)求和會(huì)話的一個(gè)全局作用域 84、Request對(duì)象的主要方法 答: setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值 getAttribute(String name):返回由name指定的屬性值 getAttributeNames():返回request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例 getCookies():返回客戶端的所有Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組 getCharacterEncoding():返回請(qǐng)求中的字符編碼方式 getContentLength():返回請(qǐng)求的Body的長度 getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息 getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例 getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例 getInputStream():返回請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù) getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法 getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值 getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例 getParameterValues(String name):獲得有name指定的參數(shù)的所有值 getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱 getQueryString():獲得查詢字符串 getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址 getRemoteAddr():獲取客戶端的IP地址 getRemoteHost():獲取客戶端的名字 getSession([Boolean create]):返回和請(qǐng)求相關(guān)Session getServerName():獲取服務(wù)器的名字 getServletPath():獲取客戶端所請(qǐng)求的腳本文件的路徑 getServerPort():獲取服務(wù)器的端口號(hào) removeAttribute(String name):刪除請(qǐng)求中的一個(gè)屬性 85、我們?cè)趙eb應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串? 答: 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;} 86、Servlet執(zhí)行時(shí)一般實(shí)現(xiàn)哪幾個(gè)方法? 答: public void init(ServletConfig config)public ServletConfig getServletConfig()public String getServletInfo()public void service(ServletRequest request,ServletResponse response)public void destroy() Jdbc、Jdo方面88、Jdo是什么? 87、Class.forName的作用?為什么要用? 答:調(diào)用該訪問返回一個(gè)以字符串指定類名的類的對(duì)象。答:JDO是Java對(duì)象持久化的新的規(guī)范,為java data object的簡稱,也是一個(gè)用于存取某種數(shù)據(jù)倉庫中的對(duì)象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開發(fā)人員來說,存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來,從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫、文件、XML以及對(duì)象數(shù)據(jù)庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。89、說出數(shù)據(jù)連接池的工作機(jī)制是什么? 答:J2EE服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。90、Jdo是什么? 答:JDO是Java對(duì)象持久化的新的規(guī)范,為java data object的簡稱,也是一個(gè)用于存取某種數(shù)據(jù)倉庫中的對(duì)象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開發(fā)人員來說,存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來,從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫、文件、XML以及對(duì)象數(shù)據(jù)庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。 Xml方面 91、xml有哪些解析技術(shù)?區(qū)別是什么? 答:有DOM,SAX,STAX等 DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問。 SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對(duì)XML的順序訪問 STAX:Streaming API for XML(StAX)92、你在項(xiàng)目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的? 答:用到了數(shù)據(jù)存貯,信息配置兩方面。在做數(shù)據(jù)交換平臺(tái)時(shí),將不能數(shù)據(jù)源的數(shù)據(jù)組裝成XML文件,然后將XML文件壓縮打包加密后通過網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再同XML文件中還原相關(guān)信息進(jìn)行處理。在做軟件配置時(shí),利用XML可以很方便的進(jìn)行,軟件的各種配置參數(shù)都存貯在XML文件中。 93、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式? 答:a: 兩種形式 dtd schema,b: 本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的),c:有DOM,SAX,STAX等 DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問 SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對(duì)XML的順序訪問 STAX:Streaming API for XML(StAX)第三篇:Java基礎(chǔ)編程題
第四篇:Java AWT編程總結(jié)
第五篇:Java線程編程總結(jié)