Go 筆試題精選 二: 25 道選擇題

題目難易程度定義:

y5O3eB

26、[intermediate] 如果 Add 函數的調用代碼爲:

func main() {
        var a Integer = 1
        var b Integer = 2
        var i interface{} = &a
        sum := i.(*Integer).Add(b)
        fmt.Println(sum)
}

則 Add 函數定義正確的是()

A.

type Integer int
func (a Integer) Add(b Integer) Integer {
        return a + b
}

B.

type Integer int
func (a Integer) Add(b *Integer) Integer {
        return a + *b
}

C.

type Integer int
func (a *Integer) Add(b Integer) Integer {
        return *a + b
}

D.

type Integer int
func (a *Integer) Add(b *Integer) Integer {
        return *a + *b
}

參考答案:AC

27、[intermediate] 如果 Add 函數的調用代碼爲:

func main() {
        var a Integer = 1
        var b Integer = 2
        var i interface{} = a
        sum := i.(Integer).Add(b)
        fmt.Println(sum)
}

則 Add 函數定義正確的是()

A.

type Integer int
func (a Integer) Add(b Integer) Integer {
        return a + b
}

B.

type Integer int
func (a Integer) Add(b *Integer) Integer {
        return a + *b
}

C.

type Integer int
func (a *Integer) Add(b Integer) Integer {
        return *a + b
}

D.

type Integer int
func (a *Integer) Add(b *Integer) Integer {
        return *a + *b
}

參考答案:A

28、[intermediate] 關於 GetPodAction 定義,下面賦值正確的是()

type Fragment interface {
        Exec(transInfo *TransInfo) error
}
type GetPodAction struct {
}
func (g GetPodAction) Exec(transInfo *TransInfo) error {
        ...
        return nil
}

A. var fragment Fragment = new(GetPodAction)
B. var fragment Fragment = GetPodAction
C. var fragment Fragment = &GetPodAction{}
D. var fragment Fragment = GetPodAction{}

參考答案:ACD

29、[intermediate] 關於 GoMock,下面說法正確的是()

A. GoMock 可以對 interface 打樁
B. GoMock 可以對類的成員函數打樁
C. GoMock 可以對函數打樁
D. GoMock 打樁後的依賴注入可以通過 GoStub 完成

參考答案:AD

30、[intermediate] 關於接口,下面說法正確的是()

A. 只要兩個接口擁有相同的方法列表(次序不同不要緊),那麼它們就是等價的,可以相互賦值
B. 如果接口 A 的方法列表是接口 B 的方法列表的子集,那麼接口 B 可以賦值給接口 A
C. 接口查詢是否成功,要在運行期才能夠確定
D. 接口賦值是否可行,要在運行期才能夠確定

參考答案:ABC

31、[primary] 關於 channel,下面語法正確的是()

A. var ch chan int
B. ch := make(chan int)
C. <- ch
D. ch <-

參考答案:ABC

32、[primary] 關於同步鎖,下面說法正確的是()

A. 當一個 goroutine 獲得了 Mutex 後,其他 goroutine 就只能乖乖的等待,除非該 goroutine 釋放這個 Mutex
B. RWMutex 在讀鎖佔用的情況下,會阻止寫,但不阻止讀
C. RWMutex 在寫鎖佔用情況下,會阻止任何其他 goroutine(無論讀和寫)進來,整個鎖相當於由該 goroutine 獨佔
D. Lock() 操作需要保證有 Unlock() 或 RUnlock() 調用與之對應

參考答案:ABC

33、[intermediate] golang 中大多數數據類型都可以轉化爲有效的 JSON 文本,下面幾種類型除外()

A. 指針
B. channel
C. complex
D. 函數

參考答案:BCD

34、[intermediate] 關於 go vendor,下面說法正確的是()

A. 基本思路是將引用的外部包的源代碼放在當前工程的 vendor 目錄下面
B. 編譯 go 代碼會優先從 vendor 目錄先尋找依賴包
C. 可以指定引用某個特定版本的外部包
D. 有了 vendor 目錄後,打包當前的工程代碼到其他機器的 $GOPATH/src 下都可以通過編譯

參考答案:ABD

35、[primary] flag 是 bool 型變量,下面 if 表達式符合編碼規範的是()

A. if flag == 1
B. if flag
C. if flag == false
D. if !flag

參考答案:BD

36、[primary] value 是整型變量,下面 if 表達式符合編碼規範的是()

A. if value == 0
B. if value
C. if value != 0
D. if !value

參考答案:AC

37、[intermediate] 關於函數返回值的錯誤設計,下面說法正確的是()

A. 如果失敗原因只有一個,則返回 bool
B. 如果失敗原因超過一個,則返回 error
C. 如果沒有失敗原因,則不返回 bool 或 error
D. 如果重試幾次可以避免失敗,則不要立即返回 bool 或 error

