1. 程式人生 > >實習生java面試題集及詳細答案

實習生java面試題集及詳細答案

               

1.Java有那些基本資料型別,String是不是基本資料型別,他們有何區別。

Java語言提供了八種基本型別:

六種數字型別(四個整數型,兩個浮點型)

位元組型byte 8位 短整型short 16位 整型int 32位

長整型long 64位 單精度float 32位 雙精度double 64位

一種字元型別

字元型char 8位

還有一種布林型

布林型:boolean 8位 可儲存"True"和"false"。

String本身就是一個物件而不是基本資料型別,String的變數名是對String類的引用。

2.字串的操作:

寫一個方法,實現字串的反轉,如:輸入abc,輸出cba

public static String reverse(String s){

int length=s.length();

StringBuffer result=new StringBuffer(length);

for(int i=length-1;i>=0;i--)

result.append(s.charAt(i));

return result.toString();

}

寫一個方法,實現字串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc。 String s = "bbbwlirbbb";

s.replaceAll("wlirbbb","hhtccc");

3.資料型別之間的轉換

如何將數值型字元轉換為數字(Integer,Double)

使用Integer.parseInt()和Double.parseDouble()方法。

如何將數字轉換為字元

class my

{

int a=12;

Label label=new Label();

label.setText(String.valueOf(a));

}

如何取小數點前兩位,並四捨五入。

System.out.println("四捨五入取整:(3.856)="

+ new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP));

4.日期和時間

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

Date dat=new Date();

dat.getYear(); dat.getMonth(); dat.getDay(); dat.getHours(); dat.getMinutes(); dat.getSeconds();

如何取得從1970年到現在的毫秒數

long now=dat.getTime();

如何獲取某個日期是當月的最後一天

DateFormate df=DateFormate.getInstance();df.Format(dat);

如何格式化日期

DateFormate df=DateFormate.getInstance();

df.Format(dat);

5.陣列和集合

陣列與集合的區別:一:陣列聲明瞭它容納的元素的型別,而集合不宣告。這是由於集合以object形式來儲存它們的元素。二:一個數組例項具有固定的大小,不能伸縮。集合則可根據需要動態改變大小。三:陣列是一種可讀/可寫資料結構沒有辦法建立一個只讀陣列。然而可以使用集合提供的ReadOnly方 只讀方式來使用集合。該方法將返回一個集合的只讀版本。

6.檔案和目錄(I/O)操作

如何列出某個目錄下的所有檔案

如何列出某個目錄下的所有子目錄

判斷一個檔案或目錄是否存在

如何讀寫檔案

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

public class FileOpreate {

public static void main(String [] args)

{

FileOpreate fo=new FileOpreate();

try

{

//檔案的寫入

/*String[] testStr=new String[50];

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

{

testStr[i]="我的測試資料00"+i;

}

fo.writeFile("D:\\","test.txt",testStr);

*/

//檔案的寫入

/*String str="測試";

fo.writeFile("D:\\","test001.txt",str);*/

//建立或者刪除檔案

/*if(fo.createAndDeleteFile("D:\\","test001.txt"))

{

fo.createAndDeleteFile("D:\\","test002.txt");

}*/

//建立或者刪除資料夾

/*fo.createAndDeleteFolder("D:\\","2009-07-06");*/

//輸出一個檔案內的檔名稱

/*fo.readFolderByFile("D:\\");*/

//判斷一個檔案是否是空的

/*fo.fileIsNull("D:\\","test002.txt");*/

//讀取全部的檔案內容

/*fo.readAllFile("D:\\","test.txt");*/

//一行一行讀取檔案內容

fo.readLineFile("D:\\","test.txt");

}

catch(Exception e)

{

e.printStackTrace();

}

}

7.Java多型的實現(繼承、過載、覆蓋)

多型可分為:

1)編譯多型:主要是體現在過載,系統在編譯時就能確定呼叫過載函式的哪個版本。

2)執行多型:主要體現在OO設計的繼承性上,子類的物件也是父類的物件,即上溯造型,所以子類物件可以作為父類物件使用,父類的物件變數可以指向子類物件。因此通過一個父類發出的方法呼叫可能執行的是方法在父類中的實現,也可能是某個子類中的實現,它是由執行時刻具體的物件型別決定的。

8.編碼轉換,怎樣實現將GB2312編碼的字串轉換為ISO-8859-1編碼的字串。

String str = new String("字串".getBytes("GB2312"),"ISO-8859-1");

9.使用StringBuffer類與String類進行字串連線時有何區別?

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。

10.談談final, finally, finalize的區別。

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

11.String s = new String("xyz");建立了幾個String Object?

兩個,一個是string s,另一個是”xyz”。

12.Java有沒有goto?

goto是java中的保留字,現在沒有在java中使用。

13.陣列有沒有length()這個方法? String有沒有length()這個方法?

陣列沒有length()這個方法,有length的屬性。String有length()這個方法。

14.Overload和Override的區別。

override(重寫)

1)方法名、引數、返回值相同。

2)子類方法不能縮小父類方法的訪問許可權。

3)子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。

4)存在於父類和子類之間。

5)方法被定義為final不能被重寫。

overload(過載)

1)引數型別、個數、順序至少有一個不相同。

2)不能過載只有返回值不同的方法名。

3)存在於父類和子類、同類中。

15.abstract class和interface有什麼區別?

Interface只能有成員常量,只能是方法的宣告;

