記一次YY筆試中卡住得知識點

linux下線程通信的方式有哪些?

1.管道(pipe)/namedpipe(有名管道)

2.信號(signal)

3.報文(message)隊列

4.共享內存

5.套接字(socket)

6.信號量(semapher)

HTTP 1.1協議中 的八個標準的方法

OPTIONS 返回服務器特定資源所支持的請求方法,也可以用來測試服務器的功能性(通過向web服務器發送*的請求);
HEAD 向服務器索要和GET請求一致的響應,只不過響應體不會被返回,這個方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應頭里面的元信息;
GET 向特定的資源發起請求;
POST 向特定的資源發送數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中,POST請求可以導致新的資源建立或者已有資源的修改
PUT 向特定資源位置上傳其最新的內容
DELETE 請求服務器刪除Request-Url標識中的資源
TANCE 回顯服務器的請求,主要用于測試或者診斷
CONNECT HTTP1.1 中預留的能夠將連接改為管道連接方式的代理服務器

單例模式 線程存在不安全的問題

只要是存在多個線程修改同一個成員變量,就會存在線程安全的問題!

Map集合

HashMap是線程不安全的
兩個場景
① :使用在方法內的局部變量時,局部變量屬于當前線程級別的變量,其他線程訪問不了,也談不上安不安全了!
②:當使用單例對象的成員變量的時候,這個時候多個線程訪問同一個HashMap操作就會存在線程安全的問題!

為了解決場景②存在的問題,我們可以使用:HashTable
查看源碼可以知道,他的大部分方法都是被synchronized修飾,方法級別的修飾

image.png

其中,get和put不能同時執行!!!效率非常低啊,不建議使用
對于復合操作,很有可能也會出現線程安全問題;

下面是另一種方案:
使用Collections.aynchronizedMap()方法,其實就是把傳入的HashMap包裝了同步而已

image.png

每次對HashMap進行操作的時候,先要獲得mutex對象這個鎖才能進去,所以效率不會好到哪里去。。。也不建議使用

接下,下一種方案(ps:廣開思路,嘻嘻)
ConcurrentHashMap(不多BB,直接推薦吧)
jdk8之前使用分段鎖機制,jdk8之后,又加入了紅黑樹和CAS算法來實現的

JVM內存模型(HotSpot)

在java虛擬機中,方法區是可供各個線程共享的運行時內存,它存儲了每一個類的結構信息,例如:運行時的常量池,字段和方法數據,構造函數的普通方法的字節碼內容等等...

這個地方保留明天細看!!!!先睡去了

juc那個包下的類源碼 值得一看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。