C++面试题之问题归纳

基础知识点

1.C与C++有什么区别,C++有哪些特征?说说多态是怎么实现的(C++内存模型)?
2.构造函数可以是虚函数吗,为什么?
3.析构函数可以是虚函数吗,什么时候必须为虚函数,为什么?
4.子类析构要调用父类的析构函数吗?
5.C++空类默认有哪些成员函数(提示6种)?
6.什么情况下需要调用拷贝构造函数?
7.类的静态成员与非静态成员有哪些区别?
8.说说纯虚函数,虚函数,多态(虚指针,虚函数表),this指针
9.说说堆和栈(内存布局,内核空间,用户空间)
10.重载,重写(覆盖)与隐藏的区别
11.new/delete,malloc/free之间的区别
12.delete和delete[]有什么区别,delete删除数组为什么会造成内存泄漏?delete[]怎么知道要调用多少次析构函数?
13.指针与引用的区别
14.结构体与联合体的区别
15.const的用法(只读和赋值)
16.static的用法(修饰局部/全局变量/函数;修饰类的成员变量/函数)
17.sizeof与strlen区别
18.什么是内存泄漏,怎么检查内存泄漏,内存泄漏有哪几种情况,如何避免?
19.C++的四种类型转换
20.堆栈溢出的原因及解决方式?
21.在C++程序调用C编译器时为什么要加“extern C”?
22.什么是引用,引用需要注意什么,引用作为函数参数有什么特点,什么时候使用“常饮用”,将“引用”作为函数返回值类型,需要注意什么?了解右值引用吗,说一说。
23.浅拷贝与深拷贝区别
24.什么是内存对齐,为甚要内存对齐?
25.C++中struct和class的区别
26.宏定义与枚举,函数定义的区别
27.C++代码重用的机制有哪些?
28.动态链接与静态链接
29.空悬指针指针是什么,有哪些危害,怎么解决?
30.C++中inline和宏定义区别
31.C++一个空类的大小并解释
32.交换两个变量,不使用第三者变量。
33.请你来说一下函数指针
34.请你来说一说++i和i++的实现
35.请你来写个函数在main函数执行前先运行
36.define和typedef区别
37.请你回答一下静态函数和虚函数的区别
38.请你说一说strcpy和strlen

STL类模板

1.常见的STL容器用过哪些,说说都有哪些,它们之间有什么区别(底层实现),使用场景?
2.STL中vector是怎么扩容的?如何避免动态扩容?为什么选择1.5倍或者2倍进行扩容,而不是3倍4倍扩容?vs为什么是1.5倍,而Linux是2倍进行扩容?
3.vector容器是如何回收的,earse方法在使用时需要注意什么?
4.STL中resize和reserve区别
5.map和vector底层实现
6.哈希表的实现,如何解决哈希冲突?map和unordered_map有什么区别?
7.vector与list的区别?如何从无序数列中查找某一个数;
8.为什么map和set插入元素效率要比其它容器效率高(map和set的原理)?
9.为什么每次insert之后,以前保存的iterator迭代器不会消失?
10.为什么map和set不能像vector一样有个reserve函数来预先分配数据空间?
11.当数据增多时(100000到200000个比较),map和set的插入和搜索速度变化如何?

网络编程

1.网络体系结构;
2.TCP和UDP的区别,TCP和UDP的应用场景;
3.TCP和UDP实现套接字流程;
4.TCP三次握手四次挥手,以及各个状态的作用;三次握手为什么不是两次或者四次?
5.HTTP协议与TCP协议区别;同步IO和异步IO区别;
6.什么是网络套接字和流式套接字?
7.如何实现可靠的UDP?
8.TCP重发机制和拥塞控制;
9.HTTP和HTTPS的区别;
10.HTTP协议返回状态码;
11.浏览器输入一个URL,发生了什么,用到了那些协议?
12.Connect会阻塞检测及防止,socket什么情况下可读?
13.TCP能否发送0字节的数据包?
14.什么是TCP的自连接,如何解决?
15.单播,多播及广播的区别;
16.TCP客户端的正确关闭方式,TCP协议下socket可能丢包吗?
17.socket套接字在多线程发送数据时需要加锁吗?
18.GET/POST的区别
19.长连接与短链接
20.什么时候考虑粘包问题?粘包出现的原因是什么,如何解决?
21.UDP会出现粘包问题吗?
22.什么是保护消息边界和流?
23.如何解决数据传输的安全问题(网络编程中加密算法)?

