golang 后端一面

面试官很和善,态度很好

首先会问一下你的最近工作的项目,简单谈一谈架构,项目实现,最后说他们其实比较关注访客量,因为本身公司是做信息安全方面的
接下来是硬问题:
1.有缓冲和无缓冲的channel有什么区别?
比如说c1:=make(chan int )
c2:=make(chan int ,2)
当向c1中写完后,必须从c1中读了这个数之后才会继续执行向管道中写数的操作
而c2不同向c2中写一个数之后,即便没有从c2中取数,也不会影响继续向c2中写,只有当缓冲区别写满了之后,写端才会堵塞,同样,只有缓冲区没有数据了之后,读端才会阻塞

注意:向已经关闭的channel中写入数据会导致panic
从已经关闭的无缓冲的channel或者缓冲区已经被读取完毕的channel中读取数据会读到对应数据类型的初始值
从已经关闭的但缓冲区还没被读取完毕的channel中读取数据可以继续读到值
2.手写代码
1:交替打印ping pang
开俩个goroutine 交替打印,代码如下:
func main() {
a:=make(chan bool)
b:=make(chan bool)
wg:=sync.WaitGroup{}
go func() {
for {
select {
case<-a:
fmt.Println(“ping”)
b<-true

		}

	}
}()
wg.Add(1)
go func() {
	for  {
		select {
				case<-b:
					fmt.Println("pang")
					a<-true
		}

	}
}()
wg.Add(1)
a<-true
wg.Wait()

2.给一个整型数组和一个sum值,求数组中的加起来等于sum值的俩个数字的下标(leetcode)
用map去存值和判断即可
func ReturnIndex(a []int,sum int) []int{
map1:=make(map[int]int)
for i:=0;i<len(a);i++{
if value,ok:=map1[sum-a[i]];ok{
return []int{i,value}

	}
	map1[a[i]]=i

}
return nil

}

3.第三题 一个数组按时间顺序存储一段时间内股票的所有价格,问怎么买卖才能获得最大利润(没有写出来,只能想到一些O(n^2))的方法。。。当时没想到可以多次买卖,其实这道题非常简单,就是循环便利一下,前后俩天能获利的话就加到利润里面,不能的话就继续下移,因为脑子短路了当时,没写出来
func ReturnIndex(a []int) int{
sum:=0
for key,value:=range a{
if key>=1&&a[key-1]-value<=0{
sum+=value-a[key-1]
}
}
return sum
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值