发布于 2014-10-25 07:36:30 | 128 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

百度(Baidu)中文搜索引擎

百度(Nasdaq简称:BIDU)是全球最大的中文搜索引擎,2000年1月由李彦宏、徐勇两人创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。


今天去面试百度了,一面感觉比较简单,百分之九十多都答上来了。坐下来面试的时候我看到了桌上我的笔试试卷,瞄到了分数,我擦,44分,这还能过笔试!然后等会有看到其他两张笔试卷,一张29分一张33分。。看来笔试给分是严格来给的。

问题一:面试官先让我做自我介绍。然后马上就谈项目了,叫我挑一个项目讲讲怎么做的,解决了什么问题。问项目我最不怕了,毕竟项目都是自己认真地完成的,也确实在做项目过程中学到了很多东西,解决了一些问题。
 

问题二:说完他让我写写程序,问我知道哪些排序算法,叫我写一个熟悉的排序算法。居然让我自己选择,那果断快速排序啊。如下:

写法是这样的:

 
  1. void Qsort(int arr[],int &low,int &high)  
  2. {  
  3.     if(arr || low>=high)  
  4.     {  
  5.         return;  
  6.     }  
  7.     int first = low;  
  8.     int last = high;// 因为在变所以得另外两个指针(数组下标)  
  9.     int key = arr[first];/*用字表的第一个记录作为枢轴*/  
  10.     while(first < last)  
  11.     {  
  12.         while(first<last && arr[last]>=key)  
  13.             --last;  
  14.         arr[first] = arr[last];/*将比第一个小的移到低端*/  
  15.         while(first<last && arr[first]<=key)  
  16.             ++first;  
  17.         arr[last]=arr[first];/*将比第一个大的移到高端*/  
  18.     }  
  19.     arr[first]=key;/*枢轴记录到位*/  
  20.     Qsort(arr,low,first-1);  
  21.     Qsort(arr,last+1,high);  
  22. }  

或者看一下这个 http://blog.csdn.net/u010700335/article/details/38943625,关于quick_sort的一般化形式,不错的,用到递归就得考虑推出递归的条件。
zyp不同意下面的写法,因为移动次数比上面的多。(可以不看了)

 
  1. void quick_sort(int array[], int begin, int end)    
  2. {    
  3.     if(end > begin)    
  4.     {    
  5.         int pivot = begin;    
  6.         int last_small = begin;    
  7.         int i = end;    
  8.         while(last_small != i)    
  9.         {    
  10.             if(array[i] <= array[pivot])    
  11.             {    
  12.                 int temp = array[i];    
  13.                 array[i] = array[++last_small];    
  14.                 array[last_small] = temp;    
  15.             }    
  16.             else    
  17.                 i--;    
  18.         }    
  19.         int tmp = array[pivot];    
  20.         array[pivot] = array[last_small];    
  21.         array[last_small] = tmp;    
  22.         quick_sort(array, begin, last_small - 1);    
  23.         quick_sort(array, last_small + 1, end);    
  24.     }    
  25. }   


 

问题三:然后叫我写反转链表。。太经常问了这问题。但他一开始说不允许另外开辟地址,我还以为临时变量都不让声明,我就说这有点难。但是过一会他纠正了,临时变量是可以的。

  1. void reversal(listNode* head)//reverse the list    
  2.     {    
  3.         listNode* t_head = NULL;    
  4.         listNode *cur = head;     
  5.         while(cur != NULL)    
  6.         {      
  7.             cur->next = t_head;    
  8.             t_head = cur;    
  9.             cur = cur->next;    
  10.         }    
  11.         head = t_head;    
  12.     }    


问题四:在已排序好的数组找两个数a+b等于给定的N。(自己zyp当时想遍历for,之后二分查找N-arr[i],想法还是落后啦)

对于一个数组array,长度为size,令begin = 0,end = size - 1,判断arr[begin] + arr[end] 与n的大小关系,如果相等,则找到;如果小于,则begin++,如果大于,则end--,然后继续做前面判断。这样基本上效率能最快了,因为是 O(n)。

问题五:不用第三个参数调换整数a和b(zyp用到了两次异或之后是自己本身)

