实习面试经验小结

Microsoft 面试

意外中的意外,庆幸中的庆幸,有了这样一次走进sigma的机会。虽然仅仅是一次面试,但那种兴奋和遗憾带给我的新鲜感是不言而喻的。昨晚整理一些流行的笔试题到很晚,尽管没有被问到,除了那道字符串反转的,但一点都不后悔。哪怕是现在,很静的夜,总觉得时间若能倒回下午,那该多好。多少写下一点文字,将来回忆起来也不至于全是苦涩吧,呵呵。说真的,从楼里出来的时候,觉得总算是经历过了,什么都不求,只是有一点忧伤,心里不知道那样的工作何时能真的属于自己。印象最深的仍是那间大大的有着许多零食和水果的屋子。以前只在google的网站上见到过,觉得google-er们真爽啊,那小日子过的,啧啧。如今当真置身类似的环境,唯有紧张和羡慕。


头一位欧阳先生个子高高的,年纪不大,背微驼,上来问了我一些简历上的东西,对zhuangwang的那个项目比较感兴趣。我告诉他限于当时数据库无法重建的状态,无奈之下才想到使用自制的工具来解决的。在此之前他看到我熟悉STL,便问我vector的增长原理,好在我答出了每次增长都是新建加复制这一点。之后他出了一道编程题,模拟抛硬币的游戏,要求计算当有三次出现正面朝上时总的投掷次数。开始的时候我受困于如何随机地产生01。在他的提示下这个问题自然消失:可借助rand函数简单实现,并且我不必执著于细节。这样我开始把程序分成两部分,首先产生01;其次判断是否符合终止条件。后一部分显然是整个程序的中心,难在如何保存三次的历史数据。我首先想到用栈保存所有的历史数据,但经他提示转念一想不好,因为其实三次以前的数据显然是没有价值的,因此想到使用一个数组来保存最近三次的数据,但问题是如何保证数组中存放的是最近三次的数据呢?需要用到队列。具体实现稍后给出。

第二位看上去是个程序经理或者team leader。同他的交谈应该说是比较惬意的,但中途我写程序的时间占得比较长,不知是否引起了他的怀疑或不满。它的题目是判断递归实现费波纳切数列的不足与隐患。我提到可能发生栈溢出的情形。进而他建议我按照自己的思路实现一个计算例程。这个程序是C语言课本上的例题,我确信我可以准确无误地写出来,所以倒也不怎么着急,不过说实话当时非常紧张,所以花了一些时间,所幸最终还是cover了。其实就不难嘛。记得最开始他问我在做项目的过程中觉得最大的困难来自对于算法逻辑的理解还是对于基础知识的理解不深,我说应该算是前者,但是更多的时候源自自己的失误,为了弥补一个小错误通常需要经过反复的调试才能做到。最后他问到了那个字符串反转的题目。我给出了两种方法,其一是头尾交换;其二是利用栈。我相信还有更好的方法,但当时没有想出来。

第三位仍很年轻,不甚友好的样子,呵呵。上来就问我HashTable的实现,我说没有用过,但用过stl::map,然后我说map的底层是红黑树,我很奇怪他不知道。可能也就是从那时起我有些轻敌的。他接着问到一些时髦的技术,我答得不好,比如XML等。他还给出了一道智力题,有点类似于算法导论课件里那个老师在最后一次课讲过的两手计数问题。题目大意是假设两个立方体上标明着09之间各不相同的数字,当然两个立方体之间的数字可以重复。现在需要利用这两个立方体数出031之间的任意数字。我给出的答案是不可能。

总的说来,三次面试确实挺不容易的,比起以前经历的那些要专业多了。遗憾还是颇多,主要是一些技术细节不甚了了,导致人家一追问我就没准了。不过还好,整个走下来,我也开始知道所谓大企业的方向了,进而就该是修炼内功的时间了吧,加油!


Thomson 笔试

一.C/C++

1.函数指针

typedef  char *  STR;
typedef STR (
* pFunc)( int   * );

