一面 1h
自我介绍
主要使用语言:Golang、C++ or Java
Golang 和 C++ 的区别(GC、编译快)
为什么 golang 的依赖分析简单?(类似拓扑排序,每个文件只需打包一次)
Golang 是怎么管理内存的?(线程缓存,搜一下 tcmalloc)
内存回收是怎么找到垃圾、怎么回收?(分代回收、标记-清除等)
Java map
底层结构(拉链法,扩容时转红黑树)
map 什么时候扩容?负载因子是多少?
Java map 的线程安全实现(锁、分段锁、计数器)
计数器变量本身是不是有安全问题?volatile 的原理
分段锁底层是怎么加锁的?
锁的方式有很多种,了解吗?(不了解)
了解指令重排序吗?(硬件层面 CPU 流水线、Java 语言层面)
Golang 会不会有内存泄露问题?为什么?如果出现这种问题要怎么排查?(有,比如持续为一个数组申请空间。profile 工具)
redis 如果内存满了会不会有问题?内存淘汰算法了解吗?(LRU、LFU、FIFO、RANDOM)
LRU 的实现思路(哈希表 + 双向链表)
LFU 的实现思路 (哈希表 + 多个双向链表,这里直接搜 labuladong 公众号文章)
线程有哪几种状态?
线程池介绍,应用场景?(创建/销毁线程是有开销的,使用线程池复用线程资源,这个思想和连接池是一样的)
登录机器看过日志吗?awk 了解吗?(这个命令经常被问,常见的题目是“找出 nginx 日志中访问量最多的前 10 个 IP 地址”)
另外本人整理收