成為java高階程式設計師需要掌握哪些

神棍先生發表於2017-11-03

section 1

1.Core Java,就是Java基礎、JDK的類庫,很多童鞋都會說,JDK我懂,但是懂還不足夠,知其然還要知其所以然,JDK的原始碼寫的非常好,要經常檢視,對使用頻繁的類,比如String,集合類(List,Map,Set)等資料結構要知道它們的實現,不同的集合類有什麼區別,然後才能知道在一個具體的場合下使用哪個集合類更適合、更高效,這些內容直接看原始碼就OK了


2.多執行緒併發程式設計,現在併發幾乎是寫服務端程式必須的技術,那對Java中的多執行緒就要有足夠的熟悉,包括物件鎖機制、synchronized關鍵字,concurrent包都要非常熟悉,這部分推薦你看看《Java併發程式設計實踐》這本書,講解的很詳細

3.I/O,Socket程式設計,首先要熟悉Java中Socket程式設計,以及I/O包,再深入下去就是Java NIO,再深入下去是作業系統底層的Socket實現,瞭解Windows和Linux中是怎麼實現socket的

4.JVM的一些知識,不需要熟悉,但是需要了解,這是Java的本質,可以說是Java的母體, 瞭解之後眼界會更寬闊,比如Java記憶體模型(會對理解Java鎖、多執行緒有幫助)、位元組碼、JVM的模型、各種垃圾收集器以及選擇、JVM的執行引數(優化JVM)等等,這些知識在《深入Java虛擬機器》這本書中都有詳盡的解釋,或者去oracle網站上檢視具體版本的JVM規範.

5.一些常用的設計模式,比如單例、模板方法、代理、介面卡等等,以及在Core Java和一些Java框架裡的具體場景的實現,這個可能需要慢慢積累,先了解有哪些使用場景,見得多了,自己就自然而然會去用。

6.常用資料庫(Oracle、MySQL等)、SQL語句以及一般的優化

7.JavaWeb開發的框架,比如Spring、iBatis等框架,同樣他們的原理才是最重要的,至少要知道他們的大致原理。

8.其他一些有名的用的比較多的開源框架和包,Netty網路框架,Apache common的N多包,Google的Guava等等,也可以經常去Github上找一些程式碼看看。

section 2

每逢長假都會有很多程式設計師跳槽,十一、過年是跳槽黃金時刻,尤其是過年。過年的時候年終獎到手,沒有了多少牽掛,年終同學同事聚會比較多,溝通的就多,各種工作機會的訊息也相應會多,所以跳槽的機會也就會多。跳槽就必不可少的要經過面試,那麼作為一個Java程式設計師需要準備哪些面試知識呢?下面就給大家說說。

1、集合框架:

成為Java高階工程師需要掌握哪些核心點?

從上圖可以看到主要是Collection和Map的繼承類和Iterator的實現類,重點掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特點和實現原理,還有多執行緒使用場景和插入多還是刪除多的時候使用什麼樣的集合類效率會更高。

2、IO框架:

成為Java高階工程師需要掌握哪些核心點?主要掌握Reader、Writer、InputStream、OutputStream的繼承類,重點掌握位元組流(FileInputStream、FileOutputSteam、BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream)和字元流(FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter),並熟練運用。還有就是NIO的工作原理要知道。

3、String先關:

主要考察對String的處理,順帶考察多執行緒和演算法,大公司就是喜歡考察字串的演算法,主要是字串查詢或者剔除,多執行緒列印字串,超大字串處理。

4、異常處理:

成為Java高階工程師需要掌握哪些核心點?掌握Throwable繼承類,理解Error和Exception的區別,理解執行時異常和編譯異常的區別,掌握異常的處理方法,掌握try、catch、finally、throw、throws關鍵字的意義,掌握try-catch-finally語句的執行順序,掌握異常的工作原理,知道常見的異常有哪些。

5、多執行緒:

如何建立和啟動一個執行緒,有哪些方法?多執行緒如何互動,執行緒之間的排程、讓步、合併,如何同步?生產和消費者模型。還有就是掌握執行緒安全、執行緒池,死鎖。

6、JVM知識:

掌握常見的垃圾回收機制,掌握程式計數器、堆、棧、方法區的作用,掌握類的載入機制。掌握記憶體分代模型和工作原理。掌握JVM啟動引數常見配置,瞭解JVM調優。

7、資料結構與演算法:

掌握常見查詢和排序演算法實現及其時間、空間複雜度。掌握常見資料結構如連結串列、佇列、棧的基本原理和實現。

section 3

經常主持對高階工程師和中基層Tech Leader的面試,一年下來總有百八十場,我給大家分享一下我對於高階工程師的定位吧,雖然我主要負責.Net團隊,但是對於其他語言應該也是適用的。

一 理論基礎:高階工程師必須有較好的理論基礎,既包含一些基礎的學科知識,也要包含個人專攻方向的前沿理論。我遇到過形形色色的求職者,有人自稱精通領域模式,卻不明白什麼是聚合根(領域根)。甚至有人無法列舉常用的非線性結構,更別提偽碼實現和應用場景分析了。這些人普遍振振有詞地說, 我有豐富的開發經驗,專案需要實現的功能我都能做出來,我只是沒有去記那些術語名詞。抱歉,你不是沒有記術語名詞,你是根本沒有潛心看技術文章的心態,你所謂的學習就是看一些諸如《21天精通Java》,《7天,從菜鳥到專家》之類的垃圾書,或者看點視訊。那麼你這個高工,比別人高在哪裡呢?當單位需要你代表團隊和合作機構溝通,甚至發表專欄的時候,你是不是也準備跟大家講”這個東西我不知道該怎麼講,大家可以看一下我的程式碼“。只有程式碼可秀的人是碼農,不是高工,所以我給這類求職者的綜評是中+封頂。

二 工作經驗:高階工程師必須有過在專案中擔心核心模組開發或者整體架構設計的經驗,並且專案越高大上越好,比如你在網際網路企業搞過讀寫分離的實現,你在電商搞過秒殺演算法,你在電信行業做過網路層,我必定會高看一眼。如果你就僅僅只是一個人全棧搞過幾個小網站,啪啪啪一大堆成熟框架用得倍溜,那麼你只是一個裝配工。我給這類求職者的綜評是中+封頂。

三 培養潛力:高階工程師必須有全域性思維,如果在你過往的工作歷程中,你對你兄弟團隊或者部門的工作情形一問三不知,甚至於一個專案中,你只懂自己的模組,其他同事負責的模組你就只會call個API,那麼你就是一個很難再進一步的人。對於企業來說,有你不多,無你不少,所以我給這類求職者的綜評是中+封頂。

四 溝通能力:高階工程師在技術團隊中是絕對的核心人中,小專案中你就是負責人,大專案中你也要負責帶新人,那麼良好的溝通能力必不可少,如果你僅僅是自己一個人心裡亮堂,你對企業的價值就要大打折扣。這類求職者,我也有錄用過不少,因為程式設計師木訥可以說是一種共性,在這方面沒法太挑剔,但是我給他們的綜評是高-封頂。

section 4

如果要應聘高階開發工程師職務,僅僅懂得Java的基礎知識是遠遠不夠的,還必須懂得常用資料結構、演算法、網 絡、作業系統等知識。因此本文不會講解具體的技術,筆者綜合自己應聘各大公司的經歷,整理了一份大公司對Java高階開發工程師職位的考核綱要,希望可以幫助到需要的人。

1 Java基礎

1.1 Collection和Map

(1)掌握Collection和Map的繼承體系。

(2)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、 LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、 TreeMap、HashTable的特點和實現原理。

(3)掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的實現原理和適用場景。

1.2 IO

(1)掌握InputStream、OutputStream、Reader、Writer的繼承體系。

