美团点评2020年校招笔试题(系统开发方向)|快问快答-真题篇

进入3月,虽然疫情还未完全结束,但挡不住大家都得找工作啊!于是我决定开个新坑,给小伙伴们更新


互联网大厂真题+参考答案


Emma出手,必有料!希望这个系列能帮助正在准备春招的各位朋友,早日找到适合的坑位,共渡超级水逆的2020。

最近,饿了么和口碑合并的消息被热议,虽然阿里还没出声证实,不过可预见到的是,这波调整之后,资源将被集中。阿里和美团之间势必有一场干架!

不过目前美团仍然占据了约70%的市场份额,其日活是饿了么+口碑总和的5倍!大众点评在实力上仍然碾压饿了么。因此,对看工作机会的朋友来说,美团依旧是值得抓住的机会。


废话不多说,直接进干货:


1


如果线上某台虚机CPU Load过高,该如何快速排查原因?只介绍思路和涉及的Linux命令即可 。


参考答案:

造成cpu load过高的原因:Full gc次数的增大、代码中存在Bug(例如死循环、正则的不恰当使用等)都有可能造成cpu load 增高。

1. jps -v:查看java进程号

2. top -Hp [java进程号]:查看当前进程下最耗费CPU的线程

3. printf "%x\\n" [步骤2中的线程号]:得到线程的16进制表示

4. jstack [java进程号] | grep -A100 [步骤3的结果]:查看线程堆栈,定位代码行。参考:如何使用JStack分析线程状态


2


请简要描述MySQL数据库联合索引的命中规则,可举例说明。


参考答案:

1. MySQL联合索引遵循最左前缀匹配规则,即从联合索引的最左列开始向右匹配,直到遇到匹配终止条件。例如联合索引(col1, col2, col3), where条件为col1=`a` AND col2=`b`可命中该联合索引的(col1,col2)前缀部分, where条件为col2=`b` AND col3=`c`不符合最左前缀匹配,不能命中该联合索引

2. 匹配终止条件为范围操作符(如>, 1 AND col3=`c`, 在col2列上为范围查询,匹配即终止,只会匹配到col1,不能匹配到(col1, col2, col3).

3. where条件中的顺序不影响索引命中。例如联合索引(col1, col2, col3), where条件为col3=`c` AND col2=b AND col1=`a`, MySQL优化器会自行进行优化,可命中联合索引(col1, col2, col3).


3


请描述https的请求过程。


参考答案:

1. 客户端向服务器发起HTTPS请求,连接到服务器的443端口;

2. 服务器端有一个密钥对,即公钥(即数字证书)和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人;

3. 服务器将自己的公钥发送给客户端;

4. 客户端收到服务器端的公钥之后,检查其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续,如果公钥合格,则客户端会生成一个客户端密钥,然后用服务器的公钥对客户端密钥进行非对称加密成密文,至此,HTTPS中的第一次HTTP请求结束;

5. 客户端发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器;

6. 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文;

7. 然后服务器将加密后的密文发送给客户端;

8. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

4


什么是事务传播行为?你知道Spring事务中都有哪些传播类型吗?如何使用/指定传播类型?


参考答案:

1. 事务传播用于描述当一个由事务传播行为修饰的方法被嵌套入另外一个方法时,事务如何传播。常用于定义发生事务嵌套时,如何继续执行。

2. Spring 中共定义了7种事务传播类型,明细如下表, 需答出3~4种常见类型即可:

a) PROPAGATION_REQUIRED:当前没有事务时开启新事务,如果有则加入;

b) PROPAGATION_REQUIRES_NEW:强制开启新事务,挂起已有事务(如有);

c) PROPAGATION_SUPPORTS:当前有事务时加入, 没有则以非事务方式执行;

d) PROPAGATION_NOT_SUPPORTED:以非事务方式执行, 挂起当前事务(如有);

3. 可以在注解或者XML中指定传播类型, 如 “@Transactional(Propagation=xxx)”


5


IO设计中Reactor 和 Proactor 区别。


参考答案:

1.Reactor被动的等待指示事件的到来并作出反应,有一个等待的过程,做什么都要先放入到监听事件集合中等待handler可用时再进行操作,实现相对简单,对于耗时短的处理场景比较高效,但Reactor处理耗时长的操作会造成事件分发的阻塞,影响到后续事件的处理。

2.Proactor直接调用异步读写操作,调用完后立刻返回,实现了一个主动的事件分离和分发模型;这种设计允许多个任务并发的执行,从而提高吞吐量;并可执行耗时长的任务(各个任务间互不影响),Proactor性能更高,能够处理耗时长的并发场景,但Proactor实现逻辑复杂;依赖操作系统对异步的支持,目前实现了纯异步操作的操作系统少,实现优秀的如windows IOCP,但由于其windows系统用于服务器的局限性,目前应用范围较小;而Unix/Linux系统对纯异步的支持有限,应用事件驱动的主流还是通过select/epoll来实现。

6


回文子串:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串(回文串是一个正读和反读都一样的字符串)。具有不同开始位置或结束位置的回文串,即使是由相同的字符组成,也会被计为是不同的子串。


参考答案:

考虑如果substring(i,j)如果是回文串,那么str[i]和str[j]一定相同,并且一定满足以下两个条件之一

1.substring(i+1,j-1)也是回文串

2.j-i<=2,即substring(i,j)长度<=2

那么我们就只需要顺着这个思路dp就行了,复杂度O(n^2)


Java:

Python:

C++:

以上就是今天的快问快答+校招算法题啦。这个系列我在之后将持续更新,如果大家有什么特别想要的题目,请在留言区告诉我!Emma尽快去挖掘一下~


既然本期咱们说到了美团面试题,贴心如我,最后当然还会给大家送上福利:


美团求职资料包


领取方式

私信Emma,回复美团~即可领取【美团求职资料包】