二面

难度:★★☆☆☆ 一面通过后10分钟,就收到了二面的预约电话,第二天进行了二面,二面以电话面形式进行的,侃了了很长时间的个人问题,比如问我是怎么入门计算机的?本科时除了上课之外的学习方式?喜欢看哪些书?毕业后第一份工作是怎么考虑的?最后才开始问技术问题,技术问题主要着重于mysql。

1.以下查询你准备怎么去建索引和优化?

SELECT * FROM table WHERE A = 1 AND B = 2 AND C >3 ORDER BY D LIMIT 10000建立一ABDC的联合索引,因为最左匹配原则要求碰到> <就中止,所以如果是ABCD联合索引的话,D就没法命中。

2.JOIN查询时,以下两种方法有什么区别?哪一个更快?

SELECT * FROM tableA LEFT JOIN tableB用on tableA.id = tableB.id和用where tableA.id = tableB.id

讲真这个我还真没仔细研究过,如果有人有找到这个方面的相关资料发我一份,但是我按照直觉回答给回答对了, on更快一些,因为where是在最后数据都查出来的时候去进行的筛选, 而on是在连表的时候进行的过滤,两者操作的数量级别就不一样,而且如果是用where来过滤的话,应该是逐个比较,时间复杂度应该是O(n^2), 用on的话,实际上是两个B+树索引在进行合并,或许可以利用B+树性质直接降低复杂度至O(logn)。 实际上这些都是我猜的,不过好像得到了面试官的认可hhh

3.有一个查询条件返回的有1000万条数据,那怎么把数据读出来?

可以通过offset和limit的方式来进行分页查,并且利用子查询来提高分页效率

SELECT * FROM tableA WHERE id >=

(SELECT id FROM articles WHERE col=A ORDER BY id LIMIT 10000000, 1) LIMIT 10

4.用过消息队列吗?能跟我说说消息队列是怎么用的吗?

用过,以前用Python的celery结合redis处理过异步任务,celery是一个Python分布式消息队列框架,redis充当一个broker的角色。在毕设里面当用户提交一个MRI脑图时,我们会把这个task丢给redis去发布,详细见我博客Predicting brain age from neuroimaging using machine learning毕设项目梳理

5.可以谈谈Golang GMP模型是怎样的吗?

应该对Go熟悉的人都可以答上来。GMP中G代表一个Goroutine,它携带上下文运行的信息,是需要运行的任务;M代表Machine,即一个真正的系统线程,是真正的执行者;P代表Processor,是处理器,负责把Goroutine调度到M上, 是最核心的协调者,P的数量默认是由CPU核数来决定的。

6.Golang map的底层原理?

return (max_width, max_height)


7.redis为什么快?

Redis单线程。

所有操作在内存中完成

采用的数据结构足够简单

8.k8s中pod和node是什么关系?

node和pod是一对多的关系,一个Node可以起多个pod,pod是k8s中的最小部署单元,是一个独立的环境;一个node则通常是一个主机,或者也可以是虚拟主机。

三面HR面

HR面就没啥了,问了下目前工作负责的项目、挑战点。目前的薪资、绩效考核的情况等等。最后问了下喜欢看B站吗?喜欢看B站的哪些视频?有哪些喜欢的Up主?

反正对着一对猛吹就是了,说B站懂年轻人的喜好啊,B站跨年晚会好看啊,B站的”后浪“宣传片牛逼啊,B站纪录片有教育意义啊,B站买了LOL三年的直播版权啊,B站有希望成为中国的youtube走向世界啊...balabala

整体流程基本上就是这样,下面是我之前面试整理的一些资料,有需要的可以点赞+关注我后,点击此处领取面试学习资料哦!

分享不易,感谢大家的阅读!