go知識點複習

go核心要點
1、go在語言層面上做哪些優化?
      程序本質上是變量+函數,go語言在變量方面提供了緊湊的內存使用;在函數方面,提供了內聯機制,減少函數調用開銷,但是內聯也是有代價的,增加了編譯後二進制文件的大小。

2、goroutine如何實現同步功能?請用代碼實現
     方案一:通過sync.WaitGroup//適用於需同步線程個數明確的情況
     方案二:通過channel
     方案三:context

3、go中有哪些協程安全的類型?
      channel、sync.Map
      對於數據想要線程安全,離不開鎖機制。關鍵點在於鎖機制運用方面的優化與封裝,對性能有影響。因此像sync.Map中通過空間換時間的方式冗餘數據,針對讀多寫少的一些場景可以考慮這麼使用。
       sync.Map是一個高度封裝的結構體,通過Store、Load存取數據,通過Range方法遍歷數據,通過Delete刪除數據。

4、go中sync.Mutex(互斥鎖)與sync.RWMutex(讀寫鎖)的區別與使用方式
      Mutex用於讀寫不確定的情況
      RWMutex適用於讀多寫少的問題,其本質上也是Mutex的封裝

5、反射的應用
https://www.jianshu.com/p/8c0669d8adc3

6、go語言中如何高效實現快排?

7、go語言中令牌池如何設計?
      令牌池有哪些應用場景呢?

8、go中閉包函數的用法
       閉包的使用主要是面向於函數式編程,看哪些地方有返回函數的需求。

9、go中goroutine超時控制,如何封裝在框架裏面呢?已經有很好的解決方案,context。

10、map高併發訪問與sync.Map性能對比?
        不如問道map控制併發訪問的方式有哪些?該問題的答案是:針對Map類型,可以通過加RWMutex或者Channel的方式來實現,其中通過讀寫鎖的性能其實更高,但要求代碼邏輯要嚴謹;對於sync.Map,可以通過Store、Load、Delete等方式直接操作,相關包以進行封裝,通過空間換時間,不易出問題。

11、請通過go設計一個高併發的日誌框架?

12、gdb調試法方法

13、明白切片slice的數據結構
        slice由指向數組的指針以及len和cap組成。其中len和cap分別代表什麼?其實質都是數組的拷貝,當cap小於1024的時候,每當需要擴充時都是2*cap。使用時,建議預先分配好,防止append的時候重新分配複製之前的數據,減少不必要的性能損耗。
        type Slice struct{
           ptr unsafe.Pointer
           len int
           cap int
        }

14、接口一般以er結尾,如writer、reader

15、C語言基本類型包括基本類型(數值類型、字符類型)、構造類型(結構體、枚舉、數組)、指針類型、空類型。

16、go中存在兩種interface,無方法的interface有方法的interface。兩種interface的內部定義不同,但都是由結構體構成。其實本質上都是由基本類型構成。

17、計算機世界由基本類型所組成的變量與函數構成,基於某一些需求通過封裝的手段提供如sync.Map類型對應的結構體和方法。

18、context包已提供兩個結構體,context.Background 與 context.ToDo

19、context利用close(chan)一個只讀的channel來實現廣播功能,其中chan是引用傳遞。因此,只要close(chan)是可以起到廣播效果。

20、go中new與make都是用於內存分配,其中make只用於chan、map以及slice的內存創建。但是實際使用過程中,new很少使用,一般通過短語句聲明即可。

21、對於編譯型語言,要通過壓測觀察是否存在內存泄漏,那麼究竟要考慮多大的併發量呢?

22、對於IO多路複用,select、pool採用的輪詢模式,epool採用的回調機制。但是萬一客戶端很活躍,系統回調會產生許多併發線程,負載較高。

23、什麼是WebSocket?

25、go---netpoll實現原理?類比channel---select?

27、在信息傳遞過程中,面對面溝通的效率時最高的,而紙質交流效率最低。那麼爲何還需要紙質文檔?---記錄功能

28、一定要培養自己發現問題、解決問題的能力

29、go中數據的流動交給channel,數據的處理交給goroutine

30、服務器端接口客戶端請求,公有IP和私有IP之分
       比如我們訪問百度時,百度Server端接收的是公網IP。
       一個內網內的兩臺電腦同時訪問百度,NAT會把兩個內網IP:PORT轉爲外網IP:PORT,對於百度來說,就是同一個IP的兩個Port訪問。

31、504網關超時

32、goroot與gopath有何區別?

33、可以通過配置WSL中的GO相關配置,實現編譯等功能。已驗證。

34、重要的是編程思想,比如高併發情況下,java/.net/go是如何實現的?

35、計算機資源都是有限的,實現高併發、高性能、可擴展的應用程序即實現各階段、各細節的最優化,最優化,最常見的即爲內存最優化以及CPU資源最優化,因此涉及到內存GC以及CPU資源調度。

36、每一個微服務都要以高性能、高可用、可擴展爲目標進行設計,亦可針對某一些場景做取捨。
       高可用:萬變不離其宗---冗餘方案
       高性能:低時延、高併發
       可擴展:一是從應用程序的角度看;二是應用程序無狀態化。

37、同步與異步關注於消息通知機制,阻塞與非阻塞表示線程運行狀態

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