1、自我介绍
2、问了一下计算机相关的几个科目的期末考试成绩
3、现场编程(两个栈实现一个队列)
没做过,思考了5分钟,接下来5分钟没写完,然后问了我的思路(不是最优),觉得可行。最优代码如下:
class Queue{
private:
SStack s1,s2;
public:
bool enQueue(int e){
return s1.Push(s1,e);
}
bool deQueue(int &e){
if(s2.Empty(s2)){
while(!s1.Empty(s1)){
e=s1.Pop(s1,e);
s2.Push(s2,e);
}
}
if(s2.Empty(s2))return false;
e=s2.Pop(s2,e);
return true;
}
};
4、现场编程(判断单链表是否有环,并输出环中结点)
这个实现了。代码如下:
bool hasCycle(LNode *head){
vector<LNode *> v1;
vector<LNode *> v2;
for(LNode *p=head;p;p=p->next){
for(int i=0;i<v1.size();i++){
if(p==v1.at(i)){
for(int j=0;j<v2.size();j++)
if(p==v2.at(j))return true;
cout<<p<<' ';
v2.push_back(p);
}
}
v1.push_back(p);
}
return false;
}
5、现场编程(判断字符串序列是否为合法的树的先序遍历 )
利用前序遍历序列化二叉树时,遇到非空结点时,记录结点的值;如果是空节点,用#记录。 给定一个逗号分隔的字符串,判断它是否是二叉树的前序遍历序列化。不需重建二叉树
做题的时候混淆了层次遍历和先序遍历,把先序遍历当层次遍历做了。面试时没做出来。正确代码如下:
bool isPre(string s){
int tl=s.length()/2+1;
char t[tl];
for(int i=0;i<s.length();i++)
if(s[i]!=',')t[i/2]=s[i];
int diff=1;
for(int i=0;i<tl;i++){
diff--;
if(diff<0)return false;
if(t[i]!='#')diff+=2;
}
return diff==0;
}
6、叙述一下进程和线程...。
7、叙述一下进程通信方式
只简单介绍了内存共享和管道方式,实际上还有四种(消息队列、信号量、信号和套接字socket)
8、你印象最深的项目
9、你有没有offer...