第一篇:JAVA達內面試題
誠信、創新、開放、合作
JAVA面試題-CORE JAVA部分
--感謝SD0501班畢業學員李曉賓的提供,希望對面試學員和在校學員有所幫助。
1. 在main(String[] args)方法內是否可以調用一個非靜態方法?
答案:不能
2. 同一個文件里是否可以有兩個public類?
答案:不能
3. 方法名是否可以與構造器的名字相同?答案:可以。
4.初始化了一個沒有run()方法的線程類,是否會出錯?
答案:不會。
第一種方法:直接繼承Thread類。
public class Test
{
public static void main(String[] args)
{
ThreadClass t = new ThreadClass();
t.start();
System.out.println(“end”);//輸出“end”
}
}
class ThreadClass extends Thread//Thread類已經實現了空的run()方法。
{
}
第二種方法:實現Runnable接口
public class Test
{
public static void main(String[] args)
{
ThreadClass t = new ThreadClass();
Thread thread = new Thread(t);
thread.start();
System.out.println(“end”);
}
}
class ThreadClass implements Runnable
{
public void run()//必須有此方法否則編譯報錯。它是Runnable接口中的抽象方法。{
System.out.println(“Threads”);
}
}
4. 局部內部類是否可以訪問非final變量?
答案:不能訪問局部的,可以訪問成員變量(全局的)。
class Out
{
private String name = “out.name”;
void print()
{
final String work = “out.local.work”;//若不是final的則不能被Animal 使用.int age=10;
class Animal
//定義一個局部內部類.只能在print()方法中使用.//局部類中不能使用外部的非final的局部變量.全局的可以.{
public void eat()
{
System.out.println(work);//ok
//age=20;error not final
System.out.println(name);//ok.}
}
Animal local = new Animal();
local.eat();
}
}
5. 選擇語句case中,允許使用的值有哪些?答案:int,short,char,byte(都在int范圍之內,且是整
數)
6. Math,String是不可繼承的。(final類)
Instanceof 后面跟的應該是OBJECT。
構造器可以是私有的。(private)
=與==意義是完全不同的。一個是賦值,一個是等于。
全局變量可以不進行初始化,如果使用一個局部變量,則這個局部變量要被初始化。
7. 下面都是正確的main方法簽名。
public static void main(String[] args)
public static final void main(String[] args)
static public void main(String[] args)
static public synchronized void main(String[] args)
static public abstract void main(String[] args)//錯誤
8. if(-0.0 == 0.0)是相等還是不等?
答案:相等。
10.一個抽象類是否可以沒有抽象方法?
答案:可以。
14.數組,無論是當前的,還是類等級的,都會被初始化。
String 是被初始化為 null,不是空字符。
null,““,” “,都是不同的。
“continue”只能在一個循環里(如for,do,while),它不能在case語句中出現。
Primitive(int,char,long等)數組是不能互相賦值的,即使它們本身可以。
一個Constructor可以拋出任何異常。
初始化塊是按照聲明的順序執行的。
所有關于 NaN(Not a Number)和 non-NaN 的比較,都返回false.這條很重要。
==會產生編譯錯誤,如果兩邊類型不匹配的話。
equals()返回 false 如果對象類型不同,但不產生 編譯錯誤。
15. 16.integer和long 操作 /和% 的話,可能會拋出ArithmeticException,比如除0。但是 float與
double不會,即使是除以0。
double a=0;a=a/0;則a等于NaN。
18.面向對象的特征有哪些方面 ?
答案:最基本特征:封裝,繼承,多態。
其他特征:抽象關聯,聚合,組合,內聚,耦合24.設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序。
注:因為這4個線程共享J,所以線程類要寫到內部類中。
加線程:每次對j加一。
減線程:每次對j減一。
public class TestThreads
{
private int j=1;
//加線程
private class Inc implements Runnable
{
public void run()
{
for(int i = 0;i < 10;i++)
{
inc();
}
}
}
//減線程
private class Dec implements Runnable
{
public void run()
{
for(int i = 0;i < 10;i++)
{
dec();
}
}
}
//加1
private synchronized void inc()
{
j++;
System.out.println(Thread.currentThread().getName()+“-inc:”+j);
}
//減1
private synchronized void dec()
{
j--;
System.out.println(Thread.currentThread().getName()+“-dec:”+j);
}
//測試程序
public static void main(String[] args)
{
TestThreads test = new TestThreads();
//創建兩個線程類
Thread thread = null;
Inc inc = test.new Inc();
Dec dec = test.new Dec();
//啟動4個線程
for(int i = 0;i < 2;i++)
{
thread = new Thread(inc);
thread.start();
thread = new Thread(dec);
thread.start();
}
}
}
25.數組轉換問題。
Object[] object=new Person[2];
Person [] person=new Person [3];
person=(Person [])object;//可以轉換
int[] i = new int[2];
long[] l = new int[3];
i =(long[])l;//不可以轉換
26.用socket通訊寫出客戶端和服務器端的通訊,要求客戶發送數據后能夠回顯相同的數據。Server.java:源代碼
import java.net.*;
import java.io.*;
classServer
{
public Server()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
ServerSocket server = new ServerSocket(8888);//建立服務器端
Socket socket = server.accept();//監聽客戶端
//得到該連接的輸入流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//得到該連接的輸出流
pw = new PrintWriter(socket.getOutputStream(),true);
//先讀后寫
String data = br.readLine();
System.out.println(data);//輸出到控制臺
pw.println(data);//轉發給客戶端
}catch(Exception e)
{
e.printStackTrace();
}
finally
{try{//關閉讀寫流br.close();pw.close();}catch(Exception e){}}}public static void main(String[] args){Server server = new Server();}
}
Client.java:源代碼
import java.net.*;
import java.io.*;
classClient
{
public Client()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
Socket socket = new Socket(“localhost”,8888);//與服務器建立連接,服務器要先啟//得到Socket的輸入與輸出流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(),true);
//先寫后讀
pw.println(“Client:你好!”);
String data = null;
while(true)
{
data = br.readLine();
if(data!=null)break;
}
System.out.println(data);
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
br.close();
pw.close();
}catch(Exception e)
{}
}
}
public static void main(String[] args)
{
Client c = new Client();
}
}
37.sleep()和 wait()有什么區別?
答案:sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間(休息),把執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復,時間到了會繼續運行。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
50.啟動一個線程是用run()還是start()?有什么區別?
答案:啟動一個線程是調用start()方法,這并不意味著線程就會立即運行,只是進入了可運行狀態。直接調用run()方法不會產生線程,而是把它當作普通的方法調用,馬上執行。
73.當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
答案:不能,一個對象的synchronized方法只能由一個線程訪問。但其他線程可以同時訪問這個對象的非synchronized方法
第二篇:Java試題A
Java測試題(A卷)
一、單選題(2分/題*20題=40分)
1.下列javaDoc注釋正確的是()
A、/*我愛北京天安門*/ B、//我愛北京天安門*/ C、/**我愛北京天安門*/ D、/*我愛北京天安門**/ 2.下列說法正確的是()
A、JAVA程序的main方法必須寫在類里面 B、JAVA程序中可以有多個main方法 C、JAVA程序中類名必須與文件名一樣
D、JAVA程序的main方法中如果只有一條語句,可以不用{}(大括號)括起來 3.下列語句執行后,變量a、c的值分別是()。
int x=182;int a,c;c=x/100;a=x%10;A、1,2
B、2,1 C、1.82, 2 D、100,82 4.下面哪個表達式可用得到x和y的最大值()?
A、x>y?y:x B、x
a = 6;System.out.print(a);System.out.print(a++);System.out.print(a);A、666 B、667
C、677 D、676 6.下列輸出結果是()
int a = 2 while(a < 5){ switch(a){ case 0: case 3 : a = a + 2;case 1 : case 2 : a = a + 3;default : a = a + 5;} } System.out.print(a)A、5 B、7
C、10
D、1
27.下面是func(int m,int n)方法的定義,方法調用func(1,4)的返回結果是()。
int func(int m,int n){
int sum=0;for(int i=1;i<=4;i+=2){ sum+=i;} return sum;} A、1
B、4
C、5
D、10
8.以下定義一維數組的語句中,正確的是()
A、int a[5]
B、int a[] = new.int[5];C、int a[];D、int a[] = {1,2,3,4,5};
9.分析選項中關于Java中this關鍵字的說法正確的是()
A、this關鍵字是在對象內部指代自身的引用 B、this關鍵字可以在類中的任何位置使用
C、this關鍵字和類關聯,而不是和特定的對象關聯 D、同一個類的不同對象共用一個this 10.在Java中,關于構造方法,下列說法錯誤的是()
A、構造方法的名稱必須與類名相同 B、構造方法可以帶參數 C、構造方法不可以重載 D、構造方法絕對不能有返回值
11.假設類A有構造方法A(int a),則在類A的其它構造方法中調用該構造方法的語句為()
A、A(x)
B、this.A(x)C、this(x)//本類的構造方法都是使用this關鍵字來調用
法使用的是super 12.下列關于抽象類的說法正確的是()
A、某個抽象類的父類是抽象的,則這個子類必須重載父類的所有抽象方法 B、抽象類中必須存在抽象方法 C、絕對不能用抽象類去創建對象
D、抽象類可以實現接口,并且可以只實現接口的部分接口方法 13.下面代碼段
靜態的變量只有一個值,常駐內存存在的 class HasStatic{
} 輸出的結果是: private static int x = 101;public static void main(String[] args){
} HasStatic hs1 = new HasStatic();hs1.x++;102 HasStatic hs2 = new HasStatic();hs2.x++;102 hs1 = new HasStatic();hs1.x++;103 HasStatic.x--;System.out.println(hs1.x + hs2.x);
D、super(x)調用父類的構造方
A、103102 B、204
C、205
D、206
14.下面()不是String類提供的合法的方法。
A、equals(String)//判斷是否內容相同 B、trim()//去空格的函數 C、append()D、indexOf()//對索引進行處理
15.在JAVA中,LinkedList類和ArrayList類同屬于集合框架類,下列()選項中的方法是LinkedList類有而ArrayList類沒有的。A、add(Object o)B、add(int index,Object o)C、remove(Object o)D、removeLast()16.下列哪些說法是正確的?
A、IOException必須被捕獲或拋出
B、java語言聲明變量的同時必須賦值
C、java 語言不允許同時繼承一個類并實現一個接口
D、垃圾收集可被隨時強制執行 17.關于線程狀態的說法正確的是()
A、使用new剛創建出來的線程是就緒狀態 B、調用start()方法線程立即處于運行狀態 C、提倡調用stop()方法終止線程
D、線程等待IO輸入會處于線程阻塞狀態 18.以下代碼: class Message{
String mailmessage;}...Message data;Socket toServer=new Socket(“172.17.96.34”,1001);...ObjectOutputStream out=new ObjectOutputStream(toServer.getOutputStream());out.write(data);
在執行上面代碼時引發異常NotSerializableException。引發此異常的可能原因是什么? A.沒有連上服務器
B.此消息類(Message)聲明不充分 C.輸出套接字可能被破壞
D.寫出到此套接字,不應使用ObjectOutputStream 19.關于JDBC編程,以下說法錯誤的是()。
A、使用Class.forName()方法加載數據庫驅動程序
B、使用DriverManager的getConnection()方法建立與數據庫的連接 C、使用Connection的executeQuery(sql)方法執行查詢得到ResultSet對象 D、用executeUpdate()執行更新、刪除語句不會得到ResultSet對象
20.下面代碼段, class Dog {
} class Beagle extends Dog{ } 如果類Beagle繼承Dog, 并且Beagle類只有一個構造器,下面哪個是Beagle類合法的構造器? A、Beagle(){ } B、Beagle(){ super();} C、Beagle(){ super(“fido”);}
D、不提供構造器,使用默認的構造器。Dog(String name){ }
二、多選題(錯選、漏選不得分,2分/題*10題=20分)
1.下面的說法正確的是()。
A、Java 語言是面向對象的、解釋執行的網絡編程語言。
B、Java 語言具有可移植性,是與平臺無關的編程語言。C、Java 語言可對內存垃圾自動收集。
D、Java 語言編寫的程序雖然是“一次編譯,到處運行”,但必須要java的運行環境。2.在Java接口中,下列選項中有效的方法聲明是()。(選擇二項)
A、public void aMethod();B、void aMethod();C、protected void aMethod();D、private void aMethod();3.定義變量如下:
char c='w';int i=8;long L=15;float f=8.9f;以下賦值語句正確的是()。
A、i=c+i;B、c=c+i;C、L=f+L;D、f=i+L+f;
4.面向對象程序設計的三大特征是()。
A、抽象 B、封裝 C、繼承 D、多態
5.下面關于類的說法正確的是()。
A、類是 Java 語言中的一種復合數據類型。B、類中包含數據變量和方法。
C、類是對所有具有一定共性的對象的抽象。D、Java 語言的類只支持單繼承。
6.編譯并運行下面的程序:
public class A {
} class B extends A { public static void main(String[] args){
} void test(){ } System.out.print(“A”);A a=new B();a.test();
} 以下結論正確的有().A、子類B定義了與父類A中同名的方法test,java中稱為方法的覆蓋。B、代碼可以編譯運行,并輸出結果:AB。C、代碼可以編譯運行,并輸出結果:A。
D、子類B定義了與父類A中同名的方法test,java中稱為方法的重載。7.下面哪些說法正確()?
A、如果某公共的接口被聲明在一個源文件中,則接口必須與源文件具有相同的名字。B、如果源文件包含import語句,則該語句必須是除空行和注釋行外的第一個語句行。C、如果某源文件包含package語句,則該語句必須是第一個非空、非注釋行。D、接口中的方法必定是抽象方法,但可以不用關鍵字abstract修飾。8.關于面向對象的說法正確的是()
A、面向對象編程是類來描述現實世界中的實體 B、有多少個實體就要創建多少個類
C、對象的行為和屬性被封裝在類中,外界通過發送消息來通知對象執行某個任務 D、現實世界中的某些實體不能用類來描述 9.下面代碼:
1.class Over { 2.3.4.5.} 6.7.class Over2 extends Over { 8.9.} 哪兩個選項放在第8行會導致不能編譯? A、public int doStuff(int x, float y){ return 4;} B、protected int doStuff(int x, float y){return 4;} C、private int doStuff(int x, float y){return 4;} D、String doStuff(int x, float y){ return “4”;} E、int doStuff(float x, int y){ return 4;} // 選擇代碼添加在此處 int doStuff(int a, float b){ } return 7;void test(){
} super.test();System.out.println(“B”);
10.以下關于布局的說法,正確的是()
A、布局管理是為了能自動適應窗口大小的變化
B、BorderLayout是邊框布局,他將窗口分為上、下、左、右四部分
C、FlowLayout是流布局,這種布局將其中的組件按照加入的先后順序從左向右排列,一行排滿之后就轉到下一行繼續從左至右排列
D、GridLayout是網格布局,它以矩形網格形式對容器的組件進行布置。容器被分成大小相等的矩形,一個矩形中放置一個組件
三、填空題(2分/題*5題=20分)1.補充下面代碼的實現求數組中元素的最小值。
int[] x={122,33,55,678,-987};int min=_____999_________;for(int i=1;i } System.out.println(“最小值為:”+min); 2.終止循環使用關鍵字____break______,結束本次循環進入下一次循環使用關鍵字____continue______。3.子類中調用父類被重寫的方法需使用關鍵字__Super,聲明常量使用關鍵字___final______。4.自定義的異常類通常繼承自______Execption____________類,方法聲明中拋出異常使用關鍵字____throw______。 5.內部類的特點是內部類與外部類共享______外部類的成員變量_________;內部類中的實例變量與外部類的實例變量重名時,內部類中通過“_____________.this.外部類實例變量名”來引用外部類實例變量。if(_x[i] 四、問答題(4分/題*5題=20分)1.什么是垃圾,java垃圾回收的工作原理 2.類變量與實例變量的區別 3.Vector與TreeSet在存儲結構和存取性能上的區別 4.IO流分為字節流和字符流,說明他們的區別,每一類分別說出兩個java類 5.什么是線程安全問題?什么情況下容易產生線程安全問題?線程安全問題如何解決? 五、程序題(5分/題*2題=10分) 1.用循環輸出九九乘法口訣表 2.編寫TCP服務器端程序,并且每個連接啟動一個單獨的線程來處理。 學習心得 七月之始,我們的達內java班又開始正式上課了,從上課第一天到現在,已經有一個月了,在這短暫的一個月里,我學到是java的基礎知識,重點是JavaSE。感覺時間過的是非常快的,短短一個月就這樣被我們給熬過去了,當中既有心酸也有快樂。 學習之初,有著一點點的不適應,首先是時間段的不適應,每天有這規定的時間上課,下課,休息。或許是在大學這個懶散的環境下,我們已經漸漸的遠離了規定與約束,過分的放縱自己。隨著時間的一天天過去,慢慢的,我們開始適應了這種學習的時間安排以及這樣的學習氛圍,從一種自由放縱中擺脫出來,有了所謂的上進心,開始了各自的Java之路。 在這段時間里,自己感覺最明顯的就是打字速度和以前相比有了明顯的提升,此外就是對一些基本的代碼的理解和運用有了一定自己的意識。這兩點是最明顯的變化。個人感覺學了這些基本知識之后,對于Java的認識上的確有了一個提升,起初對它的認識感覺和其他的編程語言應該沒有多大區別,但是學完這些這些基本的知識之后,我的認識是Java很強大,我們需要不斷地去學,更多的是要不斷的去敲,把它練熟,這樣自己在從業的時候才會有底氣,敢于和別人去競爭。 雖然我們的課堂是看視頻來學習,但是個人覺得只要是能學到知識,這些學的形式只是一種次要的因素而已,對于一個想要學習的人來說,他每時每刻都在學習者,因為他愛學習。有了這一個月的學習經歷之后,感覺自己當初選擇達內來學習Java是一個正確的選擇,我相信我只要有學習渴望,達內一定能給我所要學的。一個都不愛學習的人,你給他再好的學習環境和最好的學習條件,無亞于對牛彈琴,無動于衷。結果還有一個浪費資源,浪費精力。 整個學習的時間是四個月,對于余下的三個月,我拭目以待,相信自己一定能夠在有限的時間內能夠學好這一門語言,為自己以后多一個機會。 相信,我可以! 畢業實習報告 一、實習目的: 進一步了解java開發的相關知識,掌握java開發的基本技術,豐富java開發的實戰經驗。學習SQL的基礎知識及正確的運用方法,和有用的相關技術,提高自己的工作效率。通過實習,培養我們綜合運用已學知識Java語言的面向對象編程能力;培養我們動手能力;培養我們良好編程規范、編程方法;以便能較全面地理解、掌握和綜合運用所學的知識,提高自身的編程能力;增強自己的團隊協作意識,了解軟件開發的思考角度和主要流程。為畢業之后能夠更快地進入工作狀態并且能夠更好的工作,打好一定的基礎。 二、實習單位介紹: 北京達內科技有限公司是中國高端IT培訓的領先品牌,致力于培養面向電信和金融領域的 Java、C++、C#/.Net、測試、嵌入式、PHP等方面的中高端軟件人才,由美國國際數據集團IDG和集富亞洲JAFCO ASIA投資,是國內首家獲得國際風險投資的IT培訓機構。經過9年運營,達內科技實現了98% 的專業就業率,78%的口碑入學率,學員平均畢業薪資3800元/首月平均薪資。目前,達內科技已經發展成為集培訓、咨詢、開發、人才服務于一體的高新技術集團公司,公司下設達內高端IT培訓、達內軟件人才服務中心、達內軟件研發中心。 達內科技以中關村科技園區為依托,在中國軟件業發達城市——北京、上海、廣州、深圳、大連、南京、武漢、杭州、西安、蘇州、成都、太原20大城市,建立了近40家培訓中心,占地2萬平米,年培訓1萬多名軟件人才。已累計為IBM、微軟、摩托羅拉、華為、中軟、用友、Yahoo、阿里巴巴、TOM、新浪、搜狐、百度、聯想、神州數碼、大唐電信、亞信等知名IT企業培養輸送了7萬多名中高級軟件人才,目前達內全國擁有600多名員工,年產值近2億元,是中國領先的中高端軟件人才培訓機構。 由于達內科技優秀的教學效果和行業領先的經營模式贏得了社會各界的廣泛贊譽和好評,近年來達內榮獲了各界權威機構的頒獎:達內成為業界唯一的一家2006、2007、2008、2009連續4年入選德勤評選的 “中國高科技高成長50強公司”、“亞太地區高科技高成長500強公司”,獲得首屆中國留學人才歸國創業“騰飛”獎、中關村管理委員會指定的“軟件人才培養示范基地”、被《計算機世界》評選的“就業服務杰出貢獻獎”、被《中國計算機報》評選的“最具影響力培訓機構獎”、被搜狐評為“中國十大教育集團”、被騰訊評為“中國大學生心目中最具影響力的IT品牌”、2011年達內CEO韓少云先生當選中國貿易協會專家委員會第一屆副主任委員等榮譽。 三、實習崗位介紹: 此次實習為java實訓班,我們組一共6人,共同完成一個服裝管理系統。我主要負責入庫管理模塊代碼的編寫和該模塊相關文檔的撰寫。該模塊主要功能包括:新建入庫單、刪除入庫單、查看入庫單詳細信息、更新入庫單、提交入庫單、查詢入庫單。 四、實習內容及過程: Mysql數據庫 1)MySQL數據庫管理系統概述 MySQL是最流行的開放源碼SQL數據庫管理系統,它是由MySQL AB公司開發、發布并支持的。MySQL AB是由多名MySQL開發人創辦的一家商業公司。它是一家第二代開放源碼公司,結合了開放源碼價值取向、方法和成功的商業模型。 數據庫是數據的結構化集合。計算機是處理大量數據的理想工具,因此,數據庫管理系統在計算方面扮演著關鍵的中心角色,或是作為獨立的實用工具,或是作為其他應用程序的組成部分。 MySQL服務器還有一套實用的特性集合,這些特性是通過與我們用戶的密切合作而開發的。在我們的基準測試主頁上,給出了MySQL服務器和其他數據庫管理器的比較結果。 MySQL服務器最初是為處理大型數據庫而開發的,與已有的解決方案相比,它的速度更快,多年以來,它已成功用于眾多要求很高的生產環境。盡管MySQL始終在不斷發展,但目前MySQL服務器已能提供豐富和有用的功能。它具有良好的連通性、速度和安全性,這使的MySQL十分適合于訪問Internet上的數據庫。 2)MySQL穩定性 每次發布的MySQL服務器均是可用的。僅當用戶嘗試源自“灰色區域”的代碼時才會出現問題。當然,新用戶不了解“灰色區域”是什么。因此,在本節中,我們介紹了目前已知的這類區域。本節所作的介紹主要針對MySQL服務器5.0版和更高版本。在最新的版本中,更正了所有已知和通報的缺陷,但“缺陷”一節所列的除外,這類缺陷與設計有關。 Java中的常用設計模式 1)工廠模式 客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。 3)工廠方法模式 核心工廠類不再負責所有產品的創建,而是將具體創建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節。 控制技術-Servlet技術 1)一個servlet就是Java編程語言中的一個類,它被用來擴展服務器的性能,服務器上駐留著可以通過“請求-響應”編程模型來訪問的應用程序。雖然servlet可以對任何類型的請求產生響應,但通常只用來擴展Web服務器的應用程序。Java Servlet技術為這些應用程序定義了一個特定于HTTP的 servlet類。 javax.servlet和javax.servlet.http包為編寫servlet提供了接口和類。所有的servlet都必須實現Servlet接口,該接口定義了生命周期方法。 2)一個servlet的生命周期由部署servlet的容器來控制。當一個請求映射到一個servlet時,該容器執行下列步驟。 頁面設計-JSP頁面 1)MVC 模式 為了把表現層presentation從請求處理request processing 和數據存儲data storage中分離開來,SUN公司推薦在JSP文件中使用一種“模型-視圖-控制器”Model-view-controller 模式。規范的SERVLET或者分離的JSP文件用于處理請求。當請求處理完后,控制權交給一個只作為創建輸出作用的JSP頁。有幾種平臺都基于服務于網絡層的模-視圖-控件 模式(比如Struts 和Spring framework)。 2)JSP技術的強勢 (1)一次編寫,到處運行。在這一點上Java比PHP更出色,除了系統之外,代碼不用做任何更改。 (2)系統的多平臺支持。基本上可以在所有平臺上的任意環境中開發,在任意環境中進行系統部署,在任意環境中擴展。相比ASP/PHP的局限性是顯而易見的。 (3)強大的可伸縮性。從只有一個小的Jar文件就可以運行Servlet/JSP,到由多臺 服務器進行集群和負載均衡,到多臺Application進行事務處理,消息處理,一臺服務器到無數臺服務器,Java顯示了一個巨大的生命力。 (4)多樣化和功能強大的開發工具支持。這一點與ASP很像,Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,并且其中許多已經可以順利的運行于多種平臺之下。 3)JSP技術的弱勢 (1)與ASP一樣,Java的一些優勢正是它致命的問題所在。正是由于為了跨平臺的功能,為了極度的伸縮能力,所以極大的增加了產品的復雜性。 (2)Java的運行速度是用class常駐內存來完成的,所以它在一些情況下所使用的內存比起用戶數量來說確實是“最低性能價格比”了。從另一方面,它還需要硬盤空間來儲存一系列的.java文件和.class文件,以及對應的版本文件。 五、實習總結及體會 通過這一期的實訓,雖然倍感折磨,但是收獲卻很大的,學習中我不但有了學習成果的喜悅,而且自己也日漸成熟,有種說不出的喜悅。 當我們正式準備學習實訓java編程技術時,讓我倍感興奮。Java是自己以后想主攻的技術,所以自然也就非常的亢奮。感覺肩上責任之重大,那一刻起,我就決心帶領我們小組,奮戰我們的實訓路。當然開始學習后也并非是想象中那樣順利,開始的學習讓我異常感到學習任務的艱巨,因為學習中我們遇到了很多以前未曾遇到的難點,有時難免冥思苦想也無濟于事,通過我們小組的積極努力協作,同時請教老師和其他同學,我們順利的化解了一道道的障礙。 這讓我不斷的對學習技術又有了新的認識:學習中我們必須邊總結邊學習,開始階段對老師交代的任何方法和類都不要放過,不管是否簡單與否都要樂于地接受,因為老師肯定有他的道理,相信老師走過的路比我們長,那么其經驗也就肯定比我們豐富。上課時一定要專心聽講,一個關鍵的知識點聽漏了,可能會使一個人在課下花很多時間去消化,這樣也就會花掉做其他事情的大量時間,同時也使得學習不能和老師的講的課程同步,以至出現以后就跟不上老師講課的進度而掉隊。所以學習中我們寧可勞其筋骨,苦其心志,惡其體膚,也不能掉隊跟不上學習進度。 在學習的過程中也體會到,遇到問題也要請教。不然的話自己一個人去做的話會花很多的時間,我在做這個在線考試的項目中,其中也問到過許多問題,通過同學的幫助 下解決了,提高了程序的開發進程。其他的同學有問題的話我也是給他們盡量解決。我認為學習知識的過程當中就應該是相互學習相互進步的。 Java是面在的主流技術我會努力將它學好,現在我缺乏的是堅持不懈的精神,周賢軍給了我很大的影響,我會向他學習,雖然學習java的路還很找,但我會繼續走下去。 在這里,我非常感謝實訓的指導老師,在老師的幫助和指導下,我克服了Java學習上的一道道難關,課上認真聽講,摘好必要的筆記,并通過自己課后的不斷消化學習,現在自己已經基本掌握了java的基礎知識,并等待知識的進一步提升。 實訓即將結束了,我非常懷念在達內科技的實訓,在實訓的這1個月時間里,我每一天過的都市踏實的,充實的;我相信,只要我秉持艱苦奮斗,為理想拼搏的精神,盡管在未來的java路上荊棘叢叢,我一定可以披荊斬刺,度過重重難關,實現自己未來的理想! 姓名:聯系電話:電子郵件:學歷:專業:畢業時間: Java軟件工程師試題(A卷) (滿分100分,作答時間為120分鐘) 一、單選題(每題3分,共45分) 1.以下哪個修飾符可用于定義成員常量?B A.start B.final C.abstract D.No modifier can be used 2.定義一個Java文件名字為:Sub.java,其代碼為: class Super { public int i=0; public Super(){ } public static void main(){ } } System.out.println((new Super()).i);i = 1; 這段程序的運行結果是: B A.Compile will fail C.Compile success and print 0 3.給出如下代碼: class Test { private int m; public static void fun(){ // some code......} } B.Compile success and print 1D.Compile success and print nothing 如何使成員變量m被函數fun()直接訪問?D A.將private int m改為protected int m c.將private int m改為int m 4.下面代碼段中,執行之后i和j的值是什么? C int i = 1; int j; j = i++; A.1,1B.1,2C.2,15.已知如下代碼:A boolean m; if(m == false) System.out.println(“false”); else B.將private int m改為public int m D.將private int m改為static int mD.2,2 System.out.println(“true”); 執行結果是什么? A.Compile will fail C.true B.false D.An error will occur when running 6.下面哪個語句是創建數組的錯誤語句?C A.float f[][] = new float [6][6]; C.float f[][] = new float [][6]; E.float [][]f = new float [6][]; B.float []f[] = new float [6][6];D.float [][]f = new float [6][6]; 7.給出如下代碼:C String a = new String(“巨匠IT”); String b = new String(“巨匠IT”); 請問上面的語句在內存中分配了多少個內存區? A.1B.2C.3D.48.給出如下代碼:D Set set = new HashSet(); set.add(“gjun”); set.add(“pcschoolchina”); set.add(“gjun”); set.add(“it”); Iterator it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 上面的代碼最有可能的輸出結果是: A.gjun pcschoolchina gjun it C.it gjun pcschoolchina gjun 9.請看下面的代碼段: String a = “gjun”; String b = new String(“gjun”); String c = new String(“gjun”); if(a==b){ System.out.println(“true”); }else{B.gjun pcschoolchina it gjun D.it gjun pcschoolchina System.out.println(“false”); } if(a.equals(b)){ System.out.println(“true”); }else{ System.out.println(“false”); } if(c==b){ System.out.println(“true”); }else{ System.out.println(“false”); } 輸出的結果為:C A.false truetrue B.truefalse true C.false truefalse D.false false true 10.以下哪個方法用于定義線程的執行體?C A.start()B.init()C.run() D.main()E.synchronized() 11.給出url地址為“index?page=3&category=tech”,下面哪個描述是正確的: A.通過request.getAttribute(“page”)可以獲取page的值 B.通過request.getParameter(“page”)可以獲取page的值 C.通過request.getAttribute(“page&category”)可以獲取page和category的值 D.通過request.getParameter(“page&category”)可以獲取page和category的值 12.有一個登錄的表單,其屬性有name=“loginForm”, action=“loginServlet”, method=“post”,下面哪個描述是正確的: A.在loginServlet中使用doPost的方法來處理表單的請求 B.在loginServlet中使用doGet的方法來返回表單的處理結果 C.在loginServlet中,先調用doPost的方法,然后再調用service的方法來處理表單的請求 D.在loginServlet中,先調用doGet的方法,然后再調用service的方法來處理表單的請求 13.如果需要從一個Servlet中傳遞參數username到結果的頁面,下面哪種方式是可行的: A.request.setParameter(“username”, username); B.request.setAttribute(“username”, username); C.response.setParameter(“username”, username); D.request.setAttribute(“username”, username); 14.下列哪個描述是正確的: A.EJB3.0包含Session Bean, Entity Bean和JMS B.在系統中,我們會使用Entity Bean來保存數據和處理業務流程 C.Session Bean分為有狀態和無狀態兩中,其中有狀態的性能更高 D.遠程調用EJB組件,可以通過lookup的方式去查找JNDI名稱,獲取代理接口來調用 15.關于JUnit的描述,哪個是正確的: A.JUnit其實是一個main函數 B.JUnit可以應用于系統的整體測試 C.如果要測試一個方法的話可以,使用assertEquals來判定結果的正確性 D.JUnit中可以的使用@Test來修飾方法,該方法可以帶參數 二、多選題(每題3分,共45分) 16.如下哪些字符串是Java中的標識符?AE A.fieldnameB.superC.3number 17.如下哪些是Java中有效的關鍵字?ACDE A.constB.NULLC.false D.#numberE.$numberD.thisE.native 18.在switch語句中,以下哪些參數類型是合法的?ABCD A.intB.ByteC.charD.byte 19.下面哪個賦值語句是合法的?BCD A.float a = 2.0B.double b = 2.0 E.String C.int c = 2D.long d = 2 20.已知如下的命令執行java MyTest a b c,請問哪個語句是正確的?CD A.args[0] = “MyTest a b c”;B.args[0] = “MyTest”; C.args[0] = “a”;D.args[1] = “b”; 21.下面代碼執行后的輸出是什么?ADC for(int i=0;i<3;i++){ } for(int j=0;j<2;j++){} if(j==1)continue;System.out.println(j+“and”+i); A.0 and 0 F.1 and 2 b.0 and 1G.2 and 0C.0 and 2H.2 and 1D.1 and 0I.2 and 2 E.1 and 1 22.Java中如下哪個修飾符是正確的?ABE A.privateB.publicC.default 23.已知如下類的說明: public class Test { } private float f = 1.0f;int m = 12;static int n = 1;public static void main(String arg[]){} Test t = new Test();D.friendE.protected 如下哪個代碼可以加入到下劃線中?AD A.t.f = 0;B.this.n = 1; 24.已知如下類定義: class Base { } public class Child extends Base { public Base(){} public Base(int m){} protected void fun(int n){}C.Test.m = 2;D.Test.n = 3; // member methods } 如下哪句可以正確地加入子類中?CD A.private void fun(int n){} C.protected void fun(int n){} B.void fun(int n){} D.public void fun(int n){} 25.下面哪個方法可用于定義新線程類?AD A.implement the Runnable interface B.add a run()method in the class C.create an instance of ThreadD.extend the Thread class 26.下面哪個對象是JSP中內置對象? A.contextB.request C.exceptionD.application 27.現在有一個登錄頁面login.jsp,提交到/LoginServlet來處理,下面哪些描述是正確的。 A.通過request.getParameter(“username”)獲取到login.jsp中的用戶名值 B.通過request.getAttribute(“username”)獲取到login.jsp中的用戶名值 C.可以在LoginSerlvet中的doPost方法中處理請求 D.可以在LoginSerlvet中的service方法中處理請求 28.在LoginServlet處理完成后,跳轉到要去到index.jsp頁面,下面那些描述是正確的。 A.response.sendRedirect(“index.jsp”); B.response.forward(“index.jsp”); C.request.getRequestDispatcher(“index.jsp”).forward(request, response); D.request.sendRedirect(“index.jsp”); 29.在Struts2.0中,Action接口默認的result值有: A.SUCCESSB.FAILUREC.LOGIND.ERROR E.OUTPUT 30.在Hibernate3.0中,假設現在有個Student的對象,下面那些HQL的寫法是正確的: A.select * from StudentB.from Student C.select s from Student sD.select s from Student s where id>10 三、填空題(每題5分,共10分) 31.補充完整Test類的定義,使其能計算下面的數列值: F(1)= 1(n=1) F(2)= 2(n=2) F(n)= F(n-1)*n(n>3) 如: 當n=5時,f(5)=f(4)*5,f(4)=f(3)*4,f(3)=f(2)*3,f(2)=f(1)*1,f(1)=1 結果f(5)= 1*1*3*4*5 = 60 public class Test { public static int calculate(int n){if(①)return 1;return②;} public static void main(String[] args){System.out.println(calculate(3)); } } 32.請看TestAnimal類的代碼: public class TestAnimal{ public static void main(String args[]){Animal a1 = new Dog();Animal a2 = new Cat();①② Dog b1 =③ Cat b2 =④ ⑤ }⑥} interface Animal { } class Dog implements Animal{ } class Cat implements Animal{ } public void run(){} public void catchMouse(){} System.out.println(“catching mouse”);System.out.println(“A cat is running now”);public void run(){} public void watch(){} System.out.println(“watching house”);System.out.println(“A dog is running now”);public void run(); 請補充完整上面的代碼,使其運行的時候得到如下結果: A dog is running now A cat is running now watching house catching mouse第三篇:達內Java學習心得-第一個月
第四篇:達內java暑期實訓報告
第五篇:Java軟件工程師試題