C++开发面经与嵌入式软件面经(蒋豆芽专栏总结)完成了!

蒋豆芽的秋招打怪之旅——面试题专栏总结开启!!!

欢迎大家指正批评!!!

详情请戳网址:

https://blog.nowcoder.net/zhuanlan/v0E5P0

来和蒋豆芽一起春秋招打怪吧!!!

私聊我送学习资料哦,提供求职解疑!!!

本专栏介绍

本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。

本专栏适合于互联网C++软件开发嵌入式软件求职的学生或人士。

适合基础比较好的同学,本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅

针对于非科班和基础不太好的同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。本专刊采用讲故事的形式为大家串联、呈现每一个知识点,做到有趣有干货、通俗易懂,春秋招本是痛苦难捱的过程,我希望通过自己讲故事能缓解大家的压力与焦虑,并将知识轻松学到手。网址:https://www.nowcoder.com/tutorial/10078/index

本专栏特点

本专栏囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计291道,事半功倍,为大家春秋招助力。

本专栏内容分为七章:共计291道高频面试题(附有答案)

蒋豆芽的秋招打怪之旅——啊C啊C我爱你

蒋豆芽的秋招打怪之旅——C++说爱你不容易

蒋豆芽的秋招打怪之旅——操作系统,揭开钢琴的盖子

蒋豆芽的秋招打怪之旅——说说计算机网络的那些事

