分享一次面试经历
今天不只是分享面经,还分享一下主人公的整个面试经历,看看你是否会有相同的思路或者不同的见解,可以在评论区讨论一下:
问在项目里做了什么技术贡献。实施过程中,遇到哪些困难,怎么去思考解决的,然后这个技术贡献对业务的收益
介绍了轨迹增补及去重,以及对账,主动查询任务中心等 0
问轨迹怎么判断相似的
这里他主要是想问的是车辆轨迹这种,和物流的轨迹不一样。所以这一段感觉答的不是很好。
问分库分表怎么预估容量
- 每天数据量
- 存储周期
- 预估增长
- 预留备份空间
问单表建议放多少数据
5000万行,索引高度3-4层
问用到rocketmq的哪些特性
- 消息重试机制
- 延迟消息
rocketmq的最大重试次数
16次
rocketmq的消息是顺序消费吗
区分顺序和并发
rocketmq消费的时候关注哪些配置
- 并发消费还是顺序消费是消费者客户端决定的
- tag
- 重试次数
mysql的事务怎么实现的
Undo Log来回滚
问怎么控制版本,mvcc
垃圾回收的时候,怎么找到所有对象的存储地址
Go中所有的内存分配(如new、make或&操作符分配的内存)都是通过Go运行时的内存分配器(Allocator)完成的。这个分配器维护了一个清晰的内存分配布局:
- 堆上的对象:由垃圾回收器负责管理,垃圾回收器知道堆上每一个已分配对象的地址和大小。
- 栈上的对象:分配在Goroutine栈上(通常生命周期较短),GC会通过栈扫描来检查指针。
- 分配器会记录堆内存块的元信息(Metadata),包括每个对象的起始地址、大小、以及是否包含指针等。这些信息为垃圾回收器提供了跟踪对象的基础。
- 运行时通过以下机制完全掌握对象地址:
- 堆的分配是有组织的:
- 堆内存是分块管理的,GC依赖堆的元数据(如mheap和mspan)知道哪些地址上有对象。
- 每个分配的对象都有记录,GC能通过扫描堆快速定位它们。
- 类型元信息(Type Metadata):
- 编译器在生成代码时会为每种类型附加元信息,包括对象的大小、结构、以及哪些字段是指针。
- GC使用这些元信息来识别对象中的指针。
- 栈扫描:
- GC在运行时可以扫描每个Goroutine的栈,找到栈上的指针,这些指针指向
