
嵌入式100题
嵌入式100题,答案来源为个人总结以及网上搜索,供各位同学学习以及工作中问题的解答。
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
角色人生
这个作者很懒,什么都没留下…
展开
-
嵌入式100题(79):数据库创建索引有什么优点和缺点
数据库创建索引有什么优点和缺点优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程...原创 2021-02-26 17:29:00 · 347 阅读 · 0 评论 -
嵌入式100题(78):Linux 操作系统挂起、休眠、关机相关命令
Linux 操作系统挂起、休眠、关机相关命令立刻关机: halt init 0 shutdown -h now shutdown -h 0定时/延时关机: shutdown -h 10:00 shutdown -h +30 //单位为分钟重启: reboot init 6 shutdown -r now待机/挂起: sudo pm-s...原创 2021-02-26 17:28:00 · 449 阅读 · 0 评论 -
嵌入式100题(77):中断怎么发生,中断处理大概流程
中断怎么发生,中断处理大概流程1. 中断概念: 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通...原创 2021-02-26 17:27:00 · 2074 阅读 · 0 评论 -
嵌入式100题(76):中断和异常的区别
中断和异常的区别1、异常: 是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。 产生的原因: 程序的错误产生的,编程异常通常叫做软中断(eg:除数为0) 内核必须处理的异常条件产生的(eg:缺页) 产生的目的: Linux利用异常来达到两...原创 2021-02-26 17:24:00 · 1052 阅读 · 0 评论 -
嵌入式100题(75):计算机中,32bit与64bit有什么区别
计算机中,32bit与64bit有什么区别表示: 32bit:X 86 64bit:X 64处理数据的能力: 32位计算机的CPU一次最多能bai处理32位数据,例如它的EAX寄存器就是32位的,32位计算机通常也可以处理16位和8位数据。64位计算机一次处理数据要比32位大得多,一次运行64位的数据。支持的内存不同(寻址能力不同): 32位的系统许多支持4G的内存...原创 2021-02-26 17:20:00 · 1811 阅读 · 1 评论 -
嵌入式100题(74):硬链接与软链接的区别
硬链接与软链接的区别 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节...原创 2021-02-26 17:18:00 · 392 阅读 · 0 评论 -
嵌入式100题(73):死锁的原因、条件 创建一个死锁,以及如何预防
死锁的原因、条件 创建一个死锁,以及如何预防死锁产生的原因: 系统资源的竞争:系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。 进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能...原创 2021-02-26 17:15:00 · 596 阅读 · 0 评论 -
嵌入式100题(72):堆和栈的区别
堆和栈的区别1、堆栈空间分配区别: 栈(操作系统):由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。2、堆栈缓存方式区别: 栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放。 堆则...原创 2021-02-26 17:13:00 · 716 阅读 · 0 评论 -
嵌入式100题(71):什么是堆,栈,内存泄漏和内存溢出?
什么是堆,栈,内存泄漏和内存溢出? 堆(heap):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 栈(stack):是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 内存溢出(out of memory):通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。...原创 2021-02-26 17:12:00 · 905 阅读 · 0 评论 -
嵌入式100题(70):一个程序从开始运行到结束的完整过程(四个过程)
一个程序从开始运行到结束的完整过程(四个过程)1、编译预处理:处理伪指令 1> 头文件包含 2> 宏定义 3> 条件编译 #if #endif gcc -E xxx.c -o xxx.i 2、编译:把预处理之后的文件进行语法分析,生成汇编代码 gcc...原创 2021-02-26 17:11:00 · 1007 阅读 · 2 评论 -
嵌入式100题(69):大小端的区别以及各自的优点,哪种时候用
大小端的区别以及各自的优点,哪种时候用 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合...原创 2021-02-26 17:09:00 · 2723 阅读 · 1 评论 -
嵌入式100题(68):linux下检查内存状态的命令
linux下检查内存状态的命令通过“top”命令可以时时查看内存使用状态。通过“free -m”命令查看内存使用情况。通过“cat /proc/meminfo”命令查看内存的更详细的状态。...原创 2021-02-26 14:23:00 · 340 阅读 · 0 评论 -
嵌入式100题(67):为什么自旋锁不能睡眠 而在拥有信号量时就可以?
为什么自旋锁不能睡眠 而在拥有信号量时就可以? 自旋锁自旋锁禁止处理器抢占;而信号量不禁止处理器抢占。 基于这个原因,如果自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其他系统进程将都不能获得CPU而运行,因此不能唤醒睡眠的自旋锁,因此系统将不响应任何操作(除了中断或多核的情况,下面会讨论)。而信号量在临界区睡眠后,其他进程可以用抢占的方式继续运行,从而可以实现内存拷贝等功能...原创 2021-02-26 14:22:00 · 909 阅读 · 0 评论 -
嵌入式100题(66):linux内核同步方式总结
linux内核同步方式总结每CPU变量: 正如其名,每cpu变量即为每个CPU都有自己的变量,各个CPU仅访问自己的每CPU变量,可以想象每CPU变量一般的数据结构是一个数组。 type name[CPU_COUNT]; 因此每CPU变量解决的是多CPU之间可能发生的竞争条件,而因内核抢占而产生了进程切换时,则很可能使每CPU变量产生竞争条件。原子操作: 原子操作即在...原创 2021-02-26 14:20:00 · 325 阅读 · 0 评论 -
嵌入式100题(65):Bootloader的作用、为什么需要Bootloader?
Bootloader的作用、为什么需要Bootloader?1、Bootloader的作用: 简单的说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。对于Bootloader的启动过程又分为两个阶段stage1和stage2。 stage1全部由汇编编写,...原创 2021-02-26 14:17:00 · 2067 阅读 · 0 评论 -
嵌入式100题(64):linux的内核是由bootloader装载到内存中的?
linux的内核是由bootloader装载到内存中的? linux的内核的确是由bootloader装载bai到内du存中的。linux的bootloader有2个部分zhi组成:bootstrap和uboot。所以更准确点的说法是dao:linux的内核是由uboot装载到内存中的。内核文件本身是存放在硬盘的文件系统中,这句话就是错的。内核和文件系统是分开存储的。uboot读取k...原创 2021-02-26 14:16:00 · 411 阅读 · 0 评论 -
嵌入式100题(63):Bootloader多数有两个阶段的启动过程
Bootloader多数有两个阶段的启动过程 bootloader一般都是分为两个阶段的,第一个阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和移植性。 两个阶段如下:一、第一阶段功能:(1)硬件设备初始化。(2)为加载bootloader的第二个阶段代码...原创 2021-02-26 14:15:00 · 760 阅读 · 0 评论 -
嵌入式100题(62):bootloader内核 根文件的关系
bootloader内核 根文件的关系 一般来说,为了使开发板成功运行linux系统,我们需要完成以下三个方面的开发工作:bootloader(启动装载)kernel(内核)rootfs(根文件系统)bootloader: 对于bootloader,我们一般用u-boot来制作。 当开发板烧写了u-boot并启动后,你可以使用命令行来控制开发板进行一些简单硬件操作...原创 2021-02-26 14:14:00 · 650 阅读 · 0 评论 -
嵌入式100题(61):内核态,用户态的区别
内核态,用户态的区别 就像世界上的人并不平等一样,并不是所有的程序都是平等的。世界上有的人占有资源多,有的人占有资源少,有的人来了,别人得让出资源,有的人则专门为别人让出资源。程序也是这样,有的程序可以访问计算机的任何资源,有的程序则只能访问非常受限的少量资源。而操作系统作为计算机的管理者,自然不能和被管理者享受一样的待遇,它应该享有更多的方便或特权。为了区分不用程序的不同权利,人们...原创 2021-02-26 14:12:00 · 345 阅读 · 0 评论 -
嵌入式100题(60):系统调用的作用
系统调用的作用1、操作系统作为用户和硬件的接口,向上提供一些简单易用的服务,主要包括命令接口和程序接口,其中程序接口由一组系统调用组成。2、用户接口:命令接口:联机命令接口(用户说一句系统做一句);脱机命令接口(用户说一堆系统做一堆)。程序接口:由一组系统调用组成,通过程序间接使用。3、系统调用:系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可...原创 2021-02-26 14:11:00 · 460 阅读 · 0 评论 -
嵌入式100题(59):系统调用read()/write(),内核具体做了哪些事情
系统调用read()/write(),内核具体做了哪些事情 用户空间read()-->内核空间sys_read()-->scull_fops.read-->scull_read(); 该过程分为两个部分:用户空间的处理和核心空间的处理。在用户空间中通过0x80 中断的方式将控制权交给内核处理,内核接管后,经过6个层次的处理最后将请求交给磁盘,由磁盘完成最终的数...原创 2021-02-26 14:09:00 · 1457 阅读 · 0 评论 -
嵌入式100题(58):用户空间与内核通信方式有哪些?
用户空间与内核通信方式有哪些?系统调用,提供特定的用户空间与内核空间的信息传递。信号,内核空间出现一些异常时候会发送信号给进程,如SIGSEGV、SIGILL、SIGPIPE等。/proc,proc可以读取内核空间的信息并且设置部分属性的值,需要循环检测。文件,可以通过指定文件的读写操作来实现通信,但是流程不够实时,需要循环检测来实现。netlink,类似socket通信方式...原创 2021-02-26 14:06:00 · 1737 阅读 · 0 评论 -
嵌入式100题(57):Linux内核的组成
Linux内核的组成 一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。1、内存管理: 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。 Linux内存管理支持虚拟内存,而多余出的这部分内存就是通过磁盘申请得到的,平时系统只把当前运行的程序块保留在内存中,其他程序...原创 2021-02-26 14:04:00 · 394 阅读 · 0 评论 -
嵌入式100题(56):STL底层数据结构实现
STL底层数据结构实现vector底层数据结构为数组,支持快速随机访问。list底层数据结构为双向链表,支持快速增删。deque底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下: [堆1] -->...原创 2021-02-26 14:02:00 · 360 阅读 · 0 评论 -
嵌入式100题(55):vector和deque的比较
vector和deque的比较vector的底层实现时数组;而deque的底层实现时“中央控制区”和缓冲的结构。vector的内存空间时连续的;而deque的内存空间是一种假的连续,实际上是不连续的。vecotr的支持数组的随机访问;而deque虽然也是支持使用[]的运算符,但实际上是需要通过中央控制器二次寻址的,效率比vector略低。vector在空间不够重新申请新空间策略...原创 2021-02-26 14:00:00 · 322 阅读 · 0 评论 -
嵌入式100题(54):vector list异同
vector list异同Vector: 连续存储的容器,动态数组,在堆上分配空间。 底层实现:数组。 两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释...原创 2021-02-26 13:58:00 · 247 阅读 · 0 评论 -
嵌入式100题(53):快排的partition函数与归并的Merge函数
快排的partition函数与归并的Merge函数代码:三个函数:基准插入函数:int getStandard(int array[],int low,int high)(返回基准位置下标)递归排序函数:void quickSort(int array[],int low,int high)主函数:int main()#include <stdio.h>#i...原创 2021-02-26 13:56:00 · 292 阅读 · 0 评论 -
嵌入式100题(52):快速排序
快速排序 快速排序:快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j,交换a[i]和a[j],重复上面的过程,直到i > j。 交换a...原创 2021-02-26 13:55:00 · 347 阅读 · 2 评论 -
嵌入式100题(51):归并排序
归并排序 归并排序:归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可...原创 2021-02-26 13:53:00 · 242 阅读 · 0 评论 -
嵌入式100题(50):插入排序
插入排序 插入排序:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有...原创 2021-02-26 13:51:00 · 310 阅读 · 0 评论 -
嵌入式100题(49):选择排序
选择排序 选择排序是一种简单直观的排序算法。它与冒泡排序很相似,都是比较 n-1 轮,每轮都是比较 n–1–i 次,每轮找出一个最大值或最小值。 只不过,冒泡排序是将每轮找出的最值放到最右边,而选择排序是将每轮找出的最值放到最左边。并且在算法上,冒泡排序是将相邻的数进行逐个比较,以从小到大排序为例,只要前面的比后面的大,就互换这两个数,直到最后将最大的数“浮”到最右边,如此依次循...原创 2021-02-26 13:50:00 · 323 阅读 · 0 评论 -
嵌入式100题(48):冒泡排序
冒泡排序 冒泡排序:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。原理:比较两个相邻的元素,将值大的元素交换...原创 2021-02-26 13:45:00 · 590 阅读 · 0 评论 -
嵌入式100题(47):各种排序算法什么时候有最好情况、最坏情况(尤其是快排)...
各种排序算法什么时候有最好情况、最坏情况(尤其是快排)直接插入排序:最坏情况需要比较O(n^2)次(n(n - 1)/2次)(有争议)。简单选择排序:无论是否最坏都需要O(n^2)次(n(n - 1)/2次)。冒泡排序:需要比较O(n^2)次(n(n - 1)/2次),即序列逆序的情况。堆排序:无论是否最坏比较O(nlog2n)次。快速排序:最坏情况退化为冒泡排序,需要比较...原创 2021-02-26 13:41:00 · 1571 阅读 · 0 评论 -
嵌入式100题(46):各种排序算法的时间空间复杂度、稳定性
各种排序算法的时间空间复杂度、稳定性一、排序算法分类:二、排序算法比较:注:1、归并排序可以通过手摇算法将空间复杂度降到O(1),但是时间复杂度会提高。2、 基数排序时间复杂度为O(N*M),其中N为数据个数,M为数据位数。三、 辅助记忆1、时间复杂度记忆冒泡、选择、直接 排序需要两个for循环,每次只关注一个元素,平均时间复杂度为O(n * n)O(n * n...原创 2021-02-26 13:40:00 · 403 阅读 · 0 评论 -
嵌入式100题(045):为什么建立连接是三次握手,关闭连接确是四次挥手呢?...
为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现...原创 2021-02-25 09:48:00 · 302 阅读 · 0 评论 -
嵌入式100题(044):为什么客户端最后还要等待2MSL?
为什么客户端最后还要等待2MSL? MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客...原创 2021-02-25 09:47:00 · 386 阅读 · 0 评论 -
嵌入式100题(043):什么是四次挥手
什么是四次挥手在网络数据传输中,传输层协议断开连接的过程我们称为四次挥手;第一次,Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态;第二次,Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据...原创 2021-02-25 09:45:00 · 262 阅读 · 0 评论 -
嵌入式100题(042):为什么服务端易受到SYN攻击?
为什么服务端易受到SYN攻击?服务端的资源分配是在二次握手时分配的,而客户端的资源是在三次握手时分配的。SYN攻击,即客户端在短时间内伪造大量不存在的IP地址,并向SERVER端不断的发送SYN包,SERVER收到请求即回复确认,并等待客户端的确认,由于源地址不存在,因此SERVER需要不断的重发直到超时。这些伪造的SYN包长时间占用未连接队列,导致正常的SYN请求因为队列满而丢...原创 2021-02-25 09:43:00 · 457 阅读 · 0 评论 -
嵌入式100题(041):为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗?...
为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗? 主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。 如果是两次握手,连接过程应该是这样的,当服务器收到对端的连接请求时,就认为连接建立好了,进入ESTABLISHED状态。客户端在收到服务器发来的同步确认报文后,就认为连接建立好了,进入ESTABLISHED,在报文都能正常收到的情况下,两次握手是可以安全...原创 2021-02-25 09:42:00 · 467 阅读 · 0 评论 -
嵌入式100题(040):什么是三次握手
什么是三次握手 在网络数据传输中,传输层协议TCP(传输控制协议)是建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。 第一次,建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次,服务器收到syn包,必须确认客户的SYN(ack=...原创 2021-02-25 09:40:00 · 348 阅读 · 0 评论