2012腾讯春季实习生面试经历(二)

时间:2012年4月23号 地点:珞珈山国际宾馆

话说一面结束后,我感觉良好。次日便收到Tencent的二面通知,感到万分庆幸的我,开始准备迎接第三天的又一次挑战。

闲话少说,直入正题。这次面试持续大概25分钟,内容如下:

1.自我介绍。事先没有预料,我张口就说。从目前的研究生说起,一直到大学生涯。我的感觉是自己说的有点粗糙,也没啥亮点。这个以后需要事先有所准备,尽量给面试官留下一个好的印象。

2.工作地点。面试官问我工作地点意向。我一直都是坚持的深圳。然后他又要我给出一个合理理由,我的回答也很干脆:Tencent的总部就在深圳,觉得比较好发展。

3.编程题:.给定一个字符串如"12345",将其转换为整数?(此题很简单,我的回答很一般,暴露的问题:考虑的不够全面,如当时没有考虑负数情形)

#include<stdio.h>
int strConvert(char *s, int *result)
{
          int i;
          int nflag;
   
          i = 0;
          nflag = 0;
          if(s[0] == '-') {/*首先需要考虑负数的情况*/
                 nflag = 1;
                 ++i;
         }
 
         for(*result = 0; s[i] >= '0' && s[i] <= '9'; ++i) {
                 *result = *result * 10 + s[i] - '0';
         }
        
         if(s[i])        //如果s[i]没有到达'\0'
                 return 1;
         else {
                 *result = (nflag == 0 ? *result : -*result);
                 return 0;
         } 
}
 
int main()
{
         char str[50];
         int result;
 
         printf("Input characters:(end of ctrl-d)\n");
         while(scanf("%s", str) != EOF) {
                 if(!strConvert(str, &result))
                         printf("%s--->%d\n", str, result);
                 else
                         printf("%s is not all numbers!\n", str);
         }
}

测试结果:

wl@MARS:~/usefulcode/tencent$ ./a.out

Input characters:(end of ctrl-d)12345

12345--->12345

-38     

-38--->-38

-12sadf

-12sadf is not all numbers!abcdabcd is not all numbers!

4.页面置换算法

考查范围:操作系统-存储器管理-页面置换算法

概念回忆:在进程运行过程中,若其所要访问的页面不在内存而需要把他们调入内存中,但内存已经无空闲空间时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。通常,把选择换出的页面的算法成为页面置换算法。置换算法的好坏将直接影响到系统的性能。

1)最佳置换算法:一种理想化的算法,具有最好的性能,但实际上却难于实现。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法通常可以保证获得最低的缺页率。由于人们无法预知一个进程在内存的若干页面中,哪一个页面是未来最长时间不再被访问的,因而将算法无法实现。

2)先进先出页面置换算法(FIFO):该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

3)最近最久未使用置换算法(LRU):根据页面调入内存后的使用情况进行决策。LRU置换算法时选择最近最久未用的页面予以淘汰。

可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面 的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

4)Clock置换算法

简单的Colock置换算法:只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针连接成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只需检查页的访问为。如果是0,就选择该页置换出;若为1,就重新将它置0,暂不换出,而给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回队首去检查第一个页面。——又称为最近未用算法NRU。

改进型Clock置换:在该算法中,除需考虑页面的使用情况外,还须增加一个因素,即置换代价,这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。

其他算法包括最少使用置换算法(LFU),页面缓冲算法(PBA)。

5.TCP和UDP有什么区别?什么时候用TCP,什么时候用UDP?

考查范围:计算机网络-运输层

TCP最主要的特点是:面向连接的运输层协议,每一条TCP连接只能有两个端点(点对点),TCP提供可靠交付的服务,TCP提供全双工通信,面向字节流。

UDP的主要特点是:面向无连接的,使用尽最大努力交付,面向报文的,没有拥塞控制,支持一对一、一对多、多对一、多对多的交互通信、首部开销小(8字节,TCP需要20字节)

6..什么是三次握手?

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1,seq=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

7.有1100万个数,设计一种数据结构来实现以下功能:

insert(int n);

delete(int n);

print();

要求:实现这三个功能,尽可能快。

此题待续,希望大家给出宝贵想法!

posted @ 2012-04-30 17:06  whu-小磊  阅读(196)  评论(0编辑  收藏  举报