Java校招經驗

?求職經驗(Java開發)

時間節點

  • 對於我們專業的孩子來說,一般可以經歷4次校招,分別是:

    • 實習(3月份開始)
    • 內推/提前批/管培生(6月份開始)
    • 秋招(9月份開始)
    • 春招(次年3月份開始)
  • 不是要大家每個都參加,拿到心怡的offer就可以收手了,重點是注意下時間節點,越往後面的意味着你可能準備的更充分,但同時坑就那麼多,越往後面坑越少。需要根據自己的能力和準備的充分程度來選擇合適的入場時機,或者說根據自己計劃的入場時間提前做準備。

  • 同一家公司,參加前面的招聘,理論上或者說官方說明上是不影響下一次招聘的,但這應該不是事實上。事實上每次參加招聘都會在目標公司的招聘系統上留下“案底”,在下一次投遞崗位的時候,“案底”會作爲評估你的一個依據,好的“案底”就是加分項,太差的“案底”會讓對方直接不考慮你了,畢竟招聘也是要花費時間和金錢的,對方也不想浪費時間。幾次招聘在難度上沒有太大的差異的,儘早參加可以讓你提前經歷筆試面試,知道面試官會問哪方面的問題,可以拿一些並不是很想去的公司提前練練手。

  • 如果你不是大神,提前做準備是非常必要的(事實上大神也會做準備)。筆面試其實和備考差異不大,往年的筆試題、面試經驗都是等效於劃重點的寶貴材料。我曾經面試的一家公司,面試官拿着一個小冊子問我,他說這是公司要求,公司列出了必考察的幾個點,然後每個點列出了一些常見的問題供面試官參考,如果能提前熟悉這個小冊子不就可以如魚得水了。

  • 當然不是每家公司都有這種小冊子,面試前你也無法確定你的面試官,沒有固定招數的面試官一般就會問自己熟悉的,不然他也無法確定你回答的正確度。舉個例子,對於軟件工程師這個崗位,一般投簡歷的時候Java工程師和C++工程師是兩個崗位,細心點的公司面試的時候會讓搞Java開發的去面試投遞Java崗位的,搞C++的去去面試投遞C++崗位的,但並不是所有公司都這樣。我校招的時候除了幾個算法崗,投的全是Java開發,我遇到的面試官有:

    • 搞C++的,然後問我數據結構
    • 搞Java的,問Java基礎、集合源碼、併發、JVM、算法
    • 搞網絡的,問TCP、HTTP、DNS
    • 不會Java的,問數據庫
  • 總結一下,如果他不會你這門語言,而你投遞的又是這個崗位,那他不會在語言與算法上難爲你,這一環節就跳過了(算法一般是要你寫的,你寫了他不一定看得懂,所以就跟着跳過了),那麼剩下的就問基礎知識和項目經歷了,知識面廣一點的就問你:

    • 數據結構
    • 操作系統
    • 數據庫
    • 計算機網絡

    知識面窄一點的就只問他會的。

  • 如何關注每個公司招聘開始的時間節點:

    • 可以參考牛客網校招日程
      校招日曆
    • 關注你心怡公司的招聘公衆號,拿到一手官方消息
    • 關注校園宣講會
    • 目標公司的熟人內推

筆試

筆試一般就是選擇題+編程題,不同的公司會有不同的比重,有些公司只有編程題,而國企可能選擇題多一點。
選擇題的內容主要涉及:

  • 一門編程語言
  • 數據結構與算法
  • 設計模式
  • 操作系統
  • 計算機網絡
  • 數據庫

編程題就是要你用代碼去求解某個問題
筆試題的練習可以在賽碼網或者牛客網 (活躍在牛客上還挺好玩的)
編程題的練習可以在leetcode或者leetcode中國,也可以在賽碼網或者牛客網上練習各公司的往年編程題。
建議在練習的時候,每週將做過的題整理一遍,寫上註釋,放在一個持續更新的Project或者Repository中,就像我的這個Repository。在真正網上筆試的時候,大部分編程題是可以切出來在本地IDE上編程的,如果這道題你做過或者做過類似的,完全可以去翻你曾經的代碼,然後直接套用或做簡單的修改,比你再碼一遍快的太多。

面試

