分享一次 golang 的面试题,最后一题求解答

2020-05-09 02:55:16 +08:00
 yngzij

分享一下 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{}{}}

2480 次点击
所在节点    分享发现
4 条回复
teawithlife
2020-05-09 08:07:09 +08:00
现在的公司,出笔试题可以这么随意吗?感觉像作业多些哦
第一个题目还可圈可点,第二个题目为啥规定要用 slice,mutex,不是一个 channel 的事情吗?
第三题就是循环队列,要点就是头尾两个指针和取模操作,处理好边界条件就好了,但是这个“支持添加和删除”太不严谨了
yngzij
2020-05-09 08:28:56 +08:00
@teawithlife #1 我当时也问了,为啥必须使用,他说为了考察基础。
Acoolda
2020-05-09 08:30:19 +08:00
不能好好贴一下代码吗?
yngzij
2020-05-09 08:33:35 +08:00
@Acoolda #3 是 v2 的编辑器自己格式化了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX