Go总结的面试题目
channel線程安全嗎
是安全的
HashMap 線程安全原因
不安全?
1.同時添加相同的元素可能會發(fā)生碰撞覆蓋2.同時對數(shù)組進行擴容會有數(shù)據(jù)丟失
HashMap 不安全解決
Hashtable ConcurrentHashMap Synchronized Mapslice與arr區(qū)別?
● 切片是指針類型,數(shù)組是值類型● 數(shù)組的長度是固定的,而切片不是(切片是動態(tài)的數(shù)組)● 切片比數(shù)組多一個屬性:容量(cap)● 切片的底層是數(shù)組讀寫鎖或者互斥鎖讀的時候能寫
Go中讀寫鎖包括讀鎖和寫鎖, 多個讀線程可以同時訪問共享數(shù)據(jù); 寫線程必須等待所有讀線程都釋放鎖以后,才能取得鎖; 同樣的,讀線程必須等待寫線程釋放鎖后,才能取得鎖,也就是說讀寫鎖要確保的是如下互斥關(guān)系, 可以 同時讀, 讀-寫,寫-寫都是互斥的。Channel是同步的還是異步的.
Channel是異步進行的。 channel存在3種狀態(tài):nil,未初始化的狀態(tài),只進行了聲明,或者手動賦值為nil active,正常的channel,可讀或者可寫 close,已關(guān)閉,千萬不要誤認(rèn)為關(guān)閉channel后,channel的值是nil實現(xiàn)消息隊列(多生產(chǎn)者,多消費者)
package mainimport ("fmt""time" )func producer(pname string, ch chan int) {for i := 0; i < 4; i++ {fmt.Println("producer--", pname, ":", i)ch <- i} }func consumer(cname string, ch chan int) {//可以循環(huán) for i := range ch 來不斷從 channel 接收值,直到它被關(guān)閉。for i := range ch {fmt.Println("consumer-----------", cname, ":", i)} }func main() {//用channel來傳遞"產(chǎn)品", 不再需要自己去加鎖維護一個全局的阻塞隊列ch := make(chan int)go producer("生產(chǎn)者1", ch)go consumer("消費者1", ch)time.Sleep(10 * time.Second)close(ch) }?孤兒進程,僵尸進程
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被 init進程(進程號為1)所收養(yǎng),并由init進程對它們完成狀態(tài)收集工作。僵尸進程:一個進程使用fork創(chuàng)建子進程,如果子進程退出,而父進程并沒有調(diào)用wait或waitpid獲取子進程的 狀態(tài)信息,那么子進程的進程描述符仍然保存在系統(tǒng)中。這種進程稱之為僵死進程。tcp與udp區(qū)別
tcp傳輸?shù)氖菙?shù)據(jù)流,而udp是數(shù)據(jù)包,tcp會進過三次握手,udp不需要?
TCP三次握手四次揮手
https://blog.csdn.net/fujian9544/article/details/100045552
?
總結(jié)
- 上一篇: 有用分期拒绝还款后果 逾期罚息个人征信受
- 下一篇: 科创板如何交易