在面試一家公司之前,我覺得至少要做這幾項調研:

  • 該公司是幹什麼的。重資產還是輕資產,是賣產品的還是賣服務的
  • 你投遞的這一崗位可能是幹什麼的
  • 該公司的主要技術結構。比如阿里就是Java,騰訊C++,百度PHP,當然這是主要的技術結構,一家大型公司涉及的開發語言多達十幾種,但總有一兩個是主要的,而從事該語言開發的員工也是最多的,也就是說,需求這類職位比較多,同時你的面試官從事這個方向的概率比較高。就國內而言,整體來說,搞遊戲的大部分是C++,賣嵌入式產品的C和C++,賣嵌入式產品和服務的C、C++和Java,互聯網公司Java或者C++再加上前端,賣手機的C++、Java、Android、前端,等等。
  • 幾輪面試,每輪面什麼。就我個人經歷來說,一般的邀請到酒店大堂面試的,就兩輪,一天搞定,第一輪技術面,過了就第二輪HR面或者第二輪是主管技術面,算是比較輕鬆的,過或者涼都很快。還有一類公司是一天只面一面,在面試官酒店房間一對一,完了讓你回去等二面通知,這類一般3面以上,一面考你編程語言和算法基礎,二面考你綜合基礎知識和項目經歷,3面才HR或者主管面。

我將我之前面試準備的一些知識點羅列如下:

  1. Java基礎
  2. 數據結構
    • 隊列
    • 鏈表
    • 數組
      • 二叉樹
      • 完全二叉樹
      • 平衡二叉樹
      • 二叉查找樹
      • 紅黑樹
      • B-,B+,B*樹
      • LSM樹
    • Set
    • Map
  3. 算法
    • 排序算法
      • 選擇排序
      • 冒泡排序
      • 插入排序
      • 快速排序
      • 歸併排序
      • 希爾排序
      • 堆排序
      • 計數排序
      • 桶排序
      • 基數排序
    • 查找算法
      • 二分查找
    • 字符串比較
      • KMP算法
    • 布隆過濾器
    • 深度優先
    • 廣度優先
    • 貪心算法
    • 回溯算法
    • 動態規劃
  4. JVM
    • JVM內存劃分
    • JVM內存溢出
    • 垃圾回收
      • 如何判斷對象已死
      • 回收算法
      • 垃圾收集器
      • 回收過程
    • JVM性能優化
    • 類加載
      • 類的生命週期
      • 類加載器
  5. Java集合源碼
    • Vector
    • ArrayList
    • LinkedList
    • HashMap
    • Hashtable
    • HashSet
    • TreeMap
    • ConcurrentHashMap
  6. 數據庫
    • 三大範式
    • 索引
    • 引擎
    • 事務
    • 隔離
    • 數據庫性能優化
  7. 併發
    • 併發的優缺點
    • 線程
      • 創建線程
      • 線程狀態切換
      • 線程的基本操作
      • 守護線程
      • 什麼是線程安全
      • 公平鎖&非公平鎖
      • 悲觀鎖&樂觀鎖
      • 可重入鎖&不可重入鎖
      • 互斥鎖&共享鎖
      • 死鎖
        • 產生死鎖的四個必要條件
        • 預防和解除
        • 構建死鎖
        • 查看死鎖
    • 併發理論
      • JMM內存模型
      • 重排序
      • happens-before原則
    • 併發關鍵字
      • synchronized
      • volatile
      • final
      • 原子性、可見性、有序性
    • Lock體系
      • Lock與Synchronized比較
      • AQS
      • AQS源碼解析
      • ReentrantLock
      • ReentrantReadWriteLock
      • Condition機制
      • LockSupport
    • 併發容器
      • ConcurrentHashMap
      • CopyOnWriteArrayList
      • BlockingQueue
      • ConcurrentLinkedQueue
    • 線程池
      • ThreadPoolExecutor
      • ScheduledThreadPoolExecutor
    • 原子操作類
    • 併發工具
      • CountDownLatch
      • CyclicBarrier
      • Semaphore
      • Exchanger
    • 併發實戰:生產-消費者問題
      • wait/notifyAll實現
      • await/signalAll實現
      • BlockingQueue實現
  8. 設計模式
    • 23種常見的設計模式
    • JDK中的設計模式
    • Spring中的設計模式
    • MyBatis中的設計模式
  9. Spring
    • IOC
    • AOP
  10. 操作系統
    • 進程、線程、協程
    • Linux命令行
  11. 網絡
    • OSI七層模型
    • TCP/IP
    • HTTP/HTTP2.0/HTTPS
    • 長連接、短連接
    • 網絡模型
      • Epoll
      • Java NIO
    • Netty

