開發必備小知識

1. Git代碼無法上傳的解決辦法

git pull origin ipaas_config
git pull
git push --force origin ipaas_config

2.本地springboot項目啓動,端口被佔用的解決辦法:

taskkill /im java.exe /f

3.sql裏的inner join和=等號有區別
join是基於hashtable連接比較,而=直接就是取笛卡爾集再過濾,所以後者效率低,是O(N^2),前者是O(LogN)

4.transient 關鍵字總結
1)transient修飾的變量不能被序列化;

2)transient只作用於實現 Serializable 接口;

3)transient只能用來修飾普通成員變量字段;

4)不管有沒有 transient 修飾,靜態變量都不能被序列化;

原因:
序列化保存的是對象的狀態,靜態變量數以類的狀態,因此序列化並不保存靜態變量

==添加如下兩行代碼就可以序列化transient 關鍵字修飾的成員變量

private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
	s.defaultWriteObject();
	s.writeObject(name2);
}
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
	s.defaultReadObject();
	name2=String.valueOf(s.readObject());
}

5.Thread.yield( )
Java線程中的Thread.yield( )方法,譯爲線程讓步。就是說當一個線程使用了這個方法之後,它就會把自己CPU執行的時間讓掉,讓自己或者其它的線程運行,注意並不是單純的讓給其他線程。

yield()的作用是讓步。它能讓當前線程由“運行狀態”進入到“就緒狀態”,從而讓其它具有相同優先級的等待線程獲取執行權;但是,並不能保證在當前線程調用yield()之後,其它具有相同優先級的線程就一定能獲得執行權;也有可能是當前線程又進入到“運行狀態”繼續運行!

6. Unsafe

Java不能直接訪問操作系統底層,而是通過本地方法來訪問。Unsafe類提供了硬件級別的原子操作,主要提供了以下功能:

1、通過Unsafe類可以分配內存,可以釋放內存;
類中提供的3個本地方法allocateMemory、reallocateMemory、freeMemory分別用於分配內存,擴充內存和釋放內存,與C語言中的3個方法對應
2、可以定位對象某字段的內存位置,也可以修改對象的字段值,即使它是私有的;
3、掛起與恢復
將一個線程進行掛起是通過park方法實現的,調用 park後,線程將一直阻塞直到超時或者中斷等條件出現。unpark可以終止一個掛起的線程,使其恢復正常。
4、CAS操作:是通過compareAndSwapXXX方法實現的
CAS操作有3個操作數,內存值M,預期值E,新值N,如果M==E,則將內存值修改爲N,否則啥都不做;

7.redis分佈式連接池同步調用

如果分佈式調用代碼是運行在線程中,那麼直連調用方式就不合適了,因爲直連方式是非線程安全的,
這個時候,你就必須選擇連接池調用。連接池的調用方式,適合大規模的redis集羣,並且多客戶端的操作。

8.StringBuffer或StringBuilder
建議用非線程安全的StringBuilder;用ThreadLocal 給StringBuilder加上線程安全的條件;

9.進程
 進程裏面第一個啓動的線程,通常稱爲主線程;守護進程是一種特殊的後臺進程,通常由操作系統啓動,然後一直保持運行,
作爲一個永久服務,除非系統關機,否則永遠不會死亡。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章