那些常见的C++、Qt基础面试题「建议收藏」

那些常见的C++、Qt基础面试题「建议收藏」前言又到了金三银四的季节,每年这个时候都是跳槽的高峰期,在整理电脑资料的过程中发现一些之前记录的面试过程中最常提到的C++和Qt相关问题,其实都是些很基础的知识点,但是在面试过程中出镜率非常高。总结如下,暂不附答案,仅供参考。正文废话不多说,直接上题。C++基础篇1.线程同步的方式有哪些2.线程间通信如何实现3.进程间通信如何实现4.IO模型用过哪些5.IO实现的方式有哪些6.用过哪些STL7.迭代器实现怎么产生的,如何避免8.vector、list、map实现原理9.如何实现多

大家好,又见面了,我是你们的朋友全栈君。

前言

又到了金三银四的季节,每年这个时候都是跳槽的高峰期,在整理电脑资料的过程中发现一些之前记录的面试过程中最常提到的C++和Qt相关问题,其实都是些很基础的知识点,但是在面试过程中出镜率非常高。总结如下,仅供参考。

正文

废话不多说,直接上题。

C++基础篇

  • 1.线程同步的方式有哪些
  • 2.线程间通信如何实现
  • 3.进程间通信如何实现 参考这里
  • 4.IO模型用过哪些
  • 5.IO实现的方式有哪些
  • 6.用过哪些STL
  • 7.迭代器失效怎么产生的,如何避免 参考这里
  • 8.vector、list、map实现原理
  • 9.如何实现多态
  • 10.虚函数实现原理,虚函数表结构,对于菱形继承结构,虚函数表处理方式是什么
  • 11.内存结构分配方式

C++ 内存分区:栈、堆、全局/静态存储区、常量存储区、代码区。
1.栈:存放函数的局部变量、函数参数、返回地址等,由编译器自动分配和释放。
2.堆:动态申请的内存空间,就是由 malloc 分配的内存块,由程序员控制它的分配和释放,如果程序执行结束还没有释放,操作系统会自动回收。
3.全局区/静态存储区(.bss 段和 .data 段):存放全局变量和静态变量,程序运行结束操作系统自动释放,在 C 语言中,未初始化的放在 .bss 段中,初始化的放在 .data 段中,C++ 中不再区分了。
4.常量存储区(.data 段):存放的是常量,不允许修改,程序运行结束自动释放。
5.代码区(.text 段):存放代码,不允许修改,但可以执行。编译后的二进制文件存放在这里。

  • 12.malloc free 和new delete的区别,为什么不能malloc和delete混用,会产生什么问题
  • 13.红黑树实现原理
  • 14.查找算法有哪些
  • 15.排序算法有哪些
  • 16.快排实现原理,时间复杂度是多少
  • 17.指针和引用的区别
  • 指针有自己的一块空间,而引用只是一个别名
  • 指针的大小是4,引用则是被引用对象的大小
  • 指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用
  • 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对应用的修改都会改变引用所指向的对象
  • 可以有const指针,但没有const引用
  • 指针在使用中可以指向其他对象,但是引用只能是一个对象的引用,不能被改变
  • 指针可以有多级指针(**p),而引用只有一级
  • 指针和引用使用++运算符的意义不一样
  • 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。
  • 18.const声明指针的问题
  • 19.哪些运算符不能重载

1 . (点运算符)通常用于去对象的成员,但是->(箭头运算符),是可以重载的
2 ::(域运算符)即类名+域运算符,取成员,不可以重载
3 .* (点星运算符,)不可以重载,成员指针运算符”.*,即成员是指针类型
4 ?: (条件运算符)不可以重载
5 sizeof 不可以重载

  • 20.什么是线程安全

线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。

线程安全问题大多是由全局变量及静态变量引起的,局部变量逃逸也可能导致线程安全问题。

  • 21.C++11新特性用过哪些
  • 22.vector的C++新特性有哪些
  • 23.讲讲右值引用与完美转发
  • 24.对象池的使用及场景
  • 25.线程池介绍,使用场景和实现原理
  • 26.内存池使用场景和实现原理
  • 27.C++的锁
  • 28.Lambda表达式传递值有哪些方式,如何确定lambda的返回值 参考这里
  • 29.智能指针介绍
  • 30.shared_ptr相互引用的场景,如何解决
  • 31.auto和decltype的区别
  • 32.vector内存拷贝问题,什么情况下会出现内存拷贝,如何解决这个问题使其更加高效
  • 33.vector中resize和reverse的区别

reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。
resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。
再者,两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。

  • 34.内存泄露的情况
  • 35.链表实现原理
  • 36.动态库和静态库的区别
  • 37.多线程在什么场景下使用
  • 38.动态库导出的接口设计有哪些需要注意的。工作中有没有做过动态接口设计,如何考虑不同版本的兼容性。假如已经导出了接口给外部使用,并且该版本已经发布出去了,如果新增加了接口,那么如何保障已经发出去的版本能够调用到这个新的接口,如何设计这个兼容性问题。 参考这里
  • 39.用过哪些设计模式,举例说明其原理 参考这里
  • 40.堆和栈的区别

1.申请方式:栈是系统自动分配,堆是程序员主动申请。
2.申请后系统响应:分配栈空间,如果剩余空间大于申请空间则分配成功,否则分配失败栈溢出;申请堆空间,堆在内存中呈现的方式类似于链表(记录空闲地址空间的链表),在链表上寻找第一个大于申请空间的节点分配给程序,将该节点从链表中删除,大多数系统中该块空间的首地址存放的是本次分配空间的大小,便于释放,将该块空间上的剩余空间再次连接在空闲链表上。
3.栈在内存中是连续的一块空间(向低地址扩展)最大容量是系统预定好的,堆在内存中的空间(向高地址扩展)是不连续的。
4.申请效率:栈是有系统自动分配,申请效率高,但程序员无法控制;堆是由程序员主动申请,效率低,使用起来方便但是容易产生碎片。
5.存放的内容:栈中存放的是局部变量,函数的参数;堆中存放的内容由程序员控制。

  • 41.什么是二叉搜索树

二叉搜索树,左子树的所有节点都小于当前节点,右子树的所有节点都大于当前节点,并且每棵子树都具有上述特点

Qt相关

  • 1.Qt创建线程的方式有哪些 参考这里
  • 2.信号槽实现原理
  • 3.Qt的消息传输机制
  • 4.QML和C++的交互方式
  • 5.如何在C++中定义model并在qml中使用
  • 6.moveToThread的优缺点
  • 7.Qt中的http是同步还是异步,如何实现同步
  • 8.Qt的信号槽是线程安全的吗,Qt信号的连接方式?

Qt 支持这些信号槽连接类型:
AutoConnection:自动连接(默认)如果信号在接收对象具有亲和性的线程中发出,则行为与直接连接相同。否则,行为与排队连接相同。
DirectConnection:直接连接,发出信号时立即调用槽。槽在发射器的线程中执行,不一定是接收器的线程。
Queued Connection:当控制返回到接收者线程的事件循环时调用该槽。插槽在接收者的线程中执行。
BlockingQueuedConnection:与 Queued Connection 一样调用槽,除了当前线程阻塞,直到槽返回。
注意:使用该类型连接同一线程中的对象会导致死锁。
UniqueConnection:唯一连接行为 与自动连接相同,但只有在不复制现有连接时才会建立连接。即,如果相同的信号已经连接到同一对对象的相同槽,则不建立连接并且connect()返回false。

可以通过将附加参数传递给connect()来指定连接类型。请注意,如果事件循环在接收者的线程中运行,则在发送者和接收者位于不同线程中时使用直接连接是不安全的,原因与调用位于另一个线程中的对象上的任何函数是不安全的原因相同。

QObject::connect () 本身是线程安全的。

  • 9.元对象系统介绍
  • 10.QPixmap和QImage的区别 参考这里
  • 11.Qt跨平台的优缺点

平台相关

  • 1.win系统编程用过哪些系统接口
  • 2.windows消息传递机制
  • 3.如果要自己写消息循环会怎么写
  • 4.windbg调试使用
  • 5.内存泄露如何排查和解决
  • 6.什么是消息队列
  • 7.一个进程可以有多个消息队列吗
  • 8.sendMessage和postMessage的区别
  • 9.VS调试dump文件过程

网络相关

  • 1.TCP底层原理
  • 2.TCP三次握手,四次握手过程,发送的报文以及每次握手的状态,断开后为什么是time_wait状态
  • 3.TCP粘包如何处理
  • 4.网络传输协议如何制定,哪些字段必须定义

