位元組後端訓練營 Go由淺入深

2022-09-19 14:33:12 字數 3046 閱讀 8290

var num1 [10]int

var num2 [5]int

var num3 [5]int32

(1)三種各不相同,只有元素型別和長度都完全相同,陣列型別才相同

var num1 [3]int

num2 := [3]int

num3 := [...]int

(2)三種初始化方法

(3)陣列型別是值型別,不是引用型別(函式傳遞後只操縱陣列的備份)

type slice struct
(1)切片定義的幾種方法

var aa int

aa = make(int,4)

bb := make(int,4,6)

var num = [10]int

slice1 := num[2:5:8] // [2,3,4],len = 3,cap = 6

slice2 := num[2:5] // 這裡要注意slice之間的互相影響

slice3 := num[2:]

slice := num[:5]// [0,1,2,3,4]

slice := num[:]

(2)切片拷貝

slice2 := make(int ,3)

copy(slice2,slice1[1:4])

(3)常用函式

slice1 := make(int,0,2)

// range 遍歷 事實上是一種拷貝,並不影響原來的切片

for _,n := range slice

對映的構成,和對映鍵值對的插入刪除

students := make(map[string]int)

students["jack"] = 10

delete(students , "jack")

實現set:

map[string]struct{}
結構體的定義

type gender int

struct

type person struct

方法和函式的區別

func(p person) showinfo()else 

}

結構體的初始化法方法

這裡注意到無論是指標還是結構體都是用.

// 1.直接初始化

// 2.使用&返回指標

// 3.使用new,返回結構體指標

描述某個型別有哪些方法。或者說乙個介面型別,定義了乙個方法集

空介面可以被認為是其他語言的「any」型別(println()為什麼什麼東西都能打?)

型別斷言

func main() = 123

// 1

n,ok := x.(int)

fmt.println(n,ok) // 123 true

// 2

a,ok := x.(float64)

fmt.println(a,ok) // 0 false

// 3

a := x.(float64) //產生乙個panic

}

func main()

fmt.println("主協程結束")

}

這裡注意到主協程一旦結束其他都結束

jmp模型

協程與執行緒最好是n:m的關係

協程的排程器的設計策略(如何減少開銷)

(1)復用執行緒

(2)利用並行

(3)搶占:限制協程執行時長

(4)全域性協程佇列:鍊錶實現

常用的同步控制機制:waitgroup

func main()(i)

} wg.wait()

}

併發模型csp

管道的操作有:讀寫關閉

ch := make(chan string)

a = <-ch

ch <- "hello" // 寫乙個已經關閉的channel就會引發panic

管道分類:無緩衝的管道(沒有額外的拷貝,讀在等寫)和有緩衝的管道(會發生額外的拷貝,緩衝區的最大是65535)

交替列印a和b,(1)b發出訊號(2)a列印,向b傳訊號(3)b...(4)列印完結束向主協程發訊號

package main

import "fmt"

func main()

func printa(ch1, ch2 chan string)

}func printb(ch1, ch2, ch3 chan string) else

}}

func main()

fmt.println(x,y,z) // 都是[0 1 2] [0 1 2 4] [0 1 2 4]

}

size := 3

data := make(int,size) // 使用data := make(int,0,size)則可以,這樣size只是cap

(4)關於指標

golang中兩種指標1.限制型指標(只能定址,但不能加減位址)2.無限制指標(unsafe.pointer)(可以任意寫記憶體)

什麼時候用指標(1.需要修改,不用的時候建議不用指標 2.容器佔記憶體較大(提高效能)(這裡注意到容器較小時因為有逃逸分析指標未必節省時間))

(5)關於panic

可以主動使用panic,常常和defer一起使用

func main()

}()panic("this is a panic")

} time.sleep(2*time.second)

fmt.println("end")

}

面試訓練營

1 重寫與過載之間的區別 方法過載 1 同乙個類中 2 方法名相同,引數列表不同 引數順序 個數 型別 3 方法返回值 訪問修飾符任意 4 與方法的引數名無關 方法重寫 1 有繼承關係的子類中 2 方法名相同,引數列表相同 引數順序 個數 型別 方法返回值相同 3 訪問修飾符,訪問範圍需要大於等於父...

TOT訓練營開篇

tot是 top of top 頂級中的頂級之意,tot 15是西安本地第一屆訓練營,我們是這一屆的第三批次,研發班兩個,總數為61個人,當然還有另外的測試沒有包括在內,測試也有兩個班,之前打聽到,測試是分自動化和業務測試的,其實我們也有劃分,只是當時老師們沒有說出來,據說,還有些專業專門考glod...

機器學習訓練營

邏輯回歸 logistic regression,簡稱lr 雖然其中帶有 回歸 兩個字,但邏輯回歸其實是乙個分類模型,並且廣泛應用於各個領域之中。雖然現在深度學習相對於這些傳統方法更為火熱,但實則這些傳統方法由於其獨特的優勢依然廣泛應用於各個領域中。而對於邏輯回歸而且,最為突出的兩點就是其模型簡單和...