(2)掌握位元組流(FileInputStream、DataInputStream、BufferedInputStream、 FileOutputSteam、DataOutputStream、BufferedOutputStream)和字元流 (BufferedReader、InputStreamReader、FileReader、BufferedWriter、 OutputStreamWriter、PrintWriter、FileWriter),並熟練運用。

(3)掌握NIO實現原理及使用方法。

1.3 異常

(1)掌握Throwable繼承體系。

(2)掌握異常工作原理。

(3)瞭解常見受檢異常(比如FileNotFoundException)、非受檢異常(比如NullPointerException)和錯誤(比如IOError)。

1.4 多執行緒

(1)掌握Executors可以建立的三種(JAVA8增加了一種,共四種)執行緒池的特點及適用範圍。

(2)掌握多執行緒同步機制,並熟練運用。

1.5 Socket

(1)掌握Socket通訊原理。

(2)熟練使用多執行緒結合Socket進行程式設計。

2 Java虛擬機器

2.1 JVM記憶體區域劃分

(1)掌握程式計數器、堆、虛擬機器棧、本地方法棧、方法區(JAVA8已移除)、元空間(JAVA8新增)的作用及基本原理。

(2)掌握堆的劃分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。

(3)掌握JVM記憶體引數設定及調優。

2.2 類載入

(1)掌握類的載入階段:載入、連結(驗證、準備、解析)、初始化、使用、解除安裝。

(2)掌握類載入器分類及其應用:啟動類載入器、擴充套件類載入器、應用程式類載入器、自定義載入器。

3 J2EE

(1) 掌握JSP內建物件、動作及相關特點和工作原理。

(2) 掌握Servlet的特點和工作原理。

(3) 掌握Spring框架的IOC和AOP實現原理(反射和動態代理)。

(4) 至少掌握一個MVC框架(Spring MVC,Struts等)的工作原理,並熟練運用。

(5) 至少掌握一個ORM框架(Hibernate,MyBatis等)的工作原理,並熟練運用。

4 資料結構與演算法

(1)掌握線性表和樹的特點並熟練運用。

(2)掌握常用排序和查詢演算法:插入排序(直接插入排序、希爾排序)、選擇排序(直接選擇排序、堆排序)、交換排序(氣泡排序、快速排序)、歸併排序,順序查詢、二分查詢、雜湊查詢。

(3) 熟練運用常見排序和查詢演算法思想解決程式設計問題。

(4)瞭解幾大基本演算法:貪心演算法、分治策略、動態規劃。

5 計算機網路

(1)掌握網路的分層結構,及每層的功能特點。

(2)掌握TCP/IP的通訊原理(三次握手、四次揮手)

6 資料庫

(1)掌握複雜的SQL語句編寫。

(2)掌握資料庫的優化(SQL層面和表設計層面)。

(3)至少掌握一款資料庫產品。

(4)熟悉高併發、大資料情況下的資料庫開發。

7 Web技術

(1)掌握AJAX的工作原理。

(2)至少熟悉一款JS框架(比如JQuery)。

8 設計模式

(1)熟悉常見的設計模式。

(2)會將設計模式理論應用到實際開發中。

9 Linux

(1)熟練運用Linux常見命令。

(2)熟悉Linux作業系統基本概念及特點。

(3)熟悉Shell指令碼。

10 作業系統

(1)掌握作業系統的程式管理。

(2)瞭解作業系統的I/O。

11 正規表示式

(1)掌握常見正規表示式符號。

(2)熟練運用正規表示式解決實際問題(比如匹配電話號碼、郵箱、域名等)。


Section  5

h5edu 的原始碼
pure–響應式css框架
Hadoop大資料
ERP系統開發
linux
freemarker 
weblogic/jobss
webwhpere
webservice http://www.iteye.com/topic/1135747
bootstrap
HTML5
android
css/jslever
spring aop ssh ssm 徒手搭建
jquery原始碼分析融匯
快取 echacge
併發
頁面靜態化
UML
shell
pathy
github
網路程式設計
ExtJS
網路爬蟲
設計模式
多執行緒與併發
第三方支付/登入http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B

