2023暑期实习历程总结

一.前言

        Hello 大家好久不见,已经三个月左右没有更新了,那我这三个月在干什么呢?自2023年3月中旬开始到现在五月底这期间接近三个月的时间里,我一直在进行2023暑期实习的投递和面试。这期间投递了包括各大中厂(阿里,腾讯,蚂蚁,美团,携程,拼多多,华为,SHEIN,快手等),外企(PayPal,亚马逊,微软没开),银行金融(微众银行,招商银行信用卡,东方财富,花旗金融,Wind等),其他(联想,吉利,海信,中兴,OPPO)等数十家公司和企业。

        从一开始的谨慎投递和筛选企业,到后面的没投投谁和查缺补漏;从一开始的磕磕巴巴,害怕面试和手撕,到后面的谈笑风生,来者不惧;从一开始的提心吊胆,自我怀疑,到后面的释然和豁达;找实习的整个期间是非常煎熬的,至少有三分之二的时间是没有任何音讯和结果的,同时你还要兼顾八股刷题和实验室工作以及论文开题。之前我每天都在担心自己找不到暑期实习从而丧失了秋招的主动权,甚至导致一个失败的人生,尤其是身边的同学都陆续接到Offer的时候;但到现在,要懂得人生的意义和方向有很多,在于你怎么寻找和自我定位,不要把眼光放窄,也不要期待过高。换句话说,失败总是贯穿于人生始终,这才是人生,共勉。

二.背景及结果

