20250811 - 超参数 - 后台开发工程师 - 一面

1. 个人介绍

2. 实习经历

3. 开源经历的项目介绍和个人贡献

4. 实习期间项目背景、系统架构、主要技术栈及负责的功能模块

7. 常用数据库(MySQL、MongoDB、PostgreSQL等)及使用场景

8. select id,name,balance from account where update_time > '2020-09-19' offset 100000 limit 10;
8.1 该 SQL 语句做什么事情?
8.2 在 update_time 列上加上普通索引,请从数据库引擎层面解释这条SQL的查询过程是怎样的?
8.3 在 update_time 这个列对应的索引中,它的叶子节点存的是什么数据?叶子节点会存储整行的所有数据吗?
8.4 基于以上过程,这条 SQL 是不是需要执行两次数据库 IO 操作?
8.5 原 SQL 加上 for update 的执行语义和执行效果。

9. Redis
9.1 Redis 常用的数据类型有哪些?String、Set、ZSet 分别适合什么场景?
9.2 Redis 的 ZSet 底层是怎么实现的?
9.3 跳表的特点是什么?索引是怎么生成的?
9.4 Redis 是怎么删除过期键的?
9.5 实习期间项目里 Redis 存了什么数据?缓存策略怎么做的?

10. Nacos 在项目中怎么用?它的配置更新和服务交互机制是怎样的?

11. Kafka 
11.1 核心组件和概念有哪些?Producer:消息生产者;Consumer:消息消费者;Broker:Kafka 服务器节点;Topic:消息分类主题;Partition:主题的分片,保证单分区内消息有序;Replica:分区副本,保证高可用。
11.2 Kafka 消费者组 Rebalance 是什么?
11.3 Kafka 是否支持 Exactly Once?会不会丢数据?
11.4 Kafka 分区副本是怎么同步的?
11.5 Raft 和 Paxos 算法是做什么的?区别是什么?

12. 从磁盘把数据加载到内存,操作系统是怎么做的?涉及哪些机制?

13. 目前在实习的项目中做了什么?项目背景和流程是什么?

14. 给出并解释程序运行结果
14.1 程序 A
package main

import "fmt"

func main() {
    b := []int{1, 2, 3, 4, 5, 6}
    c := b[1:3]
    c[1] = 999
    fmt.Println(c)
    fmt.Println(b)
}
14.2 程序 B
package main

import "fmt"

func Append(s []int) {
s = append(s, 5)
}

func Add(s []int) {
for i := range s {
s[i] = s[i] + 5
}
}

func main() {
s := []int{1, 2, 3, 4}
Append(s)
fmt.Println(s)
Add(s)
fmt.Println(s)
}

15. 题目一(leetcode 102. 二叉树的层序遍历)

16. 题目二:现在有一个 DelayQueue 结构体,你需要实现它,使它具备延时队列的功能。
// DelayQueue 延时队列
type DelayQueue struct {
}

func NewDelayQueue() *DelayQueue {
return nil
}

// Put 将元素放入延时队列
func (dq *DelayQueue) Put(value any, delay time.Duration) {
}

// Get 从延时队列中获取元素,如果当前没有元素,或者元素还没有到期,则阻塞
func (dq *DelayQueue) Get() any {
return nil
}

func main() {
dq := NewDelayQueue()
dq.Put("World", 3*time.Second)
dq.Put("Hello", 1*time.Second)
// prints "Hello" 1s later
// prints "World" 2s later
for i := 0; i < 2; i++ {
println(dq.Get().(string))
}
}
具体要求:
1. 调用 Put(value, delay) 时,把一个元素放入队列,并指定它在 delay 时间之后才可被取出。
2. 调用 Get() 时,如果当前没有可取的元素(队列为空,或最早的元素还没到时间),则需要阻塞,直到有元素可取为止。
多个元素可能有不同的延迟时间,Get() 必须按到期时间的先后顺序依次返回。比如:
dq.Put("World", 3*time.Second)
dq.Put("Hello", 1*time.Second)
运行时应在 1 秒后打印 "Hello",再过 2 秒打印 "World"。
3. 要求支持多个 goroutine 并发调用 Put() 和 Get(),不能发生数据竞争。
4. 希望实现效率较高,比如 Get() 查找下一个到期元素的时间复杂度尽量低(提示:可以考虑最小堆或优先队列)。
你需要在现有的 DelayQueue 代码基础上补全 NewDelayQueue()、Put() 和 Get() 方法,实现上述功能。
请你先讲一讲你的设计思路,然后写出代码。
全部评论