============================================高階工程====================================
找一些高階題目去做
借鑑理解原始碼http://www.java1234.com/a/kaiyuan/javaWeb/
========================================================================================
1.Core Java部分
這是最基礎的,對於一個java高階開發/設計人員,你需要對這一部分達到精通的水平,重點內容如下:
a.物件導向程式設計思想(封裝繼承多型介面)
b.字串處理
c.java.lang包,java.util包等常用包
4.java異常處理
2.Java高階部分

a.Java I/O流
b.Java多執行緒技術
c.Java網路程式設計
d.Java Swing
後兩項可以瞭解即可,如果專案需要可以深入研究

3.前端基本技能
* HTML + CSS網頁開發
* JavaScript
* Jquery
* 瀏覽器相容性 CSS hack(瞭解)
4.熟練使用JSP + Servlet進行開發

5.MVC設計模式,原理,以及相關框架,如Struts

6.SSH框架

7.快取技術 session & cookie

8.熟練使用一種以上Java開發工具
Eclipse/MyEclipse/Jbuilder/Jcreator

9.熟練使用XML
JDOM w3c.dom SAX

10.Java設計模式
工廠模式,單例模式 ==

11.Java反射機制
反射的各種用法

12.瞭解或熟悉 C, C++, .NET

13.熟悉JDK的配置,環境變數

14.資料庫oracle必學,其他最好了解一種以上(mysql,sql server,access==)
oracle:檢視,索引,儲存過程,觸發器,遊標,包,常用函式 ==

15.資料庫原理
事務的原理,鎖機制,表連線,複雜查詢語句(工作經驗),效能調優,鎖表以及解決方案==

16.JDBC,連線池

17.Ajax,反向Ajax

18.HTTP協議,request 和 response的原理,HTTP status(瞭解常用的),Https原理

19.熟悉Linux基本命令,使用過Linux/Unix系統,可以編寫shell指令碼,可以在Linux上部署專案

20.瞭解windows系統批處理指令碼bat

21.瞭解HTML5,最好學習過

22.熟悉一種JS框架,如Prototype

23.J2EE原理 熟悉一種以上web容器如Tomcat,JBoss,websphere,weblogic==

24.熟悉ant或maven

25.熟悉一門指令碼語言,如python ,ruby

26.瞭解php/ asp

27.瞭解ftp協議及原理

28.熟練使用Junit測試,熟悉Mockito等測試工具

29,熟悉javac,javadoc,native,native2ascii等常用命令

30.熟悉常用的排序演算法,如氣泡排序,快速排序等,最好自己研究過一些的演算法,下面的這個就是我曾經研究過的一個:
http wenku baidu com /view/391db3f0941ea76e58fa04e9點html
http://wenku.baidu.com/view.391db3f0941ea76e58fa04e9.html

31.瞭解Flex(不學也沒關係)

32.瞭解敏捷開發模式

33.工作流workflow至少用過一種,如OSworkflow,瞭解原理

34.使用過VPN瞭解其原理

35.熟悉jstl表示式和el表示式

36.熟悉webservice,WSDL,SOAP

37.圖片處理,如圖片上傳,預覽,限制大小等,下面共享一(垃圾勿噴):
http wenku baidu com/view/05337bfc770bf78a6529541b點html

38.版本控制工具,CVS VSS SVN

39,JSON技術,JSON+AJAX

40.分頁技術,最好自己實現過不僅僅是用過要知道原理

41.Java Mail

42.Java讀寫txt,excel
JXL技術

43.JVM原理,JVM記憶體管理,GC,Java堆疊池

44.熟練使用下面的工具:
office辦公軟體,word,excel,ppt等
plsql,sqldevelop 資料庫開發工具
outlook大公司都用
ue編輯器
瀏覽器控制檯,除錯
SHH/PUTTY 遠端
45.UML建模工具 Rational Rose等

46.使用log4j

47.使用過開放API如百度地圖,騰訊街景,新浪微博等

