1
对从go源码和汇编源码生成可执行程序的过程,下面描述错误的是()
​A. 使用go tool compile可以将go源码编译成目标文件
B. 使用go tool asm可以将go源码编译成汇编代码
C. 使用go tool link可以将目标文件链接为可执行程序
D. 使用cgo特性时,需要使用外部C编译器来编译go代码中被调用的C代码
​B
 
 
2
关于Go语言sync/atomic包,下面说法错误的是()
​A. sync/atomic包支持的原子操作有:加法(add)、比较并交换(compare and swap),加载(load)、存储(store)、交换(swap)
B. sync/atomic包中原子操作支持的数据类型包括:int32、int64、uint32、uint64、uintptr、unsafe.Pointer、atomic.Value。
C. ```func AddInt32(addr *int32, delta int32) (new int32)```,其中delta入参为负数的话,可以实现减法操作。
D. ```func AddUint32(addr *uint32, delta uint32) (new uint32)```,由于delta是uint32类型,无法为负数,因此无法支持减法操作。
​D
 
3
关于Go语言http.Server类型的ListenAndServe方法做的事情,下面描述错误的是()
​A. 检查当前的http.Server类型的值的Addr字段。
B. 通过调用net.Listen函数在已确定的网络地址上启动基于TCP协议的监听。
C. 调用当前http.Server值的Serve方法准备接受和处理将要到来的HTTP请求。
D. 这个方法不会开启针对网络连接的存活探测机制,无法保证连接是持久的。
​D
 
 
4
下列程序中创建文件/目录,权限设置正确的是()
```go
func initAccessfile() (int, error) {
    f, err := os.OpenFile("access.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
    if err != nil {
        return 0, err
    }
    defer f.Close()
 
    return f.WriteString("Merge access record:\n")
}
 
func initLogger(dirName, fileName string) {
    if _, err := os.Stat(dirName); err != nil {
        if err = os.MkdirAll(dirName, os.ModePerm); err != nil {
            panic(err)
        }
    }
}
```
​A. initAccessfile 正确;initLogger 正确
B. initAccessfile 错误;initLogger 错误
C. initAccessfile 正确;initLogger 错误
D. initAccessfile 错误;initLogger 正确
​C
 
 
5
对于下面这段Go语言汇编代码,描述错误的是()
 
```go
"".add STEXT size=108 args=0x18 locals=0x28
 0x0000 00000 (main.go:5) TEXT "".add(SB), $40-24
 0x0000 00000 (main.go:5) MOVQ TLS, CX
 0x0009 00009 (main.go:5) MOVQ (CX)(TLS*2), CX
 0x0010 00016 (main.go:5) CMPQ SP, 16(CX)
 0x0014 00020 (main.go:5) JLS 101
 0x0016 00022 (main.go:5) SUBQ $40, SP
 0x001a 00026 (main.go:5) MOVQ BP, 32(SP)
 0x001f 00031 (main.go:5) LEAQ 32(SP), BP
 0x0024 00036 (main.go:5) PCDATA $2, $0
 0x0024 00036 (main.go:5) PCDATA $0, $0
 0x0024 00036 (main.go:5) MOVQ $0, "".~r2+64(SP)
 0x002d 00045 (main.go:6) MOVQ "".y+56(SP), AX
 0x0032 00050 (main.go:6) MOVQ AX, (SP)
 0x0036 00054 (main.go:6) MOVQ $1, 8(SP)
 0x003f 00063 (main.go:6) CALL "".sub(SB)
 0x0044 00068 (main.go:6) MOVQ 16(SP), AX
 0x0049 00073 (main.go:6) MOVQ AX, "".a+24(SP)
 0x004e 00078 (main.go:7) MOVQ "".x+48(SP), CX
 0x0053 00083 (main.go:7) ADDQ CX, AX
 0x0056 00086 (main.go:7) MOVQ AX, "".~r2+64(SP)
 0x005b 00091 (main.go:7) MOVQ 32(SP), BP
 0x0060 00096 (main.go:7) ADDQ $40, SP
 0x0064 00100 (main.go:7) RET
```
​A. ` 0x002d 00045 (main.go:6) MOVQ "".y+56(SP), AX `
表示将SP + 56这个内存地址存放的值赋值给AX寄存器。
B. ```go
 0x0032 00050 (main.go:6) MOVQ AX, (SP)
 0x0036 00054 (main.go:6) MOVQ $1, 8(SP)
 0x003f 00063 (main.go:6) CALL "".sub(SB)
```
这个表示将AX里面的值,还有常量1压入栈中,然后调用sub函数, 函数的参数是前面压入的两个值。
C. ```go
 0x0044 00068 (main.go:6) MOVQ 16(SP), AX
 0x0049 00073 (main.go:6) MOVQ AX, "".a+24(SP)
 0x004e 00078 (main.go:7) MOVQ "".x+48(SP), CX
 0x0053 00083 (main.go:7) ADDQ CX, AX
```
 
