近两年科大讯飞实习生笔试、面试题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一题是递归判断五子棋问题,在一个棋盘上,0代表空,1代表黑子,2代表白子,现给定一

个坐标(ax,ay),代表当前下的黑子的位置,求递归判断黑子是否已经赢了(不考虑赢的趋势,也即

仅仅判断当前状态)

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

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

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

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

1.#include

2.#include

ing namespace std;

4.

5.int maxnum(int a[], int n)

6.{

7.if(n == 1)

8.return a[0];

9.if(n>1)

10. {

11.return max(a[0], maxnum(a+1,n-1));

12. }

13.}

14.int main()

15.{

16.int num[10] = {0,1,2,3,4,5,6,7,8,9};

17. cout<

18.return 0;

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

虚拟存储器:在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。

特点:多次性、对换性、虚拟性。

多次性是指一个作业被分成多次调入内存运行,亦即在作业运行时没有必要将其全部装入,只需将当前要运行的那部分程序和数据装入内存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。

对换性是指允许在作业的运行过程中进行换进、换出,亦即,在进程运行期间,允许将那些暂不使用的程序和数据,从内存调至外村的对换区(换出),待以后需要时再将它们从外存调至内存(换进)。

虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。

4.什么是this指针?其主要功能是什么?

this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用

return *this;另外一种情况是当参数与成员变量名相同时使用this指针,如this->n = n (不能写成n

= n)。

7.写出字符串类的必备构造函数和赋值运算符重载的实现方法。

已知类String的原型为:

class String

{

public:

String( const char *pStr = NULL ); // 默认构造函数

~String( void ); // 析构函数

String &operate = ( const String &Source ); // 重载赋值运算符

private:

char *m_pData; // 指向字符串的指针

};

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

1.void partition(int A[], int n)

2.{

3.int x;

4.int i = 0;

5.int j = n-1;

6.while(i != j)

7. {

8.while( a[i]%2 == 1)

9. i++;

10.while (a[j]%2 == 0)

11. j++;

12.if(i < j)

13. {

14. x = a[i];

15. a[i] = a[j];

16. a[j] = x;

17. }

18. }

19.}

1产生死锁的四个必要条件

a互斥使用(资源独占)一个资源每次只能给一个进程使用

b 资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

c 请求和保持(部分分配,占有申请)

一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)d循环等待

存在一个进程等待队列{P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程

2不大于N的所有质数

public class GetPrime

{

public static boolean isPrime(int num)

{

for(int i=2;i<=Math.Sqrt(num):i++)

{

if(num%i==0){

return false;

}

}

return true;

}

public static void main(String [] args)

{

for(int i=2;i<=N;i++)

{

if(isPrime(i))

{

System.out.println(i+"is a Prime");

}

}

}

3共享内存,管道,文件,socket传输的优缺点

Linux 进程间通信linux下进程间通信的几种主要手段简介:

管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

相关文档
最新文档