内容简介:分享一下我老师大神的人工智能教程!零基础,通俗易懂!
分享一下我老师大神的人工智能教程!零基础,通俗易懂! http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Golang 精编 100 题
能力模型
级别 |
模型 |
初级 primary |
熟悉基本语法,能够看懂代码的意图;
|
中级 intermediate |
能够独立完成用户故事的开发和测试;
|
高级 senior |
能够开发出高质量高性能的代码;
|
选择题
A. func
B. def
C. struct
D. class
参考答案: ACA. var str string
B. str := ""
C. str = ""
D. var str = ""
参考答案: ADA. p.name
B. (*p).name
C. (&p).name
D. p->name
参考答案: AB
4.
【初级】
关于接口和类的说法,下面说法正确的是()
A.
一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口
B.
实现类的时候,只需要关心自己应该提供哪些方法,不用再纠结接口需要拆得多细才合理
C.
类实现接口时,需要导入接口所在的包
D.
接口由使用方按自身需求来定义,使用方无需关心是否有其他模块定义过类似的接口
参考答案:
ABD
A. str := ‘abc’ + ‘123’
B. str := "abc" + "123"
C. str
:= '123' + "abc"
D. fmt.Sprintf("abc%d", 123)
参考答案: BD
6.
【初级】
关于协程,下面说法正确是()
A.
协程和线程都可以实现程序的并发执行
B.
线程比协程更轻量级
C.
协程不存在死锁问题
D.
通过
channel
来进行协程间的通信
参考答案:
AD
7.
【中级】
关于
init
函数,下面说法正确的是()
A.
一个包中,可以包含多个
init
函数
B.
程序编译时,先执行导入包的
init
函数,再执行本包内的
init
函数
C. main
包中,不能有
init
函数
D. init
函数可以被其他函数调用
参考答案:
AB
do-while
B.
关键字 for 的基本使用方法与 C/C++ 中没有任何差异 C. for 循环支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break ,可以选择中断哪一个循环 D. for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量 参考答案: CD9. 【中级】 对于函数定义:
10. func add(args ...int) int {
11. sum :=0
12. for _,arg := range args {
13. sum += arg
14. }
15. returnsum
}
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)
参考答案: ABD16. 【初级】 关于类型转化,下面语法正确的是() A.
17. type MyInt int
18. 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
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10
参考答案: ABC20. 【初级】 关于 const 常量定义,下面正确的使用方式是() A.
21. 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
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)
参考答案: BC23. 【中级】 下面的程序的运行结果是()
24. func main() {
25. if (true) {
26. defer fmt.Printf("1")
27. } else {
28. defer fmt.Printf("2")
29. }
30. fmt.Printf("3")
}
A. 321
B. 32
C. 31
D. 13
参考答案: Ccase
D.
只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个case
参考答案: BDthis
参考答案: ACDB. map
C. channel
D. interface
参考答案: ABCD
34.
【中级】
golang
中的指针运算包括()
A.
可以对指针进行自增或自减运算
B.
可以通过
“&”
取指针的地址
C.
可以通过
“*”
取指针指向的数据
D.
可以对指针进行下标运算
参考答案:
BC
35.
【初级】
关于
main
函数(可执行程序的执行起点),下面说法正确的是()
A. main
函数不能带参数
B. main
函数不能定义返回值
C. main
函数所在的包必须为
main
包
D. main
函数中可以使用
flag
包来获取和解析命令行参数
参考答案:
ABCD
A. var x = nil
B. var x interface{} = nil
C. var x string = nil
D. var x error = nil
参考答案: BDA. s := make([]int)
B. s := make([]int, 0)
C. s := make([]int, 5, 10)
D. s := []int{1, 2, 3, 4, 5}
参考答案: BCD38. 【中级】 从切片中删除一个元素,下面的算法实现正确的是() A.
39. func (s *Slice)Remove(value interface{})error {
40. for i, v := range *s {
41. if isEqual(value, v) {
42. if i== len(*s) - 1 {
43. *s = (*s)[:i]
44. }else {
45. *s = append((*s)[:i],(*s)[i + 2:]...)
46. }
47. return nil
48. }
49. }
50. 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
51. 【初级】 对于局部变量整型切片 x 的赋值,下面定义正确的是() A.
52. x := []int{
53. 1, 2, 3,
54. 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
55. 【初级】 关于变量的自增和自减操作,下面语句正确的是() A.
56. i := 1
i++
B.
i := 1
j = i++
C.
i := 1
++i
D.
i := 1
i--
参考答案: AD
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)
参考答案: C58. 【中级】 如果 Add 函数的调用代码为:
59. func main() {
60. var a Integer = 1
61. var b Integer = 2
62. var i interface{} = &a
63. sum := i.(*Integer).Add(b)
64. fmt.Println(sum)
}
则 Add 函数定义正确的是() 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
65. 【中级】 如果 Add 函数的调用代码为:
66. func main() {
67. var a Integer = 1
68. var b Integer = 2
69. var i interface{} = a
70. sum := i.(Integer).Add(b)
71. fmt.Println(sum)
}
则 Add 函数定义正确的是() 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.
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
}
参考答案: A
72. 【中级】 关于 GetPodAction 定义,下面赋值正确的是()
73. type Fragment interface {
74. Exec(transInfo *TransInfo) error
75. }
76. type GetPodAction struct {
77. }
78. func (g GetPodAction) Exec(transInfo*TransInfo) error {
79. ...
80. return nil
}
A. var fragment Fragment =new(GetPodAction)
B. var fragment Fragment = GetPodAction
C. var fragment Fragment = &GetPodAction{}
D. var fragment Fragment = GetPodAction{}
参考答案: ACD
81.
【中级】
关于
GoMock
,下面说法正确的是()
A. GoMock
可以对
interface
打桩
B. GoMock
可以对类的成员函数打桩
C. GoMock
可以对函数打桩
D. GoMock
打桩后的依赖注入可以通过
GoStub
完成
参考答案:
AD
A
C.
接口查询是否成功,要在运行期才能够确定 D. 接口赋值是否可行,要在运行期才能够确定参考答案: ABC
A. var ch chan int
B. ch := make(chan int)
C. <- ch
D. ch <-
参考答案: ABCMutex
B. RWMutex
在读锁占用的情况下,会阻止写,但不阻止读 C. RWMutex 在写锁占用情况下,会阻止任何其他 goroutine (无论读和写)进来,整个锁相当于由该 goroutine 独占 D. Lock() 操作需要保证有 Unlock() 或 RUnlock() 调用与之对应参考答案: ABC
B. channel
C. complex
D.
函数参考答案: BCD
86.
【中级】
关于
go vendor
,下面说法正确的是()
A.
基本思路是将引用的外部包的源代码放在当前工程的
vendor
目录下面
B.
编译
go
代码会优先从
vendor
目录先寻找依赖包
C.
可以指定引用某个特定版本的外部包
D.
有了
vendor
目录后,打包当前的工程代码到其他机器的
$GOPATH/src
下都可以通过编译
参考答案:
ABD
A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
参考答案: BDA. if value == 0
B. if value
C. if value != 0
D. if !value
参考答案: ACbool
B.
如果失败原因超过一个,则返回error
C.
如果没有失败原因,则不返回 bool 或error
D.
如果重试几次可以避免失败,则不要立即返回 bool 或error
参考答案: ABCD
90.
【中级】
关于异常设计,下面说法正确的是()
A.
在程序开发阶段,坚持速错,让程序异常崩溃
B.
在程序部署后,应恢复异常避免程序终止
C.
一切皆错误,不用进行异常设计
D.
对于不应该出现的分支,使用异常处理
参考答案:
ABD
91. 【中级】 关于 slice 或 map 操作,下面正确的是() A.
92. 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
panic
D.
从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值参考答案: ABCD
channel
B.
无缓冲的 channel 和有缓冲的 channel 都是同步的 C. 无缓冲的 channel 和有缓冲的 channel 都是非同步的 D. 无缓冲的 channel 是同步的,而有缓冲的 channel 是非同步的参考答案: D
0
D.
调用 panic 函数参考答案: ABCD
A. array
B. slice
C. map
D. channel
参考答案: ABD
97.
【中级】
关于
beego
框架,下面说法正确的是()
A. beego
是一个
golang
实现的轻量级
HTTP
框架
B. beego
可以通过注释路由、正则路由等多种方式完成
url
路由注入
C.
可以使用
bee new
工具生成空工程,然后使用
bee run
命令自动热编译
D. beego
框架只提供了对
url
路由的处理,
而对于
MVC
架构中的数据库部分未提供框架支持
参考答案:
ABC
98.
【中级】
关于
goconvey
,下面说法正确的是()
A. goconvey
是一个支持
golang
的单元测试框架
B. goconvey
能够自动监控文件修改并启动测试,并可以将测试结果实时输出到
web
界面
C. goconvey
提供了丰富的断言简化测试用例的编写
D. goconvey
无法与
go test
集成
参考答案:
ABC
99.
【中级】
关于
go vet
,下面说法正确的是()
A. go vet
是
golang
自带工具
go tool vet
的封装
B.
当执行
go vet database
时,可以对
database
所在目录下的所有子文件夹进行递归检测
C. go vet
可以使用绝对路径、相对路径或相对
GOPATH
的路径指定待检测的包
D. go vet
可以检测出死代码
参考答案:
ACD
100.
【中级】
关于
map
,下面说法正确的是()
A. map
反序列化时
json.unmarshal
的入参必须为
map
的地址
B.
在函数调用中传递
map
,则子函数中对
map
元素的增加不会导致父函数中
map
的修改
C.
在函数调用中传递
map
,则子函数中对
map
元素的修改不会导致父函数中
map
的修改
D.
不能使用内置函数
delete
删除
map
的元素
参考答案:
A
101.
【中级】
关于
GoStub
,下面说法正确的是()
A. GoStub
可以对全局变量打桩
B. GoStub
可以对函数打桩
C. GoStub
可以对类的成员方法打桩
D. GoStub
可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为
参考答案:
ABD
102.
【初级】
关于
select
机制,下面说法正确的是()
A. select
机制用来处理异步
IO
问题
B. select
机制最大的一条限制就是每个
case
语句里必须是一个
IO
操作
C. golang
在语言级别支持
select
关键字
D. select
关键字的用法与
switch
语句非常类似,后面要带判断条件
参考答案:
ABC
103.
【初级】
关于内存泄露,下面说法正确的是()
A. golang
有自动垃圾回收,不存在内存泄露
B. golang
中检测内存泄露主要依靠的是
pprof
包
C.
内存泄露可以在编译阶段发现
D.
应定期使用浏览器来查看系统的实时内存信息,及时发现内存泄露问题
参考答案:
BD
填空题
i__________
参考答案: var i inta__________
参考答案: var a [10]ints__________
参考答案: var s []intp__________
参考答案: var p *intm__________
参考答案: var m map[string]intf__________
参考答案: var f func(a int) intch__________
参考答案: var ch <-chan int__________
参考答案: slice_test.go__________
参考答案: Test10. 【中级】 下面的程序的运行结果是 __________
11. for i := 0; i < 5; i++ {
12. defer fmt.Printf("%d ", i)
}
参考答案: 4 3 2 1 0
13. 【中级】 下面的程序的运行结果是 __________
14. func main() {
15. x := 1
16. {
17. x := 2
18. fmt.Print(x)
19. }
20. fmt.Println(x)
}
参考答案: 21
21. 【中级】 下面的程序的运行结果是 __________
22. func main() {
23. strs := []string{"one","two", "three"}
24.
25. for _, s := range strs {
26. go func() {
27. time.Sleep(1 * time.Second)
28. fmt.Printf("%s ", s)
29. }()
30. }
31. time.Sleep(3 * time.Second)
}
参考答案: three threethree
32. 【中级】 下面的程序的运行结果是 __________
33. func main() {
34. x := []string{"a", "b","c"}
35. for v := range x {
36. fmt.Print(v)
37. }
}
参考答案: 012
38. 【中级】 下面的程序的运行结果是 __________
39. func main() {
40. x := []string{"a", "b","c"}
41. for _, v := range x {
42. fmt.Print(v)
43. }
}
参考答案: abc
44. 【初级】 下面的程序的运行结果是 __________
45. func main() {
46. i := 1
47. j := 2
48. i, j = j, i
49. fmt.Printf("%d%d\n", i, j)
}
参考答案: 21
50. 【初级】 下面的程序的运行结果是 __________
51. func incr(p *int) int {
52. *p++
53. return *p
54. }
55. func main() {
56. v := 1
57. incr(&v)
58. fmt.Println(v)
}
参考答案: 2
__________
参考答案: go60. 【中级】 下面的程序的运行结果是 __________
61. type Slice []int
62. func NewSlice() Slice {
63. return make(Slice, 0)
64. }
65. func (s* Slice) Add(elem int) *Slice {
66. *s = append(*s, elem)
67. fmt.Print(elem)
68. return s
69. }
70. func main() {
71. s := NewSlice()
72. defer s.Add(1).Add(2)
73. s.Add(3)
}
参考答案: 132
判断题
1.
【初级】
数组是一个值类型()
参考答案:
T
2.
【初级】
使用
map
不需要引入任何库()
参考答案:
T
以上所述就是小编给大家介绍的《Golang精编100题-搞定golang面试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。