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. KingbaseES V8R6 锁等待检测

    背景 对于多数数据库,dba技能之一就是查找锁.锁的存在有效合理的在多并发场景下保证业务有序进行.下面我们看一下KingbaseESV8R6中查找阻塞的方法. 1.找到"被阻塞者" ...

  2. flink-cdc同步mysql数据到kafka

    本文首发于我的个人博客网站 等待下一个秋-Flink 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的 ...

  3. C#,使用NPOI,导出excel文件

    /// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...

  4. 后端程序员实现一个IP归属地的小程序

    在日常开发中,后端主要提供数据以及处理业务逻辑,前端主要提供页面布局以及数据展示.后端程序员对于页面布局接触比较少,但是小程序有完善的文档说明.页面布局也相对简单,实现起来相对简单一些.而且小程序相对 ...

  5. 使用docker-compose运行nginx容器挂载时遇到的文件/目录问题

    单独使用docker run命令指定挂载文件路径运行nginx容器是可以的,但是用在docker-compose中就不行了 报错如下: 原因就是挂载出错,不能直接挂载文件,还有挂载的容器里的目录要正确 ...

  6. 10.使用nexus3配置golang私有仓库

    1,前言说明 golang是近来非常火热的语言,但是处理其依赖包一直都是一个让人头疼的问题,尤其是在国内,开发者需要下载一些官方的包的时候,就会非常苦恼.尽管已经有了私服 Athens,公司也已经搭建 ...

  7. 20. 使用Fluentd发送告警邮件

    告警是预防系统故障的一个重要工具,目前已经有许多成熟的方案通过监控系统运行指标来进行阈值预警.今天简单了解一下如何使用Fluentd实现邮件告警功能. Fluentd的告警是基于日志分析实现的,通过监 ...

  8. SQLyog企业版

    一.下载与安装 1.SQLyog的下载 链接:https://www.aliyundrive.com/s/11ZuFqB1z4E提取码:63fu 2.SQLyog的安装 双击下载程序,可以选择默认安装 ...

  9. 手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集(含源码)

    目录 前言 一.工具包位置 二.图像采集与色彩空间转换 1.文件读写 2.实现图片读取 3.使用算子cvtColor实现颜色空间转换 三.从摄像头采集图像 1.Camera类 2.属性节点 3.实现摄 ...

  10. SpringBoot入门项目CRM学习过程中的报错记录(更新ing)

    在用mybatis自动生成实体类和mapper时报错..... is unrecognized or represents more than one time zone. You must conf ...