2.自加算符

=   9 ;
(
++ x)  *  ( ++ x)  *  ( ++ x)  =   /* 11 * 11 * 12 =  */ 1452 ;

3.枚举

enum  {a, b = 0 , c, d = 5 };
/* a: 0, b: 0, c: 1, d: 5 */

4.指针

1const char* const p = &q中两处const的含义

       Neither the value of the object addressed by p nor the address itself can not be unchanged.(“C++ Primer. P 105” )

2)分析一下程序的运行结果

#include  < stdio.h >

int  main( int  argc,  char   * argv[])
{
       
struct
       {
              
char  c;   /* struct边界自动对齐,c之后三个字节才是n */
              
int  n;
       } s;

       memset(
& s,  0 sizeof (s.c)  +   sizeof (s.n));     /* s.n的值不确定 */

       
for  (s.c  =   0 ; s.c  <   10 ++ s.c)
       {
              s.n
++ ;
       }

       printf(
" s.n is: %d " , s.c);
       printf(
" s.n is: %d " , s.n);
       
       
return   0 ;
}

3)附上Intel, Microsoft等公司面试题一道

#include  < iostream.h >

#pragma  pack(8)    /*设置结构体对齐长度*/

struct  example1
{
       
short  a;  /* 该结构体中size最大者为b,其长度为4字节,故a的边界向b对齐 */
       
long  b;
};     
/* 其长度为8 */

struct  example2
{
       
char  c;
       example1 struct1;    
/* 该结构体中size最大者为struct1中元素b,其长度为4,故其他成员均应向它对齐,
                                          此时尽管编译器伪指令的限制为8,仍以4位对齐长度
*/
      
short  e;  
};     
/* 该结构体的长度为16 */

#pragma  pack()

using   namespace  std;

int  main( int  argc,  char *  argv[])
{
       example2 struct2;
       cout 
<<   sizeof (example1)  <<  endl;
       cout 
<<   sizeof (example2)  <<  endl;
       cout 
<<  (unsigned  int )( & struct2.struct1)  -  (unsigned  int )( & struct2) <<  endl;
       
/* 在结构体二中,结构体一对象地址的偏移量为4 */
       
       
return   0 ;
}

4win32平台上各种基本数据类型长度

char :                 1
short :                2
int :                     4
long :                 4
float :                 4
double :             8
long   double 12

5sizeof

两种用法:用于数据类型或变量;前者取得编译器对于size_t的赋值;后者取得变量的长度,当操作数具有数组类型时,其结果是数组的总字节数;对于char*型字符串,等价于strlen

若变量类型为联合,则sizeof的结果为此联合中元素的最大长度。如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小

二.网络

1TCP协议中建立连接和关闭连接的过程如何?

在建立连接的时候,客户端首先向服务器申请打开某一个端口(SYN段等于1TCP报文),然后服务器端发回一个ACK报文通知客户端请求报文收到,客户端收到确认报文以后再次发出确认报文确认刚才服务器端发出的确认报文(绕口么),至此,连接的建立完成。这就叫做三次握手。如果打算让双方都做好准备的话,一定要发送三次报文,而且只需要三次报文就可以了。

TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。客户机给服务器一个FIN1TCP报文,然后服务器返回给客户端一个确认ACK 报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),连接就结束了。

2.简述TCPUDP协议的两点区别。

       TCPUDP的区别
        1. 基于连接与无连接
       2. 对系统资源的要求(TCP较多,UDP少)
       3. UDP程序结构较简单
       4. 流模式与数据报模式
               TCP保证数据正确性,UDP可能丢包
               TCP保证数据顺序,UDP不保证

       具体编程时的区别
        1. socket()的参数不同
       2. UDP Server不需要调用listenaccept
       3. UDP
收发数据用sendto/recvfrom函数
       4. TCP:地址信息在connect/accept时确定
           UDP:在sendto/recvfrom函数中每次均 需指定地址信息
       5. UDPshutdown函数无效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值