嵌入式一些面试题

摘自:https://mp.weixin.qq.com/s/N4IfREMrZuW1K9x3BQb2EA

再送一波超级福利,想知道嘛?

txp玩Linux 3天前

在分享这次面试经典题目汇总之前,预告一下,下期分享面试题目汇总,会把之前网友在群里分享的一份面试题目答案完善出来:

面试题目来源都是网上一些经典高频率会问到的题目,答案仅供参考,遇到不懂的地方可以去查看书籍,理清里面的原理,做到面对面试官有十足的底气回答出来;同时个人建议,一定要理解原理,再去背标准答案,这样效果非常好,即使到了面试的时候,由于紧张,可能标准的答案忘了,但是你懂原理,也能讲出个一二来;当然笔试同样如此,不至于你完全不会写。

1、linux启动流程:

(1)加载BIOS (2)读取MBR (3)运行BootLoader (4)加载内核 (5)用户层Init依据inittab文件来设定运行等级 (6)init进程执行rc.sysinit (7)启动内核模块 (8)执行不同运行级别的脚本程序 (9执行/etc/rc.d/rc.local (10)执行/bin/login程序,进入登入状态

2、malloc与new的区别

(1)、new关键字是C++的一部分,new是操作符,可以被重载。

(2)、malloc是由c库函数提供的。

(3)、new关键字以具体类型为单位进行内存分配。

(4)、malloc函数是以字节为单位进行内存分配。

(5)、new关键在申请单个类型变量时可以进行初始化。

(6)、malloc 不可以进行内存初始化。

(7)、malloc返回空指针,new返回对象类型指针

(8)、malloc分配失败返回null,new分配失败返回异常

3、请描述 IO 多路复用机制?

IO 模型有 4 中:同步阻塞 IO、同步非阻塞 IO、异步阻塞 IO、异步非阻塞 IO;IO 多路 复用属于 IO 模型中的异步阻塞 IO 模型,在服务器高性能 IO 构建中常常用到。

同步异步是表示服务端的,阻塞非阻塞是表示用户端,所以可解释为什么 IO 多路复用 (异步阻塞)常用于服务器端的原因;文件描述符(FD,又叫文件句柄):描述符就是一个数字,它指向内核中的一个结构 体(文件路径,数据区等属性)。具体来源:Linux 内核将所有外部设备都看作一个文 件来操作,对文件的操作都会调用内核提供的系统命令,返回一个 fd(文件描述符)。下面开始介绍 IO 多路复用:

(1)I/O 多路复用技术通过把多个 I/O 的阻塞复用到同一个 select、poll 或 epoll 的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的 多线程/多进程模型比,I/O 多路复用的最大优势是系统开销小,系统不需要创建新的 额外进程或者线程。

(2)select,poll,epoll 本质上都是同步 I/O,因为他们都需要在读写事件就绪后 自己负责进行读写,也就是说这个读写过程是阻塞的,而异步 I/O 则无需自己负责进 行读写,异步 I/O 的实现会负责把数据从内核拷贝到用户空间。

(3)I/O 多路复用的主要应用场景如下:服务器需要同时处理多个处于监听状态或者多个连接状态的套接字;服务器需要同时处理多种网络协议的套接字;

(4)目前支持 I/O 多路复用的系统调用有 select,poll,epoll,epoll 与 select 的原理比较类似,但 epoll 作了很多重大改进,现总结如下:

①支持一个进程打开的文件句柄 FD 个数不受限制(为什么 select 的句柄数量受限 制:select 使用位域的方式来传递关心的文件描述符,因为位域就有最大长度,在 Linux 下是 1024,所以有数量限制);

②I/O 效率不会随着 FD 数目的增加而线性下降;

③epoll 的 API 更加简单;

(5)三种接口调用介绍:

①select 函数调用格式:

#include <sys/select.h>
#include <sys/time.h>
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set 
*exceptset,const struct timeval *timeout)

//返回值:就绪描述符的数目,超时返回 0,出错返回-1 ②poll 函数调用格式:

# include <poll.h>
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);

③epoll 函数格式(操作过程包括三个函数):

#include <sys/epoll.h>
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int 
timeout);

(6)作用:一定程度上替代多线程/多进程,减少资源占用,保证系统运行的高效 率

4、手写冒泡实现代码?

void bubble_sort(int a[], int n)
{
      for(int i =0; i<n-1; i++)
      {
          for(int j =0; j<n-1-i;j++)
          {
              if(a[j]>a[j+1]
              {
                  int temp = a[j];
                  a[j]=a[j+1];
                  a[j+1]=temp;
            }
          }
      }
}

5、const与volatile:

(1)解释一下下面的含义:

const  int * p; //p可变,p指向的内容不可变

int const *  p; //p可变,p指向的内容不可变

int * const p; //p不可变,p指向的内容可变

const int * const p; //p和p指向的内容都不可变

(2)写出你知道volatile的应用场景:

a、 并行设备的硬件寄存器(如:状态寄存器)

b、一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

c、 多线程应用中被几个任务共享的变量

以上题目来源网络博客和相关文档,希望对大家有帮助!

猜你喜欢

转载自blog.csdn.net/sinat_16643223/article/details/108645186
今日推荐