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