蒋豆芽的秋招打怪之旅——嵌入式基础知识(仅适合嵌入式求职的同学

蒋豆芽的秋招打怪之旅——算法与数据结构

蒋豆芽的秋招打怪之旅——数据库(仅适合C++软件开发求职的同学

打勾为必掌握知识点

如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。

请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

快走入蒋豆芽的世界来吧,和蒋豆芽一起开启春秋招打怪之旅!!!

作者介绍

湖南大学(985)硕士研究生(1%保研),国家奖学金、省优秀研究生称号获得者。校招面试过数十家公司,经验丰富,获得过华为、京东、顺丰科技等公司offer。个人面试经历写作为专刊文章,目前为牛客网专刊作者。擅长机器学习、C++后台开发、嵌入式软件开发。非科班研究生,立志进入互联网领域,最后通过自己的努力拿到大公司的offer,将自己的经历写入了《蒋豆芽的秋招打怪之旅》故事中,和大家分享春秋招的酸甜苦辣。

部分题目展示

说说数组和指针的区别

概念:

(1)数组:数组是用于储存多个相同类型数据的集合。 数组名是首元素的地址

(2)指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。指针名指向了内存的首地址。

区别:

(1)赋值:同类型指针变量可以相互赋值;数组不行,只能一个一个元素的赋值或拷贝

(2)存储方式

数组:数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的,数组的存储空间,不是在静态区就是在栈上。

指针:指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存。由于指针本身就是一个变量,再加上它所存放的也是变量,所以指针的存储空间不能确定。

(3)求sizeof

数组所占存储空间的内存大小:sizeof(数组名)/sizeof(数据类型)

在32位平台下,无论指针的类型是什么,sizeof(指针名)都是4,在64位平台下,无论指针的类型是什么,sizeof(指针名)都是8。

(4)初始化

数组指针与指针数组的区别

数组指针是一个指针变量,指向了一个二维数组;指针数组是一个数组,只不过数组的元素存储的是指针变量。

指针函数与函数指针的区别

(1)定义不同指针函数本质是一个函数,其返回值为指针。 函数指针本质是一个指针,其指向一个函数。

(2)写法不同

指针函数:int *fun(int x,int y); 函数指针:int (*fun)(int x,int y);

(3)用法不同

指针函数返回一个指针。 函数指针使用过程中指向一个函数。通常用于函数回调的应用场景

请说说内存分布模型

从低地址到高地址,一个程序由代码段、数据段、BSS段组成。

数据段:存放程序中已初始化全局变量静态变量的一块内存区域。

代码段:存放程序执行代码的一块内存区域。只读,代码段的头部还会包含一些只读的常数变量

BSS 段:存放程序中未初始化全局变量静态变量的一块内存区域。

可执行程序在运行时又会多出两个区域:堆区栈区。

堆区:动态申请内存用。堆从低地址向高地址增长。

栈区:存储局部变量函数参数值。栈从高地址向低地址增长。是一块连续的空间。

最后还有一个文件映射区,位于堆和栈之间。

堆和栈的区别

堆栈空间分配不同。栈由操作系统自动分配释放 ,存放函数的参数值局部变量的值等,栈有着很高的效率;堆一般由程序员分配释放,堆的效率比栈要低的多

堆栈缓存方式不同。栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放;堆则是存放在二级缓存中,速度要慢些。

堆栈数据结构不同。堆类似数组结构;栈类似栈结构,先进后出。

空间大小: 栈的空间大小并不大,一般最多为2M,超过之后会报Overflow错误。堆的空间非常大,最大可到达4G,可操作的空间非常大。

能否产生碎片: 栈的操作与数据结构中的栈用法是类似的。‘后进先出’的原则,以至于不可能有一个空的内存块从栈被弹出。因为在它弹出之前,在它上面的后进栈的数据已经被弹出。它是严格按照栈的规则来执行。但是堆是通过new/malloc随机申请的空间,频繁的调用它们,则会产生大量的内存碎片。这是不可避免地。

请你说说野指针

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

野指针不同于空指针,空指针是指一个指针的值为null,而野指针的值并不为null,野指针会指向一段实际的内存,只是它指向哪里我们并不知情,或者是它所指向的内存空间已经被释放,所以在实际使用的过程中,我们并不能通过指针判空去识别一个指针是否为野指针。

请你说说内存泄露

简单地说就是申请了一块内存空间,使用完毕后没有释放掉。

(1)new和malloc申请资源使用后,没有用delete和free释放;

(2)子类继承父类时,父类析构函数不是虚函数。

(3)Windows句柄资源使用后没有释放。

有以下几种避免方法:

第一:良好的编码习惯,使用了内存分配的函数,一旦使用完毕,要记得使用其相应的函数释放掉。

第二:将分配的内存的指针以链表的形式自行管理,使用完毕之后从链表中删除,程序结束时可检查改链表。

第三:使用智能指针。

第四:一些常见的工具插件,如ccmalloc、Dmalloc、Leaky、Valgrind等等。

堆内存申请需要注意什么?

(1)不要错误地返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡。

(2)不要返回了常量区的内存空间。因为常量字符串,存放在代码段的常量区,生命期内恒定不变,只读不可修改

(3)通过传入一级指针不能解决,因为函数内部的指针将指向新的内存地址。

解决办法:

(1)使用二级指针

(2)通过指针函数解决,返回新申请的内存空间的地址。

请你说说内存碎片

内存碎片通常分为内部碎片外部碎片

(1)内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片,通常内部碎片难以完全避免;

(2)外部碎片是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域。再比如堆内存的频繁申请释放,也容易产生外部碎片。

解决方法:

(1)段页式管理

(2)内存池

请你说说malloc内存管理原理

当开辟的空间小于 128K 时,调用 brk()函数;

当开辟的空间大于 128K 时,调用mmap()。

malloc采用的是内存池的管理方式,以减少内存碎片。先申请大块内存作为堆区,然后将堆区分为多个内存块。当用户申请内存时,直接从堆区分配一块合适的空闲快。采用隐式链表将所有空闲块,每一个空闲块记录了一个未分配的、连续的内存地址。

什么是内存池

内存池也是一种对象池,我们在使用内存对象之前,先申请分配一定数量的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。当不需要此内存时,重新将此内存放入预分配的内存块中,以待下次利用。这样合理的分配回收内存使得内存分配效率得到提升。

说说new和malloc的区别,各自底层实现原理

new是操作符,而malloc是函数。

new在调用的时候先分配内存,在调用构造函数,释放的时候调用析构函数;而malloc没有构造函数和析构函数。

malloc需要给定申请内存的大小,返回的指针需要强转;new会调用构造函数,不用指定内存的大小,返回指针不用强转。、

new可以被重载;malloc不行

new分配内存更直接和安全。

new发生错误抛出异常,malloc返回null

说说使用指针需要注意什么?

定义指针时,先初始化为NULL。

用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。

不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。

避免数字或指针的下标越界,特别要当心发生“多1”或者“少1”操作

动态内存的申请与释放必须配对,防止内存泄漏

用free或delete释放了内存之后,立即将指针设置为NULL,防止“野指针”

初始化为0的全局变量在bss还是data

BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域。特点是可读写的,在程序执行之前BSS段会自动清0。

大纲

蒋豆芽的秋招打怪之旅——啊C啊C我爱你

1.1 int main(int argc, char ** argv)函数中,参数argc和argv分别代表什么意思?⭐⭐⭐⭐

1.2 结构体和共用体的区别?⭐⭐⭐⭐

1.3 简述C++有几种传值方式,之间的区别是什么?⭐⭐⭐⭐

1.4 全局变量和局部变量的区别⭐⭐⭐⭐

1.5 请说说原码、反码、补码⭐⭐⭐⭐

1.6 说说数组和指针的区别⭐⭐⭐⭐⭐

1.7 数组指针与指针数组的区别⭐⭐⭐⭐⭐

1.8 指针函数与函数指针的区别⭐⭐⭐⭐⭐

1.9 请说说内存分布模型⭐⭐⭐⭐⭐

1.10 堆和栈的区别⭐⭐⭐⭐⭐

1.11 请你说说野指针⭐⭐⭐⭐⭐

1.12 请你说说内存泄露⭐⭐⭐⭐⭐

1.13 堆内存申请需要注意什么?⭐⭐⭐⭐⭐

1.14 请你说说内存碎片⭐⭐⭐⭐⭐

1.15 请你说说malloc内存管理原理⭐⭐⭐⭐⭐

1.16 什么是内存池⭐⭐⭐⭐

1.17 说说new和malloc的区别,各自底层实现原理⭐⭐⭐⭐⭐

1.18 说说使用指针需要注意什么?⭐⭐⭐⭐⭐

1.19 初始化为0的全局变量在bss还是data⭐⭐⭐⭐

蒋豆芽的秋招打怪之旅——C++说爱你不容易

1.1 你怎么理解C语言和C++的区别?⭐⭐⭐⭐⭐

1.2 简述下C++语言的特点⭐⭐⭐⭐

1.3 简述C++从代码到可执行二进制文件的过程⭐⭐⭐⭐⭐

1.4 说说include头文件的顺序以及双引号""和尖括号<>的区别⭐⭐⭐

1.5 知道动态链接与静态链接吗?两者有什么区别⭐⭐⭐⭐

1.6 导入C函数的关键字是什么,C++编译时和C有什么不同?⭐⭐⭐⭐

1.7 请你说说什么是宏?⭐⭐⭐⭐⭐

1.8 为什么要少使用宏?C++有什么解决方案?⭐⭐⭐⭐⭐

1.9 请你说说内联函数,为什么使用内联函数?需要注意什么?⭐⭐⭐⭐⭐

1.10 说说内联函数和宏函数的区别⭐⭐⭐⭐⭐

1.11 什么是字节对齐?为什么要字节对齐?⭐⭐⭐⭐⭐

1.12 结构体和共用体的区别⭐⭐⭐⭐

1.13 说说内联函数和函数的区别,内联函数的作用。⭐⭐⭐⭐⭐

1.14 说说const和define的区别⭐⭐⭐⭐⭐

1.15 说说const的作用⭐⭐⭐⭐⭐

1.16 const修饰函数的三个位置⭐⭐⭐⭐⭐

1.17 说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么,有什么特点。⭐⭐⭐⭐⭐

1.18 说说静态局部变量,全局变量,局部变量的特点,以及使用场景⭐⭐⭐⭐

1.19 说说静态变量什么时候初始化?⭐⭐⭐

1.20 说说 static关键字的作用⭐⭐⭐⭐⭐

1.21 为什么静态成员函数不能访问非静态成员⭐⭐⭐⭐⭐

1.22 静态成员函数与普通成员函数的区别⭐⭐⭐⭐⭐

1.23 说说volatile和mutable⭐⭐⭐⭐⭐

1.24 说说volatile的应用⭐⭐⭐⭐⭐

1.25 说说原子操作⭐⭐⭐⭐

1.26 说说引用和指针的区别⭐⭐⭐⭐⭐

1.27 说说左值和右值⭐⭐⭐⭐

1.28 说说右值引用的作用⭐⭐⭐⭐⭐

1.29 说说移动语义的原理⭐⭐⭐⭐⭐

1.30 多线程编程修改全局变量需要注意什么⭐⭐⭐⭐⭐

1.31 说说类的访问权限有几种⭐⭐⭐⭐⭐

1.32 对象是值传递还是引用传递⭐⭐⭐⭐⭐

1.33 拷贝构造函数的参数类型为什么必须是引用⭐⭐⭐⭐⭐

1.34 判断构造次数和析构次数⭐⭐⭐⭐⭐

1.35 说说初始化列表的使用场景⭐⭐⭐⭐⭐

1.36 下面这个例题,Student1有几个受保护的成员?⭐⭐⭐⭐⭐

1.37 深拷贝与浅拷贝的区别⭐⭐⭐⭐⭐

1.38 实现一个string类⭐⭐⭐⭐⭐

1.39 说说this指针⭐⭐⭐⭐⭐

1.40 说说 C++中 struct 和 class 的区别⭐⭐⭐⭐⭐

1.41 说说C++结构体和C结构体的区别⭐⭐⭐⭐⭐

1.42 nullptr调用成员函数可以吗?为什么?⭐⭐⭐⭐⭐

1.43 析构函数必须为虚函数吗?构造函数可以为虚函数吗?⭐⭐⭐⭐⭐

1.44 构造与析构的顺序⭐⭐⭐⭐⭐

1.45 请说说你对多态的理解⭐⭐⭐⭐⭐

1.46 重载和重写的区别⭐⭐⭐⭐⭐

1.47 请你说说虚函数的工作机制⭐⭐⭐⭐⭐

1.48 虚函数表在什么时候创建?每个对象都有一份虚函数表吗?⭐⭐⭐⭐⭐

1.49 函数重载是怎么实现的?⭐⭐⭐⭐⭐

1.50 纯虚函数了解吗?什么情况下使用?⭐⭐⭐⭐⭐

1.51 请说说操作符重载⭐⭐⭐⭐⭐

1.52 哪些操作符不能重载?⭐⭐⭐

1.53 请说说多重继承的二义性⭐⭐⭐⭐⭐

1.54 迭代器和指针有什么区别?有了指针干嘛还要迭代器?⭐⭐⭐⭐⭐

1.55 前置 ++i 与后置 i++ 的区别⭐⭐⭐⭐⭐

1.56 请你说说STL⭐⭐⭐⭐

1.57 vector如何正确删除重复元素⭐⭐⭐⭐⭐

1.58 迭代器删除的问题⭐⭐⭐⭐⭐

1.59 请你说说函数模板与模板函数⭐⭐⭐⭐⭐

1.60 请你说说智能指针,智能指针为什么不用手动释放内存了?⭐⭐⭐⭐⭐

1.61 auto_ptr有什么样的问题⭐⭐⭐⭐⭐

1.62 unique_ptr指针实现原理⭐⭐⭐⭐⭐

1.63 shared_ptr实现原理,来手撕一下⭐⭐⭐⭐⭐

1.64 shared_ptr会不会出现内存泄露?怎么解决?⭐⭐⭐⭐⭐

1.65 说一说cast类型转换⭐⭐⭐⭐⭐

1.66 说一说lambda⭐⭐⭐⭐⭐

蒋芽的秋招打怪之旅——操作系统,揭开钢琴的盖子

1.1 操作系统的功能⭐⭐⭐

1.2 请你说说CPU工作原理⭐⭐⭐⭐⭐

1.3 请你说说CPU流水线⭐⭐⭐⭐

1.4 内核态与用户态的区别⭐⭐⭐⭐⭐

1.5 什么是系统调用⭐⭐⭐⭐⭐

1.6 请你说说并发和并行⭐⭐⭐⭐⭐

1.7 请你说说物理内存层次⭐⭐⭐

1.8 说说存储类型⭐⭐⭐⭐⭐

1.9 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。⭐⭐⭐

1.10 文件权限怎么修改⭐⭐⭐

1.11 说说常用的Linux命令⭐⭐⭐

1.12 说说如何以root权限运行某个程序。⭐⭐⭐

1.13 说说常见信号有哪些,表示什么含义?⭐⭐⭐

1.14 Linux里如何查看一个想知道的进程?⭐⭐⭐

1.15 Linux里如何查看带有关键字的日志文件?⭐⭐⭐

1.16 说说你对grep命令的了解?⭐⭐⭐

1.17 Linux修改主机名的命令是什么?⭐⭐⭐

1.18 Linux开机自动执行命令如何实现?⭐⭐⭐

1.19 Linux中,如何通过端口查进程,如何通过进程查端口?⭐⭐⭐

1.20 请你说说ping命令?⭐⭐⭐

1.21 进程有哪五种状态,如何转换?⭐⭐⭐⭐⭐

1.22 请你说说Linux的fork的作用⭐⭐⭐⭐⭐

1.23 说说写时复制⭐⭐⭐⭐⭐

1.24 说说什么是守护进程,如何创建?⭐⭐⭐⭐

1.25 说说孤儿进程与僵尸进程,如何解决僵尸进程⭐⭐⭐⭐⭐

1.26 说说进程通信的方式有哪些?⭐⭐⭐⭐⭐

1.27 说说进程同步的方式?⭐⭐⭐⭐⭐

1.28 进程通信中的管道实现原理是什么?⭐⭐⭐⭐⭐

1.29 说说什么是信号量,有什么作用?⭐⭐⭐⭐⭐

1.30 多进程内存共享可能存在什么问题?如何处理?⭐⭐⭐⭐⭐

1.31 一个线程占多大内存?⭐⭐⭐

1.32 32位系统能访问4GB以上的内存吗?⭐⭐⭐

1.33 说说进程、线程、协程是什么,区别是什么?⭐⭐⭐⭐⭐

1.34 互斥量能不能在进程中使用?⭐⭐⭐⭐⭐

1.35 协程是轻量级线程,轻量级表现在哪里?⭐⭐⭐⭐⭐

1.36 说说线程间通信的方式有哪些?⭐⭐⭐⭐⭐

1.37 说说线程同步方式有哪些?⭐⭐⭐⭐⭐

1.38 有了进程,为什么还要有线程?⭐⭐⭐⭐⭐

1.39 单核机器上写多线程程序,是否要考虑加锁,为什么?⭐⭐⭐⭐⭐

1.40 说说多线程和多进程的不同?⭐⭐⭐⭐⭐

1.41 简述互斥锁的机制,互斥锁与读写的区别?⭐⭐⭐⭐⭐

1.42 说说线程池的设计思路,线程池中线程的数量由什么确定?⭐⭐⭐

1.43 进程和线程相比,为什么慢?⭐⭐⭐⭐⭐

1.44 简述GDB常见的调试命令,什么是条件断点,多进程下如何调试。⭐⭐⭐⭐

1.45 说说进程调度算法有哪些?⭐⭐⭐⭐⭐

1.46 简述LRU算法及其实现方式。⭐⭐⭐⭐⭐

1.47 什么是页表,为什么要有?⭐⭐⭐⭐⭐

1.48 简述操作系统中的缺页中断。⭐⭐⭐⭐⭐

1.49 简述一下虚拟内存和物理内存,为什么要用虚拟内存,好处是什么?⭐⭐⭐⭐⭐

1.50 虚拟地址到物理地址怎么映射的?⭐⭐⭐⭐⭐

1.51 说说什么是死锁,产生的条件,如何解决?⭐⭐⭐⭐⭐

1.52 简述互斥锁的机制,互斥锁与读写的区别?⭐⭐⭐⭐⭐

1.53 简述自旋锁和互斥锁的使用场景⭐⭐⭐⭐⭐

1.54 说说sleep和wait的区别?⭐⭐⭐

1.55 简述epoll和select的区别,epoll为什么高效?⭐⭐⭐⭐

1.56 说说多路IO复用技术有哪些,区别是什么?⭐⭐⭐⭐⭐

1.57 epoll水平触发与边缘触发的区别?⭐⭐⭐⭐⭐

1.58 简述同步与异步的区别,阻塞与非阻塞的区别?⭐⭐⭐⭐⭐

1.59 BIO、NIO有什么区别?⭐⭐⭐⭐⭐

1.60 请介绍一下5种IO模型⭐⭐⭐⭐⭐

1.61 公平锁与非公平锁⭐⭐⭐⭐⭐

1.62 死锁与活锁⭐⭐⭐⭐⭐

蒋豆芽的秋招打怪之旅——说说计算机网络的那些事

1.1 说说计算机网络有哪两种通信方式?⭐⭐⭐

1.2 什么是分组交换?优缺点?⭐⭐⭐

1.3 子网掩码的作用⭐⭐⭐

1.4 请说说OSI七层协议模型?⭐⭐⭐⭐

1.5 请说说TCP/IP四层分层模型?⭐⭐⭐⭐

1.6 请说说TCP/IP四层分层模型,每个分层说两个协议。⭐⭐⭐⭐⭐

1.7 TCP与UDP的区别?⭐⭐⭐⭐⭐

1.8 TCP头部包含哪些内容?⭐⭐⭐⭐⭐

1.9 TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐

1.10 TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐

1.11 说说TCP三次握手的过程。⭐⭐⭐⭐⭐

1.12 说说TCP四次挥手的过程。⭐⭐⭐⭐⭐

1.13 为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐

1.14 什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐

1.15 如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐

1.16 说说TCP的可靠机制。⭐⭐⭐⭐⭐

1.17 请说说TCP的ACK机制,有什么好处?⭐⭐⭐⭐

1.18 如何让UDP也变得可靠?⭐⭐⭐⭐⭐

1.19 什么是负载均衡?⭐⭐⭐⭐⭐

1.20 Session和cookie的区别?⭐⭐⭐⭐⭐

1.21 网络调试的工具?⭐⭐⭐⭐⭐

1.22 请说说socket网络编程的步骤。⭐⭐⭐⭐

1.23 请说说socket网络编程的接口。⭐⭐⭐⭐

1.24 什么是TCP粘包现象?⭐⭐⭐⭐⭐

1.25 为什么会出现粘包现象?如何解决?⭐⭐⭐⭐⭐

1.26 简述一下Nagle算法⭐⭐⭐⭐⭐

1.27 为什么UDP不粘包⭐⭐⭐⭐⭐

1.28 什么是封包和解包?⭐⭐⭐⭐⭐

1.29 请说说HTTP的工作原理。⭐⭐⭐⭐⭐

1.30 在浏览器地址栏键入URL,按下回车之后会经历哪些流程?⭐⭐⭐⭐⭐

1.31 请你说说HTTP请求包含哪些内容?⭐⭐⭐⭐⭐

1.32 请说说有哪些请求方法?⭐⭐⭐⭐⭐

1.33 get和post的区别是什么?⭐⭐⭐⭐⭐

1.34 请你说说HTTP状态码⭐⭐⭐⭐⭐

1.35 请说说HTTP响应头有哪些内容?⭐⭐⭐⭐⭐

1.36 请说说HTTP协议的特点⭐⭐⭐⭐⭐

1.37 HTTP的无连接是什么意思?⭐⭐⭐⭐

1.38 HTTP的无状态是什么意思?⭐⭐⭐⭐

1.39 HTTP1.0、HTTP1.1的区别⭐⭐⭐⭐

1.40 什么是长连接?⭐⭐⭐⭐⭐

1.41 HTTP2.0有哪些改动?⭐⭐⭐

1.42 HTTPS的加密原理⭐⭐⭐⭐⭐

1.43 什么是对称加密?什么是非对称加密?两者区别?⭐⭐⭐⭐⭐

1.44 对称加密有哪些?非对称加密有哪些?⭐⭐⭐⭐

1.45 数字证书用来干嘛的?⭐⭐⭐⭐⭐

1.46 HTTPS为什么比HTTP更安全⭐⭐⭐⭐⭐

1.47 HTTPS和HTTP的区别⭐⭐⭐⭐⭐

1.48 HTTPS的通信建立过程⭐⭐⭐⭐⭐

蒋豆芽的秋招打怪之旅——嵌入式基础知识(仅适合嵌入式求职的同学)

1.1 请说说你对嵌入式的理解。⭐⭐⭐

1.2 精简指令集和复杂指令集的区别⭐⭐⭐

1.3 请说说CPU的内部架构和工作原理⭐⭐⭐⭐⭐

1.4 请说说CPU的内核态与用户态⭐⭐⭐⭐⭐

1.5 请说说CPU的流水线工作原理⭐⭐⭐⭐⭐

1.6 嵌入式流水线工作有什么不同?⭐⭐⭐⭐⭐

1.7 什么是超流水线,为什么?⭐⭐⭐⭐⭐

1.8 什么是乱序执行?⭐⭐⭐⭐⭐

1.9 请说说CPU的两种体系结构,有什么区别⭐⭐⭐⭐⭐

1.10 说说ROM和RAM的区别⭐⭐⭐⭐⭐

1.11 说说你了解有哪些存储器类型⭐⭐⭐⭐⭐

1.12 说说你了解有哪些嵌入式操作系统,各自有什么特点?⭐⭐⭐⭐⭐

1.13 什么是DMA⭐⭐⭐⭐⭐

1.14 FreeRTOS、uCOS的区别⭐⭐⭐⭐⭐

1.15 说说Linux proc下面有什么文件⭐⭐⭐

1.16 请说说ARM微处理器的特点。⭐⭐⭐⭐⭐

1.17 请说说你了解哪些ARM系列,都应用在什么地方?⭐⭐⭐

1.18 SecurCore系列和Cortex系列各自有什么优势?⭐⭐⭐

1.19 ARM处理器模式有哪几种?简要介绍一下。⭐⭐⭐

1.20 说说ARM处理器几种模式切换的过程⭐⭐⭐⭐⭐

1.21 特权模式有哪些?异常模式有哪些?⭐⭐⭐⭐⭐

1.22 中断和异常的区别是什么?⭐⭐⭐⭐⭐

1.23 请你说说大端模式和小端模式⭐⭐⭐⭐⭐

1.24 ARM是大端模式还是小端模式?51单片机呢?⭐⭐⭐⭐⭐

1.25 什么是MMU?工作原理是什么?⭐⭐⭐⭐⭐

1.26 说说TLB⭐⭐⭐⭐⭐

1.27 说说DSP⭐⭐⭐⭐⭐

1.28 说说DSP和ARM有什么区别?⭐⭐⭐⭐⭐

1.29 说说STM32⭐⭐⭐

1.30 说说51单片机⭐⭐⭐

1.31 说一说BootLoader的启动流程⭐⭐⭐⭐⭐

1.32 BootLoader的启动有哪两个阶段?⭐⭐⭐⭐⭐

1.33 说一说你熟悉的BootLoader⭐⭐⭐

1.34 说一说BootLoader的两种模式⭐⭐⭐

1.35 说一说什么是驱动程序⭐⭐⭐⭐⭐

1.36 说一说设备的种类,各自有什么特点。⭐⭐⭐⭐⭐

1.37 什么是交叉编译?为何要有交叉编译⭐⭐⭐⭐⭐

1.38 说一说I2C的时序图,如何传输数据⭐⭐⭐⭐⭐

1.39 说一说SPI总线⭐⭐⭐⭐⭐

1.40 说一说CAN总线的仲裁机制⭐⭐⭐⭐⭐

1.41 说一说CAN总线的优点⭐⭐⭐⭐⭐

1.42 说一说UART和USART的区别⭐⭐⭐⭐⭐

1.43 说一说RS232和RS485的区别⭐⭐⭐⭐⭐

1.44 说一说串行和并行的区别⭐⭐⭐⭐⭐

1.45 说一说同步和异步的区别⭐⭐⭐⭐⭐

蒋豆芽的秋招打怪之旅——算法与数据结构

1.1 实现一个vector⭐⭐⭐⭐⭐

1.2 分析一下push_back() 的时间复杂度⭐⭐⭐⭐⭐

1.3 总结一下数组与链表的区别⭐⭐⭐⭐⭐

1.4 栈和队列的区别⭐⭐⭐⭐⭐

1.5 说说二叉堆⭐⭐⭐⭐⭐

1.6 说说哈希表⭐⭐⭐⭐⭐

1.7 说说堆排序的时间复杂度,建堆的时间复杂度⭐⭐⭐⭐⭐

1.8 哈希表如何解决哈希冲突⭐⭐⭐⭐⭐

1.9 哈希表的初始数组容量一般为多少,为什么?⭐⭐⭐⭐⭐

1.10 哈希表的负载因子为什么是0.75?⭐⭐⭐⭐⭐

1.11 说说红黑树⭐⭐⭐⭐⭐

1.12 说说什么是稳定的排序?⭐⭐⭐⭐⭐

1.13 说说动态规划算法⭐⭐⭐⭐⭐

1.14 手撕归并排序⭐⭐⭐⭐⭐

1.15 手撕快速排序⭐⭐⭐⭐⭐

1.16 手撕插入排序⭐⭐⭐⭐⭐

1.17 手撕堆排序⭐⭐⭐⭐⭐

1.18 手撕二分查找⭐⭐⭐⭐⭐

1.19 快排最差时间复杂度,堆排最差时间复杂度?⭐⭐⭐⭐⭐

1.20 说说各排序算法的时间复杂度?⭐⭐⭐⭐⭐

蒋豆芽的秋招打怪之旅——数据库(仅适合C++软件开发求职的同学)

1.1 数据库事务以及四个特性⭐⭐⭐⭐⭐

1.2 数据库三大范式⭐⭐⭐⭐⭐

1.3 事务的隔离级别⭐⭐⭐⭐⭐

1.4 什么是数据库索引⭐⭐⭐⭐⭐

1.5 索引类型与索引模型⭐⭐⭐⭐⭐

1.6 什么情况下数据库索引会失效⭐⭐⭐⭐⭐

1.7 引起慢查询的常见原因及一些解决方案⭐⭐⭐⭐⭐

1.8 聚簇索引与非聚簇索引⭐⭐⭐⭐⭐

1.9 数据库主键和外键⭐⭐⭐⭐⭐

1.10 mysql知道哪些存储引擎,它们的区别⭐⭐⭐⭐⭐

1.11 关系型数据库和非关系型数据库的区别⭐⭐⭐⭐⭐

1.12 数据库垂直与水平拆分怎么做⭐⭐⭐⭐⭐

1.13 什么是内联接、左联接、右联接⭐⭐⭐⭐⭐

1.14 乐观锁与悲观锁⭐⭐⭐⭐⭐

1.15 MVCC原理⭐⭐⭐⭐⭐

1.16 B树与B+树的区别⭐⭐⭐⭐⭐

1.17 mysql的四种日志⭐⭐⭐

1.18 mysql主从复制⭐⭐⭐⭐⭐

1.19 怎么优化查询⭐⭐⭐⭐⭐

1.20 mysql如何建立和删除索引⭐⭐⭐⭐⭐

1.21 group by和where⭐⭐⭐⭐⭐

1.22 数据库笛卡尔乘积⭐⭐⭐⭐⭐

1.23 什么是Redis⭐⭐⭐⭐⭐

1.24 Redis怎么实现高效缓存⭐⭐⭐⭐⭐

1.25 Redis持久化有哪几种方式,怎么选⭐⭐⭐⭐⭐

1.26 Redis对于过期键的清除策略⭐⭐⭐⭐⭐

1.27 Redis单线程为什么快⭐⭐⭐⭐⭐

1.28 Redis如何实现高可用⭐⭐⭐⭐⭐

1.29 Redis缓存穿透、缓存击穿、缓存雪崩⭐⭐⭐⭐⭐

1.30 Redis渐进式rehash⭐⭐⭐⭐⭐

1.31 Redis相比memcached有哪些优势⭐⭐⭐⭐⭐

你可能感兴趣的:(C++开发面经与嵌入式软件面经(蒋豆芽专栏总结)完成了!)