參考答案:ABCD

38、[intermediate] 關於異常設計,下面說法正確的是()

A. 在程序開發階段,堅持速錯,讓程序異常崩潰
B. 在程序部署後,應恢復異常避免程序終止
C. 一切皆錯誤,不用進行異常設計
D. 對於不應該出現的分支,使用異常處理

參考答案:ABD

39、[intermediate] 關於 slice 或 map 操作,下面正確的是()

A.

var s []int
s = append(s,1)

B.

var m map[string]int
m["one"] = 1

C.

var s []int
s = make([]int, 0)
s = append(s,1)

D.

var m map[string]int
m = make(map[string]int)
m["one"] = 1

參考答案:ACD

40、[intermediate] 關於 channel 的特性,下面說法正確的是()

A. 給一個 nil channel 發送數據,造成永遠阻塞
B. 從一個 nil channel 接收數據,造成永遠阻塞
C. 給一個已經關閉的 channel 發送數據,引起 panic
D. 從一個已經關閉的 channel 接收數據,如果緩衝區中爲空,則返回一個零值

參考答案:ABCD

41、[intermediate] 關於無緩衝和有衝突的 channel,下面說法正確的是()

A. 無緩衝的 channel 是默認的緩衝爲 1 的 channel
B. 無緩衝的 channel 和有緩衝的 channel 都是同步的
C. 無緩衝的 channel 和有緩衝的 channel 都是非同步的
D. 無緩衝的 channel 是同步的,而有緩衝的 channel 是非同步的

參考答案:D

42、[intermediate] 關於異常的觸發,下面說法正確的是()

A. 空指針解析
B. 下標越界
C. 除數爲 0
D. 調用 panic 函數

參考答案:ABCD

43、[intermediate] 關於 cap 函數的適用類型,下面說法正確的是()

A. array
B. slice
C. map
D. channel

參考答案:ABD

44、[intermediate] 關於 beego 框架,下面說法正確的是()

A. beego 是一個 golang 實現的輕量級 HTTP 框架
B. beego 可以通過註釋路由、正則路由等多種方式完成 url 路由注入
C. 可以使用 bee new 工具生成空工程,然後使用 bee run 命令自動熱編譯
D. beego 框架只提供了對 url 路由的處理, 而對於 MVC 架構中的數據庫部分未提供框架支持

參考答案:ABC

45、[intermediate] 關於 goconvey,下面說法正確的是()

A. goconvey 是一個支持 golang 的單元測試框架
B. goconvey 能夠自動監控文件修改並啓動測試,並可以將測試結果實時輸出到 web 界面
C. goconvey 提供了豐富的斷言簡化測試用例的編寫
D. goconvey 無法與 go test 集成

參考答案:ABC

46、[intermediate] 關於 go vet,下面說法正確的是()

A. go vet 是 golang 自帶工具 go tool vet 的封裝
B. 當執行 go vet database 時,可以對 database 所在目錄下的所有子文件夾進行遞歸檢測
C. go vet 可以使用絕對路徑、相對路徑或相對 GOPATH 的路徑指定待檢測的包
D. go vet 可以檢測出死代碼

參考答案:ACD

47、[intermediate] 關於 map,下面說法正確的是()

A. map 反序列化時 json.unmarshal 的入參必須爲 map 的地址
B. 在函數調用中傳遞 map,則子函數中對 map 元素的增加不會導致父函數中 map 的修改
C. 在函數調用中傳遞 map,則子函數中對 map 元素的修改不會導致父函數中 map 的修改
D. 不能使用內置函數 delete 刪除 map 的元素

參考答案:A

48、[intermediate] 關於 GoStub,下面說法正確的是()

A. GoStub 可以對全局變量打樁
B. GoStub 可以對函數打樁
C. GoStub 可以對類的成員方法打樁
D. GoStub 可以打動態樁,比如對一個函數打樁後,多次調用該函數會有不同的行爲

參考答案:ABD

49、[primary] 關於 select 機制,下面說法正確的是()

A. select 機制用來處理異步 IO 問題
B. select 機制最大的一條限制就是每個 case 語句裏必須是一個 IO 操作
C. golang 在語言級別支持 select 關鍵字
D. select 關鍵字的用法與 switch 語句非常類似,後面要帶判斷條件

參考答案:ABC

50、[primary] 關於內存泄露,下面說法正確的是()

A. golang 有自動垃圾回收,不存在內存泄露
B. golang 中檢測內存泄露主要依靠的是 pprof 包
C. 內存泄露可以在編譯階段發現
D. 應定期使用瀏覽器來查看系統的實時內存信息,及時發現內存泄露問題

參考答案:BD

來源:https://www.jianshu.com/p/f690203ff168

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/xMXRafxVHud1yyz8GVM3GA