官网活动平台组一面
- 自我介绍
- 你对现在面试的岗位有啥了解吗?
- 说一下golang里头的数组和切片的区别吗
- 有了解过他们在类型上有什么区别吗(值类型还是引用类型)
- 说一下golang中的context有哪些使用场景?
- 多个defer的执行顺序是怎么样的?
- 如何判断一个channel是否已关闭?
- 读写一个已关闭的channel会有什么表现?
- 写一段代码,期望是对下面这个map,按key从小到大的顺序打印出来
data := map[int]string{1: "a", 4: "b", 2: "c", 5, "d", 3: "f"}
- 下面这段代码的输出是什么(假设我期望求得1加到100的累和即5050,这个代码能正确计算得到结果吗)
func main() {
var res int
for i := 1; i <= 100; i++ {
go func() {
res += i
}()
}
fmt.Println(res)
}
- 那如果我改成这样呢,现在输出还会是正确的吗?
func main() {
var res int
for i := 1; i <= 100; i++ {
go func() {
res += i
}()
}
time.Sleep(3 * time.Second)
fmt.Println(res)
}
- 原因是什么呢?你能改成正确的代码吗?
- 了解Redis有哪些数据类型?
- 如何用Redis实现一个分布式锁?
- 如何防止死锁发生?
- 用完这个锁,要怎么释放掉?
- 假设你的程序上了这把锁,设置了30s过期,然后第35s又被另一个进程取锁,但是你在第40s的时候才去删这个key,你要怎么保证你删的时候,删的就是之前你自己的协程一开始上的锁?
- 能说一下如何使用Redis实现一个限流器吗?
- 说下缓存击穿,缓存穿透,缓存雪崩有什么区别?
- 解释一下innoDB中聚集索引和非聚集索引的区别
- 解释一下什么叫做左前缀原则
- 如果现在有个联合索引(a, b, c),where b = 2 order by a 这一句查询语句会走完整索引吗?
- 解释一下什么是乐观锁和悲观锁
- 能列举几种MySQL索引失效的场景吗?
- 反问
负责业务: 一个是游戏里头嵌入的H5活动开发;一个是提供给运营人员的管理工具开发