首页 > 2022-08-26-nvidia实习45面大疆一面
头像
廿陆畵生
编辑于 2022-08-27 15:40 新加坡
+ 关注

2022-08-26-nvidia实习45面大疆一面

三连面受不了,头疼。
4面还行,5面比较惨

// 4面
// 纯虚函数有什么用

// #define size_of(x) &(x + 1) - &x

// uint32_t convert(uint32_t x)
// {
//     uint32_t y = ((x & 0xff) << 24) + ((x >> 8) & 0xff) << 16 + ((x >> 16)&0xff) << 8 + (x >> 24);
//     return y;
// }

// 0 - 31 4KB 20->2 ^ 20 12 10 * 10 2 ^ 10 2 ^ 10 2 ^ 12

//     char *a[1000000];
// ulimit - s

//     1000 coins 10 bags 贫血

//     1 2 4 8 16 32 64 128 256 512 -
//     23

//     100 loop 1 2 3.x..100 x + 约瑟夫环
//     dp(99) % 100

//     13579 -
//     11
// 最后英语回答遇到的最大的挑战,实习为什么想转到nv实习

// 5面 比较难
// 按行访问与按列访问有什么区别,如果比较小都在同一页面,地址+1和+n加法时间一样的
#include <iostream>

// 把r第 l 到第 h 位设成data
int setRig(int h, int l, int r, int data) // 1^0=0 0^1=1 1^1=0
{
    unsigned long mask = ((1LL << h) - 1) ^ ((1 << (l-1)) - 1); // h6 l3 111111^000011 = 111100
    // printf("mask= %x\n",(int)mask);// 100110
    // printf("d<<l-1: %x\n",(data << (l - 1))&(int)mask);
    return (int32_t)(((data << (l - 1)) & mask) | (r & ~mask));
}

int main()
{
    int r = 7; // 0111 -> 1011 (11)
    std::cout << setRig(4, 2, 7, 5)<<std::endl;

    r = 0xB7; //  10110111 -> 10011011 131+24 
    printf("case2: %x\n",setRig(6, 3, r, 6));

    r=0xff000000; // 10101  // af000000
    printf("case3: %x\n",setRig(32,28,r,0x15));
    return 0;
}

Test 程序通过 socket 测试运行时间很长的DUT程序
dump后如何回放  
DUT -> image1,image2,...,image5
log= [W, R, W...]

{
    1. load images=[...]
    2. extract return_data[] io_times[] from log and images
    3. r ... r
    4. ./Test return_data
}

Test --  p -- DUT 

// 大疆 识别是否可以组成二分图
// 做错了,做成判断是否是两个森林了

bool bfs(vector<vector<int>>& edges, int node, vector<int>& v, int mark){
    queue<int> q;
    q.push(node);
    v[node]=mark;
    while(!q.empty()){
                int no = q.front();
        q.pop();
        for(auto e:edges){
            if(v[e]==0){
              q.push(e);
            v[e]=mark;
          }else if(v[e]!=mark){
              return false;
          }
        }
    }
    return true;
}

bool bi(vector<vector<int>> edges){
        int n=edges.size(); // number of nodes
       if(n<2) return false;
        vector<int> visit(0,1);
    bool res = bfs(edges,0,visit,1);
    int secondNo = -1;
    for(int i=0;i<n;i++){
        if(visit[i]==0){
          secondNo = i;
      }
    }
    if(secondNo==-1)
        return false;
    res = bfs(edges,seconNo,visit,2);
    if(!res) return false;
    for(int i=0;i<n;i++){
        if(visit[i]==0)
          return false;
    }    
    return true;
}

全部评论

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