48.頁面靜態化技術(偽靜態頁面)UrlRwriter

49.報表技術,使用過報表製作工具,如水晶易表

50.定時任務,如Spring batch,學會自定義batch任務(不適用第三方工具)

51.瞭解uuid

52.B/s 和 C/s架構

53.正規表示式

54.瞭解JNDI JMS

55. ERP

56.unicode編碼,亂碼的解決

57.開源網路編輯器,如ckEditor

58.二進位制原理

59,使用過,瞭解開源論壇框架,如discuzz

60, GWT ,Closure框架

61.瞭解 大資料,雲端計算

62.搜尋引擎搜尋技術

63.軟體工程,專案管理

1.你需要精通物件導向分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該十分了解UML,尤其是class,object,interaction以及statediagrams。
2.你需要學習JAVA語言的基礎知識以及它的核心類庫(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。
3.你應該瞭解JVM,classloaders,classreflect,以及垃圾回收的基本工作機制等。你應該有能力反編譯一個類檔案並且明白一些基本的彙編指令。
4.如果你將要寫客戶端程式,你需要學習WEB的小應用程式(applet),必需掌握GUI設計的思想和方法,以及桌面程式的SWING,AWT, SWT。你還應該對UI部件的JAVABEAN元件模式有所瞭解。
JAVABEANS也被應用在JSP中以把業務邏輯從表現層中分離出來。
5.你需要學習java資料庫技術,如JDBCAPI並且會使用至少一種persistence/ORM構架,例如Hibernate,JDO, CocoBase,TopLink,InsideLiberator(國產JDO紅工廠軟體)或者iBatis。
6.你還應該瞭解物件關係的阻抗失配的含義,以及它是如何影響業務物件的與關係型資料庫的互動,和它的執行結果,還需要掌握不同的資料庫產品運用,比如:oracle,mysql,mssqlserver。
7.你需要學習JAVA的沙盒安全模式(classloaders,bytecodeverification,managers,policyandpermissions,
codesigning, digitalsignatures,cryptography,certification,Kerberos,以及其他)還有不同的安全/認證 API,例如JAAS(JavaAuthenticationandAuthorizationService),
JCE (JavaCryptographyExtension),JSSE(JavaSecureSocketExtension),以及JGSS (JavaGeneralSecurityService)。
8.你需要學習Servlets,JSP,以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries。
9.你需要熟悉主流的網頁框架,例如JSF,Struts,Tapestry,Cocoon,WebWork,以及他們下面的涉及模式,如MVC/MODEL2。
10.你需要學習如何使用及管理WEB伺服器,例如tomcat,resin,Jrun,並且知道如何在其基礎上擴充套件和維護WEB程式。
11.你需要學習分散式物件以及遠端API,例如RMI和RMI/IIOP。 
12.你需要掌握各種流行中介軟體技術標準和與java結合實現,比如Tuxedo、CROBA,當然也包括javaEE本身。
13.你需要學習最少一種的XMLAPI,例如JAXP(JavaAPIforXMLProcessing),JDOM(JavaforXMLDocumentObjectModel),DOM4J,或JAXR(JavaAPIforXMLRegistries)。
14.你應該學習如何利用JAVAAPI和工具來構建WebService。例如JAX-RPC(JavaAPIforXML/RPC),SAAJ (SOAPwithAttachmentsAPIforJava),JAXB(JavaArchitectureforXMLBinding),
JAXM(JavaAPIforXMLMessaging), JAXR(JavaAPIforXMLRegistries),或者JWSDP(JavaWebServicesDeveloperPack)。
15.你需要學習一門輕量級應用程式框架,例如Spring,PicoContainer,Avalon,以及它們的IoC/DI風格(setter,constructor,interfaceinjection)。
16.你需要熟悉不同的J2EE技術,例如JNDI(JavaNamingandDirectoryInterface),JMS (JavaMessageService),JTA/JTS(JavaTransactionAPI/JavaTransactionService),JMX (J


相關文章