沐瞳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
}

反问
全部评论

相关推荐

评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务