Golang 常见面试题

Golang 常见面试题

1.数组和切片的区别

2.map中的元素是否有序,hash冲突怎么解决

map中是无序的。解决方法

3.channel使用完需要关闭吗

可以关闭,但是没有必要

4.控制gorontime的数量由哪些

var wg *sync.WaitGroup

func work() {
    defer wg.Done()
    //do something
}

func main() {
    wg = &sync.WaitGroup{}
    for i:=0; i < 10000; i++ {
       wg.Add(1)
       go work()
    }
    wg.Wait()//等待所有goroutine退出
}
package gpool

import (
    "sync"
)

type pool struct {
    queue chan int
    wg    *sync.WaitGroup
}

func New(size int) *pool {
    if size <= 0 {
        size = 1
    }
    return &pool{
        queue: make(chan int, size),
        wg:    &sync.WaitGroup{},
    }
}

func (p *pool) Add(delta int) {
    for i := 0; i < delta; i++ {
        p.queue <- 1
    }
    for i := 0; i > delta; i-- {
        <-p.queue
    }
    p.wg.Add(delta)
}

func (p *pool) Done() {
    <-p.queue
    p.wg.Done()
}

func (p *pool) Wait() {
    p.wg.Wait()
}

5.context是什么

6.如何优雅的退出携程

7.垃圾回收算法

8.MPG模型

9.进程,线程,携程

10.通过参数传递切片,是值传递还是引用传递。被传递参数的方法一定会修改切片元素吗?


  Reprint please specify: KYLE LIU Golang 常见面试题

  TOC