Qt 每日面试题 -4

devtools/2024/10/19 9:43:56/

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/devtools/117774.html

相关文章

NLP-transformer学习:(7)evaluate实践

NLP-transformer学习:(7)evaluate 使用方法 打好基础,为了后面学习走得更远。 本章节是单独的 NLP-transformer学习 章节,主要实践了evaluate。同时,最近将学习代码传到:https://github.com/Mex…

计算机毕业设计 奖学金评定管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

MySQL数据库迁移与备份实录

这里写目录标题 事情起因的概述查看磁盘空间使用情况为了进一步的明确宕机原因,查看MySQL日志信息进一步排查 如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份分析与梳理如何修改MySQL数据卷的挂载位置停止MySQL服务备份 MySQL 配置文件迁移 MySQL 数据…

使用lodash库实现防抖和节流

在 JavaScript 中,lodash 是一个非常流行的实用工具库,提供了许多常用的函数,其中就包括防抖和节流的实现。lodash 提供的 debounce 和 throttle 函数可以让我们更方便地实现这两种功能。 1. 使用 lodash 的 debounce(防抖&#…

在Java中,有没有其他方式可以替代List<Map<String,Object>>来存储和处理数据?

在Java中&#xff0c;有多种方式可以替代List<Map<String, Object>>来存储和处理数据。选择哪种方式取决于你的具体需求&#xff0c;比如数据结构的复杂性、类型安全、性能要求等。以下是一些常见的替代方案&#xff1a; 自定义类&#xff08;POJOs&#xff09;&am…

Java 编码系列:线程基础与最佳实践

引言 在多任务处理和并发编程中&#xff0c;线程是不可或缺的一部分。Java 提供了丰富的线程管理和并发控制机制&#xff0c;使得开发者可以轻松地实现多线程应用。本文将深入探讨 Java 线程的基础知识&#xff0c;包括 Thread 类、Runnable 接口、Callable 接口以及线程的生命…

《经典图论算法》约翰逊算法(Johnson)

摘要&#xff1a; 1&#xff0c;约翰逊算法的介绍 2&#xff0c;约翰逊算法的实现步骤 3&#xff0c;约翰逊算法的准确性验证 4&#xff0c;约翰逊算法的代码实现 1&#xff0c;约翰逊算法的介绍 约翰逊算法(Johnson algorithm)是在稀疏图上求每对顶点之间最短路径的一种算法&a…

【初阶数据结构】详解二叉树 - 树和二叉树(三)(递归的魅力时刻)

文章目录 前言1. 二叉树链式结构的意义2. 手搓一棵二叉树3. 二叉树的遍历&#xff08;重要&#xff09;3.1 遍历的规则3.2 先序遍历3.3 中序遍历3.4 后序遍历3.5 遍历的代码实现3.5.1 先序遍历代码实现3.5.2 中序遍历代码实现3.5.3 后序遍历代码实现 4. 统计二叉树结点的个数5.…