Qt 每日面试题 -4

server/2024/12/22 13:45:04/

31、继承与派生的区别?

  1. 角度不同
    • 继承是从子类的角度讲的,派生是从基类的角度讲的
  2. 定义不同
    • 派生指江河的源头产生出支流。引申为从一个主要事物的发展中分化出来。继承是面向对象软件技术当中的一个概念,与多态、抽象共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

32、说出工厂模式概念和优点

定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。 这满足创建型模式中所要求的 “创建与使用相分离" 的特点。简单工厂模式可以决定在什么时候创建哪一个产品类的实例。工厂方法模式有非常良好的扩展性。抽象工厂模式降低了模块间的耦合性,提高了团队开发效率。

33、说出构造者模式概念

构造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离。客户端无需知道具体的构造过程,只需要与构造器打交道即可,构建与表示分离。

34、说出适配器模式概念

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能在一起工作的那些类一起工作。

35、进程和线程的区别?

  • 进程的定义:一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。简单来说,进程就是一个程序的执行流程,内部保存程序运行所需的资源。在操作系统中可以有多个进程在运行,可对于CPU来说,同一时刻,一个CPU只能运行一个进程,但在某一时间段内,CPU将这一时间段拆分成更短的时间片,CPU不停的在各个进程间游走,这就给人一种并行的错觉,像CPU可以同时运行多个进程一样,这就是伪并行。
  • 线程的定义线程是进程当中的一条执行流程,这几乎就是进程的定义,一个进程内可以有多个子执行流程,即线程。 从资源组合的角度看,进程把一组相关的资源组合起来,构成一个资源平台环境,包括地址空间(代码段,数据段),打开的文件等各种资源。从运行的角度看︰进程是代码在这个资源平台上的执行流程,然而线程貌似也是这样,但是进程比线程多了资源内容列表;进程=线程+共享资源

进程是操作系统分配资源的单位,线程是调度的基本单位,线程之间共享进程资源。

36、进程之间的道信方式有哪些?

  1. 管道
  2. 消息队列
  3. 共享内存
  4. 信号量
  5. 套接字
  6. 文件

37、信号和信号量的区别是什么?

  • 信号 : 一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接收进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身

  • 信号量 : 进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施,它负责协调各个线程,以保证它们能够正确,合理的使用公共资源。

38、多线程情况下,Qt中的信号槽分别在什么线程中执行,如何控制?

通过connect函数的第五个参数connectType来控制。

  • connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。
    lightseagreen
  • Qt::AutoConnection :默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt:DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt:QueuedConnection类型。

  • Q::DirectConnection :槽函数会在信号发送的时候直接被调用槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

  • Qt::QueuedConnection :槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个

  • Qt::BlockingQueuedConnection :槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。

  • Qt::UniqueConnection :这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

39、QSS平时使用的多吗?能举几个例子吗?

  1. 将QSS统一写在一个文件中,通过程序给主窗口加载;
  2. 写成一个字符串中,通过程序给主窗口加载;
  3. 需要使用的地方,写一个字符串,加载给对象;
  4. QT Designer(ui)中填写;

40、Qt程序是事件驱动的,事件到处都可以遇到。能说说平时经常使用到哪些事件吗?

常见的QT事件类型如下:

  • 键盘事件: 按键按下和松开
  • 鼠标事件: 鼠标移动,鼠标按键的按下和松开
  • 拖放事件: 用鼠标进行拖放
  • 滚轮事件: 鼠标滚轮滚动
  • 绘屏事件: 重绘屏幕的某些部分
  • 定时事件: 定时器到时
  • 焦点事件: 键盘焦点移动
  • 进入和离开事件: 鼠标移入widget之内,或是移出
  • 移动事件: widget的位置改变
  • 大小改变事件: widget的大小改变
  • 显示和隐藏事件: widget显示和隐藏
  • 窗口事件: 窗口是否为当前窗口

http://www.ppmy.cn/server/122259.html

相关文章

Supervision 计算机视觉工具

Supervision 是一个强大的计算机视觉工具库,它提供了丰富的功能来处理各种视觉任务,如目标检测、语义分割、目标跟踪等。这个库的最大特点是它能够简化代码的编写,使得视觉任务的处理变得更加高效和直观。 安装 Supervision 库可以在 Pytho…

运维工程师面试整理-沟通能力

在运维工程师的面试中,沟通能力是一个关键的软技能。虽然运维工程师的工作主要集中在技术领域,但良好的沟通能力能够帮助你更有效地与团队成员、其他技术部门和非技术人员协作。以下是关于运维工程师需要具备的沟通能力的详细内容,帮助你更好地准备面试。 1. 沟通能力的重要…

数学建模-线性规划讲解(Matlab版本)

引言 相信不少小伙伴刚开始接触数学建模时,第一个学习的算法就是运筹学的重要分支--数学规划,而数学规划当中重要的分支就是线性规划了。在这里笔者参考了司守奎和孙玺菁老师的《数学建模算法与应用》(第三版)这本书,以此来讲讲关…

【python笔记】列表操作append(list)与append(list[:])的区别;列表的就地修改与非就地修改

问题背景: 当有一个数组list1 [1,2,3],需要根据list1创建一个二维数组list2时, 想到了列表的list2.append(list1) 结果由于list1.pop()更改,list2的结果也随之变化,开始摸不着头脑。 append(list)与append(list[:])的…

前端文件下载全流程

一、首先是点击下载函数功能 源代码: java const dow async (record: any) > {console.log(record,record);let date: any {}date.pcno record.pcnodate.fileName record.fileNamedate.gmtCreated dayjs(record.gmtCreated).format(YYYY-MM)date.importSta…

解决docker目录内存不足扩容处理

当我们使用docker时,经常会创建新镜像和新容器,在新容器中又会安装各种包,这些东西不是虚拟的,而是实实在在存于我们的磁盘中,默认在/var/lib/docker中,这个目录是属于系统盘的,而系统盘的空间往…

接口自动化测试框架详解(pytest+allure+aiohttp+ 用例自动生成)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效…

【计算机网络】运输层协议解析

这里写目录标题 前言UDP与TCP对比TCP流量控制TCP拥塞控制TCP超时重传时间选择TCP可靠传输实现 前言 运输层直接为应用进程间的逻辑通信提供服务。运输层向高层用户屏蔽了下面网络核心细节(如网络拓扑、路由选择协议等)它使应用进程看见的就好像是在两个…