他问了之后我就说这题我会,说真的,这题要是之前不知道,要在面试的时候想出来基本不可能。要用异或操作符来做:
a = a^b;  
b = a^b;  
a = a^b;  
然后用a= 101,b = 111测试了一下,根据上面操作a = 010;b = 101; a = 111正确。

问题六:堆栈区别

说了一下四点:
1)栈是连续的,堆是不连续的;2)栈元素自动释放,堆元素要手动释放;3)栈从高地址开始存储向下增长,堆相反;4)存储读取效率上栈比堆快。
还问通常什么存储在栈中,答函数参数、局部变量等。

下面是百度的结果:

问题七:接下来他看了我的笔试题试卷,主要是讨论最后一道题:如下

情景:新浪微博发布内容要求字符不超过140,但是用户如果在发布内容中有很长的url时,会认为是很多字符。所以新浪上发布内容包含一个URL时,时把他压缩成一个TinyURL(缩小)。比如:

上图实际的url是:http://detail.tmall.com/item.htm?spm=a220z.1000880.0.0.oUBO0W&id=39828885247

输入:http://zhidao.baidu.com/search?ct=17&pn=0&tn=ikaslist&rn=10&word=helloworld&ie=utf-8&fr=wwwt
实际显示:http://asdfa.cn/ak78ss。(这里我只是随便举了个例子)
前面asdfa.cn是对应域名 zhidao.baidu.com,后面长长的字符串被压缩成ak78ss。
现在让你来设计TinyURL的实现,一下问题要怎么设计:
问题一:域名后面的编码如何实现?
问题二:对于已经映射过的一个URL,怎么查找已存在的TinyUrl?
问题三:有10亿个url,一个服务上存不下,需要多台服务器,怎么设计实现?
问了一个问题,说你觉得让你来设计这样一个服务,最大的问题是什么?我说是tinyurl的hash表存储,因为数据量真的非常大。他问那你要怎么存储,我说要用二次哈希吧,先根据hash值存储到对应的服务器上面,再进行hash存储。

问题八:接着他问我试卷上memcpy怎么没写?我说我当时对这个函数不了解。他叫我现在做一下这个题。我就不贴代码了,写得太烂,他说要在复制的时候考虑内存溢出问题。有兴趣的可以网上找实现代码。

  1. #include <stdio.h>  
  2. void *memcpy(void *dst,const void *src,unsigned int count)  
  3. {  
  4.     char *p_dst = (char *)(dst);  
  5.     char *p_src = (char *)(src);  
  6.     unsigned int i;  
  7.     if(p_dst>p_src && p_dst<=(p_src+count-1))  
  8.     {  
  9.         while(count)  
  10.         {  
  11.             *(p_dst+count-1) = *(p_src+count-1);  
  12.             count--;  
  13.         }  
  14.     }  
  15.     else  
  16.     {  
  17.         for(i=0;i<count;i++)  
  18.         {  
  19.             *(p_dst+i) = *(p_src+i);  
  20.         }  
  21.     }  
  22.     return p_dst;  
  23. }  


 

问题九:后面是一道概率问题,一个山区的村子,生孩子直到生了一个男孩为止。题目就不多说了,网上不久有这道原 题么?但我之前根本没看答案。所以我一开始在纸上一个劲地计算,最后发现计算不出来之后,我给了他这样的答案,说我觉得是1:1。为什么?因为生男生女概 率本来就都是二分之一,无论定义怎么的规则生孩子,生男生女概率就是不会变,所以数量多了之后男女比例是1:1。我不知道他是否想要这样的答案,但我觉得 我当时挺机智的。他说原理是什么呢?我说,当数量足够大的时候,概率比就是数量比。随后他爽快地说:去二面吧! 

总结:个人总结,不管应聘的是啥职位,只要是IT这行的,在应聘前一定要有的:

1.  拿的出手的一门编程语言;(c/c++ 或者java)

2.  数据结构是一定要在下面翻翻的;(数据结构和算法,以及stl的源码级)

3.  再有时间的话也要翻翻计算机原理、计算机网络和概率论的(当时就有一个关于网关的题和概率题)

4.  总之校招基础很重要啊



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务