1.ps和netstat
ps 命令用于查看當(dāng)前正在運(yùn)行的進(jìn)程覆山。grep 是搜索
netstat?查看端口號(hào)
2.VO和PO
VO竹伸,值對(duì)象(Value Object),PO簇宽,持久對(duì)象(Persisent Object)勋篓,它們是由一組屬性和屬性的get和set方法組成。從結(jié)構(gòu)上看魏割,它們并沒(méi)有什么不同的地方譬嚣。但從其意義和本質(zhì)上來(lái)看是完全不同的。
1.VO是用new關(guān)鍵字創(chuàng)建见妒,由GC回收的孤荣。
PO則是向數(shù)據(jù)庫(kù)中添加新數(shù)據(jù)時(shí)創(chuàng)建甸陌,刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)時(shí)削除的。并且它只能存活在一個(gè)數(shù)據(jù)庫(kù)連接中盐股,斷開(kāi)連接即被銷(xiāo)毀钱豁。
2.VO是值對(duì)象,精確點(diǎn)講它是業(yè)務(wù)對(duì)象疯汁,是存活在業(yè)務(wù)層的牲尺,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個(gè)生存的地方幌蚊。
PO則是有狀態(tài)的谤碳,每個(gè)屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對(duì)象表示溢豆。使用它蜒简,可以使我們的程序與物理數(shù)據(jù)解耦,并且可以簡(jiǎn)化對(duì)象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換漩仙。
3.VO的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的骇钦,也就是說(shuō)消痛,它的每一個(gè)屬性都一一對(duì)應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱(chēng)。
PO的屬性是跟數(shù)據(jù)庫(kù)表的字段一一對(duì)應(yīng)的。
PO對(duì)象需要實(shí)現(xiàn)序列化接口仗岸。
VO是獨(dú)立的Java Object谷遂。一般而言忧勿,應(yīng)該避免直接PO傳遞到系統(tǒng)中的其他層面挟秤,一種解決辦法是,通過(guò)一個(gè)VO垢啼,通過(guò)屬性復(fù)制使其具備與PO相同屬性值窜锯,并以其為傳輸媒質(zhì)(實(shí)際上,這個(gè)VO被用作Data Transfer Object膊夹,即所謂的DTO)衬浑,將此VO傳遞給其他層面以實(shí)現(xiàn)必須的數(shù)據(jù)傳送。
3.獲取map值
如果只是獲取key放刨,或者value工秩,推薦使用keySet或者values方式
如果同時(shí)需要key和value推薦使用entrySet
如果需要在遍歷過(guò)程中刪除元素推薦使用Iterator
如果需要在遍歷過(guò)程中增加元素,可以新建一個(gè)臨時(shí)map存放新增的元素进统,等遍歷完畢助币,再把臨時(shí)map放到原來(lái)的map中
// KeySet 獲取key?
?public void testKeySet(){
? ? for (Integer key : map.keySet()) {
? ? ? System.out.println(key);
? ? }
? }
? // values 獲取value? publicvoidtestValues(){
? ? for (Integer value : map.values()) {
? ? ? System.out.println(value);
? ? }
? }
// entrySet 獲取key and value
public void testEntry(){
? ? for (Map.Entry entry : map.entrySet()) {
? ? ? System.out.println(entry.getKey() + ":" + entry.getValue());
? ? }
? }
// Lambda 獲取key and value?
?public void testLambda(){
? ? map.forEach((key, value) -> {
? ? ? System.out.println(key + ":" + value);
? ? });
? }
// Iterator entrySet 獲取key and value
?public void testIterator(){
? ? Iterator> it = map.entrySet().iterator();
? ? while (it.hasNext()) {
? ? ? Map.Entry entry = it.next();
? ? ? System.out.println(entry.getKey() + ":" + entry.getValue());
? ? ? // it.remove(); 刪除元素? ? }
? }
4.雙重檢查鎖
private volatile static SomeClass instance;
public SomeClass getInstance(){
? ? if (null == instance) {
? ? ? ? synchronized (Test.class) {
? ? ? ? ? ? if (null == instance) {
? ? ? ? ? ? ? ? instance = new SomeClass();
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return instance;
}