面試總結

walt-white發表於2021-04-25

channel 相關

channel為什麼能保證執行緒安全
    傳送一個資料到channel和從channel中接收一個資料都是原子性的。而且go的設計思想就是不要通過共享記憶體進行通訊,而是通過通訊共享記憶體,前者就是傳統的加鎖,後者是channel。設計channel的主要目的就是在多工間傳遞資料,這當然是安全的

切片擴容規則
    原切片長度小於1024時,新切片的容量會按照原切片的2倍擴容,否則,新切片的容量會按照原切片的1.25倍擴容,此時需要注意的是,如果新切片的容量的容量按照原切片的1.25倍擴容仍然無法儲存新元素時,將不會按照原切片的1.25倍擴容,直到新切片的容量可以儲存原切片的元素和新元素為止。一般最終擴容後的新切片,它的容量會大於或等於原切片的容量。
    需要注意的是當切片的零值是nil時,切片此時還沒有指向底層陣列。但是切片的零值是可用的,當使用append向零值切片追加元素時,將會先個切片分配一個底層陣列。
    切片擴容實際是建立一個新的底層陣列,把原切片的元素和新元素一起拷貝到新切片的底層陣列中,原切片的底層陣列將會被垃圾回收。
    注意:切片的容量可以根據元素的個數的增多自動擴容,但是不會根據元素的個數的減少自動擴容。

字串 相關

構建字串 rune
Golang中的字串底層是[]byte陣列實現的。中文字元在unicode下佔兩個字元,在utf-8下佔三個位元組,golang預設編碼是utf-8
Golang中還有一個byte資料型別和rune類似,它們都是用來表示字元型別的變數型別。它們的不同在於:
byte等同於int8,常用來處理ascii字元。
rune等同於int32,常用來處理unicode或utf-8字元。
golang中的unicode/utf8包提供了用utf-8獲取長度的方法

物件導向 相關

函式,方法和介面
    Go語言中函式有具名和匿名之分,具名函式一般應用於包級函式,是匿名函式的一種特列。當匿名函式引用了外部作用於中的變數時就成了閉包函式。
    方法是繫結到一個具體型別的特殊函式,Go語言中的方法依託於型別的,必須在編譯時靜態繫結。
    介面定義了方法的集合,這些方法依託於執行時的介面物件,因此介面對應的方法是在執行動時動態繫結的。Go語言通過隱式介面機制實現了鴨子物件導向型別。
    Go的介面型別是對其他型別行為的的抽象和概括,因為介面型別不會和特定的實現細節繫結在一起,通過這種抽象的方式我們可以讓物件更加靈活,更有適應能力。介面型別是延遲繫結,可以實現類似虛擬函式的多型功能。
    Go語言中,基礎型別(非介面型別)不支援隱式轉換,我們無法將一個int型別的值直接賦值給int64型別的變數。但是Go語言對於介面型別的轉換非常靈活。物件和介面之間轉換,介面和介面的轉換都可能是隱式的轉換。

map 相關

delete方法刪除一個不存在的key 會發生什麼情況
不會返回錯誤

nginx 相關

正向代理和反向代理
https配置過程

redis 相關

  • 如何實現一個佇列

    1. 生產者消費者模式
      普通版本
      比如一個佇列裡面,生產者A push了一個資料進去, 消費者B pop了這個資料,那麼這個佇列依舊為空。所以是一對一的。至於是先進先出還是後進後出等,可以依照函式lpush(從佇列左邊,也就是隊首push一個資料),rpush(從佇列右邊也就是隊尾push一個資料),lpop(同理),rpop等來控制。
      插入資料:
      面試總結
      顯示資料:
      面試總結
      取出資料:
      面試總結
      阻塞版本
      上面的命令都是立即返回的,無論是否有資料。取資料有lpop有兩個增強版本,blpop(block left pop)阻塞版本。
      使用方法:blpop key1 key2 …keyn 10
      同時預獲取多個key的值,並設定超時時間為10s,如果所有key,有些key有value有value就立即返回,如果所有key都沒有value就阻塞10s返回

    2. 釋出者訂閱者模式
      概念:三個使用者A,B,C同時都訂閱了一個channel名字叫msg,然後釋出者往msg的channel裡釋出了一個資料,那麼A,B,C三個使用者都收到該資料。
      注意:

         1.很明顯,三個使用者A,B,C需要阻塞。怎麼收到的訂閱資料呢,肯定是依靠註冊在Redis裡面的回撥函式。
         2.釋出的資料不會在Redis裡復現,意思是釋出了以後,A,B,C由於種種原因沒有收到。

      總結:

         1.生產者消費者模式需要消費者主動去拉取資料,如果寫成死迴圈並且阻塞模式,就和第二種模式差不多了。
         2.釋出者訂閱者模式並不存在某個key裡面如果訂閱者沒收到則該資料就丟失了。

rabbitmq 相關

1.單發單收
2.工作佇列Worker Queue
3.釋出/訂閱 Publish/Subscribe
4.路由Routing
5.Topic型別的exchange
6.rabbitmq部分封裝程式碼及裝備工作

微服務 相關

  • rpc和grpc的區別

  • 微服務的劃分規則

  • 微服務通訊方式

框架 相關

gin 如何實現一個rpc服務流程

MySql 相關

優化

docker 相關

  • Dockerfile
    Dockerfile 是一個用來構建映象的文字檔案,文字內容包含了一條條構建映象所需的指令和說明。

    TCP 相關

本作品採用《CC 協議》,轉載必須註明作者和本文連結
walt-white-zhou

相關文章