2016網易春招Java在線筆試回憶錄

別看是在線筆試,可是很是嚴格,全稱窗口不得最小化和關閉,轉移,全稱須要打開攝像頭監控,使用草稿紙須要攝像頭對準……反正2個小時,題量在那兒擺着,有做弊的功夫不如好好作作最後的編程題呢……網易不讓泄漏原題,可是我只是說了考察的知識點,不犯法吧……html

 

  3月初投了網易內推,當初覺得有內推碼的就免筆試了,最後空歡喜,有內推碼也要在線筆試……先在線填寫了簡歷,等了漫長的半個多月,開始就認爲簡歷掛掉了,畢竟網易,周邊的小夥伴,有掛掉的……我都等到上週了纔來通知,說今天在線筆試……算法

  整體感受考察不算很難,可是很廣,並且對JavaSE的知識點考察很深刻,還不只僅是考察Java,涉及了設計模式,Java語法,數據庫SQL,Linux命令,Windows,數據結構,網絡,算法,操做系統等領域,並且編碼題不能在IDE上編碼,致使很不適應,說明平時太依靠IDE了,也不是啥好事兒。數據庫

  題型回憶:編程

  • 設計模式就一道題,很淺顯,應該是送分的,考察的觀察者模式,題目把觀察者模式的使用場景大概描述了下,讓你選這應該使用哪一個設計模式,so easy。
  • 第二道正好是我以前總結過的JVM學習記錄裏的JVM的GC調優和堆區內存空間結構問題,給出了幾個GC參數,讓計算伊甸園的大小,好像我算錯了, 媽蛋,什麼東西不復習都不行啊!

JVM學習(4)——全面總結Java的GC算法和回收機制

  • 還有一道考察Java語法基本功的,屬於Java初始化的範疇,大概相似下面這幾個,實在回憶不起100%原題了:
    • 就是記住:Java程序並非一開始就運行本身的構造方法而是先運行其父類的構造方法。注意:子類實例化的時候會先調用父類的構造,而後才調用子類的構造。因此通常在子類的構造中第一條語句就是調用父類構造不過若是沒有在第一條語句顯示地調用父類構造,那名JAVA會自動先調用父類的默認無參構造,固然這種狀況下,你得保證父類必須有無參構造!
 class SuperClass {

       SuperClass(String str) {

           System.out.println("Super with a string.");

       }

    }

    publicclass SubClass extends SuperClass {

       SubClass(String str) {

           System.out.println("Sub with a string.");

       }

       publicstaticvoid main(String[] args) {

           SubClass sub = new SubClass("sub");

       }

    }
View Code

  程序在初始化子類時(沒有顯示調用父類的構造器)先要尋找其父類的默認無參構造方法,結果沒找到那麼編譯天然不能經過。解決這個問題有兩個辦法:windows

1.在父類中增長一個默認無參構造方法。 
2.在子類的構造方法中增長一條語句:super(str); 且必須在第一句。      設計模式

class One {

       One(String str) {

           System.out.println(str);

       }

    }

class Two {

       One one_1 = new One("one-1");

       One one_2 = new One("one-2");

       One one_3 = new One("one-3");

       Two(String str) {

           System.out.println(str);

       }

}

publicclass Test {

       publicstaticvoid main(String[] args) {

           System.out.println("Test main() start ");

           Two two = new Two("two");

       }

}
View Code
    • 從main()方法中實例化了一個Two類的對象,構造方法做用就是初始化。先初始化Two類的成員變量(即在建立對象時對象所在類的全部數據成員會先進行初始化),Two類有3個成員變量,都是One類的對象,那麼要初始化這三個對象,就調用3次One類的相應的含參構造方法來初始化它們。最後在初始化Two類的對象。
    class One {
       One(String str) {
           System.out.println(str);
       }
    }

    class Two {
       One one_1 = new One("one-1");
       One one_2 = new One("one-2");
       static One one_3 = new One("one-3");

       Two(String str) {
           System.out.println(str);
       }
    }

    publicclass Test {
       publicstaticvoid main(String[] args) {
           System.out.println("Test main() start ");
           Two two_1 = new Two("two-1");
           System.out.println("------------");
           Two two_2 = new Two("two-2");
       }
    }
