首页 > 【面试】理想汽车 感知算法一面凉经
头像
牛客最菜应届生
编辑于 2021-09-23 14:14
+ 关注

【面试】理想汽车 感知算法一面凉经 内部员工回复



# 一面

来就是怼项目,各种挑刺儿,关键是确实我还没办法反驳他

我看你还用过kd-tree,你说一下kd-tree的原理吧,
>简单说了一下,不太满意
你说一下kd-tree怎么查询K近邻的吧
>不会

dbscan的原理你了解吗?
>“内心,冷笑一声,这个老子都快会背了”,balabala。。。,感觉这个人还在装傻,想把我往坑里引

你这个平面分割的假设性很强啊,遇到 case1,case2,。。。你怎么处理
>挣扎了一下。。。

C++基础
float& get_num(){
    float num = 10;
    return num;
}
这个代码有什么问题?
>野指针(后面我查了一下,这种应该算“垂悬指针”)

能编译过吗?
>能,运行会报错

运行会报什么错误?
>指针访问一个未定义的内存

为什么?
>因为num是一个栈上的变量,会在作用域结束的时候释放掉,而返回值却是该内存的地址,这样就会出现指针访问了一个不该访问内存的问题

这样回答他好像还不满意,我又说好像是左值和右值的问题,num马上就要死掉了,所以不能返回地址,要想修改的话,可以返回一个右值引用(因为右值本质上就是为了增加变量的生存周期的),改正如下:
float&& get_num(){
    float num = 10;
    return num;
}
这样修改完以后,直接报语法错误了,尴尬,。。。
当时就有点傻了,其实正确的修改方式应该是使用std::move()将num变为右值,也就是下面这样:
float&& get_num(){
    float num = 10;
    return std::move(num);  
感觉对于算法岗来讲,这种问题,也算回答的差不多了吧。。。

他的解释:
作用域你了解吗?知道怎么回事吗?,然后后面balabala,
>。。。这个问题被问到,很无语
也没解释出什么来,。。。

关于这道题,有比较好的解释的同学请下方指教~

代码:
z字形打印二叉树
>先用广度优先+vector做的
能不能用栈做?
>试了一下,在提醒下也做出来了

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int a):val(a), left(nullptr), right(nullptr){;}
};

void test(TreeNode* root){
    queue<TreeNode*> q;
    q.push(root);
    int reve = false;
    while(!q.empty()){
        vector<int > vec;
        int len = q.size();
//         int 
        while(len-->0){
            auto node = q.front();
            q.pop();
            vec.push_back(node->val);
            if(node->left){
                q.push(node->left);
            }
            if(node->right){
                q.push(node->right);
            }

        }
        if(reve){
            reverse(vec.begin(), vec.end());
            reve = !reve;
        }
        for(const auto& ele:vec){
            cout << ele << " ";
        }
        cout << endl;
        
    }
    
};


// 双栈
void test2(TreeNode* root){
    stack<TreeNode*> s1;
    stack<TreeNode*> s2;
    s1.push(root);
    while(!s1.empty() || !s2.empty()){
        while(!s1.empty()){
            auto node = s1.top();
            s1.pop();
            cout << node->val << " ";
            
            if(node->left!=nullptr){
                s2.push(node->left);
            }
            if(node->right!=nullptr){
                s2.push(node->right);
            }  
        }
        while(!s2.empty()){
            auto node = s2.top();
            s2.pop();
            cout << node->val << " ";
            if(node->right!=nullptr){
                s1.push(node->right);
            }
            if(node->left!=nullptr){
                s1.push(node->left);
            }

        }
    }
}



反问:
给点建议?
>做事要深入,不能只会调库,简历上的都要熟悉

总结:
面试官很狡猾,一直把我往坑里引,巴不得我死😅,除了一个kd-tree的没回答好,其他的感觉都还可以。。不过自己基础不扎实也是一个重要因素了。







更多模拟面试

全部评论

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