网易2013笔试+面试

话说笔试是我的处子笔,发挥还算正常,有幸进入面试阶段(处子面),由于学院不在合肥本部的特殊原因,我没有在合肥参加宣讲会,而是去了上海交通大学站,笔试时间是21号晚上6:30开始到8:30。 观察了一下考场,人数不多,大约100号人。。那天由于很晚回来,而且之后几天实验和导师的任务,很忙没时间写笔经。。那就先从笔试说起吧!~网易笔试还是很难的,最后我看了下我的评分是B级,具体怎么弄的,我也不是很清楚,反正这是我的评分。ps:偷瞄的。

  第一部分:计算机基础(选择题都是多选题)

  1、选择题:按照e1、e2、e3、e3、的顺序进栈,出栈的顺序可能是下面的哪种?

  看了下都可以。所以直接写了ABCD

  2、中缀表达X=A+B*(C-D)/E式转后缀表达式。

  只有一个正确的。 有些选项是把中序进行变形,应该是移项之后再求后缀的。

  3、问以下排序算法哪些是不稳定的。 A 快速排序 B堆排序 C哈希排序 D冒泡排序 E 合并排序

  这个就不说了。堆,希尔,快排肯定是不稳定的

  4、(填空题)一个四叉树、有n个结点,每个结点都有四个指向它的四个孩子的指针,那么在这4n 个指针中,空指针有多少个______。

  这个算了下应该是4+3(n-1)

  5.&和移位的一道题,题目很长,没全部记下来,不过只要注意符号的优先级,慢慢算应该没问题。

  6.说的socket编程的问题

  

  11、(写程序)实现斐波纳契数列,写一个算法求数列的第n项的值。给出算法复杂度,尽量高效。 我是这样实现的,不知道是不是最优。

  先算一,二,然后推出三。。这样一直递归下去,后边的结果也能用到前面的结果,,最后时间复杂度只有O(n),但是貌似还有更优的,复杂度是O(logN),智商拙计只记得数学公式,不知道怎么代码实现了。。。

  12、内存分配和垃圾回收

  可能回答的比较宽泛,我写的是自己理解的。。貌似有些地方理解错了。。基于标记清理,复制暂停的回收方法,没怎么细写 。。我只写了关于堆的回收,内存分配是按linux 的  方式来写的,反正很挫。

  13、多线程并发控制012012012

复制代码
 1 package kato22;  2  3 public class test {  4  5 public static void main(String[] args) {  6 Num num = new Num();  7 myThread0 my0 = new myThread0(num);  8 myThread1 my1 = new myThread1(num);  9 myThread2 my2 = new myThread2(num);  10 new Thread(my0).start();  11 new Thread(my1).start();  12 new Thread(my2).start();  13  14  }  15 }  16  17 class Num {  18 int i = 0;  19 int tmp;  20  21 public void first() {  22 System.out.print("0");  23 tmp = 1;  24 i++;  25  }  26  27 public void second() {  28 System.out.print("1");  29 tmp = 2;  30 i++;  31  }  32  33 public void third() {  34 System.out.print("2");  35 tmp = 0;  36 i++;  37  }  38  39 public synchronized void numed() {  40 if (i < 8) {  41  notifyAll();  42  }  43  }  44  45 public synchronized void wait0() throws InterruptedException {  46 while (tmp != 2) {  47  wait();  48  }  49  }  50  51 public synchronized void wait1() throws InterruptedException {  52 while (tmp != 0) {  53  wait();  54  }  55  }  56  57 public synchronized void wait2() throws InterruptedException {  58 while (tmp != 1) {  59  wait();  60  }  61  }  62  63 }  64  65 class myThread0 implements Runnable {  66  67 private Num num;  68  69 public myThread0(Num n) {  70 num = n;  71  }  72  73  @Override  74 public void run() {  75 try {  76 while (!Thread.interrupted()) {  77  num.first();  78  num.numed();  79  num.wait1();  80  }  81 } catch (InterruptedException e) {  82 System.out.println("interrupt");  83  }  84  }  85  86 }  87  88 class myThread1 implements Runnable {  89  90 private Num num;  91  92 public myThread1(Num n) {  93 num = n;  94  }  95  96  @Override  97 public void run() {  98 try {  99 while (!Thread.interrupted()) { 100  num.wait2(); 101  num.second(); 102  num.numed(); 103 104  } 105 } catch (InterruptedException e) { 106 System.out.println("interrupt"); 107  } 108  } 109 110 } 111 112 class myThread2 implements Runnable { 113 114 private Num num; 115 116 public myThread2(Num n) { 117 num = n; 118  } 119 120  @Override 121 public void run() { 122 try { 123 while (!Thread.interrupted()) { 124  num.wait0(); 125  num.third(); 126  num.numed(); 127  } 128 } catch (InterruptedException e) { 129 System.out.println("interrupt"); 130  } 131  } 132 133 }
