go golang 笔试题 面试题 笔试 面试

python之禅 · · 1210 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

发现go的笔试题目和面试题目还都是比较少的,于是乎就打算最近总结一下。虽然都不难,但是如果没有准备猛地遇到了还是挺容易踩坑的。

就是几个简单的笔试题目,也可能面试的时候直接给看让说结果。

go面试题大本营

1, 用不同的goroutine去操作map的时候会存在线程同步的问题,把map换成int ,这个问题同样存在。在go里是这样。

2,下面这段代码输出的值为:

    func (){

    jsonStr:=[]byte(`{"age":1}`)

    var value map[string]interface{}

    json.Unmarshal(jsonStr,&value)

    age:=value["age"]

    fmt.Println(reflect.TypeOf(age))

    //float64

}

3,下边代码是否有问题,问题在哪里

    import (

    "sync"

    "fmt"

)

type UserAges struct {

    ages map[string] int

    sync.Mutex

}

func (u *UserAges)Add(name string,age int)  {

    u.Lock()

    defer u.Unlock()

    u.ages[name] = age

}

func (u *UserAges)Get(name string)int{

    if age,ok:=u.ages[name];ok{

        return age

    }

    return -1

}

问题在于,ages没有暴露背外部的包,导致调用者无法初始化ages。然后在调用add函数时,就会报错。考察函数的作用域问题。

4,下边代码的输出结果是什么?

func TestArrayAndSlice(){

    s1:=[]int{1,2,3}

    s2:=s1[1:]

    for i:=range s2{

        s2[i]+=10

    }

    fmt.Println(s2)

    s2=append(s2, 4)

    for i:=range s2{

        s2[i]+=10

    }

    fmt.Println(s2)

}

输出结果如下:这个是在考察数组和切片用s2截取s1的下边为1及之后;而后执行操作。

[12 13]

[22 23 14]

5,下边代码输出什么

func TestDoit(){

  doit:= func(arg int) interface{}{

      var result *struct{}=nil

      if (arg>0) {

          result = &struct{}{}

      }

      return result

  }

  //输出结果。

  //-1:result: <nil>    为空的匿名结构体

  //1://result: &{}    匿名结构体的地址

  if res:=doit(1);res!=nil{

      fmt.Println("result:",res)

  }

}

6,下边代码的输出结果是什么

//放在main里边

    //指定只能用一个逻辑处理器,方便看调度顺序。

    runtime.GOMAXPROCS(1)

    wg:=sync.WaitGroup{}

    wg.Add(20)

    for i:=0;i<10 ;i++  {

        go func() {

            fmt.Println("i",i)

            wg.Done()

        }()

    }

    for i:=0;i<10 ;i++  {

        go func(i int) {

            fmt.Println("j",i)

            wg.Done()

        }(i)

    }

    wg.Wait()

    /*

    j 9

    i 10

    i 10

    i 10

    i 10

    i 10

    i 10

    i 10

    i 10

    i 10

    i 10

    j 0

    j 1

    j 2

    j 3

    j 4

    j 5

    j 6

    j 7

    j 8

    */

这个要注意,第一个for里没有传参数,第二个传参数了。所以第一个for里启动的goroutine用的i其实是主线程里的i;之所以都是10,(也有可能前面几个<10);是因为调用i的时候,i在主线程内已经加到10了。而第二个for里的i是通过参数传递,所以会打印0~9;

至于为什么会先打印J,9;希望有大神来回答下。

暂时先写这么多,回头再接着加。

转载注明出处--名白

http://www.cnblogs.com/mingbai/p/go-golangCodingTest.html

go面试题大本营

---------------------

作者:喜欢安静的程序猿

来源:CSDN

原文:https://blog.csdn.net/weixin_39363245/article/details/98304854

版权声明:本文为博主原创文章,转载请附上博文链接!


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:python之禅

查看原文:go golang 笔试题 面试题 笔试 面试

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1210 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传