android常見問題

2021-10-14 15:54:31 字數 3723 閱讀 3339

question:

1.內部類和靜態內部類的區別

2.如何使乙個類不能被繼承

3.寫乙個單例模式,保證執行緒安全的

4.如果你寫的這個單例被繼承,然後多次例項化,還是單例嗎(提示構造方法是private的類不能被繼承)

5.**:帶括號的表示式求值,如:1加(3減2)

6.網路五層架構,http在哪一層

7.tcp和udp的區別

8.tcp三次握手過程,為什麼要有第三次

9.資料庫事務四個性質,一致性是什麼

10.死鎖是什麼,怎麼產生,如何避免

11.陣列和鍊錶的區別

12.二叉排序樹是什麼,查詢的時間複雜度,怎麼降低時間複雜度

answer:

1.內部類和靜態內部類的區別

public class innerclasstest 

private innerclass innerclassobj = new innerclass();

private void a()

void b()

private void c()

public void d()

private class innerclass

}static class staticinnerclass

}}

靜態內部類是指被宣告為static的內部類,可不依賴外部類例項化;而非靜態內部類需要通過生成外部類來間接生成。

靜態內部類只能訪問外部類的靜態成員變數和靜態方法,而非靜態內部類由於持有對外部類的引用,可以訪問外部類的所用成員

普通內部類

public class myservice extends service 

private downloadbinder mbinder = new downloadbinder();

class downloadbinder extends binder

public int getprogress()

}@override

public ibinder onbind(intent intent)

@override

public void oncreate()

@override

public int onstartcommand(intent intent, int flags, int startid)

@override

public void ondestroy()

}

靜態內部類

package com.example.demo;

public class outer

public void setvarfrominner(string varfrominner)

public int getsize()

public void setsize(int size)

}public int getvarfromouter()

public void setvarfromouter(int varfromouter)

public inner getinnerobj()

public void setinnerobj(inner innerobj)

}外部引用

outer outer = new outer();

outer.inner inner = new outer.inner();

inner.setvarfrominner("abc");

inner.setsize(0);

outer.setinnerobj(inner);

2.如何使乙個類不能被繼承

3.寫乙個單例模式,保證執行緒安全的

每個類例項對應一把鎖,每個 synchronized 方法都必須獲得呼叫該方法的類例項的鎖方能執行,否則所屬執行緒阻塞,方法一旦執行,就獨佔該鎖,直到從該方法返回時才將鎖釋放,此後被阻塞的執行緒方能獲得該鎖,重新進入可執行狀態。這種機制確保了同一時刻對於每乙個類例項,其所有宣告為 synchronized 的成員函式中至多只有乙個處於可執行狀態(因為至多只有乙個能夠獲得該類例項對應的鎖),從而有效避免了類成員變數的訪問衝突(只要所有可能訪問類成員變數的方法均被宣告為 synchronized)。

兩種  一種同步方法 損失效率。每次獲取鎖時

public class singleton 

public synchronized singleton getinstance()

return uniquesingleton;

}}

第二種   雙重檢查鎖

public class singleton 

public singleton getinstance() }}

return uniquesingleton;

}}

4.如果你寫的這個單例被繼承,然後多次例項化,還是單例嗎

和第二個問題 關聯

10.死鎖是什麼,怎麼產生,如何避免

兩個執行緒想要執行都要獲取對方持有的鎖 

從這個例子也可以反映出,死鎖是因為多執行緒訪問共享資源,由於訪問的順序不當所造成的,通常是乙個執行緒鎖定了乙個資源a,而又想去鎖定資源b;在另乙個執行緒中,鎖定了資源b,而又想去鎖定資源a以完成自身的操作,兩個執行緒都想得到對方的資源,而不願釋放自己的資源,造成兩個執行緒都在等待,而無法執行的情況。

package com.demo.test;

/** * 乙個簡單的死鎖類

* t1先執行,這個時候flag==true,先鎖定obj1,然後睡眠1秒鐘

* 而t1在睡眠的時候,另乙個執行緒t2啟動,flag==false,先鎖定obj2,然後也睡眠1秒鐘

* t1睡眠結束後需要鎖定obj2才能繼續執行,而此時obj2已被t2鎖定

* t2睡眠結束後需要鎖定obj1才能繼續執行,而此時obj1已被t1鎖定

* t1、t2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。

*/public class deadlock implements runnable

@override

public void run() catch (interruptedexception e)

synchronized(obj2)

}}else catch (interruptedexception e)

synchronized(obj1)}}

}}package com.demo.test;

public class deadlocktest

}

hashmap操作 通過迭代器獲取key和value

private hashmaphashmap = new hashmap<>();

iteratoriterator2 = hashmap.keyset().iterator();

while (iterator2.hasnext())

}iterator> iterator = hashmap.entryset().iterator();

while (iterator.hasnext())

Android使用常見問題

1 當edittext編輯時 hint 在 手機上顯示不出來 就要增加一句話去重新設定顏色值 android textcolorhint 707070 2 edittext設定背景之後游標被遮擋 android paddingleft 30px 按鈕上設定的內容離按鈕左邊邊界30個畫素 3 限制輸入...

Android整合常見問題

本文介紹了android sdk整合過程中可能出現的問題和解決方法。檢視logcat日誌。如果出現errorcode 203,請確認是否存在以下三種情況 如果出現errorcode 20,請檢查檔案是否已更新,需要注意rpsdk 3.1.x.x 含 以上和3.0.x.x 含 以下兩個版本的檔案不能共...

android原始碼編譯常見問題

android原始碼編譯常見問題 編譯過程 在ubuntu 11.04 64位機器上編譯 1.source build envsetup.sh 初始化與環境envsetup.sh指令碼 初始化完成,顯示如下 including device samsung maguro vendorsetup.sh...