golang 面試題目
1 new 和make 有什么區(qū)別
new 初始化T類型的零值,返回指針
make 初始T 類型, 返回T類型
2 變量類型不攜帶任何信息且是0 值。 地址是否相同?
s := struct {}{}
d := [0]int{}
if unsafe.Pointer(&s) == unsafe.Pointer(&d) {
fmt.Println("same adress")
} else {
fmt.Println("not same adress")
}
result: same adress
3 變量逃逸
當變量(或者對象)在方法中分配后,其指針被返回或者被全局引用(這樣就會被其他過程或者線程所引用),這種現(xiàn)象稱作指針(或者引用)的逃逸(Escape)。
4 隱式賦值,下面的輸出結(jié)果可能會是什么
func assginParameter() (ret int){
i := 0
ret = 0
for i < 3 {
go func() {
time.Sleep(1)
fmt.Println("get value %v", ret)
}()
i++
}
return 1
}
func TestInterface2(t *testing.T) {
assginParameter()
time.Sleep(3)
}
隱式賦值返回值
0 0 0
0 0 1
0 1 1
1 1 1
5 包級變量初始化循序
var a = b + c
var b = f()
var c = 1
func f() int {
return 100
}
func TestInterface2(t *testing.T) {
fmt.Println(a , b , c )
}
101 100 1
包級別的變量按照聲明順序初始化, 在依賴解析完畢的情況下 ,根據(jù)依賴的順序進行。
包的初始按照導入的順序進行。
5 變量作用域生命周期怎么區(qū)分
作用域: 編譯屬性
生命周期 : 運行期屬性。
var a = 0
if true {
a,b := 1, 5
fmt.Print(a, b)
}
fmt.Print(a)
if true {
b := 0
a,b = 2, 5
fmt.Println(a, b)
}
fmt.Println(a)
0 1 5 0 2 5 2
考察 := 對外圍重名賦值的覆蓋問題。
6 字符串s , 則s[0] 表示什么
第一個字節(jié)? 第一個字符?
答案: 第一個字符( 一個字符根據(jù)不同編碼可能對應多個字節(jié))
7 字符串內(nèi)容永遠不可變:
s := "12345"
s[0] = ‘0’ // 編譯錯誤?。?!
8 slice 是否可以做map的key 為什么
slice 不可以做slice 的key, slice 沒有 “ == ” 操作
9 在go 中() 是面向?qū)ο缶幊谭绞降暮诵?/h3>
A 組合 B 繼承
答: A
9 go 語言的函數(shù)調(diào)用棧可達多少(其他語言 64K - 2MB)?
go 的函數(shù)調(diào)用??勺冮L,最多可達 1GB 左右