Golang精編49面試題匯總(選擇題)
Golang精編100題
能力模型(測試)
初級primary:
熟悉基本語法,能夠看懂代碼的意圖;
在他人指導(dǎo)下能夠完成用戶故事的開發(fā),編寫的代碼符合CleanCode規(guī)范;
中級intermediate:
能夠獨立完成用戶故事的開發(fā)和測試;
能夠嗅出代碼的壞味道,并知道如何重構(gòu)達成目標;
高級senior:
能夠開發(fā)出高質(zhì)量高性能的代碼;
能夠熟練使用高級特性,開發(fā)編程框架或測試框架;
選擇題
1. 【初級】下面屬于關(guān)鍵字的是()
A. func
B. def
C. struct
D. class
參考答案:AC
2. 【初級】定義一個包內(nèi)全局字符串變量,下面語法正確的是()
A. var str string
B. str := ""
C. str = ""
D. var str = ""
參考答案:AD
3. 【初級】通過指針變量 p 訪問其成員變量 name,下面語法正確的是()
A. p.name
B. (*p).name
C. (&p).name
D. p->name
參考答案:AB
4. 【初級】關(guān)于接口和類的說法,下面說法正確的是()
A. 一個類只需要實現(xiàn)了接口要求的所有函數(shù),我們就說這個類實現(xiàn)了該接口
B. 實現(xiàn)類的時候,只需要關(guān)心自己應(yīng)該提供哪些方法,不用再糾結(jié)接口需要拆得多細才合理
C. 類實現(xiàn)接口時,需要導(dǎo)入接口所在的包
D. 接口由使用方按自身需求來定義,使用方無需關(guān)心是否有其他模塊定義過類似的接口
參考答案:ABD
5. 【初級】關(guān)于字符串連接,下面語法正確的是()
A. str := ‘abc’ + ‘123’
B. str := "abc" + "123"
C. str := '123' + "abc"
D. fmt.Sprintf("abc%d", 123)
參考答案:BD
6. 【初級】關(guān)于協(xié)程,下面說法正確是()
A. 協(xié)程和線程都可以實現(xiàn)程序的并發(fā)執(zhí)行
B. 線程比協(xié)程更輕量級
C. 協(xié)程不存在死鎖問題
D. 通過channel來進行協(xié)程間的通信
參考答案:AD
7. 【中級】關(guān)于init函數(shù),下面說法正確的是()
A. 一個包中,可以包含多個init函數(shù)
B. 程序編譯時,先執(zhí)行導(dǎo)入包的init函數(shù),再執(zhí)行本包內(nèi)的init函數(shù)
C. main包中,不能有init函數(shù)
D. init函數(shù)可以被其他函數(shù)調(diào)用
參考答案:AB
8. 【初級】關(guān)于循環(huán)語句,下面說法正確的有()
A. 循環(huán)語句既支持for關(guān)鍵字,也支持while和do-while
B. 關(guān)鍵字for的基本使用方法與C/C++中沒有任何差異
C. for循環(huán)支持continue和break來控制循環(huán),但是它提供了一個更高級的break,可以選擇中斷哪一個循環(huán)
D. for循環(huán)不支持以逗號為間隔的多個賦值語句,必須使用平行賦值的方式來初始化多個變量
參考答案:CD
9. 【中級】對于函數(shù)定義:
func add(args...int)int{ sum:=0 for_,arg:=range args{ sum += arg } return sum }
下面對add函數(shù)調(diào)用正確的是()
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)
參考答案:ABD
10. 【初級】關(guān)于類型轉(zhuǎn)化,下面語法正確的是()
A.
type MyInt int var i int = 1 var jMyInt = i
B.
type MyIntint var i int= 1 var jMyInt = (MyInt)i
C.
type MyIntint var i int= 1 var jMyInt = MyInt(i)
D.
type MyIntint var i int= 1 var jMyInt = i.(MyInt)
參考答案:C
11. 【初級】關(guān)于局部變量的初始化,下面正確的使用方式是()
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10
參考答案:ABC
12. 【初級】關(guān)于const常量定義,下面正確的使用方式是()
A.
const Pi float64 = 3.14159265358979323846 const zero= 0.0
B.
const ( size int64= 1024 eof = -1 )
C.
const ( ERR_ELEM_EXISTerror = errors.New("element already exists") ERR_ELEM_NT_EXISTerror = errors.New("element not exists") )
D.
const u, vfloat32 = 0, 3 const a,b, c = 3, 4, "foo"
參考答案:ABD
13. 【初級】關(guān)于布爾變量b的賦值,下面錯誤的用法是()
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)
參考答案:BC
14. 【中級】下面的程序的運行結(jié)果是()
func main() { ? if (true) { defer fmt.Printf("1") } else { ??? defer fmt.Printf("2") } fmt.Printf("3") }
A. 321
B. 32
C. 31
D. 13
參考答案:C
14. 【初級】關(guān)于switch語句,下面說法正確的有()
A. 條件表達式必須為常量或者整數(shù)
B. 單個case中,可以出現(xiàn)多個結(jié)果選項
C. 需要用break來明確退出一個case
D. 只有在case中明確添加fallthrough關(guān)鍵字,才會繼續(xù)執(zhí)行緊跟的下一個case
參考答案:BD
15. 【中級】 golang中沒有隱藏的this指針,這句話的含義是()
A. 方法施加的對象顯式傳遞,沒有被隱藏起來
B. golang沿襲了傳統(tǒng)面向?qū)ο缶幊讨械闹T多概念,比如繼承、虛函數(shù)和構(gòu)造函數(shù)
C. golang的面向?qū)ο蟊磉_更直觀,對于面向過程只是換了一種語法形式來表達
D. 方法施加的對象不需要非得是指針,也不用非得叫this
參考答案:ACD
16. 【中級】 golang中的引用類型包括()
A. 數(shù)組切片
B. map
C. channel
D. interface
參考答案:ABCD
17. 【中級】 golang中的指針運算包括()
A. 可以對指針進行自增或自減運算
B. 可以通過“&”取指針的地址
C. 可以通過“*”取指針指向的數(shù)據(jù)
D. 可以對指針進行下標運算
參考答案:BC
18. 【初級】關(guān)于main函數(shù)(可執(zhí)行程序的執(zhí)行起點),下面說法正確的是()
A. main函數(shù)不能帶參數(shù)
B. main函數(shù)不能定義返回值
C. main函數(shù)所在的包必須為main包
D. main函數(shù)中可以使用flag包來獲取和解析命令行參數(shù)
參考答案:ABCD
19. 【中級】下面賦值正確的是()
A. var x = nil
B. var x interface{} = nil
C. var x string = nil
D. var x error = nil
參考答案:BD
20. 【中級】關(guān)于整型切片的初始化,下面正確的是()
A. s := make([]int)
B. s := make([]int, 0)
C. s := make([]int, 5, 10)
D. s := []int{1, 2, 3, 4, 5}
參考答案:BCD
21. 【中級】從切片中刪除一個元素,下面的算法實現(xiàn)正確的是()
A.
func (s *Slice)Remove(value interface{})error { for i, v := range *s { if isEqual(value, v) { if i== len(*s) - 1 { ??? ? ? ? ? *s = (*s)[:i] } else { ??? ? ? ? ?*s = append((*s)[:i],(*s)[i + 2:]...) ? ?} ?? ?return nil ? } } return ERR_ELEM_NT_EXIST }
B.
func (s*Slice)Remove(value interface{}) error { for i, v:= range *s { ?? ?if isEqual(value, v) { ?? ? ? ?*s =append((*s)[:i],(*s)[i + 1:]) ?? ? ?return nil ?? ?} } returnERR_ELEM_NT_EXIST }
C.
func (s*Slice)Remove(value interface{}) error { for i, v:= range *s { ?? ?if isEqual(value, v) { ?? ? ? ?delete(*s, v) ?? ? ? ?return nil ?? ?} } returnERR_ELEM_NT_EXIST }
D.
func (s*Slice)Remove(value interface{}) error { for i, v:= range *s { ?? ?if isEqual(value, v) { ?? ? ? ?*s =append((*s)[:i],(*s)[i + 1:]...) ?? ? ? ?return nil ?? ?} } returnERR_ELEM_NT_EXIST }
參考答案:D
22. 【初級】對于局部變量整型切片x的賦值,下面定義正確的是()
A.
?x := []int{ ?1, 2, 3, ?4, 5, 6, }
B.
x :=[]int{ 1, 2, 3, 4, 5, 6 }
C.
x :=[]int{ 1, 2, 3, 4, 5, 6}
D.
x :=[]int{1, 2, 3, 4, 5, 6,}
參考答案:ACD
23. 【初級】關(guān)于變量的自增和自減操作,下面語句正確的是()
A.
i := 1 i++
B.
i := 1 j = i++
C.
i := 1 ++i
D.
i := 1 i--
參考答案:AD
24. 【中級】關(guān)于函數(shù)聲明,下面語法錯誤的是()
A. func f(a, b int) (value int, err error)
B. func f(a int, b int) (value int, err error)
C. func f(a, b int) (value int, error)
D. func f(a int, b int) (int, int, error)
參考答案:C
25. 【中級】如果Add函數(shù)的調(diào)用代碼為:
?func main() { ?var a Integer = 1 ?var b Integer = 2 ?var i interface{} = &a ?sum := i.(*Integer).Add(b) ?fmt.Println(sum) }
則Add函數(shù)定義正確的是()
A.
typeInteger int func (aInteger) Add(b Integer) Integer { ?return a + b }
B.
typeInteger int func (aInteger) Add(b *Integer) Integer { ?return a + *b }
C.
typeInteger int func (a*Integer) Add(b Integer) Integer { ?return *a + b }
D.
typeInteger int func (a*Integer) Add(b *Integer) Integer { ?return *a + *b }
參考答案:AC
26. 【中級】如果Add函數(shù)的調(diào)用代碼為:
func main() { var a Integer = 1 ?var b Integer = 2 ?var i interface{} = a sum := i.(Integer).Add(b) ?fmt.Println(sum) }
則Add函數(shù)定義正確的是()
A.
typeInteger int func (a Integer)Add(b Integer) Integer { ?return a + b }
B.
typeInteger int func (aInteger) Add(b *Integer) Integer { ?return a + *b }
C.
typelnteger int func (a*Integer) Add(b Integer) Integer { ?return *a + b }
D.
typeInteger int func (a*Integer) Add(b *Integer) Integer { ?return *a + *b }
參考答案:A
27. 【中級】關(guān)于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
28. 【中級】關(guān)于GoMock,下面說法正確的是()
A. GoMock可以對interface打樁
B. GoMock可以對類的成員函數(shù)打樁
C. GoMock可以對函數(shù)打樁
D. GoMock打樁后的依賴注入可以通過GoStub完成
參考答案:AD
29. 【中級】關(guān)于接口,下面說法正確的是()
A. 只要兩個接口擁有相同的方法列表(次序不同不要緊),那么它們就是等價的,可以相互賦值
B. 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以賦值給接口A
C. 接口查詢是否成功,要在運行期才能夠確定
D. 接口賦值是否可行,要在運行期才能夠確定
參考答案:ABC
30. 【初級】關(guān)于channel,下面語法正確的是()
A. var ch chan int
B. ch := make(chan int)
C. <- ch
D. ch <-
參考答案:ABC
31. 【初級】關(guān)于同步鎖,下面說法正確的是()
A. 當(dāng)一個goroutine獲得了Mutex后,其他goroutine就只能乖乖的等待,除非該goroutine釋放這個Mutex
B. RWMutex在讀鎖占用的情況下,會阻止寫,但不阻止讀
C. RWMutex在寫鎖占用情況下,會阻止任何其他goroutine(無論讀和寫)進來,整個鎖相當(dāng)于由該goroutine獨占
D. Lock()操作需要保證有Unlock()或RUnlock()調(diào)用與之對應(yīng)
參考答案:ABC
32. 【中級】 golang中大多數(shù)數(shù)據(jù)類型都可以轉(zhuǎn)化為有效的JSON文本,下面幾種類型除外()
A. 指針
B. channel
C. complex
D. 函數(shù)
參考答案:BCD
33. 【中級】關(guān)于go vendor,下面說法正確的是()
A. 基本思路是將引用的外部包的源代碼放在當(dāng)前工程的vendor目錄下面
B. 編譯go代碼會優(yōu)先從vendor目錄先尋找依賴包
C. 可以指定引用某個特定版本的外部包
D. 有了vendor目錄后,打包當(dāng)前的工程代碼到其他機器的$GOPATH/src下都可以通過編譯
參考答案:ABD
34. 【初級】 flag是bool型變量,下面if表達式符合編碼規(guī)范的是()
A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
參考答案:BD
35. 【初級】 value是整型變量,下面if表達式符合編碼規(guī)范的是()
A. if value == 0
B. if value
C. if value != 0
D. if !value
參考答案:AC
36. 【中級】關(guān)于函數(shù)返回值的錯誤設(shè)計,下面說法正確的是()
A. 如果失敗原因只有一個,則返回bool
B. 如果失敗原因超過一個,則返回error
C. 如果沒有失敗原因,則不返回bool或error
D. 如果重試幾次可以避免失敗,則不要立即返回bool或error
參考答案:ABCD
37. 【中級】關(guān)于異常設(shè)計,下面說法正確的是()
A. 在程序開發(fā)階段,堅持速錯,讓程序異常崩潰
B. 在程序部署后,應(yīng)恢復(fù)異常避免程序終止
C. 一切皆錯誤,不用進行異常設(shè)計
D. 對于不應(yīng)該出現(xiàn)的分支,使用異常處理
參考答案:ABD
38. 【中級】關(guān)于slice或map操作,下面正確的是()
A.
var s []int s =append(s,1)
B.
var mmap[string]int m["one"]= 1
C.
var s[]int s =make([]int, 0) s =append(s,1)
D.
var mmap[string]int m =make(map[string]int) m["one"]= 1
參考答案:ACD
39. 【中級】關(guān)于channel的特性,下面說法正確的是()
A. 給一個 nil channel 發(fā)送數(shù)據(jù),造成永遠阻塞
B. 從一個 nil channel 接收數(shù)據(jù),造成永遠阻塞
C. 給一個已經(jīng)關(guān)閉的 channel 發(fā)送數(shù)據(jù),引起 panic
D. 從一個已經(jīng)關(guān)閉的 channel 接收數(shù)據(jù),如果緩沖區(qū)中為空,則返回一個零值
參考答案:ABCD
40. 【中級】關(guān)于無緩沖和有沖突的channel,下面說法正確的是()
A. 無緩沖的channel是默認的緩沖為1的channel
B. 無緩沖的channel和有緩沖的channel都是同步的
C. 無緩沖的channel和有緩沖的channel都是非同步的
D. 無緩沖的channel是同步的,而有緩沖的channel是非同步的
參考答案:D
41. 【中級】關(guān)于異常的觸發(fā),下面說法正確的是()
A. 空指針解析
B. 下標越界
C. 除數(shù)為0
D. 調(diào)用panic函數(shù)
參考答案:ABCD
42. 【中級】關(guān)于cap函數(shù)的適用類型,下面說法正確的是()
A. array
B. slice
C. map
D. channel
參考答案:ABD
43. 【中級】關(guān)于beego框架,下面說法正確的是()
A. beego是一個golang實現(xiàn)的輕量級HTTP框架
B. beego可以通過注釋路由、正則路由等多種方式完成url路由注入
C. 可以使用bee new工具生成空工程,然后使用bee run命令自動熱編譯
D. beego框架只提供了對url路由的處理,而對于MVC架構(gòu)中的數(shù)據(jù)庫部分未提供框架支持
參考答案:ABC
44. 【中級】關(guān)于goconvey,下面說法正確的是()
A. goconvey是一個支持golang的單元測試框架
B. goconvey能夠自動監(jiān)控文件修改并啟動測試,并可以將測試結(jié)果實時輸出到web界面
C. goconvey提供了豐富的斷言簡化測試用例的編寫
D. goconvey無法與go test集成
參考答案:ABC
45. 【中級】關(guān)于go vet,下面說法正確的是()
A. go vet是golang自帶工具go tool vet的封裝
B. 當(dāng)執(zhí)行g(shù)o vet database時,可以對database所在目錄下的所有子文件夾進行遞歸檢測
C. go vet可以使用絕對路徑、相對路徑或相對GOPATH的路徑指定待檢測的包
D. go vet可以檢測出死代碼
參考答案:ACD
46.【中級】關(guān)于map,下面說法正確的是()
A. map反序列化時json.unmarshal的入?yún)⒈仨殲閙ap的地址
B. 在函數(shù)調(diào)用中傳遞map,則子函數(shù)中對map元素的增加不會導(dǎo)致父函數(shù)中map的修改
C. 在函數(shù)調(diào)用中傳遞map,則子函數(shù)中對map元素的修改不會導(dǎo)致父函數(shù)中map的修改
D. 不能使用內(nèi)置函數(shù)delete刪除map的元素
參考答案:A
47. 【中級】關(guān)于GoStub,下面說法正確的是()
A. GoStub可以對全局變量打樁
B. GoStub可以對函數(shù)打樁
C. GoStub可以對類的成員方法打樁
D. GoStub可以打動態(tài)樁,比如對一個函數(shù)打樁后,多次調(diào)用該函數(shù)會有不同的行為
參考答案:ABD
48. 【初級】關(guān)于select機制,下面說法正確的是()
A. select機制用來處理異步IO問題
B. select機制最大的一條限制就是每個case語句里必須是一個IO操作
C. golang在語言級別支持select關(guān)鍵字
D. select關(guān)鍵字的用法與switch語句非常類似,后面要帶判斷條件
參考答案:ABC
49. 【初級】關(guān)于內(nèi)存泄露,下面說法正確的是()
A. golang有自動垃圾回收,不存在內(nèi)存泄露
B. golang中檢測內(nèi)存泄露主要依靠的是pprof包
C. 內(nèi)存泄露可以在編譯階段發(fā)現(xiàn)
D. 應(yīng)定期使用瀏覽器來查看系統(tǒng)的實時內(nèi)存信息,及時發(fā)現(xiàn)內(nèi)存泄露問題
參考答案:BD
以上就是Golang精編49面試題匯總(選擇題)的詳細內(nèi)容,更多關(guān)于Go面試題的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang使用singleflight解決并發(fā)重復(fù)請求
高并發(fā)的場景下,經(jīng)常會出現(xiàn)并發(fā)重復(fù)請求資源的情況,singleflight是golang內(nèi)置的一個包,這個包提供了對重復(fù)函數(shù)調(diào)用的抑制功能,所以下面我們就來看看如何使用它解決并發(fā)重復(fù)請求吧2023-08-08