- 专业级新增
- 题库
- 【第3题】 下边常量名中,符合《华为Go语言通用编程规范》要求的是(B)
- 【第6题】 如下Go程序的输出结果是(D)
- 【第7题】 如下关于Go语言测试覆盖率的描述中,错误的是(B)
- 【第21题】 下面关于Go语言map的说法,符合《华为Go语言安全编程规范》的是(C)
- 【第27题】 下面程序中能够确定地输出”Go Goroutine!”的是(D)
- 【第35题】 关于可变参数的使用,下列Go语言代码的输出是(B)
- 【第38题】 对于下面Go语言程序的输出,描述正确的是(A)
- 【第41题】 有关Go语言常用的格式化输出,描述错误的是(C)
- 【第42题】 关于Go语言互斥锁,下面说法错误的有(B)
- 【第43题】 关于Go的os包中的文件访问模式,下面说法错误的是(B)
- 【第44题】 关于Go语言 net.Dial的使用,下面错误的是( B)
- 【第51题】 关于静态代码分析工具的技术,下面描述正确的是(AD)
- 【第54题】 对于在两个包之间进行结构体类型的代码拷贝,符合Go语言官方《Go Code Review Comments》说法是(BD)
- 【第55题】 关于Go语言的接口,下列说法符合Go语言惯例的是(AC)
- 【第57题】 有关go指针和c指针之间的传递,下列说法正确的是()
- 【第58题】 关于使用cgo的优缺点,下面说法正确的是(ABDEF)
- 关于go vender,下面说明错误的是(C)
- Go 1.12版本可以不能发布golang源码,可以发布Binary Only (BCD)
- go程序异常设计符合正确的是
- 关于Go变量的使用,以下代码编译错误的是哪个?(B)
- go语言环境安装正确的是(CD):
- 检测go语言程序中数据竞争
- 如果要观测gc相关的信息,下面()可以收集相关信息(ACD)
- 在目录/opt/png中存放了png.h和libpng.so两个文件,现在要在go代码中调用动态库libpng.so中的函数,下面正确的调用方式是(D)
- 垃圾回收结束后,标记情况正确的是(B)
- 有序的双向链表,存储一个支持增删改三个功能的键值系统,这三个功能中有几个功能能做到时间复杂度为O(1) ?
- 以下关于开源软件patch管理说法不正确的是(B)
- 下面正确地描述了SaaS和SOA的是(D)
- 关于开源软件生命周期管理原则如下,选项描述正确的是(C)
- 关于开源软件使用下列说法错误的是(ABC)
专业级新增
如下go程序的输出结果是()
func main() {
var data *byte
var in interface{}
fmt.Println(data==nil)
fmt.Println(in==nil)
in = data
fmt.Println(in==nil)
}
true true false
内嵌类型的同名方法,会优先调用哪个?
题库
【第3题】 下边常量名中,符合《华为Go语言通用编程规范》要求的是(B)
【分析】: golang常量命名规范,MixedCaps(首字母大写驼峰) 或 mixedCaps(首字母小写驼峰) 。 【考点】:3.2 通用规范理解与应用(Go) 【选项】: A. g_TotalNum B. TotalNum C. gTotalNum D. Total_Num
【第6题】 如下Go程序的输出结果是(D)
func main() {
s := []int{1, 2}
s2 := s
s2 = append(s2, 3)
sliceAddOne(s)
sliceAddOne(s2)
fmt.Println(s, s2)
}
func sliceAddOne(s []int) {
s = append(s, 0)
for i := range s {
s[i]++
}
}
【分析】: slice参数传递及扩容 【考点】:3.1 编程语言能力(Go) 【选项】: A. [1 2] [1 2 3] B. [2 3 1] [2 3 4 1] C. [2 3] [2 3 4] D. [1 2] [2 3 4]
【第7题】 如下关于Go语言测试覆盖率的描述中,错误的是(B)
【分析】: 测试覆盖率的使用,B选项只能输出覆盖率的总体情况信息 【考点】:3.1 编程语言能力(Go) 【选项】: A. 覆盖率的统计模式有set,count,atomic三种 B. go tool cover -func=coverage.data能输出函数中每个语句的测试覆盖情况 C. 可以先在go test中增加-coverprofile选项输出coverage profile,再使用go tool cover工具分析具体每个函数的覆盖率 D. 在go test中打开-cover, -covermode, -coverpkg, -coverprofile中的任一选项,就可打开测试覆盖率功能
【第21题】 下面关于Go语言map的说法,符合《华为Go语言安全编程规范》的是(C)
【分析】: None 【考点】:3.3 安全规范理解与应用(Go) 【选项】: A. 并发写需要用锁,并发读不需要用锁 B. map并发访问导致的错误不影响程序运行,可以直接忽略 C. 包内使用的map变量,如果只在init函数中修改,那么包内其他地方的读不需要用锁 D. 访问是并发安全的
【第27题】 下面程序中能够确定地输出”Go Goroutine!”的是(D)
【分析】: time.Sleep()暂停goroutine,runtime.Gosched()可以让其他goroutine有机会被执行,当前Goroutine仍有可能会继续执行,在main函数返回前,新的goroutine可能没有机会执行。 runtime.Goexit()会终止当前的goroutine但不影响其他goroutine,直到在所有其他goroutine退出后,程序才异常退出。 【考点】:3.1 编程语言能力(Go) 【选项】: A.
func main() {
go func() {
fmt.Println("Go Goroutine!")
}()
runtime.Gosched()
}
B.
func main() {
go func() {
fmt.Println("Go Goroutine!")
}()
}
C.
func main() {
go func() {
fmt.Println("Go Goroutine!")
}()
time.Sleep(time.Microsecond)
}
D.
func main() {
go func() {
fmt.Println("Go Goroutine!")
}()
runtime.Goexit()
}
【第35题】 关于可变参数的使用,下列Go语言代码的输出是(B)
func main() {
var a = []interface{}{123, "abc"} // interface{}是类型
Print(a...)
Print(a)
}
func Print(a ...interface{}) {
fmt.Println(a...)
}
【分析】: 对于interface{}类型变长参数的解包。参数后面跟着 “…” 意味着解包,因此fmt.Println打印时候会按照两个不同的参数分别打印。不加上 ”…“ 则参数作为一个单一的slice传入,fmt.Println按照slice打印。 【考点】:3.1 编程语言能力(Go) 【选项】: A.
[123 abc]
[123 abc]
B.
123 abc
[123 abc]
C.
123 abc
123 abc
D.
[123 abc]
123 abc
【第38题】 对于下面Go语言程序的输出,描述正确的是(A)
func main() {
tagsViews := map[string]int{
"unix": 0,
"python": 1,
"go": 2,
"golang": 3,
"devops": 4,
"gc": 5,
}
for key, views := range tagsViews {
fmt.Println("There are", views, "views for", key)
}
}
【分析】: map类型的遍历是随机的。 【考点】:3.1 编程语言能力(Go) 【选项】: A. 输出的顺序随机排列 B. 输出会根据map的value进行排序 C. 输出会根据map的key进行排序 D. 输出的顺序取决于在代码中添加的先后顺序
【第41题】 有关Go语言常用的格式化输出,描述错误的是(C)
【分析】: 输出类型的是%T,小写的%t输出true/false。 【考点】:3.1 编程语言能力(Go) 【选项】: A. %#v 打印结构体时候可以带着结构体定义,如果结构体实现了GoStringer接口,则会调用该接口。 B. %+v 打印结构体时,可以带上属性名称,更易读。 C. %t 可以输出一个值的类型 D. %v 可以按照一个值的默认打印形式输出
【第42题】 关于Go语言互斥锁,下面说法错误的有(B)
【分析】: 不能直接传递互斥锁 【考点】:3.1 编程语言能力(Go) 【选项】: A. 不要忘记解锁互斥锁,必要时使用defer语句。 B. 在多个函数之间将互斥锁作为参数传递时,可以使用指针,也可以使用值。 C. 不要重复锁定互斥锁。 D. 不要对尚未锁定或者已解锁的互斥锁解锁。
【第43题】 关于Go的os包中的文件访问模式,下面说法错误的是(B)
【分析】: 选项B:由于历史原因,O_RDONLY | O_WRONLY 并非等于 O_RDWR,它们的值一般是 0、1、2。 【考点】:3.1 编程语言能力(Go) 【选项】: A. O_TRUNC:如果可能,打开时清空文件。 B. 可以使用O_RDONLY|O_WRONLY 替换O_RDWR C. O_CREATE:如果不存在将创建一个新文件。 D. O_APPEND:写操作时将数据附加到文件尾部。
【第44题】 关于Go语言 net.Dial的使用,下面错误的是( B)
【分析】: For TCP and UDP networks, the address has the form “host:port”.
【考点】:3.1 编程语言能力(Go)
【选项】:
A. net.Dial("tcp", "10.1.1.78:80")
B. net.Dial("tcp", "https://www.baidu.com")
C. net.Dial("udp", "[fe80::db8]:53")
D. net.Dial("tcp", "google.com:http")
【第51题】 关于静态代码分析工具的技术,下面描述正确的是(AD)
【分析】: 静态代码分析工具基本原理 【考点】:3.3 安全规范理解与应用(Go) 【选项】: A. 控制流分析对表达式或变量的取值范围不敏感。 B. 污点分析无需定义外部输入函数。 C. 控制流可以用于发现内存双重释放问题。 D. 污点分析可用来发现注入类的漏洞。
【第54题】 对于在两个包之间进行结构体类型的代码拷贝,符合Go语言官方《Go Code Review Comments》说法是(BD)
【分析】: “CodeReviewComments”:Copying 【考点】:3.2 通用规范理解与应用(Go) 【选项】: A. 从另一个包复制结构体定义的风险在于可能出现结构体类型重名。 B. 从另一个包复制结构体定义的风险在于其字段类型可能为别名,与当前包的类型体系冲突。 C. 对于导出的结构体,可直接拷贝结构体定义及其方法实现。 D. 对于非导出的结构体,可直接拷贝结构体定义及其方法实现。
【第55题】 关于Go语言的接口,下列说法符合Go语言惯例的是(AC)
【分析】: CodeReviewComments,effective go中关于接口的建议 【考点】:3.2 通用规范理解与应用(Go) 【选项】: A. 应该从使用者的角度定义接口 B. 在没有使用者之前不要定义接口:如果没有实际的使用者,就很难看到接口是否是必要的。 C. 对于功能模块抽象模块接口,通过interface提供对外功能。 D. 应该从实现者的角度定义接口
【第57题】 有关go指针和c指针之间的传递,下列说法正确的是()
【分析】: None 【考点】:3.1 编程语言能力(Go) 【选项】: A. C代码中可以针对传入的go指针进行任意的操作运算 B. go指针是指向Go代码分配的内存的指针,c指针是指向C代码分配的内存的指针 C. cgo指针传递规则在运行时检查,可以通过GODEBUG=cgocheck=0关闭 D. 可以将go指针传递到C代码中,前提是它所指向的内存不包含任何其他go指针
【第58题】 关于使用cgo的优缺点,下面说法正确的是(ABDEF)
【分析】: 基本上go开发中,能不用cgo就不用。除非需要的功能只有c实现而且重构代价很高,才选择使用。 【考点】:3.1 编程语言能力(Go) 【选项】: A. 使用cgo会使得编译构建变得复杂,尤其在涉及交叉编译的时候 B. cgo往往使得构建出的可执行程序包含动态链接库,增加了部署难度 C. c语言运行效率要高于go语言,因此能用cgo就尽量使用cgo D. 代码中使用cgo会导致go语言的构建速度变慢 E. cgo使得go程序的内存管理变得复杂而且不安全 F. go所提供的一系列工具,例如race decector, pprof等,无法检查cgo代码
关于go vender,下面说明错误的是(C)
【分析】:go vender无法精确的引用外部包进行版本控制,不能指定引用某个特定版本的外部包;只是在开发时,将其拷贝过来,但是一旦外部包升级,vendor下的代码不会跟着升级, 而且vendor下面并没有元文件记录引用包的版本信息,这个引用外部包升级产生很大的问题,无法评估升级带来的风险;
将源码拷贝到当前工程的vendor目录下,这样打包当前的工程代码到任意机器的$GOPATH/src下都可以通过编译,避免项目代码外部依赖过多,或迁移后需要多次go get 外包依赖包;而且通过go get 重新拉去的外部依赖包的版本可能和工程开发时使用的不一致,导致编译错误问题。
A go vendor的基本思路是将引用的外部包的源码放在当前工程的vendor目录下 B 编译go代码会优先从vendor目录先寻找依赖包 C 可以指定引用某个特定版本的外部包 D 有了vendor目录后,大包当前的工程代码到其他机器的GOPATH/src下也可以通过编译
Go 1.12版本可以不能发布golang源码,可以发布Binary Only (BCD)
1.只发布静态库 2.发布STUB发件, 3.发布STUB发件, 4.编译器版本一致
go程序异常设计符合正确的是
【分析】:尝试恢复合理处理
1.异常,直接panic 2.异常后尝试恢复 3.全异常,简化逻辑 4,第三方不处理异常,直接返回上层调用者
链接:https://www.nowcoder.com/questionTerminal/05031b1c496b4ff79bf85eed75f7ae25 来源:牛客网
关于Go变量的使用,以下代码编译错误的是哪个?(B)
【分析】:f作用域只在if里
-
var b,f,s=true, 2.3, "four" fmt.Printf("%v, %v, %v\n", b, f, s)
-
if f, err := os.Open("test.png"); err != nil { return } f.Close()
-
func delta(old, new int) int { return new - old }
-
medals := []string{"gold", "sliver", "bronze"} fmt.Printf("nedals: %v\n", medals)
go语言环境安装正确的是(CD):
1.环境变量仅配置GOPATH变量 // 还需要GOROOT 2.除安装go编译器外,必须安装gotest工具链 // gotest在go中自带 3.除安装go编译器外,还必须设置环境变量以及创建工具空间 // 工具空间即workspace,GOPATH的值 4.go编译器安装采用源码编译包或者二进制包
检测go语言程序中数据竞争
go run -race
如果要观测gc相关的信息,下面()可以收集相关信息(ACD)
【分析】:Stack函数用于查看运行时的调用栈
go tool trace可以将GC统计信息以可视化的方式展现出来。
在目录/opt/png中存放了png.h和libpng.so两个文件,现在要在go代码中调用动态库libpng.so中的函数,下面正确的调用方式是(D)
垃圾回收结束后,标记情况正确的是(B)
有序的双向链表,存储一个支持增删改三个功能的键值系统,这三个功能中有几个功能能做到时间复杂度为O(1) ?
【解析】:有序,所以增删改都需要找位置,所以是O(n),故有0个功能
以下关于开源软件patch管理说法不正确的是(B)
华为修改开源软件的patch代码量,必须严格控制修改代码,建议不超过5%
开源社区发布的补丁要和自研修补的补丁做成一个patch,进行统一管理
基于开源软件修改自研,patch中可以包含开源权利人声明
原则上为区分次言和开源代码,确保使用和修改可追溯,开源修改的patch文件,需要独立存放管理
下面正确地描述了SaaS和SOA的是(D)
【解析】:SaaS:Software as a Service,“按需即用软件”(即“一经要求,即可使用”),是一种软件交付模式。在这种交付模式中,软件仅需通过网络,不须经过传统的安裝步骤即可使用,软件及其相关的数据集中托管于云端服务。
SOA:Service-Oriented Architecture,面向服务的架构。
A. SaaS和SOA本质都是基于服务的思想,只是说法不同
B. SaaS必须以SOA技术为基础
C. SaaS环境下考虑可伸缩模型时,我们一般采用增强扩展,SOA技术能很好地支持增强扩展
D. SaaS是向用户交付应用功能的方法,而SOA是应用系统的一种设计技术
关于开源软件生命周期管理原则如下,选项描述正确的是(C)
【解析】:EOM(end of marketing)产品生命周期
原则上,开源软件的生命周期信息不向客户、渠道和合作伙伴发布。原则上,开源软件的生命周期信息不向客户、渠道和合作伙伴发布。
原则上需保证同一时间同一个开源软件只有一个可配套版本,最多2个可配套版本。
a原则上开源软件的生命周期,应该向客户渠道和合作伙伴发布
b同一时间,同一个开源软件,尽可能提供多个可配套产品选型使用的版本
c产品选择配套的开源软件版本,eom时间不早于产品软件版本的tr 5过点时间
d产品只应关注直接选用的开源软件,对于产品配套的平台中使用的开源软件,不需要关注,由平台的开发团队负责开源软件生命周期配套和归一化
关于开源软件使用下列说法错误的是(ABC)
a产品A自研开发且对外开源xxcomb软件,并捐献到apache基金会,成为项目顶级项目产品币使用社区xxcomn应认定xxcomb软件为自研软件
b某产品开发一款仅给内部一线行销员工使用的APP,并上架华为手机应用市场开放下载(但必须华为员工账号产能登录使用),该AAPP通过静态编译方式使用了一款AGPL开源软件,由于只是内部一线行销员工才能登录使用,可以不需要履行开源义务
c某员工在业余时间以个人名义在github开源了x项目,该员工在公司办公环境下载该x项目代码集成产品a中使用,产品a不需要履行开源义务
d公有云服务产品a通过静态链接的方式集成使用了license为GPL v2.0的开源软件服务产品a可以不履行代码开源义务