沐瞳Golang开发秋招一面
#牛客AI配图神器#面试时间:2024-09-11
面试时长:40分钟
项目提问
● 这个基于数据库乐观锁,如何实现?
● 用户量变大之后,如何优化?
● 这个Lua脚本如何写的?
● 切换成Redis如何实现乐观锁?
● 假设锁的超时时间设置成10s,一个线程正常执行1s,那要是一个任务执行11s,另一个线程拿锁会发生什么?
● 往key加入线程id,那分布式环境下?
Golang
1. Channel底层实现
a. 写等待队列已有goroutine,过来另一个写命令,如何?
b. 数组有数据且写等待队列有goroutine,过来另一个读命令,如何?
2. Mutex底层实现
a. 介绍自旋?
b. 介绍atomic包叭
i. atomic包是如何实现的?
ii. 具体什么硬件指令实现?
手撕
二叉树右视图
func RightD(root *Tree) []int {
queue := []*Tree{}
front, rear := 0, 0
last := root
res := []int{}
queue = append(queue, root)
rear++
for front != rear {
node := queue[front]
front++
if node.Left != nil {
queue = append(queue, node.Left)
rear++
}
if node.Right != nil {
queue = append(queue, node.Right)
rear++
}
if node == last {
res = append(res, node.Data)
last = queue[rear-1]
}
}
return res
}
type Tree struct {
Data int
Left, Right *Tree
}
反问
面试时长:40分钟
项目提问
● 这个基于数据库乐观锁,如何实现?
● 用户量变大之后,如何优化?
● 这个Lua脚本如何写的?
● 切换成Redis如何实现乐观锁?
● 假设锁的超时时间设置成10s,一个线程正常执行1s,那要是一个任务执行11s,另一个线程拿锁会发生什么?
● 往key加入线程id,那分布式环境下?
Golang
1. Channel底层实现
a. 写等待队列已有goroutine,过来另一个写命令,如何?
b. 数组有数据且写等待队列有goroutine,过来另一个读命令,如何?
2. Mutex底层实现
a. 介绍自旋?
b. 介绍atomic包叭
i. atomic包是如何实现的?
ii. 具体什么硬件指令实现?
手撕
二叉树右视图
func RightD(root *Tree) []int {
queue := []*Tree{}
front, rear := 0, 0
last := root
res := []int{}
queue = append(queue, root)
rear++
for front != rear {
node := queue[front]
front++
if node.Left != nil {
queue = append(queue, node.Left)
rear++
}
if node.Right != nil {
queue = append(queue, node.Right)
rear++
}
if node == last {
res = append(res, node.Data)
last = queue[rear-1]
}
}
return res
}
type Tree struct {
Data int
Left, Right *Tree
}
反问
全部评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享