2022-08-26-AMD-亲挂帮踩坑

软件应用岗

1h,前期抄选择题花了太多时间,后面写代码时间紧张而且不好debug
最后发现了错误但没时间改了,其实暴力算就行,因为不卡数据范围
考完后做了两种方法

10 单选 20分

  1. !!!

    int a=5;
    float b;
    cout<<sizeof(++a+b);
    cout<<a;
  2. set the LSB to 1 (A?D) 单选

union dt{
    struct{
        unsigned int b0:1;
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
    }x;
    unsigned int v;
};
int main()
{
    dt d={};
    d.v=0x20230000;
    // set the LSB to 1
    // d.b0=1; // A. 我这里会报错,要么写 d.x.b0,要么去掉x,可以直接d.b0
    // d.v|=0x0000001; // B. 539164673
    // d.v^=0x0000001; // C. 
    d.v&=0x0000001; // D.
    cout<<d.v<<"\n";
}
  1. result:
    extern int a;
    a=2023;
    printf("%d",a);
  1. fork后的父进程和子进程会共享什么 (题目记错了?子进程获得父进程的AD?C?)
    A. stack
    B. process ID
    C. shared memory segment
    D. heap

五多选 50分。

  1. C++内存管理,包括哪些区:
    stack、heap、text segment、initialized data segment、uninitialized data segment

https://www.geeksforgeeks.org/memory-layout-of-c-program/
外国的面经是这样的。。。十分没了

  1.  int a[2]={1,2};
     int b[2]={1};
     int c[]={1};
     int d[]={};

    哪几个对...

  2. 离谱 BC

#include<iostream>
using namespace std;
#pragma pack(1)
class a{
public:
    virtual int f()=0;
    int f2();
    static int f3();
    static int m0[4];
private:
    int m1;
    char m2;
};

class b:public a{
    int f(){return 0;}
};

int main()
{
    b data[4];
    // if data = 0x1000 // data 前面没有&,不是我漏了
    // 问:&data+1 = ? // 多选
    // A. 0x1018
    // B. 0x1024
    // C. 0x1034
    // D. 0x1054
    cout<<data<<"\n";
    cout<<&data<<"\n";
    cout<<&data+1<<"\n";
    // cout<<&(data+1)<<"\n"; // error, data+1 是右值
    cout<< &data[1]<<"\n";
    return 0;
}

输出:

0x16fc5f444
0x16fc5f444
0x16fc5f478 // 多了34,64位系统
0x16b3df451 // 多了13,说明每个b占13个字节

静态函数、非虚函数不算大小,只有一个虚函数指针4或者8,外加一个int一个char一共5,b的大小是9或13,4个元素的数组大小是36或52,十六进制是24、34,&data取了地址,指向长度为4个元素的数组类型

两个编程 15*2

// 反转32位2进制的数
// #include <iostream>
// #include <string>
// using namespace std;

// // 请按你的实际需求修改参数和返回值类型
// unsigned int BitInvert(unsigned int src) {
//     // 在这⾥写代码
//     unsigned long dst = 0;
//     for(int i=0;i<32;i++){
//         dst=dst|(src&1);
//         src=src>>1;
//         dst=dst<<1;
//     }
//     return (unsigned int)(dst>>1);
// }

// 返回所有非递减的长度大于等于2的可以不连续的无重复的子数组 0‘
// 前期做完通不过,测试不会输出打印的字符串!导致难以发现错误
// 只能在网页写代码,不能跳出来
// 测试时有很多干扰代码(两个测试文件加自己写的代码文件)
// 最后几分钟发现了错误,但没空改了
#include <iostream>
#include <string>
#include <vector>
#include <climits>
#include <set>
using namespace std;

// vector<vector<int>> g(vector<int>& a, int i,int last){
//     if(i==a.size())return {};
//     vector<vector<int>> res,tmp;
//     tmp = g(a,i+1);
//     for(auto q:t){
//         if(q.size()>=2) 
//             res.push_back(q);
//     }
//     vector<int> t;
//     t.push_back(a[i]);
//     for(int q=i+1;q<a.size();q++){
//         if(t.back()<)
//     }
//     return res;
// }

