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...