记录地平线一面面试

400 阅读2分钟
  1. 首先自我介绍
  2. 实现Buffer结构体的成员函数
#include<iostream>
using namespace std;

class Buffer
{
public:
	typedef unsigned char byte;
	Buffer(const size_t buffer_size);
	Buffer(const Buffer& obj);
	Buffer(Buffer&& obj);
	Buffer& operator=(const Buffer& obj);
	Buffer& operator=(Buffer&& obj);
	~Buffer();
private:
	size_t buf_size{ 0 };
	byte* buf{ nullptr };
};
#include<iostream>
using namespace std;
class Buffer
{
public:
	typedef unsigned char byte;
	Buffer(const size_t buffer_size)
		:buf_size(buffer_size)
	{
		buf = new byte[buf_size];
	}
	Buffer(const Buffer& obj)
	{
		buf_size = obj.buf_size;
		buf = new byte[buf_size];
		for (int i = 0; i < buf_size; i++)
		{
			buf[i] = obj.buf[i];
		}
	}
	Buffer(Buffer&& obj)
	{
		buf_size = obj.buf_size;
		buf = obj.buf;
		obj.buf = nullptr;
	}
	Buffer& operator=(const Buffer& obj)
	{
		if (this == &obj)
		{
			return *this;
		}
		delete[]buf;
		buf = nullptr;
		buf_size = obj.buf_size;
		buf = new byte[buf_size];
		for (int i = 0; i < buf_size; i++)
		{
                    buf[i] = obj.buf[i];
		}
		return *this;
	}
	Buffer& operator=(Buffer&& obj)
	{
		if (this == &obj)
		{
                    return *this;
		}
		delete[]buf;
		buf = obj.buf;
		obj.buf = nullptr;
		return *this;
	}
	~Buffer()
	{
		delete[]buf;
		buf = nullptr;
	}
private:
	size_t buf_size{ 0 };
	byte* buf{ nullptr };
};
  1. C和C++相比,你更喜欢用哪个 C++吧
  • C语言是C++的子集,C++可以很好兼容C语言。但是C++又有很多新特性,如引用、智能指针、auto变量等。
  • C++是面对对象的编程语言;C语言是面对过程的编程语言。
  • C语言有一些不安全的语言特性,如指针使用的潜在危险、强制转换的不确定性、内存泄露等。而C++对此增加了不少新特性来改善安全性,如const常量、引用、cast转换、智能指针、try—catch等等;
  • C++可复用性高,C++引入了模板的概念,后面在此基础上,实现了方便开发的标准模板库STL。C++的STL库相对于C语言的函数库更灵活、更通用
  • C++的多态性:在基类里面给所有的派生类可以保留统一的虚函数接口,等待派生类重写,通过使用多态,可以通过基类的指针访问不同派生类对象的同名覆盖方法。(不用提供很多接口,每一个接口对应一个派生类对象,只需要提供一个接口就行,指针指向谁就访问谁),更符合软件开-闭原则
  1. 写一个排序算法吧 我写了一个快排算法
#include<iostream>
using namespace std;

int Partation(int arr[], int l, int r)
{
	int val = arr[l];
	while (l < r)
	{
		while (l < r)
		{
			if (arr[r] < val)
			{
				break;
			}
			r--;
		}
		if (l < r)
		{
			arr[l] = arr[r];
			l++;
		}
		while (l < r)
		{
			if (arr[l] > val)
			{
				break;
			}
			l++;
		}
		if (l < r)
		{
			arr[r] = arr[l];
			r--;
		}
	}
	arr[l] = val;
	return l;
}
void QuickSort(int arr[], int l, int r)
{
	if (l >= r)
		return;
	int pos = Partation(arr, l, r);
	QuickSort(arr, l, pos - 1);
	QuickSort(arr, pos + 1, r);
}

说一下思路: 选取一个基准数,把小于基准数的元素都调整到基准数的左边,把大于基准数的元素都调整到基准数的右边,然后对基准数左边和右边的序列继续进行这样的操作,直到整个序列变成有序的。

分析快排的时间复杂度:最好和平均时间复杂度:O(nlogn),其中Partition这部分的时间复杂度是O(n), 最坏平均复杂度:O(n^2)

  1. 你怎么看待员工和老板之间的关系? 员工和公司的关系其实就是互惠互利的,公司给员工提供了一个平台去实践去成长,员工为企业也创造了价值。我们利用知识和经验为公司创造价值,公司给我们物质回报。通常情况下,你付出的越多,公司给你的回报也越高。

  2. 如果你和同事闹矛盾怎么解决? 我很少与人发生矛盾,因为矛盾不会带来任何好处,反而会失去友谊、信任。如果发生了冲突我会先冷静下来,查出问题所在,如果真的是自己做错了,我会主动地与他沟通,或者是请他吃个饭解决。

  3. 如果评年终奖没有你,你会怎么做? 我会比较我自己和获得年终奖同事的差距,如果我确实做得不够好,我会找到差距,弥补自己的不足;如果我做得也很好但是却没有评上,我会询问自己没有评上的原因在哪。

8.最后问你你还有什么问题要问我的吗?