嵌入式面试(笔试)笔记1

本文是对于下面链接的B站系列视频的学习笔记
语言笔试题,C++笔试题,嵌入式笔试题,面试题,难点疑点解析(持续更新)
在另外一篇文章的基础上增加或者强调一些对自己更重点的知识
另一篇文章的链接:
【常见c语言笔试题嵌入式软件开发1】
P6:下面代码是否有问题,如果有问题,那么编译运行后的结果是什么,并说明问题的原因是什么,该怎么修改

#include<stdio.h>char *get_str(void);int main(void)
{char *p = get_str();printf("p = %s\n",p);return 0;
}char *get_str(void)
{char str[] = "abcd";return str;
}

错误原因:str是局部变量,保存在栈中,当get_str执行完str就会被释放,指针p中的地址无法保存下str的值
修改方式:

char *get_str(void)
{//第一种方式,定义一个常数指针,数据保存在static区,不会被释放char *str = "abcd";//第二种方式,加一个static,让这个变量不会因为函数的结束而释放static char return str;
}

P7:下面所示代码的运行结果是什么

int main(void)
{unsigned int a = 6;int b = -20;(a+b>6)? puts(">6"):puts("<6");return 0;
}

有符号整型和无符号整型相加,有符号整型将会自动转化成无符号整形,数字在计算机中以补码形式存在,-20为:
原码:1000 0000 0000 0000 0000 0000 0001 0100
反码:1111 1111 1111 1111 1111 1111 1110 1011
补码:1111 1111 1111 1111 1111 1111 1110 1100
所以无法得到想要的-14结果。

printf("a+b = %d\n",a+b); //输出-14,因为%d是有符号数,会将结果转化成有符号
printf("a+b = %ud\n",a+b);//输出4294967282,因为%ud是无符号数

P8:什么是大端模式,什么是小端莫斯,编写代码测试你的计算机是大端模式还是小端模式?
大端模式:数据的低位存放在高地址中,数据的高位存放在低地址中
小端模式:数据的低位存放在低地址中,数据的高位存放在高地址中。

#include <stdio.h>
int main(void)
{   union T{unsigned int n;char arr[4];}t;t.n = 0x12345678;int i = 0;for(i = 0;i<4;i++){printf("&arr[%d] = %p,arr[%d] = 0x%x\r\n",i,&t.arr[i],i,t.arr[i]);  }
}

补充:关于union
联合体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
例:在项目中给一个uint32数赋值,但是之后可能会用到他的uint16或者uint8形式

union bit32
{uint32 u32;struct u16ViewInt32{uint16 _0;uint16 _1;}w,u16View;struct u8ViewInt32{uint8 _0;uint8 _1;uint8 _2;uint8 _3;}B,u8View;struct F32{uint32 _0 : 1;uint32 _1 : 1;uint32 _2 : 1;...uint32 _31 : 1;}F;
};

P10: 考虑下面的代码,其作用是在数组中查找一个特定的元素,如果将&&写成了&下面两种方式是否都可以实现?

//方式一
i = 0;
while(i < arrsize && arr[i] != x)i++;
//方式二
i = 0;
while(i < arrsize & arr[i] != x)i++;

在本例中,两种方式均可以得到正确的结果,但是方式二是有问题的,
情况1:
5&&10 --> 1
5&10 -->0101 & 1010 -->0000
情况2:
当使用&&时,若前面的条件不满足,则直接返回0不会再继续看后面的条件,但是使用&时,两个条件都会计算,所以可能产生i越界的情况。
P13:举例说明"##"运算符的作用
##预处理的 粘合剂 将2个符号转成一个符号

#include <stdio.h>
#define XNAME(n)   x##n
int main(void)
{//int x1 = 10;int XNAME(1) = 10 ; //x1 ---> int x1 = 10;printf("%d\n",x1); return 0;
}

注:如果n的后面还有有别的字符,那么n的后面也需要加##

#include <stdio.h>
#define XNAME(n)   x##n##2
int main(void)
{//int x1 = 10;int XNAME(1) = 10 ; //x12 ---> int x12 = 10;printf("%d\n",x12); return 0;
}

P18:哨兵思想
哨兵顾名思义是处于边界的兵,它的作用是简化边界条件的处理,降低时间复杂度里面的常数因子。
比如:
假如有​​100个纸箱,每个箱子里面都有一张纸条,纸条上写有​​1 ~ 10000​​这些数字,数字不会重复。现在给了一个随机的数字,我们需要在这​​100个箱子里找到与这个数字相同的纸条。
面对这个问题,最直觉的想法就是:从头开始,遍历这​​100个箱子,检查其中的纸条上数字是否与目标相同。这种方式在最差的情况下需要判断200次,因为每个箱子需要判断两次,一是检查这个箱子的纸条中的数字是否为我们想要的那个,二是判断遍历数是否大于100.
使用哨兵思想则是:在最后额外添加一个纸箱,并且在其中存放我们查找的目标数字,这样就不需要每次循环都判断遍历数是否大于100,只需要在找到想要的纸条后判断一次这个箱子是不是我们添加的那个就可以了,最差的情况下只需要判断101次,减少了时间复杂度。
P20: 64位和32位系统字节对齐问题