1.背景

  • 年级:2024届毕业生,也就是要参加今年秋招
  • 学历:双非本+某C9硕(保研专硕),均为科班
  • 岗位:JAVA 后端开发
  • 实习经历:无任何实习经历
  • 项目经历:19年国创项目(JAVA)+社区网站(JAVA)+实验室项目(C#)
  • 比赛经历:本科打ACM拿过一些小奖,以及数学建模等
  • 科研成果:无任何科研成果(自我评价没啥科研天赋)

2.结果

        截止到目前为止,博主一共拿到或者进入了最后流程泡池子的企业有五家,情况分别为:

  • 美团-美团到家(base北京):两面+HR面,已offer且offer已接。团子是最早给我offer的,部门业务比较核心,也是面试体验最好的公司之一。
  • 阿里菜鸟-产品技术部(base杭州):两面+HR面,已oc但最终拒了意向书。阿里菜鸟的实习福利是真的好,各种高薪资高房补高餐补,是我所有offer里最好的。
  • 携程-机票(base上海):两面+HR面,已oc但最终拒了意向。携程业务不错,是我所有offer里最wlb的。
  • 拼多多-服务端研发(base上海):两面+主管面+HR面,已oc但最终拒了意向。拼多多对实习生还是不错的,给的日薪资是所有offer里最高的,而且是面试体验最好的公司之二,实习具体部门岗位应该是去了再分配。
  • 华为-华为云(base杭州):技术面+主管面,已过泡池子。线下面试,一天直通,线下管饭,值得好评。HR给的评价还不错,就是等待周期比较长。华子应该是所有企业里唯一一个笔试成绩可以延续到秋招用的。

        博主最终在权衡之下,选择了去团子,目前人在北京,过两天入职(等我更新实习日常haha)为什么选择团子呢?一方面是团子offer接的比较早,不想毁约;另一方面,团子秋招背书不错,部门业务比较核心,转正率高,开的薪资也还可以(中规中矩);然后北京离家近一点,我也没去过北京玩。(但是北京租房真贵啊,火大!

三.面试历程

1.美团

2023暑期实习历程总结_第1张图片

(1)简历投递:2023-03-25

         团子暑期实习开得很早,在二月底三月初美团实习面试就已经进行的如火如荼了,我这已经算是投的很晚了,赶上了末班车。早投就会早两周拿offer,而且被捞的概率也会更大。建议大家多关注,早投早准备。

  • 投递岗位:转正实习-后端开发工程师(JAVA)
  • 事业群:都喜欢(都喜欢的话会被不同的部门捞,有明确意向群的话会流程快一点)
  • 意向地:北京、上海(不选的意向地部门不会捞你,非北上打九折)

(2)笔试: 2023-04-01

        团子没有各种测评,直接发笔试,这个好评。一共五道算法编程题,没有选择。个人感觉题目比较简单,相比前几批来说难度有所下降,博主做了 4.0/5.0

  • 第一题:字符串模拟 100%

题意:给定一行n个数字,数字序列之间默认使用加法连接。接下来给出m次操作,每次操作只改变一个+符号为其他运算符,请你输出每次改变符号后的结果,结果保留一位小数。

思路:题目很简单,直接模拟运算就行,每次只改变一个运算位置的符号,其他都是+号。主要保留精度,用Python的同学好像一直没法100%,我这里用C++一遍过。

  • 第二题:贪心+排序 100%

题意:输入一行数字,可以对其任意两个数字的位置交换任意次,请你输出最小的相邻前一个数字减去后一个数字的差的绝对值的和。

思路:因为可以交换任意次,当所有相邻数字最接近时差值绝对值和最小,因此直接贪心排序,遍历求差值的绝对值之和即可。

  • 第三题:线段树模板/树状数组 100%

题意:输入数字n代表有多少个收藏夹(收藏夹默认欣赏值为0),数字m代表对收藏夹进行了m次操作:

  • 0 xi yi:0操作表示将xi位置的收藏夹欣赏值更新为yi
  • 1 xi yi:1操作表示查询[xi,yi]的欣赏值区间总和

思路:单点更新,区间查询,典型的线段树/树状数组板子题,用前缀和会超时。

void UpdateTree(int P,int Val,int L,int R,int root){
    if(L >= R){
        files[P] = Val;
        sum[root] = Val;
        return;
    }
    int mid = (L+R)>>1;
    if(P <= mid)UpdateTree(P,Val,L,mid,root<<1);
    else UpdateTree(P,Val,mid+1,R,root<<1|1);
    sum[root] = sum[root<<1] + sum[root<<1|1];
    return;
}

int QueryTree(int l,int r,int L,int R,int root){
    if(l <= L && r >= R){
        return sum[root];
    }
    int mid = (L + R)>>1;
    int ans = 0;
    if(l <= mid)ans += QueryTree(l,mid,L,mid,root<<1);
    if(r > mid)ans += QueryTree(mid+1,r,mid+1,R,root<<1|1);
    return ans;
}

int main()
{
    int n,m;
    memset(sum,0,sizeof(sum));
    scanf("%d%d",&n,&m);
    for(int i = 0;i < m;i++){
        scanf("%d",&op[i]);
    }
    for(int i = 0;i < m;i++){
        scanf("%d",&x[i]);
    }
    for(int i = 0;i < m;i++){
        scanf("%d",&y[i]);
    }
    bool flag = false;
    for(int i = 0;i < m;i++){
        if(op[i] == 0){
            UpdateTree(x[i],y[i],1,n,1);
        }else{
            int res = QueryTree(x[i],y[i],1,n,1);
            if(flag)printf(" ");
            else flag = true;
            printf("%d",res);
        }
    }
    printf("\n");
    return 0;
}
  • 第四题:DP 0%

题意:用魔力值可以凭空生成水,也可以从旁边的杯子转移水,要求装满指定杯子消耗最少魔法值。

思路:看了一会直接跳了, 有人说数据比较弱,直接暴力也可以过100%

  • 第五题:树上DFS 100%

题意:计算二叉树根节点的权重。如果树上节点没有子节点,则权重为1;如果有子节点,且它是绿色,则它的权重为子节点权重的和,它是红色,则它的权重为子节点权重的异或。

思路:没什么好说的,直接 DFS 即可

struct Node{
    int color;
    vector childs;
}node[maxn];

int DFS(int root){
    if(node[root].childs.size() == 0)return 1;
    if(node[root].color == 1){
        return DFS(node[root].childs[0]) + DFS(node[root].childs[1]);
    }else{
        return DFS(node[root].childs[0]) ^ DFS(node[root].childs[1]);
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 2;i <= n ;i++){
        int p;
        scanf("%d",&p);
        node[p].childs.push_back(i);
    }
    for(int i = 1;i <= n;i++){
        scanf("%d",&node[i].color);
    }
    int ans = DFS(1);
    printf("%d\n",ans);
    return 0;
}

(3)一面: 2023-04-10  挂

        一面部门是美团买菜(base 北京),时长大概一小时左右,面试形式是互相介绍+问项目和八股+手撕+闲聊。一面时状态有些不好,具体面试题目已经不太记得了。问的八股多为场景题,比如Redis缓存雪崩/击穿和解决方法、Redis大Key和热Key问题如何处理、分布式锁等等,感觉问的不是很常规答得一坨。

        最后手撕题目为 Leetcode129. 求根节点到叶节点数字之和,手撕状态不好而且很紧张,在DFS的时候自底向上去写的,结果有很多边界条件没有处理好,导致做了很长时间被中断了,没有再写下去,面完之后就知道自己寄了,4.14日发了感谢信,等捞。题目复盘如下:

题意:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字,要求计算从根节点到叶节点生成的 所有数字之和 。

思路:自顶向下DFS即可,对路径上的数字进行十进制累加,如果是叶节点则直接返回结果;如果是非叶节点,则返回所有子节点的和。

class Solution {
public:
    int dfs(TreeNode* root,int preSum){
        if(root == nullptr)return 0;
        int res = preSum*10 + root->val;
        if(root->left==nullptr && root->right==nullptr){
            return res;
        }
        return dfs(root->left,res) + dfs(root->right,res);
    }
    int sumNumbers(TreeNode* root) {
        return dfs(root,0);
    }
};

(4)一面: 2023-04-24  过

        4.19日被捞了,在4.24日进行第二次的一面。被捞一面的部门是美团到家(base北京),时长大概一小时左右,面试官是位小姐姐。面试形式仍然是互相介绍+问项目和八股+手撕+闲聊。该面体验较好,小姐姐很温柔!八股问的比较基础,没答上来的有两个:

  • Redis集群脑裂以及解决方法
  • MySQL B+树可以存放多少数据,从数据页角度来说

        手撕题目是一道比较基础的DFS+回溯 Leetcode40. 组合总和 II,当时的思路为直接暴力枚举所有可能的组合,记录答案即可,但有些细节处理起来可能有点麻烦。题目复盘如下:

题意:给出一组候选数 c 和一个目标数 t ,找出候选数中起来和等于 t 的所有组合。c 中的每个数字在一个组合中只能使用一次。注意:

        1. 题目中所有的数字(包括目标数 t )都是正整数
        2. 组合中的数字要按非递减排序
        3. 结果中不能包含重复的组合
        4. 组合之间的排序按照索引从小到大依次比较,小的排在前面,如果索引相同的情况下数值相同,则比较下一个索引。

要求:空间复杂度O(n) , 时间复杂度O(2^n)

(5)二面: 2023-04-26  过

        19号一面结束之后,自我感觉表现很好希望很大,果然在26号安排了二面。二面面试官和一面面试官是一个部门,应该是leader,时长也是一小时左右。面试形式仍然是介绍+问项目+手撕+闲聊。二面和一面的区别在于,八股基础问的比较少,大部分时间在聊项目、设计和架构,聊优化,聊一些拓展的东西。面试官很温柔,会引导,学会了不少东西。

        手撕是一道判断完全二叉树的题 Leetcode958. 二叉树的完全性检验,当时思路是直接用层序遍历的方式去做,写的时候有些边界条件没考虑清楚debug了很长时间,面试官一直在耐心等做出来,题目复盘如下:

题意:即给定一个二叉树,确定他是否是一个完全二叉树。完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。(第 h 层可能包含 [1~2h] 个节点)

思路:若一个结点左右孩子或右孩子为空,后面所有结点的孩子必然全为空,则满足完全二叉树,否则不是完全二叉树。那么,我们可以采用二叉树的层序遍历方法,将所有结点(包括空节点)全部入队,遇到第一个孩子为空的节点则检查其后面是否还有非空的节点,有的话不是完全二叉树,没有则是完全二叉树。

        撕完之后,又聊了一些生活上的事情,比如哪里人、未来规划、兴趣爱好、玩啥游戏等等,总之整个过程还是比较愉快和轻松的。

(5)offer: 2023-05-08  接受offer

        二面完之后正好赶上五一劳动节放假,一般来说二面完三天左右就会出结果,我还以为凉了。五一假期之后5.08收到了邮件offer,并没有HR面。咨询之后确实是正常流程,美团开发没有HR面,二面完之后直接出结果到邮箱。考虑再三还是接了第一份来之不易的offer,感谢认可!xdm 团子见!

2.阿里巴巴-菜鸟

2023暑期实习历程总结_第2张图片

(1)简历投递:2023-03-29

         阿里巴巴的简历投递一次最多可以投递三个不同的岗位方向,按照志愿顺序进行筛选,笔试是通用的。整个阿里巴巴集团包括淘天、阿里云、饿了么本地生活、菜鸟、飞猪、盒马、灵犀互娱等都用的一套招聘系统,所以投递之前先考虑好部门方向顺序,只有上一个挂了才能流转到下一志愿(不过最近阿里业务调整,各部门独立经营,不知道明年如何)。因为三月中旬刚开始投递了蚂蚁集团,八股算法都没怎么看,挂的飞快。隔了很久才决定再投一次阿里,博主的投递顺序是菜鸟、本地生活、CTO线(再给我一次机会的话,我会投大淘宝、本地生活、菜鸟)。

(2)一面: 2023-04-23  过

        阿里是先电话一面或者叫简历面,一面通过之后才会发笔试邀请,而且一面不会预先发邮件给你,直接电话突袭,所以一定要留意手机。

        一面是电话面,主要内容就是了解一下你的个人信息,简历上的项目介绍,会问一些基本的八股(MySQL 索引相关、分页、Redis 缓存过期策略等),然后是优缺点、兴趣爱好什么的。整个过程大概30分钟,没有手撕环节,反馈也很快,过了之后当天就会给你发笔试链接、素质测评链接。主要是投简历到一面的时间太长了,差不多等了快一个月才被捞出来。。

(3)笔试: 2023-04-27  

        一面过后,统一参加阿里27号的最后一场开发岗笔试,阿里的笔试难度在各大厂中处于中等偏上吧,后端开发包括选择题(单选+多选)+算法编程两类题型。选择应该是包括数据库、操作系统、计算机网络、数据结构的408类型题目,都是基本知识难度不大。编程题三道,具体题目等我后面完善一下,只做了第一二题:第一题是个简单模拟,但是题意比较难懂,做了半天只有50%左右,最后剩了二十分钟看了眼第二题,截止之前一遍过100%,最后结果是1.5/3.0,做完感觉自己寄了。(题目待补)

(4)二面: 2023-05-08 过

        笔试完以为自己寄了,结果过两天就收到了二面的面试邀请,面试平台是在钉钉会议。二面的面试官感觉比较忙,中间推迟了一会,整个面试过程只有20分钟,无手撕环节

        面试内容包括自我介绍、部门介绍(问对本部门的了解,介绍比较详细)、介绍简历上最有把握的一个项目(以及一些项目的优化、场景)、闲聊+反问,八股没怎么问,面试官还是很有压迫感的,多次打断八股吟唱施法(好了好了,我知道你会这个了×

(5)HR面: 2023-05-23 过

        二面完接着就收到了5.11号的HR面,仍然是在钉钉会议。但是由于HR复阳了,会议就推迟到了5.13号,然后13号面试官还是身体不适,就一直推迟到了5.23号才进行的HR面。

        HR面共13分钟,面试内容包括自我介绍、对部门的了解以及部门和业务介绍、在项目开发中遇到的困难以及怎么解决的、个人的优缺点、职业规划(学习实践、经验积累、工程师->架构师)、未来意向城市+反问,整个过程以聊天为主,不用紧张。

(6)offer: 2023-05-24 已拒

        HR面完第二天就收到了录用offer,流程还是很快的。offer当天会有电话oc,告诉你实习生的福利待遇,包括实习薪资、房补、餐补,给四五天的时间考虑是否接受。阿里的实习生福利是真滴好,不过最终考虑再三还是拒了这个offer,我们有缘秋招再见!(不过插一句,阿里菜鸟的整个面试过程都没有手撕环节,这个感觉还是可以的~

3.拼多多

2023暑期实习历程总结_第3张图片

(1)简历投递:2023-04-02

         拼多多招聘投递官网比较简单,投递时可以选择两个志愿(一志愿优先),Java开发只有服务端研发实习生一个岗位,我就只投了一个志愿。意向城市或面试站点我选择的上海且不接受调剂。拼多多开的也很早,我投的时间也很晚了,而且pdd面试流程比较长,是三面技术面(第三面为主管技术面)+HR面,而且面试时间一般都安排在周末进行(面试官都比较忙QAQ),所以每个流程之间大概都间隔一周左右。

(2)个性测评(简历过筛):2023-04-15

        等了差不多两周左右,周六收到了pdd的测评和笔试通知,说明简历被捞起来过筛了。个性测评随时可以做,会有一个专属的链接地址,只要在有效期内完成即可。主要内容就是性格测试、服从性测试等,题型可以参考北森题库。笔试的话是在固定日期分批统一进行的,一般在收到测评邮件的两三天后。

(3)笔试:2023-04-18

        博主参与的4.18的笔试属于拼多多第三批后端开发的笔试,笔试一共四道编程算法题,考试时长为120min,考试平台是牛客。整个笔试难度感觉不是很大,也有人说介于第一批和第二批难度之间,博主最后做了 3.2/4.0 。现在对笔试题目做一下复盘:

  • 第一题:数学+边界判断 100%

题意:给定值X、Y,算出同时满足下列3个条件的所有菱形个数:

           - 菱形存在正面积

           - 菱形每个顶点的横坐标x_i为[0,X]的整数,纵坐标y_i同理

           - 菱形的对角线平行于坐标轴

思路:题意很简单,在定义上只要知道菱形的特点是四条边相等的平行四边形且对角线相互垂直平分(注意对角线不一定相等),题目要求对角线平行于坐标轴且顶点坐标均为整数,因此直接暴力枚举左下顶点并进行合法性判断即可。

int main()
{
    int X,Y;
    scanf("%d%d",&X,&Y);
    int sum = 0;
    for(int i = 1;i <= X;i++){
        for(int j = 1;j <= Y;j++){
            sum += min(Y - j,j) * min(X - i,i);
        }
    }
    printf("%d\n",sum);
    return 0;
}
  • 第二题: 暴力 100%

题意:二维平面上有n个点,他们的横纵坐标均为正整数,且没有两个点有相同的横坐标,把所有点从左到右依次通过直线连接,形成的折线与横坐标可形成一片投影区间。 若最多只能交换其中两点的纵坐标值,问如何交换可得到最大的投影面积。

思路:因为只能交换其中两点的纵坐标,而横坐标保持不变,交换后会影响该两点左右两侧共四个小阴影梯形的面积,因此直接暴力判断交换位置的最大增量面积即可,处理一下遍历条件要不会超时。

struct Node{
    int x,y;
    bool operator < (const Node& another)const{
        return x < another.x;
    }
}node[maxn];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 0;i < n;i++){
        scanf("%d%d",&node[i].x,&node[i].y);
    }
    sort(node,node+n);
    int ans = 0;
    int ans_x = 0,ans_y = 0;
    for(int i = 0;i < n;i++){
        for(int j = i+1;j < n;j++){
            int ori_i = (i > 0?((node[i-1].y + node[i].y)*(node[i].x - node[i-1].x)):0) + (node[i+1].y + node[i].y)*(node[i+1].x - node[i].x);
            int ori_j = (j < n-1?((node[j+1].y + node[j].y)*(node[j+1].x - node[j].x)):0) + (node[j].y + node[j-1].y)*(node[j].x - node[j-1].x);

            int new_i = (i > 0?((node[i-1].y + node[j].y)*(node[i].x - node[i-1].x)):0) + (node[i+1].y + node[j].y)*(node[i+1].x - node[i].x);
            int new_j = (j < n-1?((node[j+1].y + node[i].y)*(node[j+1].x - node[j].x)):0) + (node[i].y + node[j-1].y)*(node[j].x - node[j-1].x);

            int res = new_i + new_j - ori_i - ori_j;
            if(res > ans){
                ans = res;
                ans_x = i;
                ans_y = j;
            }
        }
    }
    if(ans > 0)printf("%d %d\n",node[ans_x].x,node[ans_y].x);
    else printf("-1\n");
    return 0;
}
  •  第三题:模拟 20%

题意: 多多是一个服务端开发,线上服务需要维护一堆配置,为了效果,同一个配置对于不同的人群可能值不一样。比如下面表格,根据城市和是否是IT工程师维度的不同,取值不一样。多多想把线上参数都像上面合并一下,已知一个参数的配置列表,以及每个维度的所有取值,多多想知道这个参数配置最少能简化成多少行。最终输出一个整数代表配置最少能简化的行数。

思路:题意需要理解一下,就是给你一个多行多列的配置表,对于有些配置列的剩余列参数都是一样的,因此可以进行合并,让你输出最少能简化的行数。第一感觉是个模拟,输入也比较复杂,由于时间不够了,只做了最简单的判断,拿了20%。

  • 第四题:博弈  100%

题意:多多君和皮皮虾在海外大探险中发现了一处宝藏一个装满了金币的宝箱宝箱中有N枚金币,怎么分配金币却成为了大麻烦,于是多多君和皮皮虾约定了以下的规则:

        - 多多君和皮皮虾轮流进行金币的选取,由多多君先选

        - 当金币数量是偶数时,可以选择拿走一半的金币,也可以只拿走一枚金币

        - 当金币数量是奇数时,只能拿走一枚金币

  多多君和皮皮虾两人都会选择自己能拿走最多金币的策略,请问两人分别可以拿走多少金币。

 思路:经典博弈论问题,已知两人策略最优,问博弈结果。其实这种题只要找到二者的最优博弈策略即可模拟得到结果。分析可得两人的最优策略为:

        - 若当前为奇数,则只能取一个;

        - 若当前为偶数,则判断取一半之后是剩下偶数还是奇数,若剩下偶数则选择只取一个,否则取一半。这样可以让对方拿的尽可能少,让对方的选择尽可能少。

  注意 2 是个特例,需要特判一下。代码找不到了,就先这样吧写起来不难。

(4)一面: 2023-04-22  过

        笔试之后在4.19号收到一个登记表,就说明过了笔试被捞进了面试。一面约在 4.22 号下午,面试地址是拼多多自己的面试平台,面试时长大概一小时左右,拼多多的面试是我面试体验最好的公司之一,面试官都很温柔、耐心、平易近人,只能说nice。由于时间有些长了,面试内容记不太清楚了。面试形式仍然是自我介绍+项目+基础八股+手撕+反问的流程,问的问题都比较基础,没有特别离谱的。

        其中,手撕题目为 Leetcode45. 跳跃游戏 II 。看到这个题目的时候面试官引导着用DP去做,最后也是用DP去写的,只不过写了个二重循环(时间复杂度比较高),看起来并没有达到面试官的预期要求。注意:拼多多的面试平台只能写代码没办法去跑case,只能由面试官在后台给你跑,因此大部分手撕都是白板写写代码讲讲思路,并不会像美团一样要求去跑样例100%。题目复盘如下:

题意:给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处。请返回恰好到达 nums[n - 1] 的最小跳跃次数。

思路:和跳跃游戏I一样,只不过加了一个求跳跃次数的限制。其实在I的基础上,当我们去更新最大跳跃范围时就意味着必须进行一次跳跃,我们在这时累积跳跃次数即可。

class Solution {
public:
    int jump(vector& nums) {
        int len = nums.size();
        int i = 0,j = 0;
        int ans = 0;
        while(i <= j && j < len-1){
            int index = i;
            ans++;
            for(int k = i;k <= j;k++){
                index = max(index,k + nums[k]);
            }
            i = j+1;
            j = index;
        }
        if(i > j || j < len-1)return -1;
        return ans;
    }
};

         然后是反问环节,询问面试官的部门业务,面试官并没有告知。因为拼多多其实面试是随机分配的部门面试官,你面试的部门并不一定会成为你实习的部门,最终的实习生岗位分配是在入职时统一根据业务需要和面试情况进行分配的。最后,一面自我感觉中规中矩吧,基本八股和项目都答得不错,手撕虽然没有达到面试官的预期解法,但也是按照引导把思路写出来了(手撕写出来 > 全部通过test case > 实现标准解法 > 代码风格),进下一面希望还是蛮大的。

(5)二面: 2023-05-06  过

        一面完大概两周左右,收到了二面的邀请。不知道一二面是否为平行面,二面仍然是自我介绍+项目+基础八股+手撕+反问的流程,相比一面来说八股问的比较少而侧重于项目的设计、细节、难点和亮点,整个过程大概也是一个小时。手撕题目为:

题意:现有一个长度为n的有序数组序列,并给你一个数值v,请在数组序列中寻找的k个值,使其与数值v的差值的绝对值之和是最小的。

思路:注意到数组序列有序,且差值的绝对值之和最小即找k个数值上最接近v的数,因此我们只需要通过二分查找的方式找到第一个最接近v的数组位置,然后维护两个指针向左右方向扩展,找到k个最接近的数组值求和即可。

        手撕不是很难,面试官要求手写二分查找函数。二面自我感觉良好,接下来就是等待三面也就是主管面。

 (6)三面: 2023-05-10  过

        二面之后两天左右就收到了三面的邀请,邮件会在标题上标明主管面。三面约在10号下午四点,不过前一天由于主管较忙,临时改到了10号下午的五点,也就是推迟了一个小时,也重新发了邀约邮件。主管面因人而异吧,有的人仍然会以技术为主,包括八股和手撕(比如拼多多主管面比较喜欢考手撕大数加法、乘法),有的人就直接以闲聊为主。

        我的主管面时长大概一个小时左右,面试内容包括自我介绍+挖项目+一些拓展性的闲聊,无手撕环节也没有八股问答,感觉还是比较轻松的。在拓展性的闲聊方面花的时间比较多,主要聊了一些自己项目的架构设计、缺点以及优化方向,聊了一些最近看过的编程书籍、技术发展,我推荐了设计模式的Head First,然后就又开始聊设计模式相关的话题。整个过程主要都是面试官在讲我在听,听得出来不愧是主管,技术和经验积累非常深厚,像是听了一堂课,也算学到了不少东西。中间由于网络问题我还掉了一次线,手忙脚乱的让面试官等了一会,耽误了大概有个五六分钟。

 (7)HR面: 2023-05-19  过

        三面之后第二天也就是12号就收到了HR面的邀请,看来反馈是很迅速的。HR面约在了5.19号,大概一周之后。HR面大概20分钟,面试内容包括自我介绍、问了意向发展城市和预期薪资、介绍了实习的一些要求(比如出勤时长必须78月满勤),问了目前还拿到了哪里的offer(说了美团,以及一些在最终流程),然后聊了一些兴趣爱好、能否接受pdd的作息等等。

(8)offer: 2023-05-26  已拒

         HR面一周之后,26号收到了拼多多的offer邮件,offer没有电话oc只有邮件。整个拼多多的面试流程时间跨度还是蛮长的,拼多多工作地点在上海,具体业务部门岗位暂未分配。房补合并到日薪资里一起发放,所以拼多多的日薪是最高的,福利包括上班的免费工作餐等。拼多多对实习生还是挺好的,转正率高,开的也不少。但是offer时间太晚了,期间也是在美团、菜鸟、拼多多之间纠结,最终还是拒绝了拼多多,有缘秋招再见!

4.携程

5.华为-华为云

你可能感兴趣的:(生活,求职招聘)