美团 一面/二面 客户端 面经
一面 8月26日
我觉得自己面得很不好,具体问题不太记得了(现在记得的只有:chmod有啥缺陷),但是面试官说他有一套自己的考核标准,度量我的知识内化能力,进而考核我的学习风格和学习能力。
- 算法题:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int length1 = nums1.length, length2 = nums2.length; int totalLength = length1 + length2; if (totalLength % 2 == 1) { int midIndex = totalLength / 2; double median = getKthElement(nums1, nums2, midIndex + 1); return median; } else { int midIndex1 = totalLength / 2 - 1, midIndex2 = totalLength / 2; double median = (getKthElement(nums1, nums2, midIndex1 + 1) + getKthElement(nums1, nums2, midIndex2 + 1)) / 2.0; return median; } } public int getKthElement(int[] nums1, int[] nums2, int k) { int length1 = nums1.length, length2 = nums2.length; int index1 = 0, index2 = 0; int kthElement = 0; while (true) { // 边界情况 if (index1 == length1) { return nums2[index2 + k - 1]; } if (index2 == length2) { return nums1[index1 + k - 1]; } if (k == 1) { return Math.min(nums1[index1], nums2[index2]); } // 正常情况 int half = k / 2; int newIndex1 = Math.min(index1 + half, length1) - 1; int newIndex2 = Math.min(index2 + half, length2) - 1; int pivot1 = nums1[newIndex1], pivot2 = nums2[newIndex2]; if (pivot1 <= pivot2) { k -= (newIndex1 - index1 + 1); index1 = newIndex1 + 1; } else { k -= (newIndex2 - index2 + 1); index2 = newIndex2 + 1; } } } }
很遗憾的是,虽然用的是leetcode官方同款写法,面试官不太能认可我的代码,后面也没让进一步解释,说是因为这道题写不写出来也不能影响面试结果。
面试官暗示我Android部门hc不怎么多,问我愿不愿意转前端或者是ios,我说我愿意,我确实挺乐意一套前端的,至此我基本知道自己凉透心了,还是自己太菜了。
Hr 9月3号约我面试,难以置信……
二面 9月04日
面试官是前端的
- 询问项目,基本没细问
- 你上次写了代码是吧(一面面试官估计对我评价很差),再来一道吧,斐波拉契数列
-
class Solution{ public int fib(int n){ int a = 0, b = 1; for(int i = 0; i < n/2; i++){ a = (a + b) % 1000000007; b = (a + b) % 1000000007; } if(n%2 == 1){ return b; }else{ return a; } } }
- 面试官觉得我代码写得怪,不过这位面试官让我运行结果给他看,是对的。
- 为什么想做前端
- 为什么刷leetcode
- 城市选择(我说我北京上海都可以,非要选的话我选择hc多的,面试官反问为什么选择hc多的,我说我喜欢稳妥)
- 目前手里的offer情况
- 反问