复制代码

 

 14、异常处理,finally和数据库连接不存在

 异常处理原则:早throws晚catch。异常具体化。。

输入输出流必须在finally中关闭,否则发生异常导致io未正常关闭。jdbc连接在数据库不存在时的异常未被catch。

复制代码
    总结了一下:(当时只写了上面几条)
  1、尽量避免使用异常,将异常情况提前检测出来。 2、不要为每个可能会出现异常的语句都设置try和catch。 3、避免在方法中抛出(throw)或者捕获(catch)运行时异常RuntimeException和Error。 4、避免总是catch Exception或Throwable,而要catch具体的异常类。这样可以使程序更加清晰。 5、不要压制、隐瞒异常。将不能处理的异常往外抛,而不是捕获之后随便处理。 6、不要在循环中使用try...catch,尽量将try...catch放在循环外或者避免使用。 7、在catch Exception中不只要处理异常,有时还要出栈、对前面的一些变量进行处理,否则可能出现bug      //(1)尽量避免使用异常,将异常情况提前检测出来         Stack<Object> stack = new Stack();         try...{             stack.pop();         } catch (EmptyStackException e) ...{             //....         }         //应该用下面的方式,以避免使用异常         if (!stack.isEmpty()) ...{             stack.pop();         }                  //(2)不要为每个可能会出现的一场的语句都设置try和catch         try...{             stack.pop();         } catch (EmptyStackException e) ...{             //....         }         String data = "123";         try ...{             Double.parseDouble(data);         } catch(NumberFormatException e)...{             //....         }         //应该使用下面的方式,将两个语句放在一个try块中         try...{             stack.pop();             Double.parseDouble(data);         } catch(EmptyStackException e) ...{             //....         } catch(NumberFormatException e) ...{             //....         }                  //(3)避免在方法中抛出或者捕获运行时异常RuntimeException和Error,         //比如内存错误等         //避免出现下面的情况         String[] array;         try ...{             array = new String[1000];             //array = new String[1000000];此时会出现OutOfMemoryError异常         } catch (OutOfMemoryError e) ...{             throw e;         }         //直接用下面代码         array = new String[1000];                  //(4)避免总是catch Exception或Throwable,而要捕获具体的异常         //这样可以根据不同的异常做不同的处理,使程序更加清晰         try ...{             stack.pop();             Double.parseDouble(data);         } catch (Exception e) ...{             //应该避免catch Exception !!!         }                  //(5)不要压制、隐瞒异常。将不能处理的异常往外抛,而不是捕获之后随便处理         try...{             Double.parseDouble(data);         } catch (NumberFormatException e) ...{             //.....             throw e;    //抛出不能处理的异常,而不是隐瞒         }
复制代码

 

下面是面试环节:

第一轮:集合类,多线程,static, finally final finalized ,wait sleep , hashtable 和hashmap ,service ,ontouch ,aidl ,binder;

 

容器主要问关于set,map,list,的特性及collections的的特性,其他有时间再细化。。最近太忙

 

第二轮:项目当中的问题。视频播放处理,加解密 ,ndk,java基本类型和位 ,wait sleep ,线程安全, 视频降噪;聊了会Ruby,貌似对我本科做的android项目的回答不是很满意,好多东西长时间没看,还是要复习复习,自己做的也会忘记。

 

最后一轮面试:自我介绍,,性格,,缺点,,网易认识的人,杭州的熟人,为毛不去北京上海,实习期,期望工资

 

生日之际,拿到了网易的实习offer,除了父亲的短信之外唯一能够得到的安慰吧。奔跑吧,少年!~

最后再加道网易笔试题:

给一个整数数组, 找到其中包含最多连续数的子集,
比如给:15, 7, 12, 6, 14, 13, 9, 11,
则返回: 5:[11, 12, 13, 14, 15] 。
最简单的方法是sort然后scan一遍,但是要o(nlgn).
有什么O(n)的方法吗?
个人资料
onemore
等级:8
文章:133篇
访问:11.8w
排名: 4
上一篇: 小米 面试 笔试 2015
下一篇:网易2014校招-虚拟世界架构师:面经+题目
猜你感兴趣的圈子:
网易笔试面试圈
标签: num、catch、异常、stack、interruptedexception、面试题
隐藏