面试之滴滴
admin
2024-02-12 10:24:56

滴滴1面

Go

1.语法题

func fun() {s1 := [3]int{1, 2, 3}s2 := [3]int{1, 2, 3}b := (s1 == s2) // 能不能执行成功,如果能结果是什么fmt.Print(b)	// 答:可以比较返回false,原因数组的长度固定,可以每个元素比较ss1 := []int{1, 2, 3}ss2 := []int{1, 2, 3}b = (ss1 == ss2) // 能不能执行成功,如果能结果是什么fmt.Print(b)	// 答:不可以比较,原因切片长度不固定,无法比较var m1 map[string]intm1["one"] = 1	m2 := make(map[string]int)m2["one"] = 2b = (m1 == m2) // 能不能执行成功,如果能结果是什么fmt.Print(b)	// 答:会panic,m1是空指针。且map不能比较,原因map的hash结构不一样,是无序的m3 := make(map[string]int)m3["one"] = 1m3["two"] = 2m3["three"] = 3for key, _ := range m3 {fmt.Print(key) // 输出结果是什么// 随机输出,因为map无须}for key, _ := range m3 {fmt.Print(key) // 结果会跟上面一样吗// 不一样,遍历map是无序}for key, _ := range m3 {fmt.Print(key) // 结果会跟上面一样吗// 不一样,遍历map是无序}
}

2.go的协程调度机制

基于CSP并发模型开发了GMP调度器,其中

  • G(Goroutine) : 每个 Goroutine 对应一个 G 结构体,G 存储 Goroutine 的运行堆栈、状态以及任务函数
  • M(Machine): 对OS内核级线程的封装,数量对应真实的CPU数(真正干活的对象).
  • P (Processor): 逻辑处理器,即为G和M的调度对象,用来调度G和M之间的关联关系,其数量可通过 GOMAXPROCS()来设置,默认为核心数。

P和M是1:1关系,但是会存在M>=P的情况

G的创建会优先保存到P的本地队列上,如果P的本地队列已满则扔到全局队列。当一个G要执行时,则M上运行的goroutine切换为G0,G0负责调度时协程的切换,会优先从P的本地队列取到G,如果本地队列为空,则从全局队列或者其他P的队列偷取G,并开始运行G。

3.并发题:滴滴app的场景,主页同时渲染三个数据

  1. 有一个协程rpc获取的个人信息
  2. 有一个协程rpc获取你所在位置附近地理信息
  3. 有一个协程rpc获取其他的功能(我的订单,历史记录等等)
  4. 要求以上三个rpc数据都放到同一个队列(假设能放到同一个队列),而且需要有超时保护,防止一次rpc等待太久,无法渲染主页

我回答用sync.WaitGroup+ctx.WithTimeOut+AfterTime+select

面试官实际想说用channel去处理

Mysql/Redis

1. mysql的慢查询

2. redis有哪些常用的数据结构和对应使用场景

3. list和set有什么区别

  1. list是可以重复的,set不可重复
  2. list支持顺序读写,set随机读写

4. 对set中add一个已有的元素,那它是报错还是覆盖?

答:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略

5. redis它是一个单线程的,那他是怎么处理网络并发请求的

6. 你详细介绍下怎么多路复用(我回答了epoll的三个函数和对应的底层原理)

7. 如果访问一个大key那么会不会阻塞后面的请求

答:会

8. 你在使用过程中有出现这种情况吗

相关内容

热门资讯

昭通市幼儿园:国粹育幼儿 游园... 在六一国际儿童节即将来临之际,5月29日,昭通市幼儿园幼儿、家长齐上阵,欢度六一儿童节。国粹京剧精彩...
米拉日巴佛阁位于甘南合作市郊 米拉日巴佛阁位于甘南合作市郊,距离市中心约3公里,是一座红色的藏式高层建筑。佛阁的高层宗教建筑在藏区...
原创 5... 要知道,5月27日赵子豪在上海迪士尼的照片和短文在社交平台上被不少人热聊,他背着树懒卡通包,还配了句...
沉浸式露营体验!长春这家河畔休... 露营,作为一种亲近自然、放松身心的休闲方式,越来越受到人们的喜爱。然而,传统的露营需要准备大量的装备...