面试题目

    1. 拷贝构造函数通常用于
  • 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值

  • 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数

  • 当函数的返回值是类对象时,系统自动调用拷贝构造函数

    1. 必须使用的情况
      如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数
     Line::Line(const Line &obj){  // &obj是对象line的一个引用,用这个对象的引用来初始化另一个对象
        cout << "调用拷贝构造函数,并为指针ptr分配内存" << endl;
        ptr = new int;
        *ptr = *obj.ptr;  // 拷贝值
    }
    1. 防止默认拷贝的发生 私有化
  • 4.一边遍历一边删除vector

  #include 
#include 
using namespace std;
int main()
{ 
   vector v;
   for(int i = 0; i < 10; i++){
       v.push_back(i);
   }
   auto it = v.begin();
   while(it != v.end()){
       if(*it == 1){
           it = v.erase(it);
       }
       else it++;
   }
   for(int i = 0; i < v.size(); i++){
       cout << v[i] << endl;
   }
   return 0;
}
    1. 单例模式的实现
      构造函数私有化 加一个公有函数 getinstance 加锁
    1. vector 随机访问时间复杂度 O(1) 插入删除 O(n)
      list 随机访问时间复杂度 O(n) 插入删除 O(1)
    1. 哈希表的原理
      其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素;也可以简单的理解为,按照关键字为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地方,称为桶。
      但是,这不能够保证每个元素的关键字与函数值是一一对应的,因此极有可能出现对不不同的元素,却计算出相同的函数值,这样就产生了“冲突”。换句话说,就是把不同的元素分在了相同的“类”中。总的来说,“直接定址”和“解决冲突”是哈希表的两大特点
    1. 多线程下,信号槽分别在什么线程中执行,如何控制

可以通过connect的第五个参数进行控制信号槽执行时所在的线程

connect有几种连接方式,直接连接和队列连接、自动连接

直接连接:信号槽在信号发出者所在的线程中执行

队列连接:信号在信号发出者所在的线程中执行,槽函数在信号接收者所在的线程中执行

自动连接:多线程时为队列连接函数,单线程时为直接连接函数

    1. 运行某些耗时操作如果界面程序很卡 ,你会怎么优化
      数据库相关的工作、写磁盘,网络连接
    1. qt哪几种创建线程的方式
      继承QThread run
      继承object MoveThread
    1. 线程同步的方式
      互斥锁 条件变量 读写锁 信号量
  • 12.线程间共享的资源有
    共享的资源有

a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)

b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的

c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的

d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。

独享的资源有

a. 栈 栈是独享的

b. 寄存器

你可能感兴趣的:(面试题目)