近两年科大讯飞实习生笔试、面试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。