2020年6月面试题记忆录

1. rtos:实时操作系统

	种类有很多种,但是中国主流的有:
	1、uc/os,读法叫做“谬miu·克死”或“u·克死”
	2、freertos
	3、RT-thread

2. Linux有哪些版本?

1、本人使用的是ubantu系统,也是唯一一个有用户桌面的Linux系统。
2、Debian
3、red hat
4、CentOS
。。。

3. modbus

1、modbus是个单主站的主从通信协议,在这条线中,只有唯一一个主站。从站有多个,可选1-247.
2、一个Modbus通讯的传输字符应包括一个起始位,8个数据位,1个或0个校验位(奇偶校验或无校验可选择),以及一个停止位 在S7-200 CPU通信口上实现的是RS485半双工通信,使用的是S7-200的自由口功能。
3、Modbus​是​使用​主从关系​实现​的​请求 - 响应​协议。 在​主从关系​中,​通信​总是​成​对​发生 - 一个​设备​必须​发起​请求,​然后​等待​响应 - 并且​发起​设备​(主​设备)​负责​发起​每次​交互。 通常,​主​设备​是​人​机​界面​(HMI)​或​监​控​和​数据​采集​(SCADA)​系统,​从​设备​是​传感器、​可​编​程​逻辑​控制器​(PLC)​或可​编​程​自动​化​控制器​(PAC)。 这些​请求​和​响应​的​内容​以及​发送​这些​消息​的​网络​层​由​协议​的​不同​层​来​定义。

4. buffer

说实在,面试中没有听清面试说的是什么buffer,反正我现在发现有,Framebuffer、RingBuffer、circular buffer
我觉得面试官主要考的是对缓冲,缓存,共享内存的区别。

5. 共享内存

1、共享内存是一种使计算机程序能够同时共享内存资源以实现更高性能和更少冗余数据副本的技术。共享系统内存可以在单处理器系统、并行多处理器或集群微处理器上运行。对于分布式系统会有一些差异,但共享内存也可以其上运行。
  共享内存的可扩展性不高,数据一致性也是一个问题。但是在适当的环境中并且运行缓存一致性协议,相对于这些问题,共享内存带来了更多的优势。
  共享内存是一类进程间通信(IPC)技术,它改善了计算机组件之间的通信。
2、共享内存优势
  多个应用程序共享内存以提高处理效率
  ·在程序之间有效地传递数据,以提高通信和效率。
  ·适用于单微处理器系统,多处理器并行或对称系统以及分布式服务器。
  ·通过管理缓存中主内存中的共享数据来避免冗余数据副本。
  ·通过使程序能够访问已在内存中的单个数据副本,最大限度地减少输入/输出(I / O)进程。
  ·对于程序员来说,共享内存的主要优点是不需要为处理器交互和通信编写显式代码。
  高速缓存一致性协议可以保护共享内存免受数据不连贯和性能下降的影响。
  http://storage.it168.com/a2019/0826/6042/000006042930.shtml

7. 任务 线程

https://www.cnblogs.com/luwei0915/articles/10576186.html

8. 内存管理

Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。该空间是块大小为4G的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),而且更重要的是,用户程序可使用比实际物理内存更大的地址空间(具体的原因请看硬件基础部分)。
在讨论进程空间细节前,这里先要澄清下面几个问题:
第一、4G的进程地址空间被人为的分为两个部分——用户空间与内核空间。用户空间从0到3G(0xC0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址。只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间。
第二、用户空间对应进程,所以每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。内核空间地址有自己对应的页表(init_mm.pgd),用户进程各自有不同的页表。
第三、每个进程的用户空间都是完全独立、互不相干的。不信的话,你可以把上面的程序同时运行10次(当然为了同时运行,让它们在返回前一同睡眠100秒吧),你会看到10个进程占用的线性地址一模一样。
https://blog.csdn.net/csdn_whb/article/details/81251713

10. 对整形变量,一维字符数组,二维字符数组初始化

例如对整型二维数组baia[3][2]赋值
方法一:
在定义的同时赋值
int a[3][2]={0};//所有数组元素均zhi为0
方法二:
int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
方法三:
int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
方法四:
int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,
第三行第一个元素值为3,第二个元素值为0
方法五:
int a[3][2];/先定义
for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
C语言允许用字符串的方bai式对数组作初始化赋值du。例如:
static char c[]={‘c’,’ ',‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’}; 可写zhi为:
static char c[]={“C program”}; 或去掉dao{}写为:
static char c[]=“C program”;
当对全体元素赋初值时也可以省去长度说明。例如:static char c[]={c,,p,r,o,g,r,a,m};这时C数组的长度自动定为9。
一、二维数组初始化方式
A[2][3]={1,2,3,4,5,6};对应顺序是A[0][0]=1;A[0][1]=2;A[0][2]=3;A[1][0]=4;A[1][1]=5;A[1][2]=6;
A[2][3]={1,2,3,4};其中剩余的未赋值元素编译器自动初始化为0。数组元素值对应顺序是A[0][0]=1;A[0][1]=2;A[0][2]=3;A[1][0]=4;A[1][1]=0;A[1][2]=0;
A[2][3]={{1,2,3},{4}};其中剩余的未赋值元素编译器自动初始化为0。数组元素值对应顺序是A[0][0]=1;A[0][1]=2;A[0][2]=3;A[1][0]=4;A[1][1]=0;A[1][2]=0;
A[][3]={{1,2,3},{4}};省略行数,切记列数无法省略。其中剩余的未赋值元素编译器自动初始化为0。数组元素值对应顺序是A[0][0]=1;A[0][1]=2;A[0][2]=3;A[1][0]=4;A[1][1]=0;A[1][2]=0;
二、二维字符数组初始化方式
char A[2][3]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};
char A[2][3]={{‘a’,‘b’,‘c’},{}};其中未初始化的部分,编译器自动初始未0(NULL)。
char a[][]={{‘a’,‘b’,‘c’},{‘d’}};可以得到二维字符数组是两行三列。

通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:
char c[3][8]={{“apple”},{“orange”},{“banana”}};
等价于:
char c[3][8]={“apple”,“orange”,“banana”};
————————————————
原文链接:https://blog.csdn.net/nice__xixi/article/details/81909363

12. 局部变量 全局变量区分

局部变量 作用于函数内
全局变量 作用于全局函数
加上static后,局部变量会keep,等待下一次函数调用
加上static后,全局变量会在这一个.c文件里面
加上static后,函数会变成.c文件内函数

14. 任务线程的区别

任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。
线程(thread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。

16. 不使用临时变量,对字符串反转

a^=b;
b^=a;
a^=b;

18. 对mac地址+1

MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 [1] 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 [2] 。
https://blog.csdn.net/qyhxh/article/details/4626885

20. nat

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

22. VLAN

VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"

24. 交换机路由器在一层哪

交换机工作在数据链路层
路由器工作在网络传输层

26. ipv6,ipv4

https://zhidao.baidu.com/question/113756183.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeSiGJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值