zoukankan      html  css  js  c++  java
  • 100道GO笔试_答案&解析&扩展_选择题11-20

    说明:

    注释:
    本文中出现的所有题目均来自于网络
    本人只是对其进行解答和注释
    所有题目均为个人解答方案,如有纰漏或更好的解答欢迎指正
    如果有需要更详细解答的题目也可以留言

    1. 关于局部变量的初始化,下面正确的使用方式是:
      A. var i int = 10
      B. var i = 10
      C. i := 10
      D. i = 10

    [答案]:ABC
    [解析&扩展]:
    这题类似于第一题,于全局变量不同的是,局部变量可以使用:=自动推导的方式,而全局变量不可以,必须使用var关键字。因此ABC均正确。D既没有使用:=自动推导类型,也没有使用var关键字声明。

    1. 关于 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
    [解析&扩展]:
    A: 正常的常量申明,正确--const在声明并初始化的时候可以不需要指定数据类型,因此正确。
    B: var和const都可以使用小括号来声明多个变量/常量,这样可以免去在每一个变量前面都需要使用关键字声明。因此B正确。
    C:无法把一个错误信息转化为const,因此C错误。
    D:const于var都可以使用平行赋值的方式初始化,因此D正确。

    1. 关于布尔变量 b 的赋值,下面错误的用法是:
      A. b = true
      B. b = 1
      C. b = bool(1)
      D. b = (1 == 2)

    [答案]:BC
    [解析&扩展]:
    A,D是对布尔变量的赋值,因此正确。(判断两个数是否相等会产生一个布尔值)
    B是无法将int转化为bool--golang不支持隐式转化。
    C则是使用了go中不存在的语法,因此错误。

    1. 下面的程序可能的运行结果是:
    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
    [解析&扩展]:
    defer的执行机制是先进后出--即在代码中优先到达的defer语句,反而会后被执行。但是defer是在整个函数调用结束,之后才执行(但是会在return之前)所以:
    main函数优先被执行完成,所以会输出3,由于if语句的判断条件恒为true,所以只有第一个defer语句会被执行,第二个并不会,所以会输出1,并且在main函数的输出语句之后,因此,会输出31。
    PS: 这一类问题可以在编译器中加断点然后单步执行,查看程序执行顺序。

    1. 关于 switch 语句,下面说法正确的有:
      A. 条件表达式必须为常量或者整数
      B. 单个 case 中,可以出现多个结果选项
      C. 需要用 break 来明确退出一个 case
      D. 只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case

    [答案]:BD
    [解析&扩展]:
    A: 最简单的反驳,字符也是可以的,因此A错误。
    B: 一个case可以有多个触发条件,避免了代码的冗余,因此B正确。
    C: GO中每一个case执行完成之后会默认结束此case,并不用break,因此错误。
    D: 每一个case执行结束后都会默认结束switch语句,除非有fallthrough关键字,才会接着执行后面的case,因此D正确。

    1. golang 中没有隐藏的 this 指针,这句话的含义是:
      A. 方法施加的对象显式传递,没有被隐藏起来
      B. golang 沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数
      C. golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
      D. 方法施加的对象不需要非得是指针,也不用非得叫 this

    [答案]:ACD
    [解析&扩展]:
    A:如java,C++会在类的内部实现中使用this关键字表示调用该方法的对象,但是在golang中方法有明确的接收者(写在func关键字和函数名之间),因此并不需要使用this关键字。所以A正确。
    B: golang并没有提供继承,只是通过结构体嵌套变相的实现了继承,至于虚函数那是C++中的概念,golang中并未提及,因此B错误。
    C:虽然golang是面向接口(interface)编程,但是也可以实现面向对象,因为结构体在golang中的灵活,所以也变得更加直观,因此C正确。
    D: 非指针结构体也可以调用其方法,所以D正确。

    1. golang 中的引用类型包括:
      A. 数组切片
      B. map
      C. channel
      D. interface

    [答案]:ABCD
    [解析&扩展]:
    就和人类包括日本人一样,没有理由,因为golagn在设计最初就是把他们设计成引用类型的。

    1. golang 中的指针运算包括:
      A. 可以对指针进行自增或自减运算
      B. 可以通过 & 取指针的地址
      C. 可以通过 * 取指针指向的数据
      D. 可以对指针进行下标运算

    [答案]:BC
    [解析&扩展]:
    B,C是指针的两个操作方式,即取地址和解引用,因此正确。
    A,D都是对指针的非法操作--可能导致内存泄漏。因此错误。

    1. 关于 main 函数(可执行程序的执行起点),下面说法正确的是:
      A. main 函数不能带参数
      B. main 函数不能定义返回值
      C. main 函数所在的包必须为 main 包
      D. main 函数中可以使用 flag 包来获取和解析命令行参数

    [答案]:ABCD
    [解析&扩展]:
    同17,因为就是这样设计的,想要知道为什么,只有问golang最初的设计者。

    1. 下面赋值正确的是:
      A. var x = nil
      B. var x interface{} = nil
      C. var x string = nil
      D. var x error = nil

    [答案]:BD
    [解析&扩展]:
    A: nil不能直接付给一个未初始化的变量,因此错误。
    B:空接口可以接受任何参数,包括nil,因此正确。
    C:同A。
    D:error类型可以为nil--最常见的如各种函数的返回值中,第二个返回值往往就是bool或者error,在调用完之后需要判断error是否为nil。因此D正确。

  • 相关阅读:
    Git版本控制+配置中心(Spring Cloud Config)(八)
    NodeJS+Sidecar异构系统+Zuul(七)
    API网关Zuul(六)
    Hystrix断路器(五)
    Feign配合Ribbon和Eureka来提供负载均衡的HTTP客户端(四)
    负载均衡Ribbon(三)
    Eureka注册中心(二)
    SpringCloud介绍(一)
    Swift基础小结_2
    谓词(搜索)
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/14664959.html
Copyright © 2011-2022 走看看