景嘉微在线测评(笔试)+ 线下一二三面

邮件写的是在线测评,实际就是笔试,投的AI算法,来的全是C的题,非常基础,1个小时,42个题,17个单选,6个多选,4个填空,12个判断,3个编程;

1、linux的memory section包括:代码段、数据段BSS、堆heap、栈stack、环境变量和参数字符串、映射文件;

2、linux可执行文件格式:COFF;EXE、MSI都是Windows下的;GO是GO编译器下的;

3、C语言是静态语言;

4、int a[3][4]的非法引用是:a[0][4];

5、静态变量在函数外部和全局变量生命周期相同,在函数内部,初始化一次调用一次;

6、函数int func(int i,int j);函数指针int(*P)(int i,int j);那么P的赋值语句是P=func;

7、"ffff"是字符串,每个字符1个字节+末尾‘/0’1个字节;(unsigned int)0xffffffff占4个字节;(int)0xffffffff占4个字节;(char)0xffffffff占1个字节;

8、指向数组的指针将指向数组的首地址;通过++操作可以向后平移;

9、初始化二维数组时可以不写行数,但不能不写列数;规定了行数和列数就必须全部填充值,不能缺失;

10、略;

11、在C语言中,函数的参数传递方式主要有两种:值传递和指针传递

12、略;

13、联合体union的大小由最大内存占用成员决定;32位中int和float占4字节,double占8字节;struct则是将所包含的内容字节数相加;

14、VxWorkersOS是美国的嵌入式操作系统;ACoreOS天脉和ReworksOS和SylixOS翼辉是国产操作系统;

15、3A*124=446C是14进制;

16、char str1[6]="abcdm";*str2="abcdef";那么strcmp(str1,str2)将逐个位置对比,因为m>e,所以返回大于0;strlen(str1)=5;strcpy(str1,str2)是错误的;

17、要对绝对地址0x100000赋值,可以用*(unsigned int*)0x100000=1234;那么要是想让程序跳转到0x100000去执行(无参数、无返回值)应该使用((void(*)())0x100000)();

18、c语言的合法整数:0Xffa、0386、10110;x2a2不是;

19、指针初始化为内存地址int *ptr = (int *)0x12345678;int *ptr[3]指针数组,数组内是指针;char *ptr就是字符串数组;

20、以太网利用ARP协议获得目的主机MAC地址和IP地址的映射关系;

21、一维数组初始化可以不用填充满,会自动补0,二维数组就不行了;

22、对于一个互斥信号量来说,常用的操作接口有创建、释放、等待;

23、嵌入式操作系统中,任务之间的通信方式有信号量、共享内存;

24、局部变量在栈区、全局变量在静态存储区、动态申请在堆区;

25、int b[90];则sizeof(b)是360;

26、int (*func)(int)表示一个指向函数的指针,该函数有一个整型参数并返回一个整型;

27、10人20h可以挖5m,那么10h挖20m需要80人;

28、int指针a,++后地址应该是+4字节;

29、const char *a="hello";那么sizeof(a)并不是表示字符串数组的内存占用5+1=6个字节,而是指针的内存占用,32位是4个字节,64位是8个字节;

30、在C语言中,i++ 是一个后缀递增运算符,它本身并不是一个完整的赋值语句;

31、取地址运算符&和指针运算符*优先级是不同的,取地址优先级更高,结合方向是自右向左;

32、dma传输数据需要考虑cache一致性问题;

33、在c语言中if(x==5)误写成了if(x=5)并不会编译错误;

34、float a;a=5;不会触发类型转换;

35、for循环中i++和++i是一样的;

36、中断服务器中可以使用printf,但需要谨慎;

37、浮点数的==判断可能不一定完全相同;

38、c语言中%10.4表示数据输出的最小宽度为10,小数位数为4;

39、cache的最小操作单位不是1字节,常见的有32、64、128字节;

40、编程:考察字符数组最后要用‘\0’结尾;

41、编程:c语言移动字符数组;

答案:

void LoopMove(char* pStr, int steps) {

    if (pStr == NULL || steps <= 0) {

        return;

    }

    

    int len = strlen(pStr);

    if (len == 0) {

        return;

    }

    

    steps = steps % len; // 若steps大于字符串长度,则取余数

    if (steps == 0) {

        return;

    }

    

    char temp[255]; // 假设字符串长度不会超过255

    strncpy(temp, pStr + len - steps, steps); // 拷贝最后steps个字符到临时数组

    memmove(pStr + steps, pStr, len - steps);// 将前面的字符向右移动

    memcpy(pStr, temp, steps); // 将临时数组中的字符拷贝到字符串开头

}

42、编程:识别16进制数,并转为数据;

答案:

// 检查字符是否为16进制字符

int IsHexChar(char c) {

    return (c >= '0' && c <= '9') ||

    (c >= 'A' && c <= 'F') ||

    (c >= 'a' && c <= 'f');

}

// 16进制字符串转换为数据

