一. java語言基礎:html
1、合法標識符:java
答:以字母,「_」,「$「符號開頭,能夠包含字母,「_」,「$「和數字;編程
2、八大類型以及各類整數類型的取值範圍:數組
答:byte 8位(-2^7~2^7-1)、short 16位(-2^15~2^15-1)、int 32位(-2^31~2^31-1)、long 64位(-2^63~2^63-1)緩存
float 32位單精度浮點數、double 64位雙精度浮點數、boolean、char單一的 16 位 Unicode 字符等;安全
在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換;服務器
轉換過程當中可能致使溢出或損失精度;網絡
char型變量中能不能存貯一箇中文漢字?爲何?數據結構
答:是可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的。函數
3、&(位運算符)與&&(關係運算符)區別:
答:&比較兩個二進制是否爲1;而&&比較兩邊是否爲true,只有兩邊都爲true時才爲true;
4、if與else語句:
答:一個判斷中能夠有多個if、if else語句,可是隻能有一個else;else能夠沒有;
5、switch裏面數據類型包括:
答:整型(byte,short,int),char,枚舉(重點);
int i = 5; switch(i){ case 0: System.out.println("0");break; case 1: System.out.println("1");break; case 2: System.out.println("2");break; default: System.out.println("default");break; }
default能夠放在中間嗎?多個case能夠共用一條語句;
能夠,可是通常default放在最後
6、while循環:
答:當while內條件爲true時,循環繼續執行,當while內條件爲false時才退出循環;若一開始就爲false時程序只執行do範圍內語句一次;
Given:
10.int x=0;
11.int y=10;
12. do {
l3. y--;
14. ++x;
15. } while (x < 5);
16. System.out.print(x + "," + y);
Answer:5,5
7、break與continue區別:
答:continue是退出本次循環,繼續下一次循環,而break是退出整個循環體;
8、關於可變長參數:
答:a、參數列表中最多隻能出現一次可變長參數;
b、若是參數中包含多個參數的話,那麼可變長參數只能出如今最後面的位置;
c、可變長參數可實現方法的重載(重點);
public class Demo {
public static int sum(int n, int... nums) {
for (int i = 0; i < nums.length; i++) {
n = n + nums[i];
}
return n;
}
public static void main(String[] args) {
int s1 = sum(1, 2);
int s2 = sum(1, 2, 3);
int s3 = sum(1, 2, 3, 4);
int s4 = sum(1, 2, 3, 4, 5);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
}
9、靜態常量初始化兩種方式:
答:靜態常量必須顯示的初始化;a、經過構造器進行初始化,b、只能用靜態代碼塊初始化;
public class Test{
public static String a="";
public Test(){a="1";//後初始化};
static{a="2";//先初始化}
}
十、Java初始化順序(靜態變量、靜態初始化塊、實例變量、實例初始化塊、構造方法);A繼承B,A是子類,B是父類(基類);成員變量不繼承;
父類靜態成員--子類靜態成員;
父類靜態初始化塊--子類靜態初始化塊;
父類實例成員和實例初始化塊--父類構造方法;
子類實例成員和實例初始化塊--子類構造方法;
11、不一樣訪問修飾符對類成員的訪問範圍:
當前類 |
同一package |
子孫類 |
其餘package |
|
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
friendly(不寫時默認) |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
12、String 和stringBuffer的區別:
答:String建立的字符串不能修改;而stringBuffer定義的字符串能夠修改;
new String("hello")建立了幾個對象?
答案:建立了兩個對象
String temp="hello";//在常量池中
String str=new String(temp);//在堆上
13、final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。String類便是final類;
finally是異常處理語句結構的一部分,表示老是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
14、int 和 Integer 有什麼區別?
答:a、Integer是對象類型,而int是基本數據類型;
b、類能夠是null,但基本數據類型不能爲空;
17、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;Math.round(-11.6)返回(long)-12;
正數:小數點後第一位>=5,+1;負數,小數點後第一位>5;+1;
18、怎樣將浮點數(float)相加 ? Float 好像沒有辦法?
答:請注意 float 和 Float 是不一樣的,前者是 Java 基本類型之一, 然後者倒是class。您應該將源代碼改成:
float One;
float Two;
float Hard = One + Two;
或
Float One = new Float(1.0);
Float Two = new Float(2.0);
Float Hard = new Float(One.floatvalue() + Two.floatvalue());
19、如何將字串String轉換成整數int?
答:1)int i = Integer.parseInt(「String」);
20、如何將整數 int 轉換成字串 String?
有三種方法:
1)String s = String.valueOf(i);
2)String s = Integer.toString(i);
3)String s = "" + i;
21、什麼是J2EE,J2SE,J2ME?
答:J2SE主要用於開發界面平臺軟件的;
J2ME主要用於開發嵌入式程序,如:手機軟件程序等;
J2EE主要是基於WEB服務器的開發B/S結構企業級程序;
22、Java中的屬性和字段有什麼區別?
答:Java中的屬性,一般能夠理解爲get和set方法。而字段一般叫作「類中定義的成員變量」。
23、值類型與引用類型變量的區別?
答:值類型變量是基本數據類型的一個變量;而引用類型變量是一個對象類型引用的變量;
24、隱式參數與顯示參數?
答:顯示參數是明顯列在方法聲明中,而隱式參數沒有出如今方法聲明中;
隱式參數,如,關鍵字this;
this表明對象的引用(誰調用就表明誰);
super表明當前子類對父類的引用。
25、什麼是實例域、實例、實例變量?
答:實例域就是指定義類時的最外層的那兩個大括號那個範圍。
實例就是你new出來的類的對象引用。
實例變量:private(訪問修飾符) int(數據類型) a(實例變量)=0;
實例變量不能標識爲 abstract、synchronized 、native 或 strictfp。不能用JAVA關鍵字
26、什麼是標識符、修飾符、訪問修飾符?
(1)標識符:「_」、「$」
(2)修飾符:final、synchronized、abstract、
(3)訪問修飾符:public、protected、default、private
27、一個類在new後,其靜態代碼塊會執行嗎?
答:一個類在new的時候即執行其靜態代碼塊;執行完畢以後不會再執行;
二.類/接口/枚舉/封裝類:
1、一個類爲何要作成抽象類?接口?
答:a、減小代碼的重複;b、解耦合;
接口與抽象類:一個類實現接口必須實現接口全部方法,而繼承抽象類只需實現抽象方法,非抽象方法可不實現,這樣就減小了這個類不須要的代碼的重寫性;
2、匿名內部類是否能夠繼承其餘類,是否能夠實現接口?
答:匿名內部類必須擴展一個基類或實現一個接口,可是不能有顯式的繼承和實現子句;
三、靜態內部類與普通內部類區別:
答:a、靜態內部類實例化的時候沒必要先實例化外圍類,能夠直接實例化內部類,而對於非靜態內部類必須先實例化其外部類,才能再實例化自己;
b、靜態內部類沒有了指向外部類的引用;
c、在任何非靜態內部類中,都不能有靜態數據、方法、靜態類等;
四、爲何須要使用內部類呢?其主要緣由有如下三點:
答:a、內部類方法能夠訪問該類定義所在的做用域中的數據,包括私有的數據。
b、內部類能夠對同一個包中的其餘類隱藏起來。
c、當想要定義一個回調函數且不想編寫大量代碼時,使用匿名內部類比較便捷。
三.面向對象編程:
1、請問java的三大特性是什麼?它們各有什麼特色?
答:a、封裝:將一個類的成員屬性設置成私有的,再提供get和set方法供外部訪問;即這樣的封裝類不會被外界所改變,只能給外界使用;
b、繼承:一個子類繼承一個父類,繼承父類中全部方法,不能繼承父類中成員變量;子類自己又能夠有另外的方法,即子類具備可擴展性特性;
c、多態(重寫):兩種,一種是重寫,重寫就是子類重寫父類中方法(方法名、返回類型(子類的返回類型必須相同或是父類返回類型的子類)和參數類型必須一致);
另一種是重載,重載是在一個類中的方法名相同,參數類型必須不一樣(或它們有不一樣的參數個數),返回類型能夠相同,能夠不一樣;
2、類與對象之間的關係:
答:a、關聯:一個類受另一個類影響,一個Driver類裏面只跟一個Car類變量,即在Driver類中的方法內傳一個car屬性對象,強耦合關係;
b、依賴:一種使用關係,很弱的一種耦合。driver開幾種類型的車,即重載,drive(plane);drive(car);這個時候drive與plane的關係即爲依賴關係;
c、聚合:聚合關聯 Aggregation:弱'擁有'關係,A對象能夠包含B對象,但B不是A的一部分;
d、組合:是一種強的‘擁有’關係,體現嚴格的部分和總體的關係,
e、泛化:繼承
f、實現:接口
3、類與對象間的結構關係:
縱向關係:泛化(包括類繼承、接口繼承、實現)
橫向關係:關聯(包括通常關聯、聚合、組合)
什麼是OOP?什麼是類?請對比類和對象實例之間的關係。OOP是面向對象編程縮寫。指的是用對象的觀點來組織與構建系統,對象是類的實例化。對象一般做爲計算機模擬思惟,表示真實世界的抽象。類是靜態的,對象是動態的,類負責產生對象,能夠將類當成生產對象的工廠。
6、UML圖分幾類?
答:經常使用的UML圖:
A、用例圖:幫助開發團隊以一種可視化的方式瞭解系統功能需求,好比:角色與用例之間關係;
B、 類圖:三部分描述,上面是類名、中間是屬性、下面是方法;完整的類圖,應該具備指向其父類關係,而且具備與之關聯的部分;
C、 時序圖:顯示不一樣對象之間的調用關係;
D、狀態圖:某個類所處的不一樣狀態或者是該類的狀態轉換信息:
E、 活動圖:表示在處理某個活動時,兩個或者更多類對象之間的過程控制流。
F、 組件圖:顯示系統中軟件與其餘軟件的依賴關係:
G、部署圖表示該軟件系統如何部署到硬件環境中。
靜態(系統結構):用例圖、類圖、對象圖、組件圖、部署圖
動態(系統行爲):時序圖、協做圖、狀態圖、活動圖
五.I/O流:
1、在Java語言中,如何列出PC機文件系統中的全部驅動器名?
答:在Java 2版本中,java.io包中的File類新增長了方法listRoots()能夠實現這一功能;
2、IO流的三種分類方式:
a.按流的方向分爲:輸入流和輸出流;
b.按流的數據單位不一樣分爲:字節流和字符流;
c.按流的功能不一樣分爲:節點流和過濾流;
三、IO流的四大抽象類:
(1)字節流:
InputStream(讀數據):全部字節輸入流的祖先;(從外部讀取文件數據到程序中)
OutputStream(寫數據):全部字節輸出流的祖先;(將程序中的數據輸出到外部文件中)
(2)字符流:Reader:全部讀取字符輸入流的祖先;
Writer :全部寫入字符串的祖先;
4、文件讀寫的基本類:
(1)、讀取字節流:
文件àFileInputStreamàBufferedInputStreamàDataInputStreamà數據;
(2)、寫入字節流:
數據à DataOutputStream à BufferedOutputStream à FileOutputStream à文件;
(3)、該程序接受鍵盤輸入(從鍵盤讀取數據):
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str=in.readLine();
(4)、寫入字符流:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\test.txt")));
out.write(「dagdagd」);
六.集合和泛型
1、說出ArrayList,Vector, LinkedList的存儲性能和特性
答:ArrayList,Vector, 查詢數據快,插入慢,Vector是線程安全的,LinkedList查詢數據慢,插入速度快;list有序可重複;set不可重複且無序;
2、Collection 和 Collections的區別
答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。
3、HashMap和Hashtable的區別。
答:HashMap是線程不安全的,容許有null的key值或者value值;
Hashtable是線程安全的,不容許空key和value值;
4、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。而==是判斷兩個值是否相等的;
5、遍歷一個list
for(int i=0;i <list.size();i++)
for(Object o:list)
Iterator it=list.iterator()
for(;it.hasNext();)
Set set = new HashSet(list);
for(Iterator it=set.iterator();it.hasNext();)
{ Object o = it.next; System.out.println(o.toString());}
List<Object> list
for(Object foo : list){
String className = foo.getClass().getClassName;
System.out.println(foo);
}
六、 String傳值,
public class Test {
public static void change(String str){
str="123";
}
public static void main(String args[]) {
String abc = new String("abc");
Test.change(abc);
System.out.println(abc); }
輸出:abc
由於這兩個函數均可以重寫;徹底能夠hashcode相等的對象而equals確返回false;重寫hashCode是爲了集合類存儲這些對象的時候有個比較規則;好比Map不容許重複元素,就是經過hashCode來檢測的;可是hashcode的實現,通常要知足幾個特徵,好比:自反性,傳遞性什麼的。
8.java泛型中的E,T,K,V,U,S
E - Element (在集合中使用,由於集合中存放的是元素)
T - Type(Java 類)
K - Key(鍵)
V - Value(值)
N - Number(數值類型)
? - 表示不肯定的java類型
9.認識理解Java中的native方法
Java不是完美的,Java的不足除了體如今運行速度上要比傳統的C++慢許多以外,Java沒法直接訪問到操做系統底層(如系統硬件等),爲此Java使用native方法來擴展Java程序的功能。在java中native是關鍵字。它通常在本地聲明,異地用C和C++來實現。它的聲明有幾點要注意:
1)native與訪問控制符先後的關係不受限制。
2)必須在返回類型以前。
3)它通常爲非抽象類方法。
4)native方法在異地實現,象抽象方法同樣,因此沒有方法體,以分號結束。以下列5種聲明:
native public void f(); 正確。
private native void f(); 正確。
protected int native f(); 錯誤,返回類型位置不對,返回類型必須在native以後。
public abstract native void f(); native必然不是abstract的。
native int f(){} 錯誤,由於存在方法體{}
public static native f(); 正確。static與native方法位置隨意。
Ingeter是int的包裝類,int的初值爲0,Ingeter的初值爲null。 int是數據類型;
Integer i = 1;int ii = 1; i==ii爲true仍是爲false?
public static void main(String[] args) { 13 int i = 128; 14 Integer i2 = 128; 15 Integer i3 = new Integer(128); 16 //Integer會自動拆箱爲int,因此爲true 17 System.out.println(i == i2); 18 System.out.println(i == i3); 19 System.out.println("**************"); 20 Integer i5 = 127;//java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127); 21 Integer i6 = 127; 22 System.out.println(i5 == i6);//true 23 /*Integer i5 = 128; 24 Integer i6 = 128; 25 System.out.println(i5 == i6);//false 26 */ Integer ii5 = new Integer(127); 27 System.out.println(i5 == ii5); //false 28 Integer i7 = new Integer(128); 29 Integer i8 = new Integer(123); 30 System.out.println(i7 == i8); //false 31 } 首先,17行和18行輸出結果都爲true,由於Integer和int比都會自動拆箱(jdk1.5以上)。 22行的結果爲true,而25行則爲false,不少人都不動爲何。其實java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);因此關鍵就是看valueOf()函數了。只要看看valueOf()函數的源碼就會明白了。JDK源碼的valueOf函數式這樣的: 看一下源碼你們都會明白,對於-128到127之間的數,會進行緩存,Integer i5 = 127時,會將127進行緩存,下次再寫Integer i6 = 127時,就會直接從緩存中取,就不會new了。因此22行的結果爲true,而25行爲false。
11. IP協議屬於()層。
應用層
數據鏈路層
網絡互聯層
傳輸層
答案:C
IP協議是網絡層協議
A,應用層協議有http ftp smtp pop3 等
B,數據鏈路層協議有PPP ARP RARP等
D,傳輸層協議有TCP UDP
12.十六進制數30轉換成二進制數是()
110000
100000
111000
101010
答案:A
十六進制轉換爲二進制快捷的方法是將每個十六進制字符轉換成4個二進制字符,不足4個的前面補零
3轉換爲二進制是0011,0轉換爲二進制是0000
合起來就是00110000
將前面兩個無用的0去掉就是110000
13.List<? extends T>和List<? super T>之間有什麼區別?
List<? extends T>要求List中的泛型對象只能夠是T或者T的子類對象
List<? super T>要求List中的泛型對象只能夠是T或者T的父類對象
14.對於IP地址爲200.5.6.3,屬於()類
A
B
C
D
答案:C
第一字節範圍1到127屬於A類IP
第一字節範圍128到191屬於B類IP
第一字節範圍192到223屬於C類IP
15. 某系統中有11臺打印機,N個進程共享打印機資源,每一個進程要求3臺,當N的取值不超過()時系統不會發生死鎖。
4
5
6
7
答案:B
不發生死鎖的條件是至少能保證一個進程能得到三臺打印機資源。
最壞的狀況是1個進程獲取三臺打印機資源,另外N-1個進程獲取到兩臺打印機,等待獲取第三臺。
3+(N-1)*2=11
N=5
一、java類自帶排序:
組成int數組,再調用Arrays.sort(int[] a)實現升序;降序可從尾部開始輸出;
二、方法二:重複for循環比較兩值大小存入ArrayList中;
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
序 列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個 ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
18.數據結構有哪些
集合、線性結構、樹形結構、圖狀結構