表示将SP + 16地址里面的值赋值给a,最终将a和SP + 48内存地址的x相加,结果存放在CX寄存器中。
D. ` 0x003f 00063 (main.go:6) CALL "".sub(SB)`会将下一个指令的地址压入栈中,然后调用sub函数。
C
 
 
6
下边Go语言程序中,发生逃逸的变量是()
 
```go
type S struct {
}
 
func main() {
    var v1 S
    var v2 S
    _ = *ref(&v1)
    _ = *val(v2)
}
 
func ref(v3 *S) *S {
    return v3
}
 
func val(v4 S) *S {
    return &v4
}
```
A. v1
B. v2
C. v3
D. v4
选D试试吧  之前选B错了
 
 
 
7
对于如下Go程序片段,下面描述正确的有()
```go
func map1() {
 m := make(map[int]int)
 for i := 0; i < 10; i++ {
  m[i] = i
 }
 for k := range m {
  delete(m, k)
 }
 m = nil
}
```
A. map在增加键值对时,会触发扩容
B. m的元素删除后,会释放占用的内存
C. 在for循环中遍历删除时,会引起异常
D. 在m赋值为nil时,会释放map占用的内存
AD
 
 
8
关于Goroutine调度的G-P-M模型,下面描述正确的是()
A. 每个Goroutine有自己的栈内存,切换时寄存器值会保存到栈内存中。
B. 每个M都有自己的Goroutine列表。
C. 每个Goroutine都在固定的M中执行。
D. P的数量是由GOMAXPROCS决定的。
ABD
3ms搜到的答案,存疑
 
 
 
9
对于下边Go语言代码的运行结果,下面描述正确的是()
```go
func main() {
    a := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            time.Sleep(time.Second)
            a <- i
        }
        // 1 close(a)
    }()
 
    // 2. close(a)
    for i := range a {
        fmt.Println("Value i", i)
    }
}
```
 
A. 上述程序运行后会直接退出,不输出任何内容。
B. 上述程序会依次输出Value 0~ Value 9,然后因为死锁crash
C. 在1处中调用close(a)可以使程序顺利结束,且正确输出Value 0 ~ Value 9
D. 在2处中调用close(a)可以使程序顺利结束,且正确输出Value 0 ~ Value 9
BC
 
 
10
下列选项中,可以保证initialise函数只调用一次的有()
```go
var once sync.Once
func initialise(){
    // do something to initialise the programe
}
```
 
A. ```go
func main() {
    go once.Do(initialise)
    go initialise()
}
```
 
B. ```go
func main() {
    go func() {
        once.Do(initialise)
    }()
    go initialise()
}
```
 
C. ```go
func doInit() {
    once.Do(initialise)
}
 
func main() {
    go doInit()
    doInit()
}
```
 
D. ```go
func main() {
    go once.Do(initialise)
    go func() {
        once.Do(initialise)
    }()
}
```
CD
3ms搜到的答案是CD
自测只有C可以
 
 
11
关于go test相关flag和工具的使用,以下描述正确的有()
A. 用命令go test -count N执行示例函数(Example_开头)会执行N次
B. 用命令go test -failfast 执行用例,在第一个用例失败后,不会再执行其后的用例
C. 用命令go test -count N时,如果同时用-cpu指定了cpu集合,用例会在所有协程上执行N次
D. 用命令go test -parallel 1 -p 1执行用例。
 
是BCD吧
-parallel 1 表示允许同时执行并行测试的函数数目是 1,默认是 GOMAXPROCS,-p 1 表示允许并行测试的 test binary 同时只有一个,默认是 CPU的核数。
http://3ms.huawei.com/km/blogs/details/11006795
 
 
===
 
 
12
 对于下面CPU Profile的分析结论,描述错误的是()
