• 面试题自我测试


    1、简述memcpy和strcpy的区别

    •  memcpy可以拷贝多种数据类型,strcpy只能拷贝字串

    • memcpy拷贝数据是可以控制拷贝的数据长度

    • strcpy拷贝数据时如果被拷贝的数据长度比要存放数据的空间大,则会导致内存溢出。

    2、信号量与互斥锁的区别?

     信号量用于线程的同步,互斥锁用于线程的互斥。

    • 同步:表示第一个线程执行返回后,第二个线程才能执行,按顺序执行。
    • 互斥:一般用于访问共享资源,同一时刻只能有一个线程访问共享资源。

    3、简述程序编译的过程?

    • 预处理
    • 编译
    • 汇编
    • 链接

    4、static的用法?

    • 修饰局部变量,局部变量只初始化一次
    • 修饰全局变量,全局变量只能在本文件中使用
    • 修饰函数,函数只能在本文件中调用

    5、const的用法?

    •  const修饰变量,代表整个变量的值不可被修改。

    6、关键字volatile有什么含意?并给出三个不同的例子。

     volatile一般会修饰一些并行设备的状态寄存器,以免在优化时,读到的时备份寄存器里的值,没有读到真正的寄存器值

    • 并发设备的状态寄存器。

    • 多线程中的共享变量。

    7、 一个参数既可以是const还可以是volatile吗?解释为什么?

     可以,只读的状态寄存器就会用const和volatile去修饰。const代表这个状态寄存器只读,volatile代表这个寄存器不会被意外的改变。

    8、一个指针可以是volatile 吗?解释为什么?

     可以,表示指针指向的对象不能被优化,比如中断子程序中执行buffer的指针

    9、位操作:定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变?

    a | = 1<<3
    a & = ~(1<<3)

    10、中断(Interrupts)

     中断是打断正在执行的任务去执行另一个任务,另一个任务返回后,接着执行原来的任务。中断一般分为硬中断和软中断

    硬中断是硬件设备产生的中断。

    软中断是由指令产生的中断,

    中断上文:

    中断下文:

    11、结构体(struct)和联合体(union)的区别?

     联合体内的所有变量共用一段内存空间,而结构体的内存大小是所有成员变量的内存总和,

    12.什么是预处理,何时需要预编译?

    • 包含头文件
    • 宏定义
    • 条件编译

    13.一个32位的机器,该机器的指针是多少位?

     32位机器时4bit,64位机器是8bit.

    14.局部变量能否和全局变量重名?

     可以,局部变量可以屏蔽全局变量

    15.引用与指针有什么区别?

    •  引用是别名,在定义时就需要初始化。
    • 指针指向的是地址,可以在定义时不用初始化。
    • 指针指向的是地址,引用是别名。

    16. 线程是否具有相同的堆栈?

    • 每个线程都有自己的堆栈

    17、TCP与UDP有啥区别?

    • TCP是面向连接的,UDP是无连接的。
    • TCP提供可靠的数据传输。
    • TCP提供端对端的流量控制。
    • TCP数据传输时按序进行的。

    18、TCP使用socket编程实现客户端服务器端通信。

     服务器端:
    • 创建socket
    • bind绑定ip和端口号。
    • listion监听
    • accept接收连接。
    • recv接收数据
    • close socket.

    客户端:

    • 创建socket。
    • connect连接
    • send发送数据
    • close socket.

    19、gdb用法,怎么显示某个变量具体值,如何查看崩溃时的异常信息。

    • b :打断点

    • l:查看代码
    • n:执行下一句
    • set 设置变量的值
    • p查看变量的值

    20、线程有没有用过,有几种同步方式。

    • 互斥量
    • 临界资源
    • 信号量
    • 事件对象

    21、数组和指针各自有什么优缺点?

    • 数组在定义时要指定空间大小,静态分配,局部分配,局部释放
    • 指针,动态分配空间,手动释放。

    22、windows消息机制?

     消息队列

    23、多进程、多线程的优缺点?

    •  多进程切换时,效率不高,消耗的资源大
    • 多线程切换时效率高,消耗的资源小。
    • 多线程中一个线程崩溃了,其他线程也就崩溃了
    • 多进程不会出现这样问题,健壮性高。

    24、什么时候用进程,什么时候用线程。

    25、多进程、多线程同步(通讯)的方法。

    26、进程的空间模型。

     内核区

    用户区:

    • 数据区:存放一下全局变量,静态变量
    • 代码段:只读的
    • 堆:
    • 栈:

    27、进程线程的状态转换图 什么时候阻塞,什么时候就绪?

     

    28、父进程、子进程的关系以及区别?

    •  第一次执行程序,先创建父进程,然后创建子进程 
    • 子进程拷贝父进程的堆栈空间、数据空间

    29、什么是进程上下文、中断上下文?

     进程上文:从用户空间切换内核空间需要保存的cpu状态、堆栈等

    进程下文:在内核空间执行的程序。

    中断上文:触发中断后,硬件的一些参数和数据需要传到内核空间,这就是中断上文。

    中断下文:内核空间执行的中断处理函数

    30、一个进程可以创建多少线程,和什么有关?

     

    31、并发,并行、同步,异步,互斥,阻塞,非阻塞的理解?

     

    32、什么是线程同步和互斥?

    33、线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?

    34、孤儿进程、僵尸进程、守护进程的概念?

     

    35、如何创建守护进程?

    36、正确处理僵尸进程的方法?

     

     37、new和malloc的区别

    38、malloc的底层实现?

     

    39、在1G内存的计算机中能否malloc(1.2G)?为什么?

     

    40、C语言检索内存情况 内存分配的方式?

     

    41、extern”C” 的作用?

     

    42、数组到底存放在哪里?

     

    43、struct和class的区别?

    •  

    44、char和int之间的转换?

     

    45、TCP UDP适用场景?

     

    46、TCP为什么是可靠连接?

     

    47、典型网络模型,简单说说有哪些?

     

    48、URI(统一资源标识符)和URL(统一资源定位符)之间的区别?

    49、常见的排序算法?

     

    50、Linux内核的组成?

    51、用户空间与内核通信方式有哪些?

     

    52、系统调用read()/write(),内核具体做了哪些事情?

     

    53、内核态,用户态的区别?

     

    54、linux的内核是由bootloader装载到内存中的?

     

    55、为什么需要BootLoader?

    56、 Linux内核同步方式总结?

    57、为什么自旋锁不能睡眠 而在拥有信号量时就可以?

    58、linux下检查内存状态的命令?

     

    59、大小端的区别以及各自的优点,哪种时候用?

     

    60、一个程序从开始运行到结束的完整过程(四个过程)?

    61、什么是堆,栈,内存泄漏和内存溢出?

    62、堆和栈的区别?

    63、死锁的原因、条件 创建一个死锁,以及如何预防?

     

    64、硬链接与软链接的区别?

    •  

    65、虚拟内存,虚拟地址与物理地址的转换?

    •  

    66、计算机中,32bit与64bit有什么区别?

    •  

    67、中断和异常的区别?

     

    68、中断怎么发生(中断的触发方式),中断处理大概流程?

     

    69、 Linux 操作系统挂起、休眠、关机相关命令

    70、数据库为什么要建立索引,以及索引的缺点?

    71、CPU 内存 虚拟内存 磁盘/硬盘 的关系?

     

    72、CPU内部结构?

     

    73、ARM结构处理器简析?

    74、波特率是什么,为什么双方波特率要相同,高低波特率有什么区别?

    75、arm和dsp有什么区别?

    76、ROM RAM的概念浅析?

    77、IO口工作方式:上拉输入 下拉输入 推挽输出 开漏输出?

    78、扇区 块 页 簇的概念?

    79、简述处理器在读内存的过程中,CPU核、cache、MMU如何协同工作?画出CPU核、cache、MMU、内存之间的关系示意图加以说明?

    80、请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等)?

    81、嵌入式系统开发流程

    82、嵌入式linux启动过程

    83、linux内存映射

    84、linux设备分为哪几类.

    85、EEPROM和FLASH的区别

    86、SSRAM、SDRAM和flash简要介绍

    87、为什么要进行内存映射?

    88、堆栈溢出的原因

    •  
  • 相关阅读:
    Oracle数据类型
    Windows10安装node.js,vue.js以及创建第一个vue.js项目
    Redis Desktop Manager安装
    VMware安装Linux系统
    前端入门学习路线
    架构
    HTML
    Oracle修改表类型方法
    Python学习
    Python(字符串和编码)
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/16319904.html
Copyright © 2020-2023  润新知