小米面试总结
       总结一下前段时间小米面试的题目吧,考察了很多C11的新特性,由于自己也没怎么准备,而且公司只准使用C99开发,所以很多都忘记了,答的并不是很好在这上面,所以自己也需要重新回顾下C11的知识点了。
       有时间也会将C++重新回顾的知识重点写成博客,供大家一起学习,有错误的地方希望指正,共同进步,因为有些问题是我自己总结的,所以难免会有错!!!
1.STL中的容器vector,size和capacity的区别?
解释:size是已存在vector中的元素数目,而capacity则是在不分配新的内存空间的前提下最多可以保存的元素数目,如果从重新分配了内存一般是以原内存的2倍方式增长。
2.如何避免C++中的隐式转换?
解释:在构造函数中可以通过explicit声明为显示转换,函数中可以参考 c++避免隐式转换_LaineGates的专栏-CSDN博客
3.了解MVC框架么?和你的ESP框架有什么不同么?
解释:其实ESP采用的就是MVC框架,也就是模型(model)-视图(view)-控制器(controller)。百度解释如下:
Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分。 通常模型对象负责在数据库中存取数据。 View(视图) 是应用程序中处理数据显示的部分。 通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
          其实用我个人编程角度解释就是,模型相当于一个对象或者说我们需要实现的具体逻辑业务,而视图可以理解为界面,也就是说我们需要处理的逻辑业务通过Html界面显示即视图,而控制器可以理解为通过Html界面传过来的路由即action,后台处理界面传过来的数据处理部分即可以理解为控制器。
4.你了解vector的内部实现么?
解释:vector是动态增加内存大小的,所谓动态增加并不是指在原空间之后持续新空间(因为无法保证原空间之后尚有可配置的空间),而是以原大小的2倍另外配置一块新的空间,然后将原内容拷贝过来。然后才在原内容之后构造新数据,并释放原空间。 因此一旦内存被重新分配,则指向容器的迭代器,指针和引用都会失效。
5.2选1编程题不查网络, 实现scope_ptr内部实现 ②关于视频方面的,矩阵变换方面的题(用代码实现)
6.往verctor中添加一个元素,size会变大,capacity也会变大么?如何实现的?
解释:size是肯定会变大的,而capacity要看情况,如果已经满载的情况,那么capacity会变大,并且为2倍扩容,如果内存空间足够,那么capacity不会变大,总之capacity大于或等于size。
7.删除一个迭代器,还能使用么?
解释:对于序列式容器(如vector、queue)删除迭代器,会使后面所有元素的迭代器都失效,对于关联容器(如map、set等)删除迭代器,只会使当前迭代器失效(和内部实现有关系,关联容器红黑树存储)
8.Apache和ESP有什么区别?Appweb和Httpd有啥区别?

解释:因为apache没使用过,所以没总结。

9.调用一个普通函数和调用系统函数有啥区别?
解释:简单解释为普通函数调用发生在用户态,而系统调用发生在内核态,系统调用都会为用户提供系统接口(API),来维护内核的稳定和安全性。比如:我们开启一个进程那么会调用系统函数fork(),又比如printf底层调用的是write函数。
函数库调用
系统调用
在所有的ANSI C编译器版本中,C库函数是 相同
各个操作系统的系统调用是 不同
它调用 函数库 中的一段程序(或函数)
它调用 系统内核 的服务
用户程序 相联系
操作系统 的一个入口点
在用户地址空间执行
在内核地址空间执行
它的运行时间属于“ 用户时间
它的运行时间属于“ 系统时间
属于 过程调用,调用开销较小
需要在 用户空间和内核上下文环境间切换,开销较大
在C函数库libc中有大约300个函数
在UNIX中大约有90个系统调用
典型的C函数库调用:system fprintf malloc
典型的系统调用:chdir fork write brk;
10.为什么要使用虚函数?
解释:降低了耦合度,使代码模块实现分层,增加模块之间可扩展性和可维护性
11.说说静态库和动态库的区别
解释:静态库发生在编译和链接时期,也就是在链接过程中将目标文件(.o文件)一起打包到可执行文件中,所以静态库的体积会比较大,所以静态库比较浪费空间和资源,而动态库是在程序运行时动态载入的,灵活性更大,有利于程序更新、以及代码改动,因为如果是静态库需要重新全部编译。
12.还是静态库和动态库,假如一个程序调用了A和B两个静态库,A和B再调用C静态库,请问能编译通过么?为什么?
解释:不能,因为会出现重复定义,这也就是为什么会有动态库了
13.了解C++11的nullptr和C99里面的指针NULL赋初始值为0的区别么?
解释:nullptr就代表一个空指针常量,而C99里面的NULL指针在C99中是被定义为0的,为什么引入nullptr主要是解决C++中重载带来的二义性。具体参考博客 NULL、0、nullptr的区别 - NoThx - 博客园
14.你们为什么要选择Appweb而不是Apache
解释:因为我们是嵌入式开发,而Apache太大我们并不需要,Appweb的功能能满足我们的需求。
15.你了解map么,请问内部实现是什么?( 红黑树存储的,问关于红黑树的实现 )
解释:这个网上很多,不在博客中说了。
16.SPS是什么?PPS是什么?SPS和PPS的区别?
解释:SPS为序列参数集,PPS为图像参数集。SPS包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。PPS对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。
17.AVC和SVC的区别?
解释: H.264SVC (Scalable Video Coding)是以H.264为基础,在语法和工具集上进行了扩展,支持具有分级特性的码流,H.264SVC是H.264标准的附录G,同时作为H.264新的profile。H.264SVC在2007年10月成为正式标准(具体见这篇博客H.264 SVC - 鹏小鹕 - 博客园
18.讲一下对于AAC的了解
解释:这个百度下
19.讲一下H264中的VCL和NAL
解释:VCL为   视频编码层,NAL为网络提取层
20.你知道普遍的音频采样率为多少么?为什么?
解释:常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,因为人耳所能正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该是正常人听觉的2倍。
21.你了解可视电话么,一般采样率是多少?
解释:8khz
22.PTS和DTS是什么?
解释:PTS为显示时间戳,DTS为解码时间戳
23.音频(AAC)和视频(H264)的time_base是多少?
解释: h264随着帧率变化例如1:90000,aac根据采样率变化例如1:44100
24.给一个视频分辨率(720x576),你知道大概带宽和码率么?

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