美团-暑期实习二面

职位名称:【转正实习】软件开发工程师-后端方向

面试时间:2024-04-25

面试总长:90min

【自我介绍 】1min30s

实习可以尽快到岗?可以实习多久?

怎么看你会的是C++,要根据工作转java?

了解过后端的工作栈吗?有哪些?

平时的学习习惯?技术栈,判断接下来想学的技术,这些信息去哪里获取?觉得接下来学什么会对自己有帮助?

【项目】8min

询问了项目过程中的挑战,技术实现,是否考虑过安全性,如通信、权限、身份验证、传送数据进行加密等。

【C++】11min

面向对象开发相对面向过程,有哪些新特性使它更高级,或是可扩展性,封装性更好?(糊里糊涂)

C++的多态有哪些实现方式?(讲了静态多态和动态多态)

虚函数的实现?

指针和智能指针的区别在哪里?如何保证的自动释放?(不会,说没看过源码。。。)

引用和指针在使用场景上的区别?(没答上来)你平时指针一般什么时候使用?引用一般什么时候使用?(没答上来)引用相对指针的优点?(提了指针的安全性问题,其他的答不上来了)

有系统学习过设计模式吗?了解过哪些?(只说了工厂模式和单例模式)有了解过设计原则吗?(没有)那为什么会去了解设计模式?

【SQL题】7min

CLASS:id,name

STUDENT:id,class_id,name,age

查询班级人数最多的前十个班级,倒排输出,输出班级名称与人数

(没做出来,讲了思路)

【场景题】34min

抽奖

每一个活动都有活动名称,活动介绍,若干个奖项,中奖概率,以及“谢谢”。还有中奖名单,包含用户名,奖品,中奖时间。每个用户每个活动的次数不同。可以有多个不同的活动,设置不同的奖品与概率与数量。建立表。

(没建清楚,最后没能解决不同的活动有不同的奖项个数的问题)

针对“谢谢”你会有一个奖品表项吗?为啥?(最后说不用了)

【手撕代码】30min

二分查找-II

有一个升序排列的,含重复数字的数组,要求查找到目标值第一次出现的下标并返回,如果不存在返回-1。要求时间复杂度O(logn),空间复杂度O(n)。

(做的磕磕绊绊,15min出第一版,遍历不满足时间复杂度;后来又花了12min通过。)

全部评论
同学考虑淘天集团的暑期实习吗 可以私聊我
点赞 回复 分享
发布于 03-31 12:25 浙江
mark了感觉牛主被折磨了😭
点赞 回复 分享
发布于 03-31 12:04 广东

相关推荐

生成哈夫曼树[E卷,100分]题目描述给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于 1 。请完成一个函数,根据输入的数字数组,生成[哈夫曼树],并将哈夫曼树按照中序遍历输出。为了保证输出的[二叉树中序遍历]结果统一,增加以下限制:又树节点中,左节点权值小于等于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度高度小于等于右子树。注意: 所有用例保证有效,并能生成哈夫曼树提醒:哈夫曼树又称最优二叉树,是一种带权路径长度最短的一叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为 0 00 层,叶结点到根结点的路径长度为叶结点的层数)输入描述例如:由叶子节点 5 15 40 30 10 生成的最优二叉树如下图所示,该树的最短带权路径长度为 40 * 1 + 30 * 2 +5 * 4 + 10 * 4 = 205 。输出描述输出一个哈夫曼的中序遍历数组,数值间以空格分隔示例1输入55 15 40 30 10输出40 100 30 60 15 30 5 15 10#include <functional>#include <iostream>#include <vector>#include <queue>using namespace std;struct TreeNode{    int val;    TreeNode* left;    TreeNode* right;    TreeNode(): val(0), left(nullptr), right(nullptr){}    TreeNode(int n): val(n), left(nullptr), right(nullptr){}    TreeNode(int n, TreeNode* left, TreeNode* right): val(n), left(left), right(right){}};auto method = [](TreeNode* a, TreeNode* b){    return a -> val > b -> val;};void inOrder(TreeNode* root){    if(root -> left){        inOrder(root -> left);    }    cout << root -> val << ' ';    if(root -> right){        inOrder(root -> right);    }}int getHeight(TreeNode* node) {    if (!node) return 0;    return 1 + max(getHeight(node->left), getHeight(node->right));}int main(){    int n;    cin >> n;    priority_queue<TreeNode*, vector<TreeNode*>, decltype(method)>nodeList(method);    int perVal;    for(int i = 0; i < n; i++){        cin >> perVal;        TreeNode* node = new TreeNode(perVal);        nodeList.push(node);    }    TreeNode* root = new TreeNode();    while(!nodeList.empty()){        if(nodeList.size() > 1){            auto a = nodeList.top();            nodeList.pop();            auto b = nodeList.top();            nodeList.pop();            TreeNode* father = new TreeNode(a -> val + b -> val);            if(a -> val < b -> val){                father -> left = a;                father -> right = b;            }            else{                int aH = getHeight(a);                int bH = getHeight(b);                if(aH < bH){                    father -> left = a;                    father -> right = b;                }                else{                    father -> left = b;                    father -> right = a;                }            }            nodeList.push(father);        }        if(nodeList.size() == 1){            root = nodeList.top();            nodeList.pop();        }    }    inOrder(root);}
点赞 评论 收藏
分享
评论
7
36
分享

创作者周榜

更多
牛客网
牛客企业服务