相关推荐

昨天 20:13
已编辑
深圳大学 后端工程师
迷茫的大四🐶:实力堪比ai的男人
查看18道真题和解析
点赞 评论 收藏
分享
1.&nbsp;个人介绍2.&nbsp;实习经历3.&nbsp;开源经历的项目介绍和个人贡献4.&nbsp;实习期间项目背景、系统架构、主要技术栈及负责的功能模块7.&nbsp;常用数据库(MySQL、MongoDB、PostgreSQL等)及使用场景8.&nbsp;select&nbsp;id,name,balance&nbsp;from&nbsp;account&nbsp;where&nbsp;update_time&nbsp;&gt;&nbsp;'2020-09-19'&nbsp;offset&nbsp;100000&nbsp;limit&nbsp;10;8.1&nbsp;该&nbsp;SQL&nbsp;语句做什么事情?8.2&nbsp;在&nbsp;update_time&nbsp;列上加上普通索引,请从数据库引擎层面解释这条SQL的查询过程是怎样的?8.3&nbsp;在&nbsp;update_time&nbsp;这个列对应的索引中,它的叶子节点存的是什么数据?叶子节点会存储整行的所有数据吗?8.4&nbsp;基于以上过程,这条&nbsp;SQL&nbsp;是不是需要执行两次数据库&nbsp;IO&nbsp;操作?8.5&nbsp;原&nbsp;SQL&nbsp;加上&nbsp;for&nbsp;update&nbsp;的执行语义和执行效果。9.&nbsp;Redis9.1&nbsp;Redis&nbsp;常用的数据类型有哪些?String、Set、ZSet&nbsp;分别适合什么场景?9.2&nbsp;Redis&nbsp;的&nbsp;ZSet&nbsp;底层是怎么实现的?9.3&nbsp;跳表的特点是什么?索引是怎么生成的?9.4&nbsp;Redis&nbsp;是怎么删除过期键的?9.5&nbsp;实习期间项目里&nbsp;Redis&nbsp;存了什么数据?缓存策略怎么做的?10.&nbsp;Nacos&nbsp;在项目中怎么用?它的配置更新和服务交互机制是怎样的?11.&nbsp;Kafka11.1&nbsp;核心组件和概念有哪些?Producer:消息生产者;Consumer:消息消费者;Broker:Kafka&nbsp;服务器节点;Topic:消息分类主题;Partition:主题的分片,保证单分区内消息有序;Replica:分区副本,保证高可用。11.2&nbsp;Kafka&nbsp;消费者组&nbsp;Rebalance&nbsp;是什么?11.3&nbsp;Kafka&nbsp;是否支持&nbsp;Exactly&nbsp;Once?会不会丢数据?11.4&nbsp;Kafka&nbsp;分区副本是怎么同步的?11.5&nbsp;Raft&nbsp;和&nbsp;Paxos&nbsp;算法是做什么的?区别是什么?12.&nbsp;从磁盘把数据加载到内存,操作系统是怎么做的?涉及哪些机制?13.&nbsp;目前在实习的项目中做了什么?项目背景和流程是什么?14.&nbsp;给出并解释程序运行结果14.1&nbsp;程序&nbsp;Apackage&nbsp;mainimport&nbsp;&quot;fmt&quot;func&nbsp;main()&nbsp;{b&nbsp;:=&nbsp;[]int{1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6}c&nbsp;:=&nbsp;b[1:3]c[1]&nbsp;=&nbsp;999fmt.Println(c)fmt.Println(b)}14.2&nbsp;程序&nbsp;Bpackage&nbsp;mainimport&nbsp;&quot;fmt&quot;func&nbsp;Append(s&nbsp;[]int)&nbsp;{s&nbsp;=&nbsp;append(s,&nbsp;5)}func&nbsp;Add(s&nbsp;[]int)&nbsp;{for&nbsp;i&nbsp;:=&nbsp;range&nbsp;s&nbsp;{s[i]&nbsp;=&nbsp;s[i]&nbsp;+&nbsp;5}}func&nbsp;main()&nbsp;{s&nbsp;:=&nbsp;[]int{1,&nbsp;2,&nbsp;3,&nbsp;4}Append(s)fmt.Println(s)Add(s)fmt.Println(s)}15.&nbsp;题目一(leetcode&nbsp;102.&nbsp;二叉树的层序遍历)16.&nbsp;题目二:现在有一个&nbsp;DelayQueue&nbsp;结构体,你需要实现它,使它具备延时队列的功能。//&nbsp;DelayQueue&nbsp;延时队列type&nbsp;DelayQueue&nbsp;struct&nbsp;{}func&nbsp;NewDelayQueue()&nbsp;*DelayQueue&nbsp;{return&nbsp;nil}//&nbsp;Put&nbsp;将元素放入延时队列func&nbsp;(dq&nbsp;*DelayQueue)&nbsp;Put(value&nbsp;any,&nbsp;delay&nbsp;time.Duration)&nbsp;{}//&nbsp;Get&nbsp;从延时队列中获取元素,如果当前没有元素,或者元素还没有到期,则阻塞func&nbsp;(dq&nbsp;*DelayQueue)&nbsp;Get()&nbsp;any&nbsp;{return&nbsp;nil}func&nbsp;main()&nbsp;{dq&nbsp;:=&nbsp;NewDelayQueue()dq.Put(&quot;World&quot;,&nbsp;3*time.Second)dq.Put(&quot;Hello&quot;,&nbsp;1*time.Second)//&nbsp;prints&nbsp;&quot;Hello&quot;&nbsp;1s&nbsp;later//&nbsp;prints&nbsp;&quot;World&quot;&nbsp;2s&nbsp;laterfor&nbsp;i&nbsp;:=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;2;&nbsp;i++&nbsp;{println(dq.Get().(string))}}具体要求:1.&nbsp;调用&nbsp;Put(value,&nbsp;delay)&nbsp;时,把一个元素放入队列,并指定它在&nbsp;delay&nbsp;时间之后才可被取出。2.&nbsp;调用&nbsp;Get()&nbsp;时,如果当前没有可取的元素(队列为空,或最早的元素还没到时间),则需要阻塞,直到有元素可取为止。多个元素可能有不同的延迟时间,Get()&nbsp;必须按到期时间的先后顺序依次返回。比如:dq.Put(&quot;World&quot;,&nbsp;3*time.Second)dq.Put(&quot;Hello&quot;,&nbsp;1*time.Second)运行时应在&nbsp;1&nbsp;秒后打印&nbsp;&quot;Hello&quot;,再过&nbsp;2&nbsp;秒打印&nbsp;&quot;World&quot;。3.&nbsp;要求支持多个&nbsp;goroutine&nbsp;并发调用&nbsp;Put()&nbsp;和&nbsp;Get(),不能发生数据竞争。4.&nbsp;希望实现效率较高,比如&nbsp;Get()&nbsp;查找下一个到期元素的时间复杂度尽量低(提示:可以考虑最小堆或优先队列)。你需要在现有的&nbsp;DelayQueue&nbsp;代码基础上补全&nbsp;NewDelayQueue()、Put()&nbsp;和&nbsp;Get()&nbsp;方法,实现上述功能。请你先讲一讲你的设计思路,然后写出代码。
查看27道真题和解析
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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