```go
 (pprof) top5
Showing nodes accounting for 9.60s, 41.20% of 23.30s total
Dropped 112 nodes (cum <= 0.12s)
Showing top 5 nodes out of 90
      flat  flat%   sum%        cum   cum%
     2.59s 11.12% 11.12%      2.78s 11.93%  runtime.mapaccess1_fast64 
     2.26s  9.70% 20.82%      4.97s 21.33%  runtime.scanobject 
     2.06s  8.84% 29.66%     13.79s 59.18%  main.FindLoops 
     1.39s  5.97% 35.62%      1.39s  5.97%  runtime.heapBitsForObject 
     1.30s  5.58% 41.20%      4.14s 17.77%  runtime.mapassign_fast64
```
​A. runtime.mapaccess1_fast64函数在采样时间内占用的时间最长,时间是2.59s。
B. runtime.scanobject函数和子函数调用的总时间是2.26s。
C. main.FindLoops函数的cum很高,是13.79,但是本身只占用2.06s, 可以结合web命令或者火焰图看哪个子函数占比比较高,进行相关的优化。
D. profile解析结果中5个函数总的运行时间占比是41.20%。
​B
 
13
​某开源图像解析库存在解析漏洞,NVD(National Vulnerability Database)漏洞库对该漏洞评分是攻击向量(AV)为网络(N),机密性影响(C)/完整性影响(I)/可用性影响(A)都是高(H)。某产品中集成了该开源图像库,用于解析本地的图片,且使用系统低权限用户运行该图像解析进程,针对该产品的攻击场景,CVSSv3(Common Vulnerability Scoring System)基础评分中下列哪个说法是正确的:
​A. 机密性影响(C)/完整性影响(I)/可用性影响(A)为高(H)
B. 攻击向量(AV)为网络(N)
C. 攻击向量(AV)为本地(L)
D. 只有可用性影响(A)为高(H)
​C
 
14
​有关产品Mission及韧性目标定义活动,以下理解正确的是哪个?
​A. 产品Mission来源于产品竞争力分析
B. 产品资产及其价值分析是产品韧性目标定义的输入之一
C. 产品Mission定义是产品利益相关人价值分析的重要输入
D. 产品韧性目标需要描述清晰产品需要实现的特性、功能或者目标状态,这些目标并不要求必须是可度量的
B
 
 
15
数字证书是公钥基础设施的基础,在产品的生命周期内有效做好数字证书的到期告警、替换、吊销、私钥保护等,可有效应对哪些风险?
​A. 证书过期导致业务中断
B. 证书私钥被破解、设备被仿冒风险
C. 证书公钥泄露导致身份被仿冒
D. 证书公钥被破解导致中间人攻击
​AB
 
 
16
​ 产品特性及需求落地过程中,往往会改变业务逻辑、新增接口、引入新的协议栈,可能会引入新的风险点,因此针对每个特性和需求应开展哪些措施?
​A. 以各特性设计说明书、安全设计需求(SF、SR)列表作为输入
B. 输出交付《安全性设计说明书》
C. 基于产品数据流,用于识别产品特性安全威胁,制定消减措施,减少产品脆弱点,增强产品安全性。
D. 在安全特性设计阶段完成Low Level威胁分析 。
​ACD 
 
 
17
​ 小张要实现一个文件上传接口,他需要考虑哪些安全措施:
​A. 白名单限制文件的扩展名
B. 考虑对所上传的文件名进行标准化,防止路径穿越
C. 将上传的文件保存在非敏感目录下
D. 对于上传Zip包的情况,需要先检查包里每个文件的文件路径、大小、以及文件总数
E. 使用黑名单的方式校验请求体中的Content-Type字段
F. 考虑对每个用户上传文件的数量、大小、频率进行限制
​ABCDF
 
 
===
 
18
 
 如下Add和MsgHandle函数是否符合《华为Go语言安全编程规范》要求,下面说法正确的是()
```go
func Add(stringA string, stringB string) (int, error) {
    a, _ := strconv.Atoi(stringA)
    b, _ := strconv.Atoi(stringB)
    return a + b, nil
}
 
func MsgHandle(msg interface{}) (int, error) {
    return msg.(int), nil
}
```
​A. Add符合,MsgHandle符合
B. Add符合,MsgHandle不符合
C. Add不符合,MsgHandle不符合
D. Add不符合,MsgHandle符合
C
 
 
19
CWE (Common Weakness Enumeration)中凭据管理类缺陷通常是由于凭证管理不当引起,下列哪些属于此类问题?
A. 没有定期修改口令机制
B. 弱口令
C. 使用不安全证书
D. 伪造IP地址
ABC

