长安工业面试

前言

二面通过,不过因为学校不好,那边也不愿给我太高的薪资,说平薪,然后我也没去。

一面

笔试

1.CMyString的实现

class CMyString
{
public:
	CMyString(char* pData = nullptr)
	{
		m_pData = nullptr;
		if (pData == nullptr)
		{
			return;
		}
		int length = strlen(pData) + 1;
		m_pData = new char[length];//肯定要new的,pData可能是const的字符串
		if (m_pData == nullptr) return;
		memcpy(m_pData, pData, length);
	}
	CMyString(const CMyString& str)
	{
		if (&str == this) return;
		if (str.m_pData == NULL)
		{
			m_pData = NULL;
		}
		else
		{
			size_t length = strlen(str.m_pData);
			m_pData = new char[length + 1];
			memset(m_pData, 0, sizeof(char) * (length + 1));
			memcpy(m_pData, str.m_pData, length);
		}
	}
	CMyString& operator=(const CMyString& str)
	{
		if (this != &str)
		{
			//这种方式可以保证异常安全性。
			CMyString strTemp(str);//调用拷贝构造
			char* pTemp = strTemp.m_pData;//将现有的已有的指针进行交换
			strTemp.m_pData = m_pData;//将自己的指针交给strTemp,strTemp出了作用域就会被释放(会调用析构,会释放m_pData),
			m_pData = pTemp;//现在指针指向了传递的str的m_pData
		}
		return *this;
	}
	CMyString& operator+(const CMyString& str)
	{
		if (str.m_pData == nullptr || &str == this)
			return *this;
		if (m_pData == nullptr)//如果当前的m_pData为空,直接赋值
			m_pData = str.m_pData;

		int length = strlen(m_pData) + strlen(str.m_pData) + 1;
		char* temp = new char[length];
		memset(temp, 0, length);//如果不初始化,不然会出现拼接的时候会出现一些乱码在中间,需要初始化
		memcpy(temp, m_pData, strlen(m_pData));//拷贝自身的字符
		strcat(temp, str.m_pData);//拼接str
		if (m_pData != nullptr)
		{
			delete []m_pData;
			m_pData = nullptr;
		}
		m_pData = temp;
		return *this;
	}

	~CMyString()
	{
		if (m_pData != nullptr)
		{
			std::cout << "free:"<< m_pData << std::endl;
			delete[]m_pData;
			m_pData = nullptr;
		}
	}

	char* GetData()
	{
		return m_pData;
	}

private:
	char* m_pData;
};

2.单例模式的实现

template<typename T>
class Singleton5
{
public:
	static T& GetInstance()
	{
		static T instance;
		return instance;
	}
	~Singleton5() { printf("~singleton5 is called\n"); }
protected:
	Singleton5() {} // protected修饰构造函数,才能让别⼈继承,所以如果使用私有的,那就要使用friend,子类太多,要很多friend,不利于扩展
	Singleton5(const Singleton5& clone) = delete;
	Singleton5& operator= (const Singleton5& src) = delete;
};

class DesignSingletion :public Singleton5<DesignSingletion>
{
	friend Singleton5<DesignSingletion>;//让父类Singleton5<T>为自己友元,可以访问自己的私有构造函数。
private:
	DesignSingletion() {}
	DesignSingletion(const DesignSingletion& clone) = delete;
	DesignSingletion& operator= (const DesignSingletion& src) = delete;
};

3.创建线程 //使用pthread或者std::thread,2者实现更好

pthread_create
std::thread

面试

1.const ,static关键字的用法
2.virtual关键字
3.进程间通信
4.QT信号槽,要实现信号槽函数要注意什么(**我回到的是继承QObject和_OBJECT关键字?**5.使用过QT开发过什么软件
6.使用过哪些QT控件
7.有写过继承类吗(一脸疑惑?工作2年,难道我写的所有类都是光杆司令,都不继承吗?)
8.项目相关的(RTP,RTSP协议的作用)
9.工作中遇到什么难题

二面

1.自我介绍
2.你开发过程遇到的最大问题
3.你的最大缺点
4.你的职业规划
5.你现在的工作职责
6.你觉得除了QT适合开发的界面技术,还有其他更加先进的界面开发技术吗
7.你离职过后的工作怎么处理
8.你还有什么想问的吗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值