拼多多服务端开发四面面经(9.22已oc)
赶在第一批尾巴投递的,过了几天就笔试了
笔试:2.0/4.0
拼多多一面
8.10 45min
给一个字符串str,将其转换为相应的long值,如果不是合法数字则返回null
问了下面试官,可能会非法,不会溢出
long long transType(String numStr) {
if (numStr.empty()) return null;
bool is_positive = true;
int n = numStr.size();
int i = 0;
if (numStr[i] == '+') {
is_positive = true;
++i;
} else if (numStr[i] == '-') {
is_positive = false;
++i;
} else if (numStr[i] < '0' || numStr[i] > '9') {
return null; // invalid
}
while (numStr[i] == '0') ++i; // remove prefix zero
long long num = 0;
while (i++ < n) {
if (numStr[i] >= '0' && numStr[i] <= '9') {
num = num*10 + (numStr[i] - '0');
} else {
return null;
}
}
if (!is_positive) {
num = -num;
}
return num;
} topk(快速选择or最大堆,还说了为啥快速选择是On时间复杂度
海量数据topk(我答的是单机解法,最后把面试官搞得有点晕,最后直接把编程之美这本书搬出来了
两个很大的有序数组,求交集(先说了双指针,经过提示,如果交集稀疏可以用二分
有向图如何判定是否有环(我很心虚的说拓扑排序,但是展开讲的时候有点磕磕绊绊的
理想答案:方法是重复寻找一个入度为0的顶点,将该顶点从图中删除(即放进一个队列里存着,这个队列的顺序就是最后的拓扑排序),并将该结点及其所有的出边从图中删除(即该结点指向的结点的入度减1),最终若图中全为入度为1的点,则这些点至少组成一个回路。
腾讯实习巴拉巴拉
阿里实习,展开挺多的
拼多多二面
8.22 1h
聊实习
消息队列kafka,问了一些浅层的,如何持久化,消费了会不会删除消息,如何维护进度,深层我就不熟悉了,坦白在阿里实习时才接触,我写cpp的了解不深
问我熟悉哪种语言,我说c++,但面试官应该是写java的
c++多态怎么了解、虚函数是什么
友元函数是什么
为什么构造函数不能是虚函数,为什么析构函数得是虚函数
深拷贝与浅拷贝的区别
HTTP与HTTPS的区别,TLS的握手过程
epoll的LT与ET的区别
TCP可靠性如何保证(seq、ack、滑动窗口、拥塞控制
手撕:判断一个数是否是完全平方数
最快的是用一个公式:1+3+5+7+ ... + (2n-1) = n^2
class Solution
{
public:
bool isPerfectSquare(int num) {
int num1 = 1;
while(num > 0) {
num -= num1;
num1 += 2;
}
return num == 0;
}
}; 也可以用二分法或牛顿法不断减小平方根的范围,最后判断离平方根最近的整数,其平方是否等于num来判断num是否是完全平方数
手撕:two sum
原来pdd的面试间是可以运行代码的,但是只能由面试官运行,这意味着报错原因是看不到的。。所以在写two sum时有很多小错误,比如忘记加某个头文件,漏掉某个分号,函数原型写错了,每次面试官都说你再仔细检查一下,这真的是考验肉眼观察能力了
过了几天收到了下一轮面试邮件,括弧里面就写了hr面,心想才两面就hr面了,太爽了吧
拼多多hr面
8.28 35min
自我介绍
还有其他offer吗
对各互联网大厂的评价
你更喜欢哪种企业氛围
为什么投递这个岗位
接受调剂
工作的地域偏好
怎么选择毕业后的第一份工作
你希望拿到什么样的薪资
了解拼多多的情况吗,你怎么看待11116,能接受11116吗
老家哪的,父亲母亲工作,国企还是私企,独生子吗
有女朋友吗
说说你受到的挫折
为啥入党
实习时有跟产品对接吗
如果项目需要delay你会怎么做
实习期间碰到的有挑战的事,你觉得有成就感的事
如果给offer,可以提前实习吗,最快啥时候正式入职
hr面完当天又收到下一轮面试的邮件,在牛客上看到挺多人也是这样的,这人数感觉也不是sp加面
拼多多四面
9.3 1h
聊两段实习,挺深入的,腾讯的有些回答不上来
后面聊到实习内容时,手撕了代码,输入两个队列,每个元素是带时间戳的消息,输出一个经过时间排序后的合并队列
面试没有复制自己写的代码,但是思路差不多,大致代码如下:
queue<pair<string, int>> mergeQueue(queue<pair<string, int>> q1, queue<pair<string, int>> q2) {
queue<pair<string, int>> q;
while (!q1.empty() && !q2.empty()) {
while (!q1.empty() && q1.front().second < q2.front().second) {
q.push(q1.front());
q1.pop();
}
while (!q2.empty() && q1.front().second > q2.front().second) {
q.push(q2.front());
q2.pop();
}
}
while (!q1.empty()) {
q.push(q1.front());
q1.pop();
}
while (!q2.empty()) {
q.push(q2.front());
q2.pop();
}
return q;
}
写完后,面试官问如果时间戳相等怎么办,我看着代码思考了一下说会死循环,然后讨论了一下时间戳能否相等,如果相等的话,用户的各个客户端要如何保证前后顺序一致等等问题
总之,都是围绕实习内容展开,没有问基础知识,还是要求有自己的思考的
最后反问环节,问了为什么hr面是三面,面试官说他也不知道,可能时间排的就是这样的
京东工作强度 421人发布