软件开发-客观综合(GO)的更多相关文章

  1. AOP在大规模软件开发项目中的应用(图)

    AOP在大规模软件开发项目中的应用(图) 本文的写作源于一个真实的大型软件开发项目,我们努力尝试在这个项目中推广应用AOP.在此我们将对曾经面临过的一些实际问题与困难进行分析,试图引发关于面向方面软件 ...

  2. H3C软件开发笔试面试总结

    注:我目前是陕西师范大学计算机科学学院本科生,在西安参加笔试以及面试 先是笔试,我选择的是JAVA方向,笔试选择题目主要是一些基础性的题目,然后简答题问了final.finally.finallize ...

  3. 软件开发学习笔记 <二>软件开发模型、Up、Rup、敏捷Up

    软件开发过程(process) 是一个将用户需求转化为软件系统所需要的活动的集合. 软件生命周期(SDLC,Software Devlopment Life Cycle) 软件从孕育.诞生.成长.成熟 ...

  4. R型思维模式对软件开发的影响(草稿)

    The pragmatic programmers 一直在工作之余读些书,之前主要是纯英文版的计算机相关的算法,编译器,数学等,想通过读这些书来提高自己每日工作效能,结果收效甚微.一是,因为纯英文的书 ...

  5. 敏捷软件开发 Agile software Development(转)

    原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...

  6. SaaS系列介绍之十四: SaaS软件开发分析

    1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...

  7. .NET软件开发与常用工具清单

    [工欲善其事,必先利其器]软件开发的第一步就是选择高效.智能的工具. 下面列出的工具软件能辅助提高工作效率.  开发类工具 微软.Net平台下的集成开发环境:Visual Studio. Visual ...

  8. 软件开发顶尖高手的杀手锏SQL语句

                  软件开发顶尖高手的杀手锏SQL语句                                                                     ...

  9. PSP个人软件开发系统面向对象需求分析与设计文档

    1.引言 1.1编写的目的 编写该文档的目的是,对产品进行定义,详尽说明该产品的软件需求,简述我们对 PSP个人软件开发系统的初步设想,及划分的各功能模块以及各模块的实体图和数据流图. 1.2预期的读 ...

  10. 5.15 python 面向对象的软件开发&领域模型

    1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...

随机推荐

  1. 第六篇:vue.js模板语法(,属性,指令,参数)

    Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统. 结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上.( ...

  2. 总在用户态调试 C# 程序,终还是搭了一个内核态环境

    一:背景 一直在用 WinDbg 调试用户态程序,并没有用它调试过 内核态,毕竟不是做驱动开发,也没有在分析 dump 中需要接触用内核态的需求,但未知的事情总觉得很酷,加上最近在看 <深入解析 ...

  3. 变废为宝: 使用废旧手机实现实时监控方案(RTSP/RTMP方案)

    随着手机淘汰的速度越来越快,大多数手机功能性能很强劲就不再使用了,以大牛直播SDK现有方案为例,本文探讨下,如何用废旧手机实现实时监控方案(把手机当摄像头做监控之用): 本方案需要准备一个手机作为采集 ...

  4. KingbaseES R6 集群repmgr.conf参数'recovery'测试案例(二)

    案例二:测试'recovery = automatic' 1.查看集群节点状态信息: [kingbase@node1 bin]$ ./repmgr cluster show ID | Name | R ...

  5. GIN 索引

    GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...

  6. Web开发框架『express』的基本使用 —— { }

    基本 res.send([body]) 和 res.end([data] [, encoding]) 的区别 1.参数的区别: res.send([body]): body这个参数可以是[Buffer ...

  7. 第二章:视图层 - 5:HttpRequest对象

    每当一个用户请求发送过来,Django将HTTP数据包中的相关内容,打包成为一个HttpRequest对象,并传递给每个视图函数作为第一位置参数,也就是request,供我们调用. HttpReque ...

  8. Elasticsearch 趋势科技实战分享笔记

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484113&idx=1&sn=6c40d7f ...

  9. MongoDB 分片集群的用户和权限一般操作步骤

    步骤总结: 按照mongos路由.配置副本集服务,分片副本集服务的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动每个服务 创建账号 ...

  10. 关于linux的一点好奇心(五):进程线程的创建

    一直以来,进程和线程的区别,这种问题一般会被面试官拿来考考面试者,可见这事就不太简单.简单说一点差异是,进程拥有独立的内存资源信息,而线程则共享父进程的资源信息.也就是说线程不拥有内存资源,所以对系统 ...