歡迎來到 職場(chǎng)詞典網(wǎng) , 一個(gè)優(yōu)秀的職場(chǎng)知識(shí)學(xué)習(xí)網(wǎng)站!
1. Java中abstract的用法
abstract修飾類,會(huì)使這個(gè)類成為一個(gè)抽象類,這個(gè)類將不能生成對(duì)象實(shí)例,但可以做為對(duì)象變量聲明的類型,也就是編譯時(shí)類型,抽象類就像當(dāng)于一類的半成品,需要子類繼承并覆蓋其中的抽象方法。abstract修飾方法,會(huì)使這個(gè)方法變成抽象方法,也就是只有聲明(定義)而沒有實(shí)現(xiàn),實(shí)現(xiàn)部分以";"代替。需要子類繼承實(shí)現(xiàn)(覆蓋)。
2. Java反射式如何實(shí)現(xiàn)的,有什么缺點(diǎn)?
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;也就是具有動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能。反射主要解決動(dòng)態(tài)編程,即使用反射時(shí),所有的對(duì)象生成是動(dòng)態(tài)的,因此調(diào)用的方法也是動(dòng)態(tài)的.反射可以簡(jiǎn)化開發(fā),但是代碼的可讀性很低。
3. Android ANR異常及解決方法
ANRs (“Application Not Responding”),意思是”應(yīng)用沒有響應(yīng)“。在如下情況下,Android會(huì)報(bào)出ANR錯(cuò)誤:
– 主線程 (“事件處理線程” / “UI線程”) 在5秒內(nèi)沒有響應(yīng)輸入事件
– BroadcastReceiver 沒有在10秒內(nèi)完成返回
通常情況下,下面這些做法會(huì)導(dǎo)致ANR
1)在主線程內(nèi)進(jìn)行網(wǎng)絡(luò)操作
2)在主線程內(nèi)進(jìn)行一些緩慢的磁盤操作(例如執(zhí)行沒有優(yōu)化過的SQL查詢)
應(yīng)用應(yīng)該在5秒或者10秒內(nèi)響應(yīng),否則用戶會(huì)覺得“這個(gè)應(yīng)用很垃圾”“爛”“慢”…等等
解決方法:
1)運(yùn)行在主線程里的任何方法都盡可能少做事情。特別是,Activity應(yīng)該在它的關(guān)鍵生命周期方法(如onCreate()和onResume())里盡可能少的去做創(chuàng)建操作。有時(shí)候需要做一些和網(wǎng)絡(luò)相互交互的耗時(shí)操作就采用asyntask異步任務(wù)的方式(它的底層其實(shí)Handler+mesage有所區(qū)別的是它是線程池)等,在主線程中更新UI。(可以采用重新開啟子線程的方式,然后使用Handler+Message的方式做一些操作,比如更新主線程中的ui等)
2)應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算。但不再是在子線程里做這些任務(wù)(因?yàn)?BroadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè) Service。(此處需要注意的是可以在廣播接受者中啟動(dòng)Service,但是卻不可以在Service中啟動(dòng)broadcasereciver,關(guān)于原因后續(xù)會(huì)有介紹,此處不是本文重點(diǎn))
3)避免在Intent Receiver里啟動(dòng)一個(gè)Activity,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的畫面,并從當(dāng)前用戶正在運(yùn)行的程序上搶奪焦點(diǎn)。如果你的應(yīng)用程序在響應(yīng)Intent廣 播時(shí)需要向用戶展示什么,你應(yīng)該使用Notification Manager來實(shí)現(xiàn)。
4. IP、TCP、UDP分別在OSI的那一層?及其作用。
IP在網(wǎng)絡(luò)層:為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議,為位于不同地理位置的網(wǎng)絡(luò)中的兩個(gè)主機(jī)系統(tǒng)之間提供連接和路徑選擇。
TCP、UDP:提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù)DP在傳輸層。
5. 下面程序的輸出是什么?
public class FinallyTest1 {
static char label;
public static void main(String[] args) {
System.out.println(test1());
System.out.println(label);
}
public static char test1() {
try {
System.out.println('A');
return label = 'A';
}
finally {
System.out.println('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("xanadu.txt");
outputStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
} finally {
//在這里填代碼
}
}
答案:
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
7. 有M個(gè)臺(tái)階,一個(gè)人從地面開始,每次可以上一個(gè)或兩個(gè),問上到第M個(gè)有多少種方法。
思路:
走第一臺(tái)階只有1種方法;
走第二臺(tái)階有2種方法,(一步或兩步..);
走第三臺(tái)階的時(shí)候就是分兩步了:可以從第一臺(tái)階直接到第三臺(tái)階,也可以是從第二臺(tái)階到第三臺(tái)階,所以有1+2=3種方法;
走第四臺(tái)階也是分兩步:可以從第二臺(tái)階直接到第四臺(tái)階,也可以是從第三臺(tái)階到第四臺(tái)階,所以有3+2=5種方法;
…………
以此類推,走1-9臺(tái)階需要的步數(shù)就是:1,2,3,5,8,13,21,34,55(斐波那契數(shù)列:每項(xiàng)等于前兩項(xiàng)和)。
8.給一個(gè)數(shù)M,則有自然數(shù)1~N前面加上符號(hào)運(yùn)算得到M,求出最小的N并輸出,例如:M=12,-1+2+3+4+5+6-7=12 輸出7;
思路:
下面幾行代碼能找到一個(gè)最小的n,這個(gè)n使得1~n全部取+號(hào)時(shí)候正好大于等于M.注意得到的這個(gè)n是最小的
n = (int)(( sqrt(8 * M) - 1 ) / 2); // <<== n(n+1)/2 >= M
if( n * (n+1)/2 < M )
n ++;
然后計(jì)算和M之間的差,如果差為0顯然全部取正號(hào)已經(jīng)滿足要求,如果不是0又分為奇數(shù)和偶數(shù)來區(qū)別對(duì)待.如果是偶數(shù)T,那么顯然把T/2前面的符號(hào)從+改為-就可以了.這個(gè)T/2一定是小于n的,也就是說在1~n之間能夠找到的。如果是奇數(shù)Y,那么顯然n還不對(duì),那么可以繼續(xù)嘗試后面的n直到這個(gè)差為偶數(shù)為止.。
9. 寫一個(gè)UML表示類、屬性、方法。
這個(gè)要熟悉UML的類圖啦
下一篇:軟件測(cè)試筆試題目 下一篇 【方向鍵 ( → )下一篇】
上一篇:歡聚時(shí)代2015校招產(chǎn)品經(jīng)理筆試經(jīng)驗(yàn)分享 上一篇 【方向鍵 ( ← )上一篇】
快搜