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

反问
全部评论

相关推荐

点赞 评论 收藏
分享
碧海蓝涛:我一开始也是,后来想到比如说长度是10,希望偏移是3,只给我1,9,4可用,用9和4拼起来的次数就是2,显然比用十个1小,然后我就想到应该可以把dp扩容成两倍长度,看看dp[i]和dp[i+n],结果一下子又通过了5%,然后我又扩容到10倍,20倍,30倍,40倍,到40倍就全部通过了,我做出来自己都没绷住
投递米哈游等公司10个岗位
点赞 评论 收藏
分享
评论
1
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务