有道笔试面试题(1)

最基本:虚函数,quick sort,三次握手 ok,进程通信 1.虚函数 作用:实现动态联编,即在程序执行期间动态的选择合适的成员函数。 封装、继承和多态。 2.快排 void quickSort(int l,int r) { if(lb[j]) {++j;} else {++i;} } } 12.//最大子矩阵和 m[N][N] int getMaxSub(int *a,int len) { int curMax; curMax=a[0]; for(i=0;i>n>>m; for(int i=0;iresult) result=tmp; } } } 13.//链表快排 node * partition(node * &head,node *tail) { node *rs=head,*pre=head,*tmp=head->next; int value=head->data; while(tmp!=tail)//思路:将7进制数字转化成10进制,然后再转换成14进制 { if(tmp->data < value) { pre->next=tmp->next; tmp->next=head; head=tmp; tmp=pre->next; } else { pre=tmp; tmp=tmp->next; } } return rs; } void quick(node *head,node *tail=NULL) { if(head != tail) { node *p=partition(head,tail); quick(head,p); quick(p->next,tail); } } 14.//7进制转化为14进制 //思路:将7进制数字转化成10进制,然后再转换成14进制 void NumtoNum(char s[],int len,int from,int to) { ///////////////////////////////////////////// //无符号整形,当为0时,再--的话直接变成最大值 ///////////////////////////////////////////// int sum=0,k=1,i=len-1,j=0; cout<= 0;i--) { cout<=10) re[i++]=(char)('A'+j-10); else re[i++]=(char)(j+'0'); } for(j=0;j<i/2;j++) { char ch=re[j]; re[j]=re[i-1-j]; re[i-1-j]=ch; } cout<<re<<endl; } 15.分配一个大小为3的string和分配一个大小为1000的string,时间是一样的吗? 我把这个题放到 了算法群里,让大牛们讨论,结论是相同的,因为STL 给string预分配的大小为1024个字节,所以两者时间一样,但是如果超过这个范围, 我个人感觉应该考虑内存管理方面的东西,用首次匹配,最佳匹配或者最差匹配等等,不同的分配方式应该是不一样的。还有一个大牛说:“ 如果实际底层申请的是一样的内存,时间差不多 否则不一样 ”。 16.为什么要使用滑动窗口协议 滑动窗口协议是TCP中流量控制的一种方法,该协议允许发送端可以在停止并等待确认前发送多个分组,而且可以通过接受端控制发送端的发送。只有收到接受端的确认之后, 发送窗口才有可能向前滑动。是TCP协议软件利用滑动窗口有效解决传输效率和流量控制问题。 17. 设计一个C++垃圾回收机制 有析构函数、智能指针、引用计数去管理资源的释放。 方法1:使用引用计数和智能指针,给每一块分配的内存提供引用计数,然后通过智能指针(smart pointer)自动完成引用计数的加减, 如果引用技术减少到零,就代表没有人使用该内存了,这块内存就可以回收了。 具体可以在网上看下:http://blog.csdn.net/yeahhook/article/details/6796242 http://familyandjob.blog.51cto.com/523471/110494

posted on 2011-09-22 15:13  buptLizer  阅读(830)  评论(0编辑  收藏  举报

导航