首页 > 面师复盘 | 快手c++研发二面
头像
ABXXXX
编辑于 2021-09-23 23:35
+ 关注

面师复盘 | 快手c++研发二面

9.23(40min)

1.先说说你对什么感兴趣;
ans:生活中比较阳光,喜欢健身和打篮球;
2.除了生活中的兴趣,在学习计算机相关的过程中有没有感兴趣的?
ans:复现一些github上的工程代码用到自己的项目中比较有成就感,所以对自己感兴趣的分类和检测网络都自己复现过,简单的手撸过;然后准备秋招过程中刷题也觉得有些意思,经常跟同学一起讨论有意思的题目等等;
3.好的,那我们先做做题吧:
 A.一个带空格的字符串,原地删除空格输出,例如 " 1 2 3 "输出"123", 空间O(1), 时间O(n);
(一开始问对时间有没有要求,没要求我可以直接冒泡做,面试官说冒泡可以,那你这么说了就要求一下时间为N......)

#include<bits/stdc++.h>
using namespace std;
void solution(string & str){
    int right=str.size();
    int left=0;
    int index=0;
    while(index<right){
        if(str[index]==' ') index++;
        else{
            swap(str[left], str[index]);
            left++;
            index++;
        }
    }
}
int main(){
    string str = " 1 2 3 ";
    solution(str);
    cout << str << endl;
    return 0;
}

测了几个例子没问题,然后跟面试官交流,讲了一下双指针的思路面试官说可以了看下一题;

 B.有n个相同的小球,要摆成二叉树,问有多少种摆法,然后告诉我1有一种,2有两种,3有5种,让我思考一下;
(我说您都提示这么明显了,这个可以直接动态规划吧。。。面试官说那行,你把状态转移方程写出来就行了。。。)

dp[0]=1;
dp[1]=1;
dp[2]=2;
for(int i=0; i<n; i++){
    dp[n] += dp[i]*dp[n-1-i];
}

思路大概就是,考虑左右子树的各有多少种情况,组合相乘就行,遍历n个节点所有左右子树情况利用dp数组存储之前状态直接状态转移,面试官看了一下觉得没什么问题,然后说我再问你一个问题,不用写代码说思路就行;

 C.一个100cm的绳子,n个蚂蚁,每个蚂蚁可以向左或向右,速度都是1cm/s,如果对向的蚂蚁相遇则各自再反向运动,问多长时间之后所有蚂蚁从绳子上掉下去;
思考了一下,回答说可以暴力模拟,对每个方向的的蚂蚁位置进行排序,然后分三种情况;
loop(if 还有蚂蚁在绳子上);
case1.向右运动的蚂蚁的max_position < 向左运动的蚂蚁的min_position时,这两只先相遇,计算相遇时间更新每个状态,再进入loop;
case2.计算向右运动的蚂蚁的max_position和第一个大于这个位置的向左运动的蚂蚁相遇时间time1;再计算向左运动的蚂蚁min_position和第一个小于这个位置向右运动的蚂蚁相遇时间time2;比较time1和time2,时间短的先相遇,更新相遇之后的状态再进入loop;
end;
差不多这个思路,面试官想了一下说这样模拟也行,那就先进行后面的问题吧;

随便问了几个问题

A. 在一个程序中,定义一个变量,运行两次,这个变量在内存上的地址一样吗?
ans:我说不一样,原因说得迷迷糊糊。。。
B. 操作系统在rm /tmp/abc一个文件的时候,具体发生了什么?
ans:我说先终止这个文件的读写,然后找到文件地址,再删除文件。。。。面试官说怎么找到的地址怎么删除。。。不知道了。。。
C. 那你说说你对未来职业的规划吧;
ans: 介绍了自己实验室的情况,实习的情况然后升华一下说自己想做偏底层和偏工程的东西,然后基础比较薄弱愿意继续学习。。。
D. 能给我说一下你们那个软硬件结合的项目吗,虽然我不太懂,我看看你工程能力怎么样,大概给我说一下就行。
ans: 一顿哈牛逼。。。

反问:

主要业务和技术栈?
ans: jvm底层优化和做一些os底层的上层应用,主要用c, 涉及一点cpp;
然后顺便问我现在秋招接近尾声了,问我有哪些offer;
ans:大概说了一下,然后追问了一下是否会以及为什么会选择快手。

总结

只要写题面试体验就还行,只要问基础那我就白给。。。

更多模拟面试

全部评论

(2) 回帖
加载中...
话题 回帖