分享一次 golang 的面试题,最后一题求解答
資深大佬 : yngzij 6
分享一下 Golang 面试的笔试题目,前两题自己写的答案在后面,第三题没有解答出来。
检测一个函数,当它在 3 秒内还没有完成就打印错误。
使用 slice,mutex,channel,goroute 编写输出 100 次的随机数的缓冲队列。
编写可以扩容收缩的循环数组,支持添加和删除。(求解答)
package main import ( "log" "time" )func main() {sig := make(chan interface{}) go func() {getResult() sig <- struct{}{} }() for { select { case <-sig: log.Println("ok") case <-time.After(time.Second * 3): log.Println("error") } break } } func getResult() {time.Sleep(time.Second * 2) }
package main import ( "log" "math/rand" "sync" "time" ) var mutex sync.Mutex var list []int func main() {sig := make(chan interface{}, 100) for i := 0; i < 100; i++ {go insert(sig) } for i := 0; i < 100; i++ {<-sig} for i, v := range list {log.Println(i+1, v) } } func insert(sig chan interface{}) {mutex.Lock() r := rand.New(rand.NewSource(time.Now().UnixNano()))n := r.Intn(100) list = append(list, n) mutex.Unlock()sig <- struct{}{}}
大佬有話說 (4)