linux c/c++ 面试题目整理(四)

31、C++空类是多大?为什么会这样?       空类是1个字节,一个类中虚函数、成员函数(包括静态和非静态)和静态数据成员都不占用类对象的存储空间。有虚函数时,会有一个指向虚表的指针,大小为4个字节,类不为空时,为空的那1个字节是不计算的。       空类之所以是1个字节,是因为求类大小就是求它实例化以后的大...
摘要由CSDN通过智能技术生成

31、C++空类是多大?为什么会这样?

       空类是1个字节,一个类中虚函数、成员函数(包括静态和非静态)和静态数据成员都不占用类对象的存储空间。有虚函数时,会有一个指向虚表的指针,大小为4个字节,类不为空时,为空的那1个字节是不计算的。
       空类之所以是1个字节,是因为求类大小就是求它实例化以后的大小,空类也是可以被实例化的,每个实例在内存中都会有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加1个字节。
       类的大小与构造函数、析构函数以及其他成员函数都无关。

32、两个vector排序、交集和并集。

使用STL算法:
sort函数可用于排序;
并集使用set_union,例如:

vector<int> A, B, C;
A.resize(5), B.resize(5);

交集使用set_intersection,用法与并集一样;

33、下面代码一共有多少个进程?

	int main()
	{
		fork();
		fork()&&fork()||fork();
		fork();
		return 0;
	}

包含main进程在内,一共有20个进程。

34、互斥锁加条件变量使用的一个例子

	pthread1()
	{
		pthread_mutex_lock(lock_s);
		sum++;
		pthread_mutex_unlock(lock_s);
		if (sum >= 100)
		{
			pthread_cond_signal(&cond_sum_ready);//先发送一次
		}
	}
	pthread2()
	{
		pthread_mutex_lock(lock_s);
		while(sum < 100)
		{
			pthread_cond_wait(&cond_sum_ready, &lock_s);//会先执行pthread_MUTEX_UNLOCK进行解锁,然后休眠
		}
		sum = 0;
		pthread_mutex_unlock(lock_s);
	}

注意:最终哪个线程接收到信号,根据优先级来

35、实现string类的构造、析构和赋值函数

声明:

	class String
	{
		public:
			String(const char* str = NULL);
			String(const String & other);
			~String();
			String & operator=(const String &other);
		private:
			char * m_data;
	};

定义:

	String::String(const char* str)
	{
		if (str == NULL)
		{
			m_data = new char[1];//str为空时,new一个字节
			m_data[0] = ‘\0;
		}
		else
		{
			int len = strlen(str);
			m_data = new char[len+1];
			strcpy(m_data, str);
		}
	}
	String::String(const String& other)
	{
		int len = strlen(other.m_data);	
		m_data = new char[len+1];
		strcpy(m_data, other.m_data);
	}
	String::~String()
	{
		if (m_data != NULL)
		{
			delete[] m_data;
			m_data = NULL;
		}
	}
String & operator=(const String &other)
	{
		if (this == &other) //检查自赋值
			return *this;
		delete[] m_data; //将之前的析构
		int len = strlen(other.m_data);
		m_data = new char[len+1];
		strcpy(m_data, other.m_data); //深拷贝
		return *this;
	}

36、linux下怎样查找最新更新的文件

ls –ltr 按时间反序排序当前文件夹中文件
find ./ type f –mtime -1 查找最近一天内更改的文件

37、linux怎样查找包含指定内容的文件

grep –nr “指定内容” *.ini //指定文件类型时,n是行号,r递归搜索子目录

38、简单介绍下shell脚本

       shell就是一个命令行解释器,是一个用c语言编写的程序
       而shell脚本则是一串命令的集合,是将shell的语法、命令,通过管道、循环、条件判断等按照一定的逻辑组合在文本文件中,便形成了一个脚本,这个脚本是用shell来解释的。

39、快速排序、选择排序、插入排序、冒泡排序、归并排序

       快速排序:选定一个中间值,然后循环,将比该值小的放入它的左边,比它大的放入它的右边,接着对左右两边进行同样的操作,那么最后他们就是排好序的,并且是按照从小到大的顺序排的。代码如下:

	void quick_sort(int s[], int l, int r)
	{
		if (l < r)
		{
			int I = l,j=r, x = s[l];
			while(I < j)
			{
				while(I < j && s[j] >= x)
				{
					j--;
				}
				if ( i< j)
					s[i++] = s[j];
				while( I < j && s[i] < x )
				{
					i++;
				}
				if ( I < j)
				{
					s[j--] = s[i];
				}
				s[i] = x;
				quick_sort(s, l, i-1);
				quick_sort(s, i+1, r);
			}
		}
	}

//TODO:选择排序、冒泡排序等
时间复杂度:

  • 堆排序、归并排序 O(nlogn)
  • 选择、插入、冒泡 O(n2)
  • 快速排序理想情况下 O(nlogn),最差的时候 O(n2)

40、linux什么情况下可能产生死锁?

  1. 一个进程或者线程因请求资源A阻塞时,对资源B不释放,另一个进程则请求资源B,但对A不释放;
  2. 在加锁时轮询某数据,循环条件设置不当;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp加油站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值