美团-大数据开发实习面试

一面

算法问了4道都比较简单,分别考的二分,递归,双指针以及动态规划。

1.二分搜索

704. 二分查找

力扣原题,注意边界条件,以及是否能取等号即可。

2.二分搜索(递归实现)

704. 二分查找

代码如下:

public int search(int[] nums, int left, int right, int target) {
        while (left <= right){
            int mid = left + (right - left) / 2;
            if (nums[mid] == target){
                return mid;
            }else if (nums[mid]< target){
                return search(num, mid + 1, right, target);
            }else{
                return search(num, left, mid - 1, target);
            }
        }
        return -1;
 }

 3.双指针

递增数组,判断数组中是否存在两个数之和为target,思路是双指针,一个begin,一个end,每次移动一个指针。

167. 两数之和 II - 输入有序数组

代码如下:

public int[] twoSum(int[] numbers, int target) {
        int p1 = 0;
        int p2 = numbers.length - 1;
        while (p1 < p2){
            int sum = numbers[p1] + numbers[p2];
            if (sum == target){
                return new int[]{p1 + 1, p2 + 1};
            } else if (sum < target){
                p1++;
            } else {
                p2--;
            }
        }
        //无解
        return new int[]{-1, -1};
}

 4.最长递增子序列LIS(动态规划)

300. 最长递增子序列

DP代码如下:

public int lengthOfLIS(int[] nums) {
        int dp[] = new int[nums.length];
        dp[0] = 1;
        int maxSeqLen = 1;
        for (int i=1; i<nums.length; i++) {
            //初始化为1
            dp[i] = 1;
            for (int j = 0; j <= i; j++) {
                //对dp[i]进行更新,严格递增
                if (nums[i] > nums[j]){
                    dp[i] = Math.max(dp[i], dp[j]+1);
                }
            }
            maxSeqLen = Math.max(maxSeqLen, dp[i]);
        }
        return maxSeqLen;
}

最优时间复杂度为O(nlogn)

写完四道算法之后,开始问项目,问了大概半小时项目,简单的问了一下八股文。

八股文

1.MapReduce的整个过程原理。

2.Spark参数executor.memory与executor.memoryOverhead的区别。

然后简单介绍了一下美团平台做的啥业务,balabala一堆,也不太想听。

二面

项目聊了40分钟,中间讲了一下他们公司做的业务。

然后问我大数据输入流下Flink程序如何优化(他们那边流程序一次跑一天),我说先选择stateBackend,选rocksdb,之后要进行黑盒参数优化。

问了我Spark程序核内比如何设置比较合理,怎样避免OOM。我说核内比的大小是由硬件环境以及应用程序的特征决定的,基于经验的话,我们实验室的鲲鹏ARM机器上(288核 360G内存),1:1.5的核内比就可以,在华为云(192核 300G内存)的X86机器上, 1:3以及1:4比较合适。

又问了我遇见过executorMemoryOverhead空间不足报错的问题没,我说没有,只遇见过参数不合理的时候,超过了yarn分配的资源上限导致报错,并未遇见过不足的问题。

之后问我大数据集下,应该调整哪些配置参数的值来更好地进行Spark SQL程序的优化,我回答了spark.sql.shuffle.partition以及spark.broadcast.threshold。

又问了我Spark程序优化以及Flink程序优化的这些参数大概选了多少个,选了哪些,以及是如何选择出来的。

八股文没有问就,面试官让我写了一道SQL以及一道算法,八股文没有问。

SQL,聚合排序以及Join的操作,我说不会写SQL,就说了一下思路。

算法:两数求和(逆序链表)

2. 两数相加

考察的链表基础知识,整一个carry进位即可,按照顺序求解。

然后又介绍了一下他们公司的业务balabala,问我的意向之类的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值