暴风影音笔试总结

1.溢出和越界有什么区别?

溢出一般指超出表示或者存储的范围,比如数据溢出,用short存储大于2^16的数会造成溢出,比如申请的内存超过可用内存大小。

或者字符串拷贝超出数组长度。

越界没啥好说的,一般是指访问到了数组范围之外的区域。

2.是一个选择题,给一个字符串,然后问下面四个选项哪一个不可能是其入栈和出栈之后的结果。

3.TCP建立连接后,用send函数发送5次,每次100字节,问recvfrom要最多多少次,最少多少次。

最多少一次?最多?500次?

4.给一个字符串要求转换为整数,字符串中可能包含+-号,比如 “12345”得到12345

这个题目很蛋疼,正常C的标准输入输出中有sscanf函数可以直接从字符串中读取整数,只需要判断第一位是不是符号就可以了。然是这道题目显然不是这个意思。

常规的写法就是一个循环,如果是符号位则记录并跳过,如果是数字则把已有的结果*10然后加上即: temp =temp*10 + ch-'0';最后把符号加上就好了。

5.给前序遍历和终须遍历,要求写程序得到后序遍历。

这个题目很有意思,大家都知道怎么手算得到后续遍历,但是程序实现呢?显然最直接方式就是还原二叉树然后后序遍历。更简单的方法就是迭代或者递归了。

我用的迭代的方式,用一个栈来存储字符串,先将中序遍历入栈。然后对前序遍历的每个字符,与栈顶比较,若栈顶为长度为1的字符串,直接输出,这是后续的一个字符了。如果当前先序字符与栈顶相同,则看下一个前序字符。如果栈顶字符串长度不为1,则先出栈,然后用先序字符入栈,再用先序字符将刚出站的字符串分成两个字串,右子树入栈,左子树入栈。重复以上步骤直到先序字符串遍历完。然后将栈中剩余元素输出即得到后续遍历字符串。代码如下:

// 树的遍历.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Tree(char* str1, char* str2, char*& str3);
int _tmain(int argc, _TCHAR* argv[])
{
	char* str1="abdgcefh";
	char* str2="dgbaechf" ;
	char* str3 =NULL;
	Tree(str1,str2,str3);
	printf("%s\n",str3);
	return 0;
}

void Tree(char* str1, char* str2, char*& str3)
{

	char* m_stack[100];
	int top=0,index=0;
	char* str=NULL;
	str3 = (char*) malloc(strlen(str1));
	m_stack[top]=(char*) malloc(strlen(str1));
	strcpy(m_stack[top],str2);
	for(unsigned int i=0;i<strlen(str1);)
	{

		str = m_stack[top--];
		if(strlen(str)==1)
		{

			str3[index++]=str[0];
			if(str1[i] == str[0])
				i++;
		}else
		{
			int flag =0;
			int j=0;
			for(j=0;j<strlen(str);j++)
			{
				if(str[j] == str1[i])
				{
					flag=1;
					break;
				}
			}
			//先入栈
			m_stack[++top]=(char*)malloc(2);
			m_stack[top][0]=str1[i];
			m_stack[top][1]='\0';
			i++;
			if(flag ==1)
			{

				
				if (j < strlen(str)-1)
				{
					m_stack[++top]=(char*) malloc(strlen(str)-j);
					strcpy(m_stack[top],str+j+1);
				}
				if(j>0)
				{
					str[j]='\0';
					m_stack[++top]=(char*) malloc(j);
					strcpy(m_stack[top],str);
				}
			}
		}
	}
	while (top>-1)
	{
		str3[index++] = m_stack[top--][0];
	}
	str3[index]='\0';
}
当然,这个题目貌似用递归代码会更简单。

6.这是一个动态规划的题目了,给一个nxn的网格,问从一个顶点出发,不能往回走,到达对角顶点有多少中走法。

没啥可说的,动态规划算去吧。

还有一个题目是关于sizeof运算符的

void GetSize(char str[])
{
void* p = malloc(15);
printf("%d\n%d",sizeof(str),sizeof(p));
}

int _tmain(int argc, _TCHAR* argv[])
{
//printf("sizeof(StructDef)=%d\n",sizeof(StructDef));
char * str="hello.";
//char temp[9]="hello.";
GetSize(str);
//printf("%d\n",sizeof(temp));
return 0;
}

问输出是多少,这个地方我理解错误了,sizeof是编译时确定的!而不是运行时确定的,所以除了某个类实例之外,其他情况都是对变量类型的字节数的确定。

sizeof("hello.") 和题目中的值会不一样,因为字符串常量在编译时确定,而sizeof(str)实际上就是数组指针的字节数,这个题目的答案应该是4,4

今天看了一下阿里的面试题,其中闻到

hash_map和map的区别,以及实现方式。

区别就是一个存的是哈希之后的键和值,存储和访问等都是线性的。

而map是有序存储键值对,插入和删除都会改变内部结构。

hash_map是基于hash_table实现的,而map是基于红黑树实现的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值