別看是在線筆試,但是非常嚴格,全稱窗口不得最小化和關閉,轉移,全稱需要打開攝像頭監控,使用草稿紙需要攝像頭對准……反正2個小時,題量在那兒擺着,有作弊的功夫不如好好做做最后的編程題呢……網易不讓泄漏原題,但是我只是說了考察的知識點,不犯法吧……
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"); } }
程序在初始化子類時(沒有顯示調用父類的構造器)先要尋找其父類的默認無參構造方法,結果沒找到那么編譯自然不能通過。解決這個問題有兩個辦法:
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"); } }
-
- 從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"); } }
-
- 含靜態變量的情景,先初始化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"); } }
-
- 程序中主類的靜態變量會在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); } }
- 首次訪問主類中的靜態變量(沒有創建對象)時也要先初始化該靜態變量,先初始化two類的靜態成員(如果有的話),順序初始,因為主類中,沒有實例化新的對象,所以其余的普通成員變量不用管。
Test main() start
one-2
one-3
Two.i = 0
接下來的題順序忘了,就大概回憶知識點有多少算多少了……
- 考察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虛擬機的運行機制
- 還有一個編程題,很遺憾,沒做對,大概數據着急了,沒咋記……
……
其他的小題忘了,就這樣吧。再接再厲!
歡迎關注
dashuai的博客是終身學習踐行者,大廠程序員,且專注於工作經驗、學習筆記的分享和日常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!