// void g(const vector<int>&a, int i, vector<int>& t,vector<vector<int>>& res, bool add){
//     if(i==a.size())return;
//     g(a,i+1,t,res,1);
//     if(t.size()>=2&&add==0){
//         res.push_back(t);
//     }
//     if(t.empty()||a[i]>=t.back()){
//         t.push_back(a[i]);
//         g(a,i+1,t,res,0);
//         t.pop_back();
//     }
// }

// // 请按你的实际需求修改参数和返回值类型
// vector<vector<int>> findSubsequences(vector<int>& nums)
// {
//     vector<vector<int>> res(0);
//     vector<int> t(0);
//     g(nums,0,t,res,0);
//     return res;
// }

// 考完后再做出来的:

void g(const vector<int>&a, int i, vector<int>& t,set<vector<int>>& res){
    if(i==a.size()){
        if(t.size()>=2){
            res.insert(t);
        }
        return;
    }
    g(a,i+1,t,res);

    if(t.empty()||a[i]>=t.back()){
        t.push_back(a[i]);
        g(a,i+1,t,res);
        t.pop_back();
    }
}

// 请按你的实际需求修改参数和返回值类型
vector<vector<int>> findSubsequences_1(vector<int>& nums)
{
    set<vector<int>> res;
    vector<int> t(0);
    g(nums,0,t,res);
    vector<vector<int> > ans;
    for(auto i:res)
        ans.push_back(i);
    return ans;
}

// 请按你的实际需求修改参数和返回值类型
vector<vector<int> > findSubsequences_2(vector<int>& nums)
{
    int n=nums.size();

    set<vector<int> > s;
    for(int i=1;i<(1<<n);i++){
        int c1=__builtin_popcount(i);
        if(c1<2)continue;
        vector<int> v;
        int ii=i;
        while(ii){
            int idex = __builtin_ctz(ii);
            if(v.size()==0||v.back()<=nums[idex]){
                v.push_back(nums[idex]);
                ii=ii&(ii-1);
            }else break;
        }
        if(v.size()==c1)
            s.insert(v);
    }
    vector<vector<int> > ans;
    for(auto i:s)
        ans.push_back(i);
    return ans;
}

int main(){
    vector<int> a(4);
    a[0]=4;a[1]=6;a[2]=7;a[3]=7;
    //4, 6, 
    // 4, 6, 7, 
    // 4, 6, 7, 7, 
    // 4, 7, 
    // 4, 7, 7, 
    // 6, 7, 
    // 6, 7, 7, 
    // 7, 7, 
    auto v = findSubsequences_1(a);
    cout<<"case1:\n";
    for(auto i:v){
        for(auto j:i)
        cout<<j<<", ";
        cout<<"\n";
    }
    cout<<"\n\ncase2:\n";
    a.resize(5,4);
    a[1]=4,a[2]=3,a[3]=2,a[4]=1;
    // [[4,4]]
    v = findSubsequences_1(a);
    for(auto i:v){
        for(auto j:i)
        cout<<j<<", ";
        cout<<"\n";
    }
    return 0;
}
#23秋招##AMD##笔试##2023校招#
全部评论
刚做,也是第二个编程没时间写完了
点赞 回复 分享
发布于 2022-08-27 13:56 湖北
已挂是收到感谢信了吗
点赞 回复 分享
发布于 2022-08-27 12:53 江苏
第二题的union是只能取其中一个值的,用了v就不能用struct x。 题目是要把LSB设置为1,应该是要把最低为变成1,这个例子中BC都可以办到,正常来说还是要选B
点赞 回复 分享
发布于 2022-08-27 15:28 上海
老哥什么岗位啊,多选题这么多也太坑了吧
点赞 回复 分享
发布于 2022-08-27 01:45 浙江
老哥你投的什么岗位啊
点赞 回复 分享
发布于 2022-08-26 23:15 北京
约面了下周3
1 回复 分享
发布于 2022-09-13 18:39 香港
请问笔试的时间是可以自己选吗?还是固定的时间
1 回复 分享
发布于 2022-09-06 18:33 上海
马一下,希望楼主继续分享面经😥
点赞 回复 分享
发布于 2022-09-16 12:55 上海

相关推荐

不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
11
30
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务