1. Java中abstract的用法
abstract修飾類,會使這個類成爲一個抽象類,這個類將不能生成對象實例,但可以做爲對象變量聲明的類型,也就是編譯時類型,抽象類就像當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。abstract修飾方法,會使這個方法變成抽象方法,也就是隻有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。
2. Java反射式如何實現的,有什麼缺點?
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;也就是具有動態獲取的信息以及動態調用對象的方法的功能。反射主要解決動態編程,即使用反射時,所有的對象生成是動態的,因此調用的方法也是動態的.反射可以簡化開發,但是代碼的可讀性很低。
3. Android ANR異常及解決方法
ANRs (“Application Not Responding”),意思是”應用沒有響應“。在如下情況下,Android會報出ANR錯誤:
– 主線程 (“事件處理線程” / “UI線程”) 在5秒內沒有響應輸入事件
– BroadcastReceiver 沒有在10秒內完成返回
通常情況下,下面這些做法會導致ANR
1)在主線程內進行網絡操作
2)在主線程內進行一些緩慢的磁盤操作(例如執行沒有優化過的SQL查詢)
應用應該在5秒或者10秒內響應,否則用戶會覺得“這個應用很垃圾”“爛”“慢”…等等
解決方法:
1)運行在主線程裏的任何方法都儘可能少做事情。特別是,Activity應該在它的關鍵生命週期方法(如onCreate()和onResume())裏儘可能少的去做創建操作。有時候需要做一些和網絡相互交互的耗時操作就採用asyntask異步任務的方式(它的底層其實Handler+mesage有所區別的.是它是線程池)等,在主線程中更新UI。(可以採用重新開啓子線程的方式,然後使用Handler+Message的方式做一些操作,比如更新主線程中的ui等)
2)應用程序應該避免在BroadcastReceiver裏做耗時的操作或計算。但不再是在子線程裏做這些任務(因爲 BroadcastReceiver的生命週期短),替代的是,如果響應Intent廣播需要執行一個耗時的動作的話,應用程序應該啓動一個 Service。(此處需要注意的是可以在廣播接受者中啓動Service,但是卻不可以在Service中啓動broadcasereciver,關於原因後續會有介紹,此處不是本文重點)
3)避免在Intent Receiver裏啓動一個Activity,因爲它會創建一個新的畫面,並從當前用戶正在運行的程序上搶奪焦點。如果你的應用程序在響應Intent廣 播時需要向用戶展示什麼,你應該使用Notification Manager來實現。
4. IP、TCP、UDP分別在OSI的那一層?及其作用。
IP在網絡層:爲計算機網絡相互連接進行通信而設計的協議,爲位於不同地理位置的網絡中的兩個主機系統之間提供連接和路徑選擇。
TCP、UDP:提供了節點間的數據傳送服務DP在傳輸層。
5. 下面程序的輸出是什麼?
public class FinallyTest1 {
static char label;
public static void main(String[] args) {
tln(test1());
tln(label);
}
public static char test1() {
try {
tln('A');
return label = 'A';
}
finally {
tln('B');
label = 'B';
}
}
}
輸出:
A
B
A
B
6. 下面的空改填什麼代碼?
public static void main(String[] args) throws IOException {
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader("");
outputStream = new FileWriter("");
int c;
while ((c = ()) != -1) {
e(c);
}
} finally {
//在這裏填代碼
}
}
答案:
if (inputStream != null) {
e();
}
if (outputStream != null) {
e();
}
7. 有M個臺階,一個人從地面開始,每次可以上一個或兩個,問上到第M個有多少種方法。
思路:
走第一臺階只有1種方法;
走第二臺階有2種方法,(一步或兩步..);
走第三臺階的時候就是分兩步了:可以從第一臺階直接到第三臺階,也可以是從第二臺階到第三臺階,所以有1+2=3種方法;
走第四臺階也是分兩步:可以從第二臺階直接到第四臺階,也可以是從第三臺階到第四臺階,所以有3+2=5種方法;
…………
以此類推,走1-9臺階需要的步數就是:1,2,3,5,8,13,21,34,55(斐波那契數列:每項等於前兩項和)。
8.給一個數M,則有自然數1~N前面加上符號運算得到M,求出最小的N並輸出,例如:M=12,-1+2+3+4+5+6-7=12 輸出7;
思路:
下面幾行代碼能找到一個最小的n,這個n使得1~n全部取+號時候正好大於等於M.注意得到的這個n是最小的
n = (int)(( sqrt(8 * M) - 1 ) / 2); // <<== n(n+1)/2 >= M
if( n * (n+1)/2 < M )
n ++;
然後計算和M之間的差,如果差爲0顯然全部取正號已經滿足要求,如果不是0又分爲奇數和偶數來區別對待.如果是偶數T,那麼顯然把T/2前面的符號從+改爲-就可以了.這個T/2一定是小於n的,也就是說在1~n之間能夠找到的。如果是奇數Y,那麼顯然n還不對,那麼可以繼續嘗試後面的n直到這個差爲偶數爲止.。
9. 寫一個UML表示類、屬性、方法。