天天看點

程式員你可别寫代碼了!

程式員你可别寫代碼了!

來源:www.cnblogs.com/xrq730/p/5260294.html

前言

我本身是做Java開發的,是以有一部分内容也是專門面向咱們Java程式員的。

1

關于程式員的幾個階段

第一階段——3 年

三年——篩選程式員的第一個門檻。從校園到職場。參與團隊協作、使用項目管理工具、如何做代碼測試和線上運作等,積累一定的開發經驗,對代碼有了基礎的認識。

第二階段——5年

五年——程式員拉開差距的第二個門檻。有些人在三年裡,隻能是個Coder,年紀大的勢必被年輕人頂替;另外一些人,除了寫代碼,還熱衷研究各種技術、看好書、寫部落格、分享技術,五年後必然具備在技術上獨當一面的能力,逐漸走向系統分析師或架構師,成為項目組不可或缺的人物。

第三階段——10年

十年——轉行或繼續做程式員的節點。如果一開始就抱定不轉行的思路并且為之努力的話,這些人必然成長為一名對行業、對技術有着深入認識,能從零開始對一個産品進行分析的程式員,這樣的人在公司基本擔任的都是CTO、技術專家、首席架構師等最關鍵的職位。

這三個階段裡,你應當不斷思考三個問題:

  • 我到底适不适合當一名程式員?
  • 我到底應不應該一輩子以程式員為職業?
  • 我對程式設計到底持有的是一種什麼樣的态度,是夠用就好還是不斷研究?

最終,明确自己的職業規劃,對自己的規劃負責并為之努力。

2

項目經驗+基本技術+個人潛力

在你無法改變自己的工作年限、沒有服力強的項目經驗時,怎樣彌補劣勢,我總結了幾點:

  • 明确你的項目到底是做什麼的,有哪些功能。
  • 明确你的項目的整體架構,在面試的時候能夠清楚地畫給面試官看并且清楚地指出從哪裡調用到哪裡、使用什麼方式調用。
  • 明确你的子產品在整個項目中所處的位置及作用。
  • 明确你的子產品用到了哪些技術,最好再了解一下整個項目用到了哪些技術。

3

Java 程式員專業技能

掌握越多,薪水越高

1、基本文法:

包括static、final、transient 等關鍵字的作用,foreach 循環的原理等。如果我問你static關鍵字有哪些作用,你答出靜态塊,我會認為你不錯,答出靜态内部類我會認為你很好,答出靜态導包我會對你很滿意,看得出你非常熱衷研究技術。

越簡單的問題越能看出一個人的水準,别人對你技術的考量絕大多數都是以深度優先、廣度次之為标準的,切記。

2、集合:

包含 List、Map、Set,各種實作類的底層實作原理,實作類的優缺點。

集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實作原理。我分享3點 ConcurrentHashMap 的研究方向:

  • ConcurrentHashMap的鎖分段技術。
  • ConcurrentHashMap的讀是否要加鎖,為什麼。
  • ConcurrentHashMap的疊代器是強一緻性的疊代器還是弱一緻性的疊代器。

3、設計模式:

設計模式在工作中還是非常重要、非常有用的,23種設計模式中重點研究常用的十來種就可以了,在面試會中提問設計模式的主要有三個方向:

  • 你的項目中用到了哪些設計模式,如何使用。
  • 知道常用設計模式的優缺點。
  • 能畫出常用設計模式的UML圖。

4、多線程:

如果你是個3年經驗的程式員,就要了解 Thread 和 Runnable 的差別和聯系、多次 start 一個線程會怎麼樣、線程有哪些狀态。

常用的線程池有幾種?這幾種線程池之間有什麼差別和聯系?線程池的實作原理是怎麼樣的?有些面試官可能還會提供具體的場景,讓你回答這種場景該使用什麼樣的線程池比較合适。

5、JDK源碼:

要想拿高工資,JDK 源碼不可不讀。JDK 源碼就是實打實地看你平時是不是愛鑽研。總結一下比較重要的源碼:

  • List、Map、Set 實作類的源代碼。
  • ReentrantLock、AQS 的源代碼。
  • AtomicInteger的實作原理,主要能說清楚CAS機制并且AtomicInteger 是如何利用CAS機制實作的。
  • 線程池的實作原理。
  • Object類中的方法以及每個方法的作用。

6、架構:

架構如何使用,比如我想要在 Spring 初始化 bean 的時候做一些事情該怎麼做、想要在 bean 銷毀的時候做一些事情該怎麼做、MyBatis 中$和#的差別等。有的面試官也會深入問一些架構的實作原理。

7、Web方面:

Java主要面向 Web 端,是以 Web 的一些問題也是必問的。web.xml 裡面的内容是重點,Filter、Servlet、Listener,不說對它們的實作原理一清二楚,至少能對它們的使用知根知底。

最後,建議學習、研究一下SOA 和 RPC,面向服務體系,大型分布式架構必備,救命良方、包治百病、屢試不爽。

4

易學難精的Java

1、易學的原因:

(1)很多教育訓練公司包括大四的學生找工作都會學習Java,絕大多數是因為易學。Java從C/C++發展而來,它消除了C/C++中最複雜的文法、平台的差異性、不需要使用者手動釋放記憶體空間、避免了Java程式員和本地語言的互動,讓程式員隻需要專注于文法層面和應用層面。

(2)Java作為一門面向對象的語言,在企業級開發中展現出了它無與倫比的特性,整個開發流程比較固定化、子產品化,需求分析起來也相對容易。

2、難精的原因:

在應用運作過程中遇到了文法層面和應用層面之外的錯誤,應當如何處理?比如線上環境出現記憶體溢出怎麼辦?GC時間過長怎麼辦?IO長時間沒反應怎麼辦?方法抛出莫名其妙的異常怎麼辦?

解決這些問題都需要大量的實踐、對 Java 底層實作細節的研究,也是最考驗 Java 程式員的部分,一些人根本無法深入研究。除非你水準特别高,否則五年工作經驗以下的Java程式員在履歷上寫”精通Java”絕對是一件非常愚蠢的事情。

5

結語

隻有弱者才會說“程式員30歲之後就要轉行”這種話,隻有弱者才會聽“程式員可别再寫代碼了!”這種話。

常說IT界會寫 if...else...的人多,寫架構、搞架構的精英少,怕是和程式員進取心不強有莫大關系,若是人人都在入行時抱着“我30歲之後就不寫代碼”的心态,又有誰願意專注的去提升自己的技能呢?

說了這麼多,我認為,作為一名程式員,隻要你足夠優秀,30歲甚至35歲之後在IT圈依然有屬于自己的天地,并且這片天地隻會越來越廣闊。

越努力、越幸運,如果你不是官二代、富二代、紅二代,那麼請記住:持續學習才是改變你命運的唯一捷徑。