View Code
    • 含靜態變量的情景,先初始化two類的static的變量,調用one的構造器初始化,打印one-3,再按順序初始化two類的非static的成員變量,最後初始化two類的對象two_1,若是一個類中有靜態對象,那麼它會在非靜態對象前初始化,但只初始化一次,非靜態對象每次調用時都要按順序初始化一次。
class One {
       One(String str) {

           System.out.println(str);
       }
    }

    class Two {
       One one_1 = new One("one-1");
       One one_2 = new One("one-2");
       static One one_3 = new One("one-3");

       Two(String str) {
           System.out.println(str);
       }
    }

    publicclass Test {
       static Two two_3 = new Two("two-3");

       public static void main(String[] args) {
           System.out.println("Test main() start ");
           Two two_1 = new Two("two-1");
           System.out.println("------------");
           Two two_2 = new Two("two-2");
       }
    }
View Code
    • 程序中主類的靜態變量會在main()方法執行前初始化,以後和上個例子同樣。
class One {
       One(String str) {
           System.out.println(str);
       }
    }

    class Two {
       static int i = 0;
       One one_1 = new One("one-1");
       static One one_2 = new One("one-2");
       static One one_3 = new One("one-3");

       Two(String str) {
           System.out.println(str);
       }
    }

publicclass Test {//主類
       public static void main(String[] args){
           System.out.println("Test main() start ");
           System.out.println("Two.i = " + Two.i); 
     } 
}
View Code
    • 首次訪問主類中的靜態變量(沒有建立對象)時也要先初始化該靜態變量,先初始化two類的靜態成員(若是有的話),順序初始,由於主類中,沒有實例化新的對象,因此其他的普通成員變量不用管。

 

Test main() start網絡

one-2數據結構

one-3ide

Two.i = 0post

 

  接下來的題順序忘了,就大概回憶知識點有多少算多少了……

  • 考察Java的異常體系,讓解釋ClassNotFoundException異常和NoClassDefFoundError異常,啥場景出現,如何解決。
  • 考察了Java的鎖的機制,主要是介紹下自旋鎖和互斥鎖的概念,區別和使用場景。
  • 考察了JDK 5的 JUC 包,給了四個選項,好像有Future,Sephere等,讓找出和其餘三個區別最大的一個類。考察的是對JUC的熟練程度。
  • 考察Java的類加載機制,回答如何卸載 Java 類。
  • SQL中 where 後不能出現什麼語句,考察的SQL的語法,比較投的Java Web開發……
  • ping命令,對局域網內的主機ping通了,內網能上,可是連不上外網,多是由於啥?
  • windows下的exe和dll區別和概念?
  • Linux下什麼時候從用戶態切換到內核態。考察的Linux的基礎知識。
  • Linux下的權限命令考察的挺多,出了兩個相似的題。
  • 一道操做系統進程調度的問題,主要考察短做業優先算法下,求平均週轉時間。
  • 數據結構的二叉樹,已知前序,後序遍歷,問該樹有幾個可能的畫法。
  • 考察樹的葉子節點計算。
  • 考察棧的特性,一個編程題,問如何匹配字符串的各類括號,編程實現,在線的,不能用IDE。
  • 考察遞歸算法的時間複雜度和如何改進,我以前總結過,寫的是尾遞歸和線性遞歸。

JVM學習(1)——經過實例總結Java虛擬機的運行機制

  • 還有一個編程題,很遺憾,沒作對,大概數據着急了,沒咋記……

……

其餘的小題忘了,就這樣吧。再接再礪!

相關文章
相關標籤/搜索