V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yngzij
V2EX  ›  分享发现

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

  •  
  •   yngzij · 2020-05-09 02:55:16 +08:00 · 2458 次点击
    这是一个创建于 1659 天前的主题,其中的信息可能已经有所发展或是发生改变。

    分享一下 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 条回复    2020-05-09 08:33:35 +08:00
    teawithlife
        1
    teawithlife  
       2020-05-09 08:07:09 +08:00
    现在的公司,出笔试题可以这么随意吗?感觉像作业多些哦
    第一个题目还可圈可点,第二个题目为啥规定要用 slice,mutex,不是一个 channel 的事情吗?
    第三题就是循环队列,要点就是头尾两个指针和取模操作,处理好边界条件就好了,但是这个“支持添加和删除”太不严谨了
    yngzij
        2
    yngzij  
    OP
       2020-05-09 08:28:56 +08:00
    @teawithlife #1 我当时也问了,为啥必须使用,他说为了考察基础。
    Acoolda
        3
    Acoolda  
       2020-05-09 08:30:19 +08:00 via Android
    不能好好贴一下代码吗?
    yngzij
        4
    yngzij  
    OP
       2020-05-09 08:33:35 +08:00
    @Acoolda #3 是 v2 的编辑器自己格式化了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:19 · PVG 04:19 · LAX 12:19 · JFK 15:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.