而abstract class可以有成員變數,可以宣告普通方法和抽象方法。

宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽象類,並讓它指向具體子類的一個例項。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何物件上呼叫介面的方法。由於有抽象類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。

16.是否可以繼承String類?

String類是final類故不可以繼承。

17.面向物件的特徵有哪些方面?

1)抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。

2)繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。


派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

3)封裝:封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。

4) 多型性:多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。

18.int 和 Integer 有什麼區別?

Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。

Int是java的原始資料型別,

Integer是java為int提供的封裝類。

Java為每個原始型別提供了封裝類。

原始型別封裝類booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble

引用型別和原始型別的行為完全不同,並且它們具有不同的語義。引用型別和原始型別具有不同的特徵和用法,它們包括:大小和速度問題,這種型別以哪種型別的資料結構儲存,當引用型別和原始型別用作某個類的例項資料時所指定的預設值。物件引用例項變數的預設值為 null,而原始型別例項變數的預設值與它們的型別有關。

19.作用域public,private,protected,以及不寫時的區別?

20.用java寫一個氣泡排序。

/**

* 對int陣列進行升序排序

*

* @param intVal:要排序的陣列

* @param asc:值為true,表示升序排序;傳入值為false,表示降序排序

* @return 返回排序後的int陣列

*/

public static int[] intArraySort(int [] intVal,boolean asc){

int [] vals=intVal;

int temp;

if(vals.length>0){

if(asc==true){

for(int i=0;i<=vals.length-2;i++){

for(int j=0;j<vals.length-i-1;j++){

if(vals[j]>vals[j+1]){

//升序排列


temp=vals[j];

vals[j]=vals[j+1];

vals[j+1]=temp;

}

}

}

}else{

for(int i=0;i<=vals.length-2;i++){

for(int j=0;j<vals.length-i-1;j++){

if(vals[j]<vals[j+1]){

//降序排列

temp=vals[j];

vals[j]=vals[j+1];

vals[j+1]=temp;

}

}

}

}

}

return vals;

}

21.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;(可以正確編譯)

22.float型float f=3.4是否正確?

不正確。精度不準確,應該用強制型別轉換,如下所示:float f=(float)3.4 或float f = 3.4f 在java裡面,沒小數點的預設是int,有小數點的預設是 double;

23.ArrayList和Vector的區別,HashMap和Hashtable的區別。

ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差。

HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。

24.Error與Exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。


exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。

25.statement 和preparestatement區別

1)建立時的區別:

Statement stm=con.createStatement();

PreparedStatement pstm=con.prepareStatement(sql);

執行的時候:

stm.execute(sql);

pstm.execute();

2)pstm一旦綁定了SQL,此pstm就不能執行其他的Sql,即只能執行一條SQL命令。 stm可以執行多條SQL命令。

3)對於執行同構的sql(只有值不同,其他結構都相同),用pstm的執行效率比較的高,對於異構的SQL語句,Statement的執行效率要高。

4)當需要外部變數的時候,pstm的執行效率更高.

26.寫一個數據庫連線類,包括查詢及結果儲存。

import java.sql.*; //需要加入的包

//類的定義

class DBConnect {

private String con1 = "sun.jdbc.odbc.JdbcOdbcDriver"; //連線SQL所需要的字串 private String url = "jdbc:odbc:test";

private String user = "sa", password = ""; //這裡請根據您的資料庫使用者和密碼自行修改

Connection con; //用於連線資料庫用的

PreparedStatement ps; //其實用Statement也行,PreparedStatement集成了Statement.

ResultSet rs; //一個集合,可以用於執行SQL命令

//建構函式

DBConnect() {

try {

Class.forName(con1); //Class.forName()用於將一些類載入到JVM this.Connect(); //函式呼叫

try {

this.execute();

} catch (SQLException ex) {

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

}

} catch (ClassNotFoundException ce) {

System.out.println(ce);

}

}

public void Connect() {

try {

con = DriverManager.getConnection(url, user, password); //做這部之前先把ODBC配置好


if (con != null) {

System.out.println("Connection Sucessfully!");

}

} catch (SQLException ex) {

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

}

}

public void execute() throws SQLException {

ps = con.prepareStatement("select *from friends"); //把SQL語句搞給ps

rs = ps.executeQuery(); //這裡執行,之後讓rs知道資訊

while (rs.next()) //這裡必須加next(),偏移量移動.

{

System.out.print(rs.getString(2) + "\t");

System.out.print(rs.getString(3) + "\t");

System.out.print(rs.getString(4) + "\t");

System.out.print(rs.getDate(5) + "\t");

System.out.print(rs.getInt(6) + "\t");

System.out.println("");

}

}

public void close() //用於釋放資源,Java裡沒有解構函式,但是通過重寫protected void finalize(),

{ //之後在呼叫System.runFinalization()和System.gc()可以提醒JVM執行finalize()以釋放,

try{ //在以前的J2SE版本里可以通過以上方法呼叫finalize(),但目前的J2SE5.0只能提醒JVM,但JVM不一定執行

rs.close(); //最好的方案還是自己寫析構close(); ps.close();

con.close();

}catch(SQLException ce)

{

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

}

System.out.println("Connection released!!!");

}

public static void main(String[] args) {

DBConnect dbc=new DBConnect();

dbc.close();

}

}

Java免費學習資料直播公開課群175161984


           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow