阿里5年Java程序員分享從業心得總結,寫給還在迷茫的朋友

 

貌似這一點適應的行業最廣,可是我能夠很確定的說:當你從事Java一年後,從新找工做時,纔會真實的感覺到這句話。mysql

工做第一年,每每是什麼都充滿新鮮感,什麼都學習,衝勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另外一個新框架,有時每每根據項目的須要來不斷學習新東西;全部,不少時候感受,本身用過的東西真多呀!可是真正深刻研究的東西卻很少。面試,是跳槽後第一個須要面對的問題;並且不一樣公司面試的着重點不一樣;可是卻有一個共同點:Java基礎是必考的。linux

  • 工做第一年,可能問你String對象建立的理解,經常使用的框架是什麼等等;
  • 工做第三年,就問你Java內存分配機制是什麼,類是如何加載的等等;
  • 工做第五年,就問你經常使用的設計模式是什麼,你在工做中充當什麼角色,怎麼獨立完成一個模塊等等;

能夠看出——這是一個典型的程序員的成長過程:程序員

使用Java—->深刻理解Java積累經驗——>獨立設計分析能力——>獨當一面的多面手!面試

所以,必須學習:redis

數據庫算法

最經常使用的是Oracle了(固然銀行項目等須要DB2等),熟練掌握使用存儲過程,觸發器等;spring

UMLsql

項目中常常要寫文檔,項目經理的基本功,程序員走向設計的基本功;數據庫

linux系統windows

須要掌握經常使用的linux命令——部署在windows操做系統上的項目不多吧。

其餘就很少說了,你們能夠補充。

學習上,興趣是最大的老師;項目驅動也是不錯的選擇,總之,不學習不行。

第一. 積累行業背景;

行業背景很是重要;工做3年後必須肯定本身的行業背景,好比一直從事電信行業,一直從事銀行項目,一直從事ERP行業等等。

一個程序員不多是一直寫代碼的,就是寫代碼也要知道業務邏輯,知足什麼需求;俗話說隔行如隔山,每一個行業的業務都不同,甚至差異很大,好比你一直從事流媒體的研究,讓你跳槽到一家銀行項目,完了,一切從頭學吧,之前的行業經驗都用不上了;並且,一個公司公司招人,就是但願找到那些很容易上手,不須要培訓業務好久的程序員;頻繁跳槽的朋友,必定要注意這點;

一直在一個行業呆久了,就能夠成爲這個行業的專家;咱們能夠常常看到,一個項目組的某個leader,代碼寫的通常,可是卻能夠跟客戶流暢的溝通,控制着新需求的提出,bug的修正等等;而客戶也很願意跟他打交道,由於那些老的項目只有他能維護,他甚至熟悉系統的每一張表結構——-可想在這個行業呆的時間有多久啦。

第二. 合理的職業規劃

什麼是職業規劃—-就是你短時間或者長期的一個職業計劃!大道理不講,咱簡單點。先問你幾個問題:

  • a.你工做幾年了,你願意一直和新入行的新手同樣就是個簡單的程序員嗎?
  • b. 你願意一直寫代碼,而不關心其餘嗎?
  • c. 一個項目的前期需求,設計,後期部署維護,領導找到你,你說咱搞不定,行嗎?

程序員不是敲代碼的機器。第一年太多東西不懂,你能夠一切遵從老大的安排,敲敲代碼,看看數據庫,測試本身和別人的代碼;可是第二年,你仍是這樣嗎?不可能的,一年的經驗你徹底能夠入行了,是時候該學習怎麼進行需求分析,怎麼設計數據庫,怎麼寫各種文檔,怎麼寫更好的代碼?這是高級程序員的要求!

什麼是高級程序員?

具備分析設計能力,能進行技術攻關,並且具備某行業深厚背景的程序員!

全部,一個項目立項後,你要積極的參與到前期設計中,跟老同志們一道思考分析問題,學習經驗!OK,你這就成長啦!

千萬不要認爲程序員就是寫代碼的哦!!!

並且,經過一個項目的開發,你要能粗略的統計出一個功能的開發時間;好比一個模塊有20個小功能點,你開發了80個小時,每一個小功能點平均2小時——這時在前期就能評估工做量啦。固然每一個人的效率和工做質量是不一樣的,因人而異,可是大概的工做量應該是能夠統計出來的,用於統計一個項目的工做週期;

具有上面的能力,你起碼已是一個項目組的骨幹啦!此時,就能夠帶領小弟作開發而不是平凡的一個被帶領者啦。

不少公司的項目骨幹和項目經理都不是經過招聘的來的,都是培養出來的——-工做2年,思考能力不錯,善於動手,很上道!OK,此時項目經理和公司中層可能就注意到你了,就會給你多分配任務慢慢的鍛鍊你,這時候千萬不要鬧彆扭哦(曾趕上這樣一個同事,技術很好,人也不錯,領導忽然給他分配不少任務,他開始是默默承受,後來鬧意見啦!領導找他談話後,他算明白啦!頂過一段時間就基本適應,能夠快速的作完;後來他成了咱們那批人中新的項目leader啦),跟帶你的人好好學習,多勞動,很快就出頭啦!

若是你工做了多年,屬於老鳥了,也要善於帶人,能提攜小弟!由於只有小弟成長了,你身上的擔子纔會輕,項目纔會順暢的進行!

並且高級程序員(本科爲例)工做四年左右工資就達到一個瓶頸了(一線城市是9K—1.2W),這時候必須「轉型」—–高級程序員只是你能力的一部分,系統分析師,架構師,技術主管纔是你應該告訴別人的職務,薪資才能再次提高。

第三. 關於跳槽

跳槽要學習的技術就多了

跳槽時時刻刻都在發生,可是我建議你們跳槽以前,先想清楚爲何要跳槽。切不可跟風,看到同事一個個都走了,本身也盲目的開始面試起來(期間也沒有準備充分),究竟是由於技術緣由(影響本身的發展,偏移本身規劃的軌跡),仍是錢給少了,不受重視。

準備不充分的面試,徹底是浪費時間,更是對本身的不負責(若是title很高,當我沒說)。

今天給你們分享下chenssy在此次跳槽中整理的Java面試大綱,其中大部分都是面試過程當中的面試題,能夠對照這查漏補缺,固然了,這裏所列的確定不可能覆蓋所有方式。

項目介紹

大部分狀況,這是一場面試的開門題,面試官問這個問題,主要是考察你的概述能力和全局視野。有的人常常抱怨本身天天在堆業務,但沒有成長。事實上,不少狀況下確實在堆業務,但並非沒有成長的。並不是作中間件或者技術架構纔是成長,例如咱們的需求分析能力,溝通協做能力,產品思惟能力,抽象建模能力等都是一個很是重要的硬實力。

好的,如今進入正文。

  • 一、明確項目是作什麼的
  • 二、明確項目的價值。(爲何作這個項目,它解決了用戶什麼痛點,它帶來什麼價值?)
  • 三、明確項目的功能。(這個項目涉及哪些功能?)
  • 四、明確項目的技術。(這個項目用到哪些技術?)
  • 五、明確我的在項目中的位置和做用。(你在這個項目的承擔角色?)
  • 六、明確項目的總體架構。
  • 七、明確項目的優缺點,若是從新設計你會如何設計。
  • 八、明確項目的亮點。(這個項目有什麼亮點?)
  • 九、明確技術成長。(你經過這個項目有哪些技術成長?)

Java基礎

  • 一、List 和 Set 的區別
  • 二、HashSet 是如何保證不重複的
  • 三、HashMap 是線程安全的嗎,爲何不是線程安全的(最好畫圖說明多線程環境下不安全)?
  • 四、HashMap 的擴容過程
  • 五、HashMap 1.7 與 1.8 的 區別,說明 1.8 作了哪些優化,如何優化的?
  • 六、final finally finalize
  • 七、強引用 、軟引用、 弱引用、虛引用
  • 八、Java反射
  • 九、Arrays.sort 實現原理和 Collection 實現原理
  • 十、LinkedHashMap的應用
  • 十一、cloneable接口實現原理
  • 十二、異常分類以及處理機制
  • 1三、wait和sleep的區別
  • 1四、數組在內存中如何分配

Java 併發

  • 一、synchronized 的實現原理以及鎖優化?
  • 二、volatile 的實現原理?
  • 三、Java 的信號燈?
  • 四、synchronized 在靜態方法和普通方法的區別?
  • 五、怎麼實現全部線程在等待某個事件的發生纔會去執行?
  • 六、CAS?CAS 有什麼缺陷,如何解決?
  • 七、synchronized 和 lock 有什麼區別?
  • 八、Hashtable 是怎麼加鎖的 ?
  • 九、HashMap 的併發問題?
  • 十、ConcurrenHashMap 介紹?1.8 中爲何要用紅黑樹?
  • 十一、AQS
  • 十二、如何檢測死鎖?怎麼預防死鎖?
  • 1三、Java 內存模型?
  • 1四、如何保證多線程下 i++ 結果正確?
  • 1五、線程池的種類,區別和使用場景?
  • 1六、分析線程池的實現原理和線程的調度過程?
  • 1七、線程池如何調優,最大數目如何確認?
  • 1八、ThreadLocal原理,用的時候須要注意什麼?
  • 1九、CountDownLatch 和 CyclicBarrier 的用法,以及相互之間的差異?
  • 20、LockSupport工具
  • 2一、Condition接口及其實現原理
  • 2二、Fork/Join框架的理解
  • 2三、分段鎖的原理,鎖力度減少的思考
  • 2四、八種阻塞隊列以及各個阻塞隊列的特性

Spring

  • 一、BeanFactory 和 FactoryBean?
  • 二、Spring IOC 的理解,其初始化過程?
  • 三、BeanFactory 和 ApplicationContext?
  • 四、Spring Bean 的生命週期,如何被管理的?
  • 五、Spring Bean 的加載過程是怎樣的?
  • 六、若是要你實現Spring AOP,請問怎麼實現?
  • 七、若是要你實現Spring IOC,你會注意哪些問題?
  • 八、Spring 是如何管理事務的,事務管理機制?
  • 九、Spring 的不一樣事務傳播行爲有哪些,幹什麼用的?
  • 十、Spring 中用到了那些設計模式?
  • 十一、Spring MVC 的工做原理?
  • 十二、Spring 循環注入的原理?
  • 1三、Spring AOP的理解,各個術語,他們是怎麼相互工做的?
  • 1四、Spring 如何保證 Controller 併發的安全?

Netty

  • 一、BIO、NIO和AIO
  • 二、Netty 的各大組件
  • 三、Netty的線程模型
  • 四、TCP 粘包/拆包的緣由及解決方法
  • 五、瞭解哪幾種序列化協議?包括使用場景和如何去選擇
  • 六、Netty的零拷貝實現
  • 七、Netty的高性能表如今哪些方面

分佈式相關

  • 一、Dubbo的底層實現原理和機制
  • 二、描述一個服務從發佈到被消費的詳細過程
  • 三、分佈式系統怎麼作服務治理
  • 四、接口的冪等性的概念
  • 五、消息中間件如何解決消息丟失問題
  • 六、Dubbo的服務請求失敗怎麼處理
  • 七、重連機制會不會形成錯誤
  • 八、對分佈式事務的理解
  • 九、如何實現負載均衡,有哪些算法能夠實現?
  • 十、Zookeeper的用途,選舉的原理是什麼?
  • 十一、數據的垂直拆分水平拆分。
  • 十二、zookeeper原理和適用場景
  • 1三、zookeeper watch機制
  • 1四、redis/zk節點宕機如何處理
  • 1五、分佈式集羣下如何作到惟一序列號
  • 1六、如何作一個分佈式鎖
  • 1七、用過哪些MQ,怎麼用的,和其餘mq比較有什麼優缺點,MQ的鏈接是線程安全的嗎
  • 1八、MQ系統的數據如何保證不丟失
  • 1九、列舉出你能想到的數據庫分庫分表策略;分庫分表後,如何解決全表查詢的問題
  • 20、zookeeper的選舉策略
  • 2一、全局ID

數據庫

  • 一、mysql分頁有什麼優化
  • 二、悲觀鎖、樂觀鎖
  • 三、組合索引,最左原則
  • 四、mysql 的表鎖、行鎖
  • 五、mysql 性能優化
  • 六、mysql的索引分類:B+,hash;什麼狀況用什麼索引
  • 七、事務的特性和隔離級別

緩存

  • 一、Redis用過哪些數據數據,以及Redis底層怎麼實現
  • 二、Redis緩存穿透,緩存雪崩
  • 三、如何使用Redis來實現分佈式鎖
  • 四、Redis的併發競爭問題如何解決
  • 五、Redis持久化的幾種方式,優缺點是什麼,怎麼實現的
  • 六、Redis的緩存失效策略
  • 七、Redis集羣,高可用,原理
  • 八、Redis緩存分片
  • 九、Redis的數據淘汰策略

JVM

  • 一、詳細jvm內存模型
  • 二、講講什麼狀況下回出現內存溢出,內存泄漏?
  • 三、說說Java線程棧
  • 四、JVM 年輕代到年老代的晉升過程的判斷條件是什麼呢?
  • 五、JVM 出現 fullGC 很頻繁,怎麼去線上排查問題?
  • 六、類加載爲何要使用雙親委派模式,有沒有什麼場景是打破了這個模式?
  • 七、類的實例化順序
  • 八、JVM垃圾回收機制,什麼時候觸發MinorGC等操做
  • 九、JVM 中一次完整的 GC 流程(從 ygc 到 fgc)是怎樣的
  • 十、各類回收器,各自優缺點,重點CMS、G1
  • 十一、各類回收算法
  • 十二、OOM錯誤,stackoverflow錯誤,permgen space錯誤

怎麼學習?有沒有面試答案?

能夠加入JAVA高級架構:705127209 羣裏面有阿里,百度,點評,架構師直播指導,針對工做1--5的Java程序員提高本身,還有架構學習資料,jvm,手寫springmvc,分佈式,高可用,高性能,數據結構,springcloud,springboot 免費獲取。

相關文章
相關標籤/搜索