Qt技术面试问题总结

1.你知道什么是双指针吗,有没有在项目上用过,什么情况下使用双指针?
答:就是两级指针,一级指针指向对象的地址,两级指针指向一级指针的地址,一般用于指针的传参,链表操作,两维数组。

2.假设我在一个函数外定义了一个空指针,把它作为形参传入到函数中,我在函数中使用这个指针new了一个内存,请问这段运行这段代码会出现什么后果?那我应该如何传入一个空指针形参进函数并正确new一个内存呢?
答:使用二级指针,或者传指针引用。

3.请说一下数据结构有哪些?请说一下数组和链表的区别,他们的优缺点?(内存,访问效率),你在项目中用了哪些数据结构?怎么使用的?
答:数组,链表,图,哈希表,堆栈。
数组内存连续,链表不连续,数组进行非首尾插入时,需要移动后续元素,而链表只需修改指针即可,但数组直接通过下标访问较快,链表访问需要遍历
以上都用了,数组和链表常用于数据的存放,比如一些图片的文件名,UI的节点下标等,map用于存放对应关系对象,哈希表用于数据库,堆栈用于内存操作等等。

4.你知道设计模式吗?有哪些常见的设计模式?单例模式是怎么实现的?单例模式是如何保证只有一个实例化对象的?
答:单例模式,工厂模式,迭代器,直接在类中实例化对象,单例模式通过私有化构造函数实现对象唯一。

5.常用的网络协议有哪些?TCP和UDP的区别?在项目上用了TCP还是UDP,为什么用?HTTP和HTTPS的区别?带宽有了解吗?
答:TCP/IP、UDP、FTP、HTTP/HTTPS
TCP是可靠连接,头部开销大,传输效率较慢,一般用于文件传输,网页等等,UDP是非可靠连接,头部开销小,传输较快,一般用于网络直播,游戏等等,另外可以使用一些补充协议如QUIC减少丢包。
我们只用了TCP用于文件下载。
HTTPS相对于HTTP增加了SSL加密,以及身份验证的功能,HTTP一般用于公开静态网站,HTTPS用于登录类的网站。
带宽指的是单位时间链路可传输的最大数据量。

6.指针和引用的区别?引用的优势?
答:指针指向对象的地址,占独立内存,而引用只是对象的别名,无独立内存,指针可以不初始化,也可指向空值,引用必须初始化,不能指向空值,指针可以指向不同对象,但引用初始化后就不能更换引用对象了,指针可以有多级指针,但引用只有一级。
引用相较于指针没有野指针的内存泄露风险,空指针风险,语法更加简洁。

7.线程和进程是什么?进程和线程之间是如何通信的,你知道线程同步吗?
答:进程是操作系统资源分配的最小单位,线程是Cpu调度的最小单位,进程的通信方式有:管道,共享内存,消息队列,套接字。
线程的通信方式有:互斥锁,信号,信号量,共享内存。

8.你项目用过哪些开源库?音视频你们用的是哪一套?你们设备可以播放视频吗?用的是哪个控件?介绍一下RTSP传输
答:POCO库,FFmpeag库,Elawidgettools库,FFmpeag,可以播放,直接用widget。
RTSP是一种流媒体传输协议,使用RTP/RTCP用于协议双方传输音视频的数据包,一般会使用封装好的SDK控制媒体的播放暂停跳转等等。

9.讲一下Qt是如何使用自定义控件的?
答:在UI层面上,使用paintevent进行重绘,在功能层面上,重载原有的控件函数。

10.虚函数和纯虚函数 
答:虚函数和纯虚函数都是和C++的多态的核心机制。
他们两的区别是,虚函数必须提供实现,有函数体,不强制派生类重写,
纯虚函数在声明的时候在末尾加上“=0”,且不提供实现无函数体,强制派生类重写,一般是作为抽象类,不能被实例化。

11.cmke是什么?makefile是干嘛用的
答:Cmake是一个自动化构建的核心工具,可以生成多种构建系统文件,常用的是用来生成makefile
makefile是一个编译脚本文件,会按照所指定的规则完成所有的编译任务。

12.静态库和动态库的区别,以及各自的优劣?
答:静态库是编译时才会链接,相当于将库代码拷贝到可执行文件中,动态库是运行时才链接,所以一般动态库比较大,但生成的可执行文件可以单独运行,不像动态库一样依赖外部库。
在linux中动态库一般以.so为结尾,静态库以.a结尾,windows分别为.dll和.lib。
另外在实际使用中,更新动态库时只需要替换相关库文件即可,但静态库除了替换库还需重新编译程序。

13.使用过gdb调试吗?
答:工作中用的比较多的是gdb对core dump进行调试,使用gdb+程序+对应core文件,可以使用“ulimit -c”打开/关闭,或者在etc的一个config文件中使用soft core unlimited永久打开。

14.为什么是三次握手而不是二次握手或者五次握手?
答:这是Tcp在保证其可靠性的基础上,效率最高的方式。

15.Qt对控件样式的更改有几种方式?介绍一下qss这种方式
答:用的比较多的大概三种,第一种就是直接在.ui文件中设置样式表,第二种是通过代码,一些函数如:setstylesheet,第三种是通过.qss文件的方式,对控件样式统一设置。
通过加载.qss文件,一般用于大型项目对控件的样式进行集中设置,语法的话就是先指定控件类,后面带相关控件名,花括号内设置样式的具体内容,字体颜色边框透明度等等

16.介绍一下Qapplication
答:Qapplication是Qt的事件循环,负责管理整个应用程序的生命周期,如:管理‌事件分发‌、‌资源初始化‌与‌系统交互‌等等

17.C++的三大特性是什么?简单介绍一下,说一下多态的原理
答:封装、继承、多态,封装是将属性(数据)和行为(函数)绑定在一个类中,并隐藏具体实现,提供相关接口,
继承是指允许派生类可以继承基类的属性和方法,
多态指的是同一接口在不同对象的调用下表现出不同的行为,如虚函数和函数模版类 ,函数重载
多态的原理是含有虚函数的类都会生成一个虚函数表,派生类会继承基类的虚函数表,并在虚函数表后面增加函数指针,通过虚函数指针可以指定找到到相关的函数地址并执行

你可能感兴趣的:(qt,面试,开发语言)