美团 一面/二面 客户端 面经

一面 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情况
  • 反问
大概是被hr捞起来刷kpi了,叹气。
#面经##美团##校招##安卓工程师#
全部评论
楼主你好,请问你是实习、校招还是社招?岗位是什么?开发的话,是Java方向还是C++方向?或者其他语言方向~
1 回复 分享
发布于 2020-09-04 17:58
楼主这个fib是怎么写的?我也没看懂😂
点赞 回复 分享
发布于 2020-09-08 17:32
那个部门呢?
点赞 回复 分享
发布于 2020-09-04 23:59
两有序数组中位数不是hard嘛,现在客户端面试都这么难了嘛
点赞 回复 分享
发布于 2020-09-04 20:41

相关推荐

03-25 14:40
门头沟学院 C++
1.&nbsp;什么是虚函数、纯虚函数?2.&nbsp;什么函数不能声明为虚函数,析构为什么要声明为虚函数?3.&nbsp;没有虚函数的话,C++如何实现多态4.&nbsp;同一个类的不同对象的虚函数表是同一个吗5.&nbsp;基类的虚函数表存放在内存的什么区,虚表指针vptr的初始化时间?6.&nbsp;虚函数内部调用非虚函数是调用指针类还是对象类?7.&nbsp;纯虚函数?使用场景有哪些?8.&nbsp;纯虚继承解决什么问题?1.&nbsp;虚函数是在面向对象编程中用于实现动态多态特性的机制;通过将基类的成员函数声明为虚函数,可以在派生类中重写这些函数,从而根据对象的实际类型确定调用函数版本;纯虚函数是一个在基类声明的虚函数,但没有在基类中提供实现。通过在函数声明的结尾使用=0来标记;2.&nbsp;构造函数:因为在对象构建之前还未创建虚函数表;静态函数:静态函数没有this指针,与对象无关,不能声明为虚函数;内联函数:虚函数可以是内联的,但是当虚函数表现为多态的时候不可以是内联,因为内联是发生在编译期间的,而动态是发生在运行状态;析构函数可以是虚函数,而且建议都这么做,当将基类中的析构函数声明为虚函数的时候,在执行析构的时候,可以确保派生类的析构函数也被执行;3.&nbsp;&nbsp;使用函数指针,使用模版(在编译时实现多态),使用策略模式(运行在运行时选择算法和行为);4.&nbsp;同一个类的不同对象的虚函数表是相同的,因为虚函数表是按类生成的,而不是按对象生成的。每个对象的虚函数指针指向类的虚函数表,从而实现多态调用;5.&nbsp;存储在常量区(只读数据段),vptr的初始化发生在对象的构造函数被调用时;6.&nbsp;当一个虚函数内部调用一个非虚函数时,调用的是指针类型所指向的类中的函数,而不是对象实际类型的类中的函数;7.&nbsp;纯虚函数是C++中用于定义抽象基类的工具。一个包含纯虚函数的类被称为抽象类,不能被实例化。纯虚函数的目的是让基类定义一个接口,而不提供具体的实现,具体的实现由派生类来完成。场景:定义通用接口、实现多态、延迟绑定;8.&nbsp;纯虚继承(也称为虚继承)是C++中用于解决多重继承带来的某些问题的一种机制。以下是纯虚继承主要解决的问题:解决函数调用的歧义,避免成员变量的重复,解决菱形继承中的重复继承问题(菱形继承是指一个派生类从两个基类派生,而这两个基类又有一个共同的基类。如果不使用纯虚继承,派生类会从两个基类各集成一份共同基类的成员,导致重复继承和访问歧义;纯虚函数继承确保派生类只继承一份共同基类的成员);
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务