• 摩根IT笔试


    2010 的笔试,没有去年的43页,也就21页,除去了不同语言(java、c/c++、C#)的题,真正要做的也就16页左右,时间是够的。

    基本上当了炮灰,所以在这里列出来,和大家分享一下。其实有很多都不是很难得问题,但是多了起来就很难发挥好。

    session 1(必做)

    有点变态,因为无论你什么语言,都必须答——我常用java,很久没有其他的,都忘了那些语言的特性了。

    1 一只蜗牛,在一根10feet的杆上,每天向上3feet,晚上休息,下降1feet,问第几天什么时候到杆顶?(应该是考虑最后一天的情况)

    2 考了java,对于类的static synchronized ,问:能不能编译通过,能不能锁住对象?

    3 考了c#,问一下代码输出的是什么?主要有个printer2,搞了个new virtual在搞搞阵。

     1 IPrint{
     2   void print(); 
     3 
     4  
     5 class Printer1:IPrint {
     6    public void print(){ Console.WriteLine("Printer1.")} }
     7  
     8 class Printer2:Printer1
     9 {
    10   public new virtual void print() { Console.WriteLine("Printer2.")} }
    11 
    12  
    13  class Printer3:Printer2
    14 {
    15   public override void print() { Console.WriteLine("Printer3.")} }
    16 
    17  
    18  class Printer4:Printer3
    19 {
    20   public override void print() { Console.WriteLine("Printer4.")} }
    21 }  
    22 
    23 IPrinter ip = new Printer4();
    24 ip.print(); 

    4 考了java的一个分析wait/sleep/notifyAll 的题目,问有无死锁。

    5 考了一个C++版的继承与派生的问题

     1 class Base
     2 {
     3 int val;
     4 public Base():val(5);
     5 public virtual void print(){printf("%d",val);}
     6 }
     7 
     8 class Child
     9 {
    10 int _j;
    11 public Child():_j(8);
    12 public void print(){printf("%d",_j);}
    13 }
    14 
    15 

    问以下情况什么时候会输出88888

    代码

     Child[
    5] c;
     Base
    * p = (Base*)c;
      
    for(int i=0;i<5;++i)
     {
     p
    ->print();
     
    ++p;
     }
     
    B...
     
     C
     Base[
    5] c;
     Child
    * p = (Child*)c;
     
    for(int i=0;i<5;++i)
     {
     p
    ->print();
     
    ++p;
     }
     
     D
     Base[
    5] c;
     Child
    * p = //用dynamicCast
     for(int i=0;i<5;++i)
     {
     p
    ->print();
     
    ++p;
     }

    6 考了C++一个编译的问题,问哪里有bug

    代码
    class A<T1,T2>
    {
    T1
    * t1;
    T2
    * t2;
      
    public A():t1(new T1()),t2(new T2()){} //choice A

      
    public A(const A& a){  //choice B
        t1 = a.t1;
        t2 
    = a.t2;
      }

      
    operator =(const A& a) //choice C
      {
        t1 
    = a.t1;
        t2 
    = a.t2;
      }

      
    ~A() throw() //choice D
      {
        delete t1;
        delete t2;
      }
    }

    据说是C,因为有内存泄露。原来的指针指向的空间没有释放掉。

    7 以下的java会怎么样?

    代码
    public class Foo {
        
    int value;

        
    public void Foo() {
            value 
    = 100;
        }

        
    public Foo(int i) {
            value 
    = i;
        }

        
    public void print() {
            System.out.println(value);
        }
        
        
    public static void main(String[] args)
        {
            Foo f1 
    = new Foo();
            Foo f2 
    = new Foo(200);
            f1.print();
            f2.print();
        }
    }

    a 输出100和200

    b 编译不过,因为value没有初值

    c 编译不过,因为没有默认构造函数(应该选这个,因为有个void Foo())

    ... 


    section2(必做,只不过是大题,上面的是选择题)

    1 问实现一个priority queue需要用多少个queue实现? (不知道说什么)

    2 两个已排序的O(n)的序列A、B,求两个序列merge后的中位数?如果能在O(logn)内满分,在O(n)内有一些分。

    3 有两个文件夹,里面有很多文件,写一个算法,找到在一个文件夹里而不在另一个文件夹中的文件。 

    4 有一份文件,里面有2^32-1个数,取值范围是[0,2^32-1],系统内存只有几百k,请问如何找出[0,2^32-1]中不在文件中出现的数。

    5 有一个密码锁,密码锁是转盘状,有40个数字(包括0)。按一次密码需要顺时针,先转到0,转密码的第一个数字,转到0,转密码第二个数字,如此类推。密码长度是3位。问最坏情况下转了多少个数字包括0。(排列组合的题目,描述也不很清楚)

    6 写一个“非递归”的算法,找出pattern在长串中出现的位置,如输入长串是abcbc而pattern是abc时,要输出(0,1,2)、(0,3,4)、(0,1,4)

    session2.1

    根据自己的编程语言答题,java题目如下:

    1 改写main,使得不抛出运行时异常

     1 import java.lang.reflect.Constructor;
     2 
     3 public class ConTest {
     4 
     5     public ConTest(String... ops) {
     6         System.out.println("Success");
     7     }
     8 
     9     public static void main(String[] args) {
    10         Class<?> clazz;
    11         try {
    12             clazz = Class.forName("ConTest");
    13             Constructor m = clazz.getConstructors()[0];
    14             String a = "";
    15             m.newInstance(a);
    16 
    17         } catch (Exception e) {
    18             // TODO Auto-generated catch block
    19             e.printStackTrace();
    20         }
    21 
    22     }
    23 }
    24 

     事后试出答案是m.newInstance(new Object[] { new String[] { a } });

    因为ConTest(String.. ops)等同于ConTest(String[] ops)

    而newInstance(Object..objs)等同于newInstanec(Object[] objs) 然后就不知道怎么回事了

    考试没得查真恼火,看看javadoc一分钟就能解决。

    2 写一个类,里面用“数组”实现List接口,List接口只要求实现三个函数。(这个比较简单,主要要注意add的时候,数组需要增长的情况)

    1 public interface List
    2 {
    3 public boolean add(Object o);
    4 public int indexOf(Object o); //给出了javadoc,如果不存在返回-1
    5 public boolean remove(Object o); //如果不存在,不变,返回false
    6 }


  • 相关阅读:
    【福利】JetBrains 全家桶永久免费使用
    openlayers操作分享:如何从容的在vue中食用openlayers6
    Axios的正确食用方法
    uniapp 地图全解析+事件监听
    JS数据扁平化
    Codeforces 记录
    WP开发加载图片及文字Resource/Content说明
    根据属性获取属性名
    string和byte 数组转换的快速方法(采用unsafe)
    Code First Migrations更新数据库结构(数据迁移)
  • 原文地址:https://www.cnblogs.com/anic/p/1709119.html
Copyright © 2020-2023  润新知