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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一题是递归判断五子棋问题,在一个棋盘上,0代表空,1代表黑子,2代表白子,现给定一个坐标(ax,ay),代表当前下的黑子的位置,求递归判断黑子是否已经赢了(不考虑赢的趋势,也即仅仅判断当前状态)
然后就是问如何求1到1000000所有素数,(相信弄过一点算法都清楚筛选法)
最后问了个如何在一个序列中求第k大的数,笔者当时脑袋一热回答了二叉搜索树+优先级(也OK),面试官听完后就来了句,不就是堆嘛。。。
6.{
7.if(n == 1)
8.returna[0];
9.if(n>1)
10.{
11.returnmax(a[0], maxnum(a+1,n-1));
12.}
13.}
14.intmain()
15.{
16.intnum[10] = {0,1,2,3,4,5,6,7,8,9};
17.cout<<maxnum(num,10)<<endl;
2.进程和线程共同使用的技术(好像是这么说的)
3.指针和引用的区别
4.析构函数和普通成员函数的区别
3.实现一个字节中空格个数不能超过一个,例如a--b-c应该输出a-b-c,此处-代表空格
1.//trim a string by make more than one blank to one blank
c请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
d循环等待
存在一个进程等待队列{P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程
2不大于N的所有质数
public class GetPrime
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// get the next node, and save it at pNext
ListNode* pNext = pNode->m_pNext;
// if the next node is null, the currect is theend of original
// list, and it's the head of the reversed list
if(pNext == NULL)
pReversedHead = pNode;
// reverse the linkage between nodes
pNode->m_pNext = pPrev;
// move forward on the the list
6、题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
StructListNode
{
int m_nKey;
ListNode* m_pNext;
};
ListNode*ReverseIteratively(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
报文(Message)队列(消息队列):消息队列是消息的表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享存:使得多个进程可以访问同一块存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
4、TCP/IP建立连接过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状
态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个
SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
式查询创建视图.查询只从包含查询所需数据的远程服务器的表中读取所需的数据.被分布式查询引用的其他服务器,在视图中都将不会被访问.
18.return0;
3.什么是虚拟存储器?虚拟存储器的特点是什么?
虚拟存储器:在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
特点:多次性、对换性、虚拟性。
25.print(a);
26.print(trim(a));
27.return0;
28.}
第二部分:填空题(2*6)
1.操作系统中的存储管理常用(虚拟存储器)的方式来摆脱主存容量的限制。
2.满二叉树第i层上的叶子节点数有(2的i-1次方)个。
3.二分查找算法的平均时间复杂度是(logn)。
4.设x=3,y=2,x<<y=(12)。
信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
最后再补充一下,Socket方式也可以有效防止扯皮问题。举个例子:三写了一个进程A,四写了一个进程B,进程A通过Socket方式发数据给进程B。突然有一天,两个进程的通讯出故障了。然后三就说是四接收数据出错;四就说三发送数据出错。这时候怎么办捏?很简单,随便找个Sniffer软件当场抓一下数据包并Dump出来看,问题就水落石出了。
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用
return *this;另外一种情况是当参数与成员变量名相同时使用this指针,如this->n = n (不能写成n
= n)。
7.写出字符串类的必备构造函数和赋值运算符重载的实现方法。
已知类String的原型为:
class String
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
7、输入x y z,然后输出序列的可能性
X Y Z
X Z Y
Y X Z
Y Z X
Z Y X
8、怎么用一个类将一个实例完全复制给另外一个实例
填空题有STL库由哪部分组成,
简答题:1.冒泡排序和快速排序的优缺点
{
public:
String( const char *pStr = NULL ); // 默认构造函数
~String( void ); // 析构函数
String &operate = ( const String &Source ); // 重载赋值运算符
private:
char *m_pData; // 指向字符串的指针
5.非成员函数应声明为类的(友元函数)才能访问这个类的private成员。
多次性是指一个作业被分成多次调入存运行,亦即在作业运行时没有必要将其全部装入,只需将当前要运行的那部分程序和数据装入存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。
对换性是指允许在作业的运行过程中进行换进、换出,亦即,在进程运行期间,允许将那些暂不使用的程序和数据,从存调至外村的对换区(换出),待以后需要时再将它们从外存调至存(换进)。
12.++j;
13.}
14.--j;// go back to the last blank
15.}
16.a[++i]=a[j];
17.}
18.a[++i]='\0';
19.returna;
20.}
21.intmain(void)
22.{
23.
24.chara[100]="a b c d e f";
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资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
2.char* trim(char* a)
3.{
4.inti=-1,j=0;
5.for(;a[j]!='\0';j++)
Hale Waihona Puke Baidu6.{
7.if(a[j]==a[j+1] && a[j+1]==' ')
8.{
9.//skip more than one blank
10.while(a[j]==' ')
11.{
理由如下:使用Socket可以天然地支持分布式部署;
使用Socket可以比较容易地实现多种编程语言的混合(比如C++、Java、Python、Flex都支持Socket);
使用Socket还可以省掉了一大坨“锁操作”的代码。
列位看官中,或许有人在担心Socket的性能问题,其实大可不必多虑。当两个进程在本机上进行Socket通讯时,由于可以使用localhost环回地址,数据不用经过物理网卡,操作系统核还可以进行某些优化。这种情况下,Socket相对其它几种IPC机制,不会有太大的性能偏差。
信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
由于要考虑跨平台,首先砍掉一批(关于IPC的跨平台问题,我在“跨平台开发”系列中会提到)。剩下的IPC类型中,能够进行数据传输的IPC就不多了,主要有如下几种:套接字(以下简称Socket)、共享存、管道、文件。其中Socket是我强烈推荐的IPC方式,
{
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)
1. 已知二叉树的前序遍历为ABCDEFGHIJ,中序遍历为CBEDAHGIJF,请画出其二叉树结构。
2.求一个整数数组的最大元素,用递归方法实现。
1.<span>#include <iostream>
2.#include <cmath>
3.usingnamespacestd;
4.
5.intmaxnum(inta[],intn)
};
8.已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
1.<span>voidpartition(intA[],intn)
2.{
3.intx;
4.inti = 0;
5.intj = n-1;
6.while(i != j)
7.{
8.while( a[i]%2 == 1)
{
for(int i=2;i<=N;i++)
{
if(isPrime(i))
{
System.out.println(i+"is a Prime");
}
}
}
3共享存,管道,文件,socket传输的优缺点
Linux进程间通信linux下进程间通信的几种主要手段简介:
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
虚拟性是指能够从逻辑上扩充存容量,使用户所看到的存容量远大于实际存容量。
4.什么是this指针?其主要功能是什么?
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
相关文档
最新文档