美团 2013 研发岗
技术研发 技术支持
本套题共9题,并含有参考答案
题目详情
第1题

有ABCD四个人要在夜里过一座桥,他们通过这座桥分别需要耗时1、2、5、10分钟,现在只有一支手电,过桥时必须带有手电,并且同时最多只能两个人一起过桥。请问如何安排能够让四个人尽快都过桥。

1和2 先过。1返回,5和10先过,2返回,1和2一起过。一共时间=2+1+10+2+2=17分钟


第2题

 25匹马赛跑,每次只能跑5匹马,最快能赛几次找出跑得最快的3匹马?赛跑不能计时,并假设每匹马的速度是恒定不变的。请给出答案并描述比赛过程。

 第一--五局:分成5个组,可以得出5个组的第一名

第六局:5个第一名一起跑,这样可以得出最快的那一匹。

第七局:可能成为2,3名的再赛一次,包括最快组的2,3名,次快组的1,2名,第三快组的第1名。


所以一共是7次


第3题

 在有团购之前,大家都是现场买门票,公园的门票是5元,某天售票处开门时没有准备零钱。假设一天来购票的依次有2N个人,其中有N个人有5元零钱,其他N个人只有10元面值的钱;假设每人只买一张票。请问任何人都不必为找零而等待的概率是多少?

 任何人不必等的情况数 Cn=2N!/(N!*N!*(N+1)) 总的情况数 T=2N!/N!*N! 不必等的概率为:Cn/T = 1/(N+1)


第4题

 有一个函数“int f(int n)”,请编写一段程序调试函数f(n)是否总是返回0,并添加必要的注视和说明。

 int n = INT_MIN;

do

{

    if(0 != f(n))

    {

        //error

        break;

     }

}

while(n++ != INT_MIN);


if(n != INT_MIN) error;//


第5题

 用你熟悉的语言编写程序用两个栈(Stack)模拟队列(Queue)的先进先出操作,仅实现add、remove方法即可。
1)请先描述思路; 2)编写完整代码实现,编程语言不限。

 思路:栈是“先进后出”,队列是“先进先出”,当向队列中加入元素n,m,在队列中n应该位于队尾,当删除时候,元素n最先删除;向栈1中加入元素n、m时,m位于栈顶,将栈1中元素加入到栈2中,则n位于栈2的顶部,当删除时,元素n先删除,即实现了两个栈模拟队列的过程;

     

public class queue{

  private Stack<String> stackOne=new Stack<String>();

  private Stack<String>      stackTwo=new Stack<String>();

  

  public void add(String str){

      stackOne.push(str);

  }

  

  public void delete(){

     if(stackTwo.isEmpty()){

        while(!stackOne.isEmpty()){

           stackTwo.push(stackOne.pop());    

        }

     }

    if(stackTwo.isEmpty()){

       system.out.printIn("queue is empty");

    }

   else{

            stackTwo.pop();    

     }

   

     

 }


   

}


第6题

 编写函数,获取两段字符串的最长公共子串的长度,例如:
S1= GCCCTAGCCAGDE
S2= GCGCCAGTGDE
这两个序列的最长公共子串是GCCAG,也就是说返回值。

1)请先描述思路;

2)编写完整代码实现,编程语言不限。

 这道题使用矩阵对角线能够比较形象的描述问题解法,放出自己的C++代码如下:

int longestCommonString(string s1, string s2)
{
  int len  = 0;

  int *temp = new int[s2.length()];
  memset(temp, 0,  s2.length() * sizeof(int));

  for (int i = 0; i < s1.length(); i++)
  {
   for  (int j = s2.length() -1; j >= 0; j--)
   {
     if (s1[i]  == s2[j])
    {
      if (i == 0 || j == 0)
         temp[j] = 1;
      else
          temp[j] = temp[j -   1] + 1;


       if (len < temp[j])  
         len = temp[j];  
     }  
  }
  else
    temp[j] = 0;
 }

 return len;
}


第7题

 (iOS开发选做)实现多线程都有哪几种方法?


第8题

 (Android开发选做)关于Activity的生命周期,下拉statusbar时,桌面Activity会触发哪几个生命周期?系统关机时,弹出关机Dialog之后,此时,桌面Activity会触发哪几个生命周期?

 下拉时触发:onPause(),onStop()

弹出dialog:onPause()


第9题

 (系统运维选做)有主机A、B、C通过eth0和同一个交换机相连,A的IP地址为192.168.1.2,子网掩码255.255.255.0,B的IP地址为192.168.2.2,子网掩码255.255.255.0,C的IP地址为192.168.4.2,子网掩码255.255.255.0。现希望A和B能够通信,A和C、B和C不能通信。
1)假设能更改A和B的子网掩码,要如何设置A和B的子网掩码?
2)如果不能更改子网掩码,需要在A和B做什么设置?
3)A和B通信时,C是否能够通过sniffer截获A和B通信的报文,如果只能截获一部分报文,是哪一类报文?
4)C可以仅通过sniffer得知A和B的IP地址和MAC地址吗?如果能,如何获得?

 1) 通过修改A B掩码使得它们能互相通信的话,只需要AB 同在一个子网。因此A 和B 的掩码为255.255.252.0   ,   C不变

2)A的IP 地址修改为与B 同一个网段,如192.168.2.3


共有 9 道题目