多线程编程

1.线程,进程,多线程,多进程,并发及并行概念;
2.进程与线程之间的关系;
3.多线程与并发之间区别;
4.线程安全与线程不安全;
5.什么是死锁,死锁的四个条件,如何预防死锁?
6.多线程实现方式?同步机制?
7.volitile关键字的作用
8.select/poll/epoll(LT和ET区别);
9.进程间通讯(IPC)方式,它们之间的特点和区别
10.IPC,线程同步,进程同步(共享内存/信号量/记录锁)
11.共享内存的同步问题(互斥锁/记录锁/信号量)
12.线程上下文切换为什么比线程开销要小?
13.STL中的容器是线程安全的吗?
14.多线程如何对共享数据进行加锁(互斥锁),有没有效率更高的(读写锁)?
15.Qt主线程(GUI线程)与子线程(工作线程)之间如何进行参数传递?
16.Qt中子线程不能直接刷新界面(或控件),子线程若想修改主线程界面元素,有哪些方式,如何实现?
17.如何通过多线程或线程池更新UI组件?
18.子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码
19.什么是惊群现象?
20.开发多线程的程序员应该注意什么?
21.多线程网络编程中如何合理选择线程数量?
22.什么是孤儿线程和僵尸线程,如何避免僵尸线程?
23.Fork/vfork区别,exit与_exit区别;
24.如何通过多线程实现网络通信,要求能同时收发数据的。

数据结构与算法

1.二分法思想
2.快排思想
3.用两个栈实现一个队列,给出算法思想和代码
4.实现atoi和itoa的函数
5.实现一个string类;
6.深度优先遍历与广度优先遍历区别;
7.大数运算加法思想;
8.填写一个标准的MIN宏返回最小的一个;
9.链表的常见操作;
10.数组与链表区别
11.红黑树和平衡二叉树(AVL)树的定义,特点以及二者间区别

设计框架及模式

1.单例模式(线程安全的单例模式)
2.策略模式
3.简单工厂模式,工厂模式,抽象模式
4.观察模式
5.代理模式(Qt-MVC)
6.设计框架六大原则

C++11新特性

1.新字符串表示方式—原生字符串(无需转义)
2.新的范围for循环—for(x:range)
3.新的初始化方式—vector vec(10);
4.auto自动类型推导
5.decltype类型指示器—获取表达式类型,常与typedef使用
6.空指针nullptr
7.关键字explicit的用法
8.Lambda表达式
9.右值引用,tuple元组
10.新增static_assert编译时检查
11.新增智能指针std::unique_ptr,std::share_ptr,std::weak_ptr,废弃std::auto_ptr;
12.C++14新增std::make_unique,用于创建std::unique_str;
13.提升C++的vector性能的技巧有哪些?
14.请你回答一下智能指针有没有内存泄露的情况
15.请你来说一下智能指针的内存泄漏如何解决

音视频基础知识

1.什么是推流和拉流?推流和拉流的流程是什么?
2.Rtsp协议

数据库(SQLite3)

1.如何安装sqlite数据库?如何打开数据库,如何创建数据库表,并对表进行增删改查?
2.数据库表的操作需要哪些流程?
3.详细数据库操作参见----SQLite3知识点汇总

Qt及相关第三方库

1.Qt中文乱码如何解决的?
2.QString与int,char*,string和QByteArray之间转换;
3.QFileDialog与QFile的用法;
4.对Qt信号槽机制的理解(元对象;connect第五个参数);
5.Qt事件机制和事件处理方式;
6.无边框透明窗体如何设置(窗体类重要特性设置)?
7.QTextStream与QDataStream的区别
8.图片与图片,图片与文字合成;
9.Qt JSON构建与解析;
10.CMarkup库与DOM解析xml

其它

1.概要设计及详细模块设计;
2.UML基本概念;
3.敏捷开发思想;
4.书籍:代码整洁之道;Effictive C++(改善程序与设计的55个具体做法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin_org

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值