#include<stdio.h>
//#pragma pack(4)
typedef struct s
{union{int a;char b[10];};struct s* next;
}S;
int main()
{printf("%lu\n", sizeof(struct s));//#define offsetof(TYPE,MEMBER) ((size_t)&((TYPE*)0)->MEMBER)printf("%ld\n",((size_t)&((S*)0)->next));return 0;
}

如果没有struct s* next;,那么printf("%lu\n", sizeof(struct s));为12,因为此时struct中最大数据类型为int,则此时进行4字节对齐
如果加上struct s* next;,那么printf("%lu\n", sizeof(struct s));为24(16+8),因为此时struct中最大数据类型为struct s*,则此时进行8字节对齐
关于字节对齐这部分我写了另一篇文章来学习:字节对齐学习笔记

嵌入式面试(笔试)笔记1相关推荐

  1. 嵌入式面试(笔试)笔记2

    嵌入式面试(笔试)笔记2 本文是对于下面链接的B站系列视频的学习笔记 语言笔试题,C++笔试题,嵌入式笔试题,面试题,难点疑点解析(持续更新) 在另外一篇文章的基础上增加或者强调一些对自己更重点的知识 ...

  2. 程序员面试笔试宝典学习笔记(一)

    以下是一些著名互联网企业的部分面试笔试真题以及考察知识点 本文的内容是对一些网址上的知识点介绍做了相应的整理 1.extern的作用 自己理解:应该需要区分extern在C语言中和C++语言中的作用, ...

  3. 【深度学习笔记】神经网络模型及经典算法知识点问答巩固(算法工程师面试笔试)

    文章目录 前言 一.前馈神经网络模型 1.请说说你对前馈神经网络中"前馈"二字的理解. 2.记忆和知识是存储在_____上的.我们通常是通过逐渐改变_____来学习新知识. 3.在 ...

  4. 我的新书——《PHP程序员面试笔试宝典》

    你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试宝典>. 一.创作过程 <PHP程序员面试笔试宝典>是我的第一本书, ...

  5. 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)

    ###你好!这里是风筝的博客, ###欢迎和我一起交流. 前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案. Linux早期时候,一个驱 ...

  6. 【建议珍藏】校招社招面试指导笔记

    就我个人而言,由于四月初来到广州之后开始投递简历 还蛮顺利的,收到了第一家面试的offer,没有多对比几家就去了 对于加班情况,团队氛围这些都不是很了解,是十分不好的事情. 这阵子,我用了几天的时间从 ...

  7. 前端面试笔试错题指南(四)

    嗯,上次写blog已经是几周前的事情了,其实已经积攒了很多小问题需要记录和分享了.但是在8月底,VK我一次经历了了携程.拼多多.腾讯.网易等多轮面试轰炸,忙得不可开交,有喜有忧的同时,还是赶快记录了不 ...

  8. java面试笔试资料 百度网盘

    面试宝典:微软.谷歌.百度.腾讯等各大公司笔试面试题整理全版 /面试宝典:微软.谷歌.百度.腾讯等各大公司笔试面试题整理全版 分享时间:2014-11-07 09:01分享用户:东东***07文件大小 ...

  9. 【书】《数据库面试笔试宝典系列》简介

    [系列书]<数据库面试笔试宝典>相关内容 本文档说明 本文档主要是给数据库笔试面试系列书籍 < Oracle 数据库笔试面试宝典> . <数据库 程序员 面试笔试宝典&g ...

最新文章

  1. Linux下,各种解压缩命令集合
  2. Linux服务器运行sh文件提示权限不够解决方法?飞腾服务器Permission denied问题授权方法
  3. scikit-learn algorithm cheat sheet【汉化版】
  4. php课程 6-20 字符串基础和去除空格和字符串填补函数
  5. 体验.NET5 RC1极致性能,你也要“卧槽”!
  6. leetcode134. 加油站
  7. mxnet安装(Jetson)
  8. 写给人类的机器学习 翻译完成
  9. 贪心----最优合并问题
  10. CentOS7安装谷歌浏览器
  11. 【2G模组Air202开发】Lua脚本编程实现MQTT协议连接Tlink平台(二)
  12. 传奇私服架设微端搭建教程
  13. python barcode字符串生成条形码_python批量生成条形码的示例
  14. jetpack之workManager官方文档解析
  15. 项目验收之时,所需文档
  16. 笔记本电脑当作服务器外置显示器,我们为什么要给笔记本外接显示器,真的是多此一举?...
  17. 洛谷P3373 【模板】线段树 2
  18. Redis 异地双活实战
  19. “你公众号被封了!”
  20. 最值得关注的五款睡眠监护仪:Sense、梦加上榜

热门文章

  1. Java绝对好文,转载的!(转载)
  2. oracle安装点下一步退出,学习笔记:oracle之win10安装卸载oracle 11gR2步骤及常见问题解决...
  3. 百度地图api之固定标记点(标记点自己设置样式)
  4. 14个种类,600款笔刷!如何做一套属于自己的精美笔刷?
  5. 微信小程序合集源码I(机器人聊天+仿别踩白块儿小游戏+仿步步高电子词典+仿知乎+日记+汉字拼音+转盘抽奖)
  6. 【Markdown使用技巧总结】-如何在Markdown文档中插入空格?
  7. Vue组件:做一个表情输入键盘
  8. 【智能制造】智能制造与智能工厂的主要特征
  9. 【大脑】----如何增加大脑记忆?
  10. android 图片气泡,关于实现微信聊天气泡里显示图片解决方案