我將我之前面試準備的面試題目記錄如下:

  1. 什麼是二叉樹
  2. B樹與B+樹
  3. TCP三次握手、四次揮手的過程
  4. 類加載器有哪些
  5. JVM垃圾回收算法
  6. 垃圾收集器
  7. HTTP請求和響應內容
  8. 線程創建方式
  9. HashMap和ConcurrentHashMap的實現原理
  10. TCP/IP協議簇有哪些常見協議
  11. Java線程池的核心屬性以及處理流程
  12. Java併發包原理
  13. 線程的生命週期
  14. JVM類加載機制
  15. JVM內存模型
  16. 數據庫有哪些索引,索引原理
  17. JVM內存溢出有哪些
  18. Java8有哪些新特性
  19. HTTP請求的GET和POST分別是什麼
  20. Session、Cookie、Token的區別
  21. HashMap工作原理及代碼實現,什麼時候用到紅黑樹
  22. ConcurrentHashMap工作原理及代碼實現,如何統計所有元素個數
  23. 線程和進有哪些程的概念
  24. 並行和併發的概念
  25. 進程間通信方式
  26. Semaphore原理
  27. Exchanger原理
  28. ThreadLocal原理,爲什麼會出現OOM,出現的深層次原因
  29. 線程池實現原理
  30. 線程池的幾種實現方式
  31. 如何保證線程安全
  32. 重入鎖的概念,重入鎖爲什麼可以防止死鎖
  33. 產生死鎖的四個條件
  34. Volatile實現原理
  35. synchronized實現原理
  36. synchronized與lock區別
  37. CAS無鎖的概念
  38. 樂觀鎖和悲觀鎖
  39. 什麼是ABA問題
  40. 偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念
  41. JVM OOM和SOE的示例及原因,如何排查與解決
  42. 如何判斷對象是否可以回收
  43. 類加載器、雙親委派模型、類的生命週期、類如何加載到JVM中
  44. JVM內存模型
  45. 常見設計模式
  46. 設計模式六大原則
  47. 紅黑樹
  48. 一致性Hash原理,Hash環問題
  49. BIO、NIO、AIO的概念
  50. 長連接與短連接
  51. HTTP/HTTP2.0/HTTPS的區別
  52. 從瀏覽器地址欄輸入URL到頁面加載之間發生了什麼
  53. DDL/DML/DCL分別指什麼
  54. 數據庫事務的ACID
  55. 事務隔離級別
  56. InnoDB與MyISAM的區別
  57. 數據庫索引類別
  58. 什麼是自適應哈希
  59. 聚集索引與非聚集索引的區別
  60. 爲什麼使用B+樹作爲MySQL的索引
  61. Servlet生命週期
  62. Spring Bean生命週期
  63. Spring IOC如何實現
  64. Spring AOP如何實現
  65. Spring事務
  66. Spring MVC
  67. Tomcat基礎架構
  68. Hash衝突解決辦法
  69. ArrayList和LinkedList的默認空間是多少
  70. Object的Hashcode
  71. Collections與Arrays的sort方法默認的排序方法是啥
  72. 淺拷貝與深拷貝
  73. Java反射的作用與實現原理
  74. Java中的回調機制
  75. synchronized與ReentrantLock哪個是公平鎖
  76. CAS機制會出現什麼問題
  77. 一個線程調用start兩次會出現什麼情況
  78. Minor GC與Full GC分別在什麼時候發生
  79. 垃圾收集器各自的特點
  80. Java在什麼時候會出現內存泄露
  81. 自己寫的類被什麼類加載器加載,什麼時候加載
  82. 軟引用和弱引用
  83. 數據庫四大範式
  84. 數據庫死鎖如何解決
  85. MySQL如何實現併發
  86. 內存的頁面置換算法
  87. 進程調度算法
  88. TCP爲什麼可靠
  89. List與Set的區別
  90. List與Map的區別
  91. ArrayList與LinkedList的區別
  92. ArrayList與Vector的區別
  93. HashMap與Hashtable的區別
  94. HashMap與HashSet的區別
  95. 多線程情況下HashMap爲什麼會出現死循環問題
  96. 線程的狀態是如何轉移的
  97. AQS同步隊列
  98. 常見原子操作類有哪些
  99. 樂觀鎖的業務場景及實現方式
  100. 什麼是動態代理
  101. 最大堆與最小堆
  102. 單例模式的實現方法,Spring中單例的實現原理
  103. TCP與UDP的區別
  104. 使用線程池的好處
  105. Object類有哪些方法
  106. 數據庫簡歷索引的優缺點
  107. HashMap如何擴容
  108. 大量數據去重問題
  109. 寫SQL

參考資源

後記

  • 上述提到的知識點沒有做詳細展開,一是時間有限,二是網上很容易搜到,很多人都比我解釋的好,面試題目的答案也是一樣。
  • 這篇文章是我寫給學弟學妹的畢業手冊中的求職部分,完整的內容在我的github項目
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章