美团面试复盘

3.26 笔试

当时 A 了 1.18 成绩不是很理想。有一道黑白环的题其实很好答,当时浏览五道题的时候不是很仔细,如果先答黑白环的话,可能最后成绩还会再高一些。当时大部分时间都用到第二题上了,结果才 A 了 0.18,面试的时候一定花一部分时间多看看题,把时间优先用在最容易并且有思路的题上面。

4.2 一面

一面的面试官上来就问了很多的项目问题,大家一定要熟悉自己的项目。我面试时候准备的并不好,项目有些久远,忘了许多。还好之前面试讲多非常多次,关键地方还记忆的起来。最后的算法题我没写出来,我写了一种层次遍历之后用栈逆序处理的方法,不是最优解,最优解其实就是在层次遍历上做修改,使用双端队列。

  • 项目问题
  • 线程的内存模型
  • JVM 运行时数据区域
  • 保证线程安全的方式
  • TCP 三次握手
  • Java 中 new 一个对象的过程
  • euqals() 与 == 的区别
  • HashMap 底层结构
  • hashCode() 与 equals() 方法
  • 错误实现 hashCode() HashMap 会如何
  • 进程与线程的区别
  • 进程间通信方式
  • MySQL 主从复制的原理
  • Redis 数据结构
  • 之字形遍历二叉树
  • 遍历二叉树的时间复杂度

4.10 二面

上来面试官问了一道斐波那契额数列的问题,从下标 0 开始,斐波那契数列为:0 1 1 2 3 5 ……

编写一个函数,求下标为 n 的位置,斐波那契额数列上对应位置的数字是多少?

我第一反应是用递归写,如下:

public static int f(int n){
if (n == 0) return 0;
if (n == 1) return 1;
return f(n - 1) + f(n - 2);
}

一边写我还给面试官一边讲,写递归函数要先写 base case,也就是中止条件,然后写子过程。其实我这时候就已经掉进陷阱里了,自己却还不知道。

面试官先让我传入 10 试试,莫得问题,然后传入 50,完了,运行超时……

当时我反应还是很快的,我连忙解释道,这是因为递归时候需要借助系统栈来压入函数,这个栈是有深度限制的,运行超时肯定是超过了栈的最大深度,改成迭代就好了。

接下来就是本场最尴尬的时刻了,我很紧张,脑袋一片空白,这个简单的迭代写了好久好久,还是在面试官的提示下终于写出来了,从这以后我一度以为自己凉了……

public static int f(int n){
int n0 = 0;
int n1 = 1;
if (n == 0) return n0;
if (n == 1) return n1;
int temp = 0;
// n0 n1 temp
for (int i=2;i<=n;i++) {
temp = n0 + n1;
n1 = n0;
n0 = temp;
}
return temp;
}

写完这个,坑又来了,再次传入 50 后,返回了负数……我答道可能是返回的数值太大了,超过了 int 的最大值,改成 long 型应该就可以了

public static long f(int n){
long n0 = 0;
long n1 = 1;
if (n == 0) return n0;
if (n == 1) return n1;
long temp = 0;
// n0 n1 temp
for (int i=2;i<=n;i++) {
temp = n0 + n1;
n1 = n0;
n0 = temp;
}
return temp;
}

50 位置的斐波那契数字这么大么……我可真是个菜鸡……之后基本就是跟面试官在闲聊了,谈到了单点登录,分布式ID,我还提到我看过美团点评团队的技术博客。

面试我非常难过,一度以为自己凉了,没想到过了大概半小时竟然收到了 HR 通知面试通过的消息,恰好那天是我的生日,感觉还是非常幸运非常开心的。

你可能感兴趣的:(面试,数据结构,面试,java,腾讯,python)