得物 - Go社招一面 - base长沙 - 7.10
- 简单介绍一下中台系统
- 挑其中一个参与比较多的,有成就感的,有挑战的一个项目,重点描述一下这个项目的业务背景,技术架构,以及我在里面的一个角色
- 广告投放完之后,用户点击了广告,你们去抓取数据,为什么要抓取数据呢?你们是广告主,是付了钱的,抖音,快手,广点通他们会把数据按照你们配置的点击链接回传给你。
- 项目中遇到过的最大挑战是什么,怎么解决的
- go
- 遍历一个map的时候,连续遍历多次,中间没有其他代码,顺序相同的吗?
- 为什么顺序不同的
- 可以对map里面的一个元素取地址吗
- go里面的内存逃逸
- 发生内存逃逸的例子
- 堆栈有什么区别
- go里面select用在什么地方
- grpc
- http2的优缺点
- 团队怎么分工的,有版本的概念吗,需求谁提的呢,怎么看待这个分工的问题呢
- 代码及场景
func main() {
panic("xxx")
recover()
}
一、上面的panic会被捕获吗 给出修改代码
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
panic("xxx")
fmt.Println("This line will not be executed.")
}
二、以下代码输出什么
func f() {
defer fmt.Println("D")
fmt.Println("F")
}
func main() {
defer fmt.Println("N")
f()
fmt.Println("M")
}
三、 select * from tableA where a = 1; 有一个表 ,里面有一个字段 a(建了一个单字段索引),假如分析发现这个 sql没有走命中这个索引a走的全表扫码,分析一下原因。
- 为什么当a=1比较多的时候,走全表而不走索引呢?
- 对于非常小的表,数据库可能会选择全表扫描,为什么?
- 除了表比较小,重复值多区分度低,还有其他可能吗?(隐式类型转换 )
四、假如有一个库(已经出现性能瓶颈了),库里面有10张表,其中两张表想迁出来,迁到一个独立的数据库里面,有什么思路。
- 导出数据,再导入数据,再去更新代码中的数据库连接,中间这个过程中写在老库的数据就没有导入过来,不能暂停对老表的写操作。
- 定期增量备份,会有问题,定时跑的就会有定时的时间差。不管是定时备份也好还是手动导出导入也好,都不是原子性操作,就会有时间差,有数据漏损。