2019独角兽企业重金招聘Python工程师标准>>>
注释:满分100分。
第一部分:C++基础(36分)
【1】#include<file.h>与#include "file.h"的区别?(3分)
【2】.h头文件中#ifndef/#define/#endif的作用?(3分)
【3】写出变量i的值。(3分)
#define DOUBLE(x) x+x
int i = 5 * DOUBLE(5);
【4】写出程序的输出结果。(3分)
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char a[] = "hello world";
char *p = a;
cout << sizeof(a) << endl;
cout << sizeof(p) << endl;
return 0;
}
【5】有如下程序,已知它输出false。写出sizeof(A)和sizeof(B)的值,并解释#pragma pack(1)和#pragma pack()的作用。(6分)
#include <iostream>
struct
{
int a;
char b;
} A;
#pragma pack(1)
struct
{
int a;
char b;
} B;
#pragma pack()
int main()
{
bool b = (sizeof(A) == sizeof(B));
std::cout << b << std::endl;
return 0;
}
【6】填写代码注释。(6分)
#include <iostream>
class Instru
{
public:
Instru() {}
~Instru() {}
public:
virtual void Play()
{
std::cout << "Instru::Play" << std::endl;
}
};
class Piano :public Instru
{
public:
Piano() {}
~Piano() {}
public:
void Play() const
{
std::cout << "Piano::Play" << std::endl;
}
};
class NewPiano :public Piano
{
public:
NewPiano() {}
~NewPiano() {}
public:
void Play() const
{
std::cout << "NewPiano::Play" << std::endl;
}
};
void Tune(Instru &i)
{
i.Play();
}
int main()
{
Piano a;
Tune(a); // 输出________
NewPiano b;
Tune(b); // 输出________
Instru *p = &a;
Tune(*p); // 输出________
p = &b;
Tune(*p); // 输出________
Instru c;
Tune(c); // 输出________
return 0;
}
【7】描述静态存储区分配,栈上分配和堆上分配的区别。(6分)
【8】已知 strcpy 函数原型:
char* __cdecl strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。不调用C/C++的字符串库函数,编写函数strcpy。(6分)
第二部分:数据库(9分)
为了管理学生信息,建立3个表:S(student),C(course),SC(studen-course)。
S表中有如下字段:S#,SN,SD,SA,分别表示学号,姓名,院系,年龄。
C表中有如下字段:C#,CN,分别表示课程编号,课程名称。
SC表中有如下字段:S#,C#,G,分别表示学号,所选课程编号,成绩。
本部分题目,使用 Oracle/MySQL/SQLite3 语法皆可。
【9】查询不选修课程号为'C5'的学生姓名和所属院系。(3分)
【10】假定S表中姓'李'的学生的数量大于5。请查询姓'李'的第2名到第5名的学生的信息。(3分)
【11】修改姓名为'李明'的学生的所属院系为'计算机工程系'。(3分)
第三部分:Qt(55分)
【12】请说明 Qt 的 SIGNAL/SLOT 的优缺点。(9分)
【13】简述网络协议 TCP 和 UDP 的区别。(7分)(这似乎不属于 Qt 问题。——编辑注)
【14】简述 QList 与 QSet 的区别。(3分)
【15】QCoreApplication 类提供了 sendEvent 和 postEvent 方法。请说明它们的联系和区别。(9分)
【16】请写出开启定时器、关闭定时器、只定时一次执行的定时器接口名称,并简要阐述如何使用定时器。(9分)
【17】请解释 QMutex 和 QReadWriteLock,并说明二者区别。(9分)
【18】当处理一个特定事件(如保存一个500MB大小的文件)耗费时间过多,用户界面就会变得无法响应。为了避免这种情况发生,请从 Qt 角度阐述你有哪些方法既能处理需要长时间完成的事件,又不让用户界面停止响应。(9分)