第一份实习,拿到 offer 才敢写面经系列...
面试经验总的来说:
面试官是个小姐姐,nice
自我介绍
扒项目
go 垃圾回收
hashmap(说了 go 的 map 和 redis 的 hash 结构)
redis rehash 过程
rehash 过程中添加数据,查询数据怎么办?(就是问渐进式 rehash,刚好没看到,瞎猜了半天)
hash 冲突用的什么方法解决的?查询时间?最坏时间?
你说链地址法冲突到一条链上会退化成 O(n),它不好为什么要用?为什么不用其他的?
一道没见过的算法题
给出一个分子式,比如:HMg2(H2ON3)3N2,计算这个分子式中每个原子出现了多少次,输出一个map,比如上面的分子式中:map[string]int {"H": 7, "Mg": 2,"O": 3, ...}
- 都以大写字母开头,后面跟 0 个或者 1 个小写字母,比如 Mg, H
- 单个原子后面跟 0 个或者 1 个数字表示它出现的次数,比如 Mg2 表示 Mg 出现 2 次,数字范围 2-9
- 分子式中可能有括号,括号后面可能跟 0 个或者 1 个数字表示整个括号内的原子出现的次数,比如 (N3Ag)2 表示 N出现 6 次,Ag 出现 2 次 4. 括号可以嵌套
- 输入是合法的
上来就遇到这么长的题让我很慌,加上之前 redis 被问到不会,这里感觉都要停止思考了。。看了半天说想办法从后往前把数字乘进去去掉括号再处理,问她思路有没有问题,得到肯定回答才松了一口气,然后说了下具体方法,理清之后面试官把括号去掉了,然后说时间不够了写下简化版代码吧
算法题写了有二三十分钟,感觉要凉了,没想到结束时面试官说先别走啊,我去喊一下二面面试官,瞬间复活
逐渐有状态了,二面还算轻松,全程在线,当时感觉过挺快,回头一听才发现问了这么多问题
gmp
协程的优势
进程线程区别
进程地址空间有哪些划分
进程间通信
共享内存是怎么回事?映射到实际物理内存的虚拟地址在地址空间的哪一部分(我猜在堆区)
虚拟内存
页面置换算法(说了局部算法和全局算法)
LRU 实现思路
mysql 引擎,它们的区别
innodb 辅助索引为什么存主键 id,回表不是要浪费时间?
b+ 树索引优势
acid
隔离级别,可重读是怎么实现的?幻读是怎么回事?间隙锁知道不?
读写锁互斥关系,其他分类的锁
我看你项目用到了 redis 具体用到了哪些数据结构?(string,hash,zset)
zset 实现,跳表是怎么回事?高度?时间复杂度?为什么不用 b+ 树?
redis 是单进程还是多进程?
扒项目(另一个爬虫项目)
(第一个项目)压测怎么做的?其他一些可以优化的点
力扣原题,舒服:力扣33. 搜索旋转排序数组
反问
二面面试官超级 nice,各种引导,问到我不会了就说ok没问题,全程给我信心,越面越顺
晚上另一个hr小哥哥加我微信约了三面时间,之前联系我的小姐姐不见了,唉
扒项目(收获什么的)
我看你项目用了 mongodb,mongodb 存储索引知道吗?和 mysql 比有哪些优势?(回答 mongodb 并不熟,只是毕设想用用新东西,优点就知道非结构化扩展容易,速度快)
mysql 存储引擎
项目用到了 redis 哪些结构(zset,hash),说一说底层实现
zset 除了跳表+hash表外还有其他实现吗?
进程通信方式
io多路复用的几种方法(不熟,就提了下名字)
cookie session
拥塞控制
力扣原题,舒服:力扣15. 三数之和
三面面试官应该是某个部门老大,面相和蔼,问了30分钟就结束了,有点慌,没想到结束后10分钟hr就发来微信约hr面了
聊天,实习生都没啥好问的
面完晚上我等不及就微信问hr结果,说没问题,offer 在审批了,然后就是漫长的等待,中间还赶上清明假期,足足等了一周多才接到 offer,期待成为一名 ByteDancer