近两次C/C++面试题总结(福州新大陆、睿能科技,持续更新)

最近笔者在春招,现在对近两次面试小失误的题目做一个总结:

1.类继承中,缺省的继承方式是(私有继承)。

关于缺省的概念笔者所知道的是一些函数因为使用默认参数导致的变量缺省,或者一些没有传参的构造函数,都叫缺省,但如何继承缺省这个确实没有研究过,百度关于这个讲的也不多,当个概念记忆吧。

2.任写出四个标准STL库的算法名称。

考这种题目笔者确实是没有想到的,平常是有用过这些算法,但没有去记忆具体什么函数呀,做题时一下就反应不过来。事实上像for_each.find.count.sort.merge这些都属于STL标准库的算法名称。

3.大端模式和小端模式问题:(如上图所示)

4.编程题:对链表进行插入10条元素、并进行排序、倒序输出。

尤其是排序,笔者测试时用了插入排序,但发现由于链表是单向链表,这种排序方式遍历起来极其麻烦,寻找一个节点的前一个节点需要大费周章的去遍历,导致声明了一堆指针存储,难免出现过失。这里推荐使用冒泡排序,不用改变节点本身的顺序,比较方便,但是如果某些题目对时间复杂度有要求就难办了。具体实现网上搜的:
void sortList(node *head)
{
    int len = lenList(head);//这个函数可以获取链表的长度
    cout << "len:" << len << endl;
    if (len == 0)
        return;
    node *p = head;
    int i, j, tmp;
    for (i = 0; i < len - 1; i++)
    {
        p = head;
        for (j = 0; j < len -i -1; j++)
        {
            if (p->data > p->next->data)
            {
                tmp = p->data;
                p->data = p->next->data;
                p->next->data = tmp;    
            }
            p = p->next;
        }
    }
}

5.面试中被问及:若某进程中单个线程崩溃,一定会导致整个线程崩溃吗?

答:不一定,主要还是看是否引发主线程崩溃。

6.I2C协议是哪一层的协议?物理层。

7.C++中传递的方式有:值传递,指针传递,引用传递。(当概念记了)

8.程序题:

    char str[]="http://www.raynen.cn/";
    cout <<sizeof(str)<<" ";
    char *p=str;
    cout <<sizeof(p)<<" ";
    cout <<strlen(p);
    cout <<sizeof(*p)<<" ";

此题的第二个打印值有一定蛊惑性,这个sizeof其实测到的只是p指针的大小,并不是测数组的大小,考试时笔者虽然对了,但还是在这点稍微犹豫了一下,至于strlen和sizeof区别,老问题了,没什么好说的。

9.面试被问及http和https区别时回答https更安全,进一步问为何安全时没有答上来。

事实上,https是在网络层下注入SSL或TLS之类的安全传输协议得到的,而笔者平常项目做的socket编程因很少去动传输层的东西,默认使用了tcp或者udp协议,因此理解比较欠缺。

10.这里有一组字符串叫“a0b1c2f3d4e5”,将其转换为真实的十六进制数字,原本a0存成字符串要占用两个字节,转换成数字存储只要存储一个字节,实现了压缩存储,请实现对应算法。

	char str[13]="a0b2c34de5f6";
	unsigned int hex[6];
	char* ptr=str;
	unsigned int tmp=0,index=0,index1=0;
	while(*ptr)
	{
		if(index==0)
		{
			if((*ptr)>=97)
			{
				tmp+=((*ptr)-'a'+10)*16;
			}
			else
			{
				tmp+=((*ptr)-'0')*16;
			}
			++index;
		}
		else
		{
			if((*ptr)>=97)
			{
				tmp+=((*ptr)-'a'+10);
			}
			else
			{
				tmp+=((*ptr)-'0');
			}
			--index;
		}
		if(index==0)
		{
			hex[index1++]=tmp;
			tmp=0;
		}
		++ptr;
	}

	for(int i=0;i<strlen(str)/2;++i)
		printf("%x ",hex[i]);

11.有两个数组a和b,长度为m,n里面的数字已经按顺序排好,要找出两个数组之间的中间数,比如:a=[1,3] b=[2,4],中间数为:(2+3)/2,或者a=[1,3,5] b=[2,4]中间数是3.时间复杂度为O(m+n)

思维:要先将两个数组组合成一个数组,在合成数组中就要做好比较并排序好,不能直接合成再排序(时间复杂度限制),然后取中间值。

12.问题背景:在我的项目中,高并发服务器接收客户端传输数据写着并发数千万级别,被问及测试时是否使用同一个客户端测试连接数量,这个问题确实懵了一下,回答了不是,对方就继续问那如何实现不同客户端的测试,我只好编造说有工具可以实现,面试官就问工具底层怎么实现,问的我实在答不上来,搞得对面怀疑我不会socket编程。

现在回想,因为笔者是用同一个ip地址for循环不断连接服务器,整个内网也就本机一台ip地址,如何在只有一台设备的情况下,用不同的ip地址去连接服务器呢?这是一个难点,总不能考虑每send一次数据就用c换一个本机ip?所以这方面确实笔者暂时也没什么好办法。

还有一题考了程序题,涉及@echo输出结果,题目好像是长这样(具体忘了)

cd sh

@echo 111

cd:@echo 888

sh:@echo 999

这个程序在linux下运行不起来,不太清楚它想考什么,就随便蒙了999。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值