[关闭]
@adamhand 2019-03-08T10:46:35.000000Z 字数 3009 阅读 4816

腾讯PCG事业部腾讯视频面经


一面

1.mysql联合索引相关

给定联合索引(a,b,c),下面的语句那些可以用索引,那些不可以:

2.了解那些存储引擎。innodb和myisam的区别。

3. redis中zset的底层数据结构,为什么不用红黑树。

zset底层用了跳跃表。跳跃表是一种多层链表,相当于对一个链表不断向上抽取索引,查询的时候从上往下查找,类似于使用索引,复杂度为log(n),n为最底层链表的节点数。红黑树的查找效率也为log(n),但是红黑树的构造比跳跃表复杂,插入元素的时候需要进行旋转等操作。

跳跃表可以参考这里

4.nio aio bio的区别

这个是唯一问到的关于java的问题,可以参考这里

5.C语言的内存划分,栈和堆里都放了什么数据

我说C语言不是很清楚,讲了一下java的内存划分,java内存划分可以参考《深入理解Java虚拟机》那本书,第一章就讲到了。

6.当一个select语句很慢时,怎么找出慢的原因。(explain)

他问这个问题的主要意图是让我答explain这个关键字,当我说我会先用explain语句分析一下查询的过程时,他就说可以了,不用再说了。

7. redis压缩列表

这个我当时没看。可以参考这里

算法题1

给定无序数组:m[1,6,5,3,5,6,5],n[3,6,5,6,5,6]和一个整数target,求一组数m[i]+n[j]=target,只要满足条件就返回。

他听了一下思路说第三种可以,最后也没让写代码。

算法题2

大规模排序问题。给定一个大文件,里面存储着很多IP地址,这个大文件内存放不下。找出这个文件中出现次数最多的10个IP。

内存中放不下的意思是不能直接将这个大文件加载进内存进行排序。这种情况一般选择使用“分治”的思想。

具体做法如下:

相似的问题还有:这里这里

二面

先自我介绍,问了一些个人的问题,相当于聊天。

1. 从做过的项目中找一个说一下

我选了一个后台管理系统说,这是我新加到简历上的,说了一个大概的过程。

这个是一个商品的后台管理系统,使用bootstrap+thymeleaf了一个简单的前端,使用Spring boot做后台框架,mybatis做持久层框架,redis做缓存,rabbitmq做流量削峰。大概的操作过程这样的,用户从前端选择商品,点击购买之后,请求首先会被放入redis中,使用redis做缓存的主要目的是加快前端页面的反应速度,如果不加redis而直接进入数据库的话, 响应速度会比较慢,而且当请求比较多的时候会对数据库造成比较大的负担。redis中存储了该商品的编号和剩余的数量,判断剩余数量是否足够,足够的话就将数量减一,然后将更改的数量放入rabbitmq中,使用rabbitmq的主要原因是防止一瞬间大规模流量会压垮数据库,起到一个削峰的效果。然后mysql数据库作为消费者从rabbitmq中取出更新后的商品数量,插入内存中。

我觉的说这种项目的时候,把数据从前端到后端的传递过程说清楚了,就差不多把整个项目讲清楚了。

2. innodb和myisam的区别

这个问题一面面试官也问到了。

3.linux进程,创建进程的函数是什么,《unix网络编程》读过没有

这个没答上来

4.什么时候需要使用索引

在数据库查询操作变得很慢的时候,考虑加上索引。

5.redis了解多少,有什么方式实现分布式锁,zookeeper实现分布式锁的原理

分布式锁可以参考这里这里

6. 本科的学校和专业,在之前的学校和现在的学校感觉区别最大的地方

7. 未来的职业规划

8. linux中的fork函数

这个不也不会,我给他讲了一下Java中的fork/join。fork就是“分”,join就是“合”,所以fork/join的也是分治的思想。当一个任务非常大的时候,往往会将它分为很多小任务,将每个小任务分给一个线程尽心处理,处理完之后再将结果汇总。所以fork/join可以说是分治的多线程版本。

9.如何看待加班问题

一般遇到这样的问题就得小心。我当时答的他不太满意,听完之后就很严肃了。这种问题的一般答法应该是这样的:首先,不排斥加班,加班是正常的现象。因为一个人的能力总是有限的,所以在项目中说不定什么时候就会遇到一个比较难解决的问题,而在这时候,如果计划的进度被耽误了,那么自己加加班把进度赶一下是理所应当的事,保证最后的交付不会出问题。

如何看待到期没完成工作,要拖延的问题

他当时描述的情况是:假如某个周的周一,小组定了这周五要交付任务,但是到了周五当天,忽然有人说遇到了问题耽误了进度,必须延一周,问我怎么看这种情况。

这种问题的答法一般是:首先尽量保证自己不会出这样的问题。但是作为一个实习生来说,能力是有限的,可能有时候会遇到自己解决不了的问题,当自己确实无法解决的时候,就要求助同事,或者提早进行反馈,比如周二遇到了问题,经过自己的一番努力没有解决的话,就要及时反馈,不能等到周五的时候,马上要交付的会后再说。

思考题

分金条的问题,是网上的一个题。大概描述如下:

一位地主雇佣一位工人,雇佣期为7天,报酬是一根金条。现在的情况是,工人每天都要拿七分之一根金条,而只允许地主在金条上切两刀,问怎么切能够满足情况。

一开始我以为要两刀切成等大的七块,所以就陷入了一个误区。后来明白了不一定要切成七块,只要保证工人第一天结束后手里有1/7根金条,第二天结束后手里有2/7根金条,第三天结束后手里有3/7跟金条......就行。所以应该将金条切成1,2,4。第一天给工人1,第二天给工人2,并将1要回来,第三天再将1给工人......。

腾讯貌似挺喜欢问这种智商题的,还看到一个,可以看一下这里

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注