第二次面试:C++qt开发实习生
大家好,本篇文章记录总结我的面经,希望对各位读者有帮助,如有不正确之处望各位帮忙指正!
一.自我介绍:
姓名+学校+专业,项目经验(主要运用了什么技术,对我有什么帮助),对入职实习的期望,我的自我介绍到此结束,谢谢!
二、软件模式:
1.写一个单例模式
单例模式一定要体现单例,GetInstance、私有构造函数、禁止拷贝赋值的函数一定要写!!!这样才能保证“单例”,如果自己有意识地写就很加分,如果面试官提醒的话就肯定会减分。(我就是忘记写禁止拷贝赋值o(╥﹏╥)o)
懒汉模式:
懒汉模式就是懒,所以别人不催它就不创建(我们不主动GetInstance,它就始终不创建对象)
//单例模式:懒汉模式
class Singleton
{
public:static Singleton& GetInstance(){static Singleton instance;return instance;}Singleton(const Singleton& rhs) = delete;Singleton& operator=(const Singleton& rhs) = delete;Singleton(const Singleton&& rhs) = delete;
private:Singleton(){cout << "单例创建" << endl;}
};
饿汉模式:
我们饿的时候巴不得立刻有吃的,饿汉模式就是这样,一启动就创建好对象
//饿汉模式
class Singleton
{
public:static Singleton& GetInstance(){return _instance;}Singleton(const Singleton& rhs) = delete;Singleton& operator=(const Singleton& rhs) = delete;Singleton(const Singleton&& rhs) = delete;
private:Singleton(){cout << "单例创建" << endl;}static Singleton _instance;
};
Singleton Singleton::_instance;
饿汉模式vs懒汉模式:
特性 | 饿汉式 | 懒汉式 |
---|---|---|
创建时机 | 程序启动时立即创建 | 第一次调用getInstance()时创建 |
资源占用 | 可能浪费资源(如果一直不用) | 按需分配,节省资源 |
性能特点 | 获取实例速度快(已创建好) | 第一次获取稍慢(需要创建) |
2.软件模式知道哪些:
工厂模式、建造者模式、代理模式等等,可以私下自行搜索(说的越多肯定越好,确保说的都会、不会的切记不要说)
三、编译环境:
1.平时在哪些环境下写代码:
根据自己的亲身经历。我一般是VS2022和VScode以及QtCreator
2.编译器的常用快捷键:
- 切换源文件和头文件:Ctrl K + O
- 调试的时候快捷键:F5(运行到断点处、没有程序直接开始运行),F10(逐过程调试),F11(逐语句调试)
四、C++语法
1.写一个类,随便加两个成员变量,写一份成员函数:
class Myclass
{
public:Myclass():_a(0),_b(0){ }int Geta()const{return _a;}
private:int _a;int _b;
};
2.写一个智能指针的变量:
有两种方式:推荐第二种,因为性能更好,更安全
std::shared_ptr<MyClass> ptr(new Myclass());
std::shared_ptr<MyClass> ptr=make_shared<Myclass>();
ps:智能指针非常重要,面试几乎都会问的,可以详细看这篇博客C++:四大智能指针-CSDN博客
3.创建一个顺序表,10个这个类:
std::vector<Myclass> classes1(10);
4.sort函数总共几个参数?如何使用sort函数的第三个参数将这个类按照a值进行一个排序:
//lambda表达式
std::sort(classes.begin(), classes.end(), [](const Myclass& lhs, const Myclass& rhs) {return lhs.Geta() < rhs.Geta(); });
//函数指针
bool Compare1(const Myclass& lhs,const Myclass& rhs)
{return lhs.Geta() < rhs.Geta();
}
std::sort(classes.begin(), classes.end(), Compare1);
//仿函数
struct Compare2
{
public:bool operator()(const Myclass& lhs, const Myclass& rhs){return lhs.Geta() < rhs.Geta();}
};
std::sort(classes.begin(), classes.end(), Compare2());
五、算法:
1.顺序表删除下标为奇数的元素:
从后向前删除!!!从前向后删除的话,元素的下标会改变,不好处理,正难则反,从后面删
std::vector<Myclass> classes(10);
for (int i = 0; i < 10; i++)
{classes[i].seta(i);cout << classes[i].Geta();
}
cout << endl;
int i = classes.size() - 1;
for (auto it = classes.begin(); i>=0; i--)
{if(i%2==1)classes.erase(it+i);
}
for (int i = 0; i <classes.size(); i++)
{cout << classes[i].Geta();
}
六、项目:
1.为什么想写第一个项目?为什么想写第二个项目?
根据自己的想做项目的初心回答即可,因为什么想做这个项目(可以是自己的兴趣,也可以是学校课题的拓展等)
七、个人反思:
- 自己做的项目,一定要多熟悉熟悉,张口就来这种,如果有一部分的代码参考了AI一定要在理解AI做法的基础上再去自己敲一遍这部分的代码,将学的东西转化为自己的。
- 对于C++11的东西还是不太熟练,不仅要掌握原理还要会用会敲代码,用到项目中。
- 对于算法题,有一个月没怎么认真做算法题了,问到算法的时候脑子是空白的,每天要养成写算法题的好习惯。
- 软件模式这方面掌握的实属不怎么样,要重点复习回顾。
结语:
以上就是我第二次面试的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步,希望大家面试全过,offer多多!!!
谢谢观看
如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的
祝大家早安午安晚安