罗列一下面试官可能问的QT面试题:
③ 绑定connected()信号确认连接,readyRead()读取数据,write()发送数据。实现:创建QUdpSocket对象,服务端/客户端均通过bind()绑定端口;答:依赖QObject类、Q_OBJECT宏、元对象编译器(MOC)实现,核心功能包括信号与槽、运行时类型信息(qobject_cast)、动态属性系统,是Qt跨平台和高灵活性的基础。4. 客户端回复ACK报文(确认),状
一、Qt核心概念与原理
1. Qt元对象系统(Meta-Object System)的作用是什么?
答:依赖QObject类、Q_OBJECT宏、元对象编译器(MOC)实现,核心功能包括信号与槽、运行时类型信息(qobject_cast)、动态属性系统,是Qt跨平台和高灵活性的基础。
2. 信号与槽(Signals & Slots)和回调函数的区别?
答:信号槽是松散耦合,信号发送方无需知道接收方;回调是紧耦合,发送方需持有接收方指针。信号槽支持多对多关联,回调通常一对一。信号槽由MOC生成代码实现,回调直接函数调用,前者性能略低但开发效率高。
3. Qt中的智能指针有哪些?各自特点?
答:- QPointer:弱指针,指向QObject,对象销毁后自动置空,避免野指针。
◦ QSharedPointer:强指针,基于引用计数,计数为0时自动释放对象,支持线程安全。
◦ QScopedPointer:独占指针,禁止赋值和拷贝,作用域结束自动释放,适合局部对象。
4. QWidget、QDialog、QMainWindow的区别?
答:QWidget是所有可视控件的基类,可作为独立窗口;QDialog用于对话框,自带模态/非模态属性,支持按钮区布局;QMainWindow是主窗口框架,自带菜单栏、工具栏、状态栏等组件。
二、Qt编程实践
1. Qt多线程的两种实现方式及优缺点?
答:- 方式1:继承QThread重写run()。优点:实现简单;缺点:线程与任务耦合,一个线程只能处理一个任务。
◦ 方式2:QObject+moveToThread()。优点:任务与线程解耦,一个线程可处理多个任务,灵活性高;缺点:需通过信号槽触发任务,逻辑稍复杂。
注意:子线程绝对禁止操作UI组件,需通过信号槽或QMetaObject::invokeMethod通知主线程更新UI。
2. Qt中TCP通信的实现流程(服务端+客户端)?
答:- 服务端:① 创建QTcpServer对象;② 调用listen()监听指定端口;③ 绑定newConnection()信号,触发时通过nextPendingConnection()获取QTcpSocket;④ 绑定QTcpSocket的readyRead()信号读取数据,调用write()发送数据。
◦ 客户端:① 创建QTcpSocket对象;② 调用connectToHost()连接服务端IP和端口;③ 绑定connected()信号确认连接,readyRead()读取数据,write()发送数据。
3. Qt中UDP通信的特点及实现关键?
答:特点:无连接、不可靠、传输快,适合实时性要求高(如音视频)、允许丢包的场景。
实现:创建QUdpSocket对象,服务端/客户端均通过bind()绑定端口;发送数据用writeDatagram(),接收数据绑定readyRead()信号,通过readDatagram()读取。
三、TCP/UDP核心原理(含握手挥手)
1. TCP与UDP的核心区别?
答:| 维度 | TCP | UDP |
|--------------|----------------------|----------------------|
| 连接性 | 面向连接 | 无连接 |
| 可靠性 | 可靠(重传、校验等) | 不可靠(不保证送达) |
| 传输效率 | 低(有连接开销) | 高(无额外开销) |
| 数据边界 | 无(字节流) | 有(数据报) |
| 适用场景 | 文件传输、登录等 | 直播、物联网、游戏等 |
2. TCP三次握手(建立连接)流程?
答:1. 客户端(C)发送SYN报文(同步序列编号),请求建立连接,状态变为SYN_SENT。
2. 服务端(S)收到后,回复SYN+ACK报文(同意同步+确认),状态变为SYN_RCVD。
3. 客户端收到后,回复ACK报文(确认),双方状态均变为ESTABLISHED,连接建立。
核心目的:确保双方收发能力正常,协商初始序列号。
3. TCP四次挥手(释放连接)流程?
答:1. 客户端发送FIN报文(请求释放),状态变为FIN_WAIT_1。
2. 服务端回复ACK报文(确认),状态变为CLOSE_WAIT,客户端进入FIN_WAIT_2。
3. 服务端数据发送完毕后,发送FIN报文(请求释放),状态变为LAST_ACK。
4. 客户端回复ACK报文(确认),状态变为TIME_WAIT(等待2MSL确保服务端收到确认),服务端收到后关闭,客户端超时后也关闭。
核心原因:服务端收到FIN后可能仍有数据未发送,需分两次确认释放。
更多推荐


所有评论(0)