这些是我最近整理的面试题,难度不分先后,其实也算不上面试题,都是开发过程中遇到的坑,之前发布的几道面试题,本来是想公布答案的,但是想了想如果公布了就没什么意思了

1 写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出(什么手写代码??? )

package main

func main() {
    go func() {
        // 1 在这里需要你写算法
        // 2 要求每秒钟调用一次proc函数
        // 3 要求程序不能退出
    }()

    select {}
}

func proc() {
    panic("ok")
}

2 为sync.WaitGroup中Wait函数支持WaitTimeout功能( )

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    wg := sync.WaitGroup{}
    c := make(chan struct{})
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(num int, close <-chan struct{}) {
            defer wg.Done()
            <-close
            fmt.Println(num)
        }(i, c)
    }

    if WaitTimeout(&wg, time.Second*5) {
        close(c)
        fmt.Println("timeout exit")
    }
    time.Sleep(time.Second * 10)
}

func WaitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {
    // 要求手写代码
    // 要求sync.WaitGroup支持timeout功能
    // 如果timeout到了超时时间返回true
    // 如果WaitGroup自然结束返回false
}

3 写出以下代码出现的问题

package main
import (
    "fmt"
)
func main() {
    var x string = nil
    if x == nil {
        x = "default"
    }
    fmt.Println(x)
}

4 写出以下打印内容

package main
import (
    "fmt"
)
const (
    a = iota
    b = iota
)
const (
    name = "menglu"
    c    = iota
    d    = iota
)
func main() {
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
}

5 这道题是上次面试题的第10题,我曾经写过类似的bug所以。。。,说明以下代码资源泄露的原因

type query func(string) string

func exec(name string, vs ...query) string {
    ch := make(chan string)
    fn := func(i int) {
        ch <- vs[i](name)
    }
    for i, _ := range vs {
        go fn(i)
    }
    return <-ch
}

func main() {
    ret := exec("111", func(n string) string {
        return n + "func1"
    }, func(n string) string {
        return n + "func2"
    }, func(n string) string {
        return n + "func3"
    }, func(n string) string {
        return n + "func4"
    })
    fmt.Println(ret)
}

6 写出以下代码输出内容

package main
import (
    "encoding/json"
    "fmt"
)
type Girl struct {
    Name       string `json:"name"`
    DressColor string `json:"dress_color"`
}
func (g Girl) SetColor(color string) {
    g.DressColor = color
}
func (g Girl) JSON() string {
    data, _ := json.Marshal(&g)
    return string(data)
}
func main() {
    g := Girl{Name: "menglu"}
    g.SetColor("white")
    fmt.Println(g.JSON())
}

7 写出以下打印结果,并解释下为什么这么打印的。

package main
import (
    "fmt"
)
func main() {
    str1 := []string{"a", "b", "c"}
    str2 := str1[1:]
    str2[1] = "new"
    fmt.Println(str1)
    str2 = append(str2, "z", "x", "y")
    fmt.Println(str1)
}

8 写出以下打印结果

package main

import (
    "fmt"
)

type Student struct {
    Name string
}

func main() {
    fmt.Println(&Student{Name: "menglu"} == &Student{Name: "menglu"})
    fmt.Println(Student{Name: "menglu"} == Student{Name: "menglu"})
}

9 写出以下代码的问题

package main

import (
    "fmt"
)

func main() {
    fmt.Println([...]string{"1"} == [...]string{"1"})
    fmt.Println([]string{"1"} == []string{"1"})
}

10 下面代码写法有什么问题?

package main
import (
    "fmt"
)
type Stduent struct {
    Age int
}
func main() {
    kv := map[string]Stduent{"menglu": {Age: 21}}
    kv["menglu"].Age = 22
    s := []Stduent{{Age: 21}}
    s[0].Age = 22
    fmt.Println(kv, s)
}

今天的分享就到这里,感谢大家的反馈和建议,如果希望看到更多这样的内容,请关注我吧,同时我做一个小广告,我司最近招聘golang高级开发工程师,有想找工作的小伙伴可以发简历到我的邮箱noawayer@gmail.com,我们造数科技专注于金融大数据方向,造数团队具备来自IBM 阿里巴巴 Intel Goldman Sachs 及Morgan Stanley等企业专业人才,golang工程师了解一下?