Skip to content

分享一次面试经历

今天不只是分享面经,还分享一下主人公的整个面试经历,看看你是否会有相同的思路或者不同的见解,可以在评论区讨论一下:

问在项目里做了什么技术贡献。实施过程中,遇到哪些困难,怎么去思考解决的,然后这个技术贡献对业务的收益

介绍了轨迹增补及去重,以及对账,主动查询任务中心等 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的栈,找到栈上的指针,这些指针指向