網易筆試+面試


  話說筆試是我的處子筆,發揮還算正常,有幸進入面試階段(處子面),由於學院不在合肥本部的特殊原因,我沒有在合肥參加宣講會,而是去了上海交通大學站,筆試時間是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)的方法嗎?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM