美团2021暑期实习 后台开发 面经

美团2021暑期实习 后台开发一面 面经

编程

题目

漆黑的夜晚,有n个孩子在河的一侧想要过河。河上只有一座桥,桥同时最多承载两个人。过河的人必须携带手电筒,孩子们只有一个手电筒。 第i个孩子过河的用时为t_i,问所有孩子都过河的最少时间。
输入:n,n个整数t_i
输出:所有人过河的最短时间。
等价题目:POJ 3404

解法

动归。
如果只有1/2个人,直接过去;
如果有3个人,让最快的把另外两个分别带过去;
如果有不少于4个人:

  1. 将所有人的用时排序为t[n]
  2. dp[n]表示最快的n个人全部过河的用时,则转移方程为:
    dp[n]=max(dp[n-1]+a[0]+a[n-1], dp[n-2]+a[n-1]+2*a[1])
    本质上,在河对岸已经有人且手电筒在对岸的情况下,把这边最快的两个人送过去有两种方法:分别过去和一起过去。这是max()只有两个参数的原因。

我根据直觉,很快提出了一个很简单的算法:让最快的孩子把人一个个带过去,然后把手电筒带回来。
面试官提问:如果有两个最快的孩子只需要1分钟,有两个最慢的孩子需要50分钟。按照这个算法,三人过河需要101分钟;但如果让两个最慢的一起过去,再由对岸一个最快的把手电筒带回来,两个最快的一起过去,只需要52分钟。
我陷入疑惑,仍未察觉这是动态规划问题。最后面试官几乎是一点点把答案直接摁到我脸上……

算法

选择排序的时间复杂度,插入排序的平均和最坏情况的时间复杂度,常见的排序算法。
插入排序在什么情况下会比快速排序更好?

操作系统

只问了一个内存管理,我说不上来。我是真的菜。

数据库

数据库A中存储着学生编号和分数,数据库B中存储学生编号和对应班级。要求计算每个班的平均分。
我不会。我是真的菜。

网络

三次握手,四次挥手。
我没学过。我是真的菜。

……答得奇烂无比,居然还告诉我过了,太离谱。后来我听说可能是因为我找了内推,一个面试官无权淘汰我,所以必定有二面机会。不知真假。
——
二面结束一周了,没有后续消息,大概是凉了。二面问的都是简历里项目的细节。

你可能感兴趣的:(笔试面试,面试)