编程相关

  • 1.手写快排代码 参考这里
  • 2.手写冒泡排序
  • 3.创建单向链表,顺序添加10个元素
  • 4.创建红黑树,添加元素
  • 5.单项链表,如何快速查出倒数第N个数据的值
  • 6.假设内存无限大,100万个short类型的数据,如何高效排序
  • 7.vector一次循环删除多个元素
    参考:
std::vector<int> v = { 
   1,3,5,6,3,4,7,3};
    for(auto it = v.begin(); it != v.end();){ 
   
        cout << "*it=" << *it << endl;
        if(*it == 3){ 
   
            it = v.erase(it);
        }
        else{ 
   
            it++;
        }
    }

项目相关

  • 1.libevent接口如何封装的
  • 2.介绍自己设计的项目框架
  • 3.项目中遇到的难题,如何解决的
  • 4.如何调试程序,崩溃问题如何排查
  • 5.git和svn区别 参考这里

相关

在之前的博客中也总结过一些关于C/C++ 的基础知识点,可供参考:
C/C++基础知识点(一)
C/C++基础知识点(二)
C/C++基础知识点(三)
C/C++基础知识点(四)

最后

上面这些是之前面试中遇到过的一些常见问题,另外,还整理了一份更详细的复习资料,也是关于C++基础知识以及相关经典面试题,还有一份数据结构和算法的面试手册,非常详细,有需要的可以下载学习。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

以上资料附带详细答案。
下载地址

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152888.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Linux WIFI优先连接5G频段「建议收藏」

    Linux WIFI优先连接5G频段「建议收藏」最近遇到一个项目,要求树莓派无线优先连接5G,目前测试了一个方法,先记录下来,测试下来是有用的。现场无线网络知识2.4G和5G双频,SSID和密码都是相同的,树莓派在这个环境中,优先连接2.4G网络。由于2.4G网络干扰问题,网络通讯不稳定,因此需要树莓派优先连接到5G网络。有查到通过修改wpa_supplicant.conf文件中,定义frep_list的频点值,可以修改单独连接到5WIFI.后来经过测试,将5G频段排序到2.4G频段之前,无线会优先连接5G网络,如果5G网络不可用,也可以连接到

    2022年10月20日
  • U盘安装window系统[通俗易懂]

    U盘安装window系统[通俗易懂]U盘安装window系统:1.制作系统启动U盘,推荐使用老毛桃。2.电脑上插入U盘,启动系统,选择U盘启动。3.进入老毛桃选择界面,选择生成PE系统。推荐win8,之前在一个戴尔电脑上使用win

  • 香港免备案服务器是合法的吗?「建议收藏」

    香港免备案服务器是合法的吗?不管是否使用过香港服务器的用户,应该都听说过香港服务器可以不用备案,虽然大多数用户不太清楚香港服务器为什么不用备案,但知道香港服务器免备案是合法的就足够了,我在这里将说明关于香港服务器免备案的一切疑问。所谓的网站备案是指的根据国家互联网的规定,网站所有者必须向国家工信部申请网站内容审核和实名备案,有的网站还需要向当地的公安部进行监管备案,所有放在国内服务器上的网站只能通过备案才能访问上线。1、香港服务器为什么不用备案?  这主…

  • python setattr函数_Python内置函数(53)——setattr「建议收藏」

    python setattr函数_Python内置函数(53)——setattr「建议收藏」英文文档:setattr(object,name,value)Thisisthecounterpartofgetattr().Theargumentsareanobject,astringandanarbitraryvalue.Thestringmaynameanexistingattributeoranewattribute.Thef…

    2022年10月26日
  • 狄利克雷近似定理_莫比乌斯反演例题

    狄利克雷近似定理_莫比乌斯反演例题首先定义几个概念:1,卷积:设是两个数论函数(也就是说,以自然数集为定义域的复数值函数),则卷积运算定义为可以证明,卷积运算满足:1)交换律:由定义显然。2)结合律:考察两边作用在上,左边是右边是故两边相等。3)存在单位元使得我们需要故不难猜到应该定义为事实上,直接验证可得以上说明数论函数在卷积意义下构成一个交换群。

    2022年10月28日
  • JMM简介_英文缩写jmy啥意思

    JMM简介_英文缩写jmy啥意思Java的内存模型JMM(JavaMemoryModel)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(MainMemory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(WorkingMemory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中;堆栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量。JM

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号