`
836811384
  • 浏览: 549684 次
文章分类
社区版块
存档分类
最新评论

简单的总结一下今天的行程吧

 
阅读更多

昨晚练题的时候一直卡到了早上5点多,虽有不甘,但还是上床去睡了,毕竟过劳死这东西在这一行也不算啥新鲜事了,9点多的时候迷迷糊糊的听到了电话声,第一次没接,之后再次响起的时候那边就给说了,请于今天下午1点半至科大讯飞XXX路参加软件研发实习岗位的笔试面试,这才想起前两天刚在网上投了份讯飞的实习简历,本来大不算过去了,导师那边早就在催过去了,一直还在学校等研究生现场报名,但是那边貌似说今天只有2个人面试研发实习岗位,考虑到影响不太好,就答应过去了,这一路上转车转的我头晕眼花,到了那里。

等到下午1点半开始笔试,一个小时,看了一下试卷,感觉还算正常,没有什么太刁专的问题,就冲冲的答完了。附上试题:这里不得不吐槽一下,我说讯飞好歹也是**省内挺大的一家科技公司啊,敢不敢专业一点,回来之后才发现这些题网上竟然有原题!

1. 已知二叉树的前序遍历为ABCDEFGHIJ,中序遍历为CBEDAHGIJF,请画出其二叉树结构。

注:基础题


2.求一个整数数组的最大元素,用递归方法实现。

#include <iostream>
#include <cmath>
using namespace std;

int maxnum(int a[], int n)
{
	if(n == 1)
		return a[0];
	if(n>1)
	{
		return max(a[0], maxnum(a+1,n-1));
	}
}
int main()
{
	int num[10] = {0,1,2,3,4,5,6,7,8,9};
	cout<<maxnum(num,10)<<endl;
	return 0;
}
注:以上为网上给出答案,笔者的做法如下:
算法思路:
int a[n];
int  max(int n)
{
if(n==1) return a[0];
return a[n-1]>max(n-1)?a[n-1]:max(n-1);
}

3.什么是虚拟存储器?虚拟存储器的特点是什么?

虚拟存储器:在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
特点:多次性、对换性、虚拟性。
    多次性是指一个作业被分成多次调入内存运行,亦即在作业运行时没有必要将其全部装入,只需将当前要运行的那部分程序和数据装入内存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。
    对换性是指允许在作业的运行过程中进行换进、换出,亦即,在进程运行期间,允许将那些暂不使用的程序和数据,从内存调至外村的对换区(换出),待以后需要时再将它们从外存调至内存(换进)。
    虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
注:笔者由于时间关系只回答了 逻辑上扩充内存
4.什么是this指针?其主要功能是什么?    this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。    一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时使用this指针,如this->n = n (不能写成n = n)。
注:笔者当时只是回答了指向当前对象
5.C++程序运行时有哪些常见的错误?解决方法是什么?
注:笔者结合自己编程的一些经验简要回答了一下,比如内存泄露,栈溢出等等
6.在网络传输超大的文件(比如2G以上的文件),你的解决方案是什么?
注:笔者当时首先想到的就是文件分割并行传输,事后想想还是不太靠谱。。。
7.写出字符串类的必备构造函数和赋值运算符重载的实现方法。
注:大致写了一下(面试时面试官看到我的实现之后问我以前是不是做Java的,后来一想自己的代码好像是Java风格。。。)

8.已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。

void partition(int A[], int n)
{
	int x;
	int i = 0;
	int j = n-1;
	while(i != j)
	{
		while( a[i]%2 == 1)
			i++;
		while (a[j]%2 == 0)
			j++;
		if(i < j)
		{
			x = a[i];
			a[i] = a[j];
			a[j] = x;
		}
	}
}
注:笔者此题仅仅是给出了算法思路:不过大同小异:
       a1 a2 a3 ......  an-1  an
       i                       j
while(i<j)
{
  if(ai为奇,aj为偶) ++i,--j;
  if(ai为偶,aj为奇) swap(ai,aj),++i,--j;
  if(ai为奇,aj为奇) ++i;
  if(ai为偶,aj为偶) --j;
}

之后又等了一会,估计应该是一个技术主管类的负责人开始叫我过去面试了。

首先是噼里啪啦一堆项目经验之类,其次又开始面算法了:

第一题是递归判断五子棋问题,在一个棋盘上,0代表空,1代表黑子,2代表白子,现给定一个坐标(ax,ay),代表当前下的黑子的位置,求递归判断黑子是否已经赢了(不考虑赢的趋势,也即仅仅判断当前状态)

然后就是问如何求1到1000000内所有素数,(相信弄过一点算法都清楚筛选法)

最后问了个如何在一个序列中求第k大的数,笔者当时脑袋一热回答了二叉搜索树+优先级(也OK),面试官听完后就来了句,不就是堆嘛。。。

实习面试经历大致就这样吧,累了,睡了。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics