11.堆和栈的区别
(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多

6)存放内容不同。栈存放的内容,是函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

12.链表和数组的区别
数组是最基本的数据结构,所开辟的内存空间是连续的,且内存大小一经确定之后便无法再更改;
优点:查找速度快,因为开辟的内存空间是连续的,
缺点:浪费内存,缺乏弹性(不能根据当前实际需求更改大小);增添和删除的效率低。因为数组的大小在一开始就确定,无法更改,在后续想要添加或者删除数据,不能直接往里面添加或者删除索引,取而代之的方法是:先复制原有的数组,根据添加或者删除的数据再增加或减小数组长度,再往新的数组中添加或删除数据。

链表,存储数据的内存不需要连续的,链表中的数据可以存储在内存的任何地方,这是因为链表中的每个数据都存储了下一个链表的地址,从而使离散的内存空间联系在一起,能合理的利用内存。每个链表包含多个节点,每个节点又包含数据域和引用域。
缺点:查找元素麻烦,如果要查找链表中的一个元素,需要从第一个元素开始,依次往下,直到找到需要的元素位置。
优点:添加和删除元素十分方便。只需要知道修改前一个元素指向的地址即可。

13.栈和队列的异同
1.栈和队列的相同点
(1)都是线性结构。
(2)插入操作都是限定在表尾进行。(栈的栈顶,队列的队尾)
(3)都可以通过顺序存储结构和链式存储结构实现。
(4)插入和删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
(5)多链栈和多链队列的管理模式可以相同。
2.栈和队列的不同点
(1)删除元素的位置不同,栈的操作在表尾进行,队列的删除操作在表头进行。
(2)应用场景:常见的栈的应用场景有括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先遍历、还可用于实现打印机打印的冲突以及多个客户访问服务器的文件时,满足先来先服务的原则等。
(3)顺序栈能够实现多栈空间共享,而顺序队列不能。

14.树的表示方法

  • 树状表示法
  • 文氏图标表示法
  • 凹入表示法
  • 括号表示法

15.DFS(深度优先遍历)和BFS(广度优先遍历)的区别

  • 深度优先遍历:从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。
  • 从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。

16.怎么判断一个链表中是否有环的存在
快慢指针:首先创建两个指针1和2,同时指向这个链表的头节点。然后开始一个大循环,在循环体中,让指针1每次向下移动一个节点,让指针2每次向下移动两个节点,然后比较两个指针指向的节点是否相同。如果相同,则判断出链表有环,如果不同,则继续下一次循环。