bool HexStringToData(const char* pStr, unsigned char* pData, size_t* pDataSize) {

    if (pStr == NULL || pData == NULL || pDataSize == NULL) {

        // 参数错误

        return false;

    }

    int dataSize = 0;

    // 检查字符串是否以 "0x" 或 "0X" 开头

    if (pStr[0] == '0' && (pStr[1] == 'x' || pStr[1] == 'X')) {

        // 跳过前缀 "0x" 或 "0X"

        const char* pHex = pStr + 2;

        

        

        // 逐个字符转换

        while (*pHex) {

            if (IsHexChar(*pHex)) {

                int highDigit = -1;

                if (*pHex >= '0' && *pHex <= '9') {

                    highDigit = *pHex - '0';

                } else if (*pHex >= 'A' && *pHex <= 'F') {

                    highDigit = *pHex - 'A' + 10;

                } else if (*pHex >= 'a' && *pHex <= 'f') {

                    highDigit = *pHex - 'a' + 10;

                }

 pHex++;

                if (*pHex) {

                    int lowDigit = -1;

                    if (*pHex >= '0' && *pHex <= '9') {

                        lowDigit = *pHex - '0';

                    } else if (*pHex >= 'A' && *pHex <= 'F') {

                        lowDigit = *pHex - 'A' + 10;

                    } else if (*pHex >= 'a' && *pHex <= 'f') {

                        lowDigit = *pHex - 'a' + 10;

                    }

                    

                    if (lowDigit != -1) {

                        // 将两个16进制数字组合成一个字节

                        pData[dataSize++] = (unsigned char)(highDigit * 16 + lowDigit);

                        pHex++;

                    } else {

                        // 无效字符

                        return false;

                    }

                } else {

                    // 奇数个16进制字符

                    return false;

                }

            } else {

                // 无效的16进制字符

                return false;

            }

        }

    } else {

        // 不是以 "0x" 或 "0X" 开头

        return false;

    }

    

    *pDataSize = dataSize;

    return true;}

------------------------------更重要的来了,线下的一二三面-----------------------------------

一面:技术,2v1,我面的算法岗位分芯片和寄存两个分支,全程拷打项目,无手撕无八股,时间30分钟以内,也唠唠家常,面试官没有为难,偏底层的芯片面试官应该是没看上,偏算法的寄存这边评价稍微高点,全程面试官手写评价,从简历里面挑重点抄;

二面:项目部,2v1,同样是芯片和寄存,基本就是唠家常,问一下面对困难,薪资不满意、工作强度高等等可能的职场问题,没有技术问题,半小时以内;

三面:hr,1v1,再次询问情况,询问最低签约报价等等,反问了一下组织架构,芯片方面研发大约是200人,算法需求少,寄存方向研发大概是100多人,ai算法暂时没有独立成组,就是博士带队几个人,优先招博士。

---------------------------offer--------------------------------

offer比报价高,额外有安家费,5年拿满,要求2天回复是否签约,3天寄出三方,逼签比较严重,准备拒了。

全部评论
老哥,景嘉微hr说你期望薪资的时候最低说的多少呀,昨天面试说的18k,这是报高了还是中规中矩
点赞 回复 分享
发布于 10-11 12:00 四川

相关推荐

我是真的想做FPGA啊
给你点了个赞的打工鸭很忙碌:211也配吗?😅
点赞 评论 收藏
分享
#秋招#11月了,算是进入新阶段了。上周五上海台风,在宿舍玩了一天游戏;周六改了改简历,投了几家;周日和本科同学一起citywalk,聊了聊他从实习到现在工作的事。然后周日晚上我突然就顿悟了,想明白了很多东西。1.&nbsp;可能算法工程师这个岗位对我来说有些难。无论是学历(双非硕),还是能力(无论是创新开始开发水平不足,感觉像个文科生,光写论文了)和知识储备(感觉研究生期间一直给导师打工,人都废了。)2.&nbsp;接受了开发岗的可能,拥抱过去的自己;回顾了一下本科做的项目,Python,Java,C++都做过,J2EE系统写了不知道多少,都要吐了。现在简历只敢写熟悉“Python和Pytroch”,属于是进化后把过去的技能都丢了,这其实是不对的。3.&nbsp;接受了自己能力的不足。在本科时,基本上都是完成任务,只要够用就不学新东西,Vue都没学过;研究生期间光做脏活累活,每周PPT汇报,收敛性证明,改论文,跪舔reviewer了,开发能力属于是完全没进步。也就偶尔写点爬虫,写个实验绘图程序,满足个人需求;创新和深入研究是没有的,研一太软弱,导师训斥了一下就放弃了自己的兴趣和想法,做了自己不喜欢的课题。总之就是,我不觉得自己能胜任算法研发创新的工作。4.&nbsp;接下来的打算:还是对AI和大模型比较感兴趣,今天在Mooc上买了个大模型应用开发课,想着学一学,提升一下自己的简历(开发能力weak);准备下周和隔壁宿舍同学一起参加数学建模比赛(经历weak);学一下Vue和相关推荐算法,把本科做过的图书推荐应用update一下。
2024-11-04
在牛客打卡6天,今天也很努力鸭!
点赞 评论 收藏
分享
2 4 评论
分享
牛客网
牛客企业服务