17.链表的逆序
主要思路:先输出除了当前节点外的节点,然后输出当前节点。
1-2-3-4-5-6-7 输出为 2-3-4-5-6-7 然后输出 1。同理 2-3-4-5-6-7 输出 3-4-5-6-7 然后输出2.

     /*** 插入法 逆序*/private void reverse3(Node head) {if (head == null || head.next == null) {return;}Node cur = null;Node next = null;// 当前从第二个开始 2cur = head.next.next;// 第一个节点变为尾head.next.next = null;while (cur != null) {next = cur.next;cur.next = head.next;head.next = cur;cur = next;}}

18.memset、memcpy、strcpy的区别

  • 复制内容不同,strcpy只能复制字符串,而memcpy可以复制任一内容,比如整形、结构体等。所以在复制字符串时会用strcpy(因为效率原因),而复制其他类型数据一般会用memcpy。

  • 从参数可以看出复制方法也不尽相同。strcpy不需要指定特定长度,遇到“\0”才会结束,所以使用不当容易造成溢出。memcpy则是根据第三个参数决定复制长度。

  • memset函数的原型:memset(void *s, int ch,size_t n);将s中当前位置后面的n个字节用 ch 替换并返回 s,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零的一种快速操作。

19.排序算法的稳定性

排序前后两个相等的数相对位置不变,则算法稳定。
各排序算法的稳定性:

  • 堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法;

  • 基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

20.Shell的第一行是什么,有什么作用

#!/bin/bash

第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行;第一行写错或者不写时,系统会有一个默认的解释器进行解释。

【嵌入式学习——知识点总结】面试题汇总(2)相关推荐

  1. 【嵌入式学习——知识点总结】面试题汇总(1)

    1.变量声明和定义的区别 声明是用来告诉编译器变量的名称和类型,而不分配内存. 定义用于为变量分配存储空间,还可以为变量指定初始值. 通常变量的定义和声明是同时发生的,注意:extern 变量类型 变 ...

  2. 嵌入式Linux设备驱动面试题汇总

    大家平时在写驱动的时候,驱动相关的知识都会用到,但真到面试的时候,很难快速流畅的回答面试提出的问题,特意从网上收集整理网友遇到的问题 驱动大概的分为三部分:基础部分,同步相关,还有中断部分.中断,同步 ...

  3. Android 开发必备知识点及面试题汇总(Android+Java,Kafka是如何实现高性能的

    执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞, ...

  4. 嵌入式岗位Makefile常见面试题(1)

    第一题:变量使用 解析:Makefile中变量的引用格式就是$(变量名),这是没什么好讲的,记住就行.在Makefile中有一些特殊的宏定义需要记住,$@:表示生成的目标 :$<:表示生成依赖的 ...

  5. 嵌入式学习资料和项目汇总

    目录 目录 C/C++ 单片机 通讯协议 LInux 实时操作系统 数据库 QT 算法 AI 硬件 工具 网络 面试 C/C++ 搞懂这个16个C语言问题,你也能进大厂 学会这个绝招,让 C++ 崩溃 ...

  6. 《深度强化学习》面试题汇总

    原文出处: [1] 腾讯云.<深度强化学习>面试题汇总 [2] Reinforcement Learning遇到的一些强化学习面试问题 [3] 知乎.再励学习面试真题 深度强化学习报道 来 ...

  7. RocketMQ 1.学习资料 2.面试题 3.知识点

    前言 这篇文章分三方面来介绍RocketMQ 1.学习资料 2.面试题 3.知识点 学习资料 官方 官方文档 rocketmq.apache.org/docs/simple- 官方github git ...

  8. 嵌入式工程师面试题汇总(应届、转行)

    面试题汇总 一 . C基础 gcc编译器编译的完整流程,分别有什么作用? 答:预处理.编译.汇编.链接.预处理:头文件的展开/宏的替换/去掉注释/条件编译.编译:检查语法,生成汇编.汇编:汇编代码转换 ...

  9. 【剑指Offer学习】【全部面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全 ...

最新文章

  1. android线程及线程池
  2. 利用Minhash和LSH寻找相似的集合
  3. 枚举法用于逻辑问题的处理
  4. C++内存泄露几种常见原因
  5. Android学习笔记篇1. 从按钮的点击事件开始
  6. Pytorch基础(四)—— 卷积层
  7. 订阅Jenkins的邮件列表,获取最新的信息
  8. Ubuntu 13.10/12.10/12.04 用户如何升级到 Ubuntu 14.04
  9. Dom4J__ZZ_我的示例代码
  10. 数据仓库工具箱维度建模权威指南-第一章 数据仓库、商业智能及维度建模初步
  11. 量化策略回测ocobreak
  12. 四种方法求Capacitated Facility Location Problem问题
  13. Atitit sift匹配度计算 图片连线 oepncv sift java匹配
  14. Kali远程控制Android系统(Metasploit)
  15. 算法入侵,不如拥抱、打造更好的个性化推荐系统?
  16. 【DCANet2022】:DCANet: Differential Convolution Attention Network for RGB-D Semantic Segmentation
  17. 网易云音乐Eason Chen 歌词词云
  18. iphone5刷android,iphone5s怎么刷机 简单几招搞定iOS【图文教程】
  19. python获取当天日期
  20. mysql中flush tables和flush tables with read lock详解

热门文章

  1. 使用Samba实现文件共享:Windows和Linux之间
  2. IBM Voice CMDMenu语音命令控制技术 适用于Emmbbed IBM Viavoice的语音菜单,语音拨号
  3. 女文科生“弃文从理”转行做测试员,我是怎么做到工资涨了4倍的
  4. 华为要做视频?苏杰称只是配合终端不涉足内容
  5. Supershell 一款牛叉闪闪的工具
  6. FireStream for Mac(搭建UPnP/DLNA媒体服务器)
  7. 【愚公系列】2023年01月 .NET CORE工具案例- Magick.NET神级图片和视频操作库
  8. Confluence 6 自定义空间布局
  9. 【工具|FoFa 查询工具】
  10. 基于docker创建mysql容器