1. 程式人生 > >阿里5年Java程式設計師分享從業心得總結,寫給還在迷茫的朋友

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

 

貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java一年後,重新找工作時,才會真實的感受到這句話。

工作第一年,往往是什麼都充滿新鮮感,什麼都學習,衝勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據專案的需要來不斷學習新東西;所有,很多時候感覺,自己用過的東西真多呀!但是真正深入研究的東西卻不多。面試,是跳槽後第一個需要面對的問題;而且不同公司面試的著重點不同;但是卻有一個共同點:Java基礎是必考的。

  • 工作第一年,可能問你String物件建立的理解,常用的框架是什麼等等;
  • 工作第三年,就問你Java記憶體分配機制是什麼,類是如何載入的等等;
  • 工作第五年,就問你常用的設計模式是什麼,你在工作中充當什麼角色,怎麼獨立完成一個模組等等;

可以看出——這是一個典型的程式設計師的成長過程:

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

因此,必須學習:

資料庫

最常用的是Oracle了(當然銀行專案等需要DB2等),熟練掌握使用儲存過程,觸發器等;

UML

專案中經常要寫文件,專案經理的基本功,程式設計師走向設計的基本功;

linux系統

需要掌握常用的linux命令——部署在windows作業系統上的專案很少吧。

其他就不多說了,大家可以補充。

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

第一. 積累行業背景;

行業背景非常重要;工作3年後必須確定自己的行業背景,比如一直從事電信行業,一直從事銀行專案,一直從事ERP行業等等。

一個程式設計師不可能是一直寫程式碼的,就是寫程式碼也要知道業務邏輯,滿足什麼需求;俗話說隔行如隔山,每個行業的業務都不一樣,甚至差別很大,比如你一直從事流媒體的研究,讓你跳槽到一家銀行專案,完了,一切從頭學吧,以前的行業經驗都用不上了;而且,一個公司公司招人,就是希望找到那些很容易上手,不需要培訓業務很久的程式設計師;頻繁跳槽的朋友,一定要注意這點;

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

第二. 合理的職業規劃

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

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

程式設計師不是敲程式碼的機器。第一年太多東西不懂,你可以一切聽從老大的安排,敲敲程式碼,看看資料庫,測試自己和別人的程式碼;但是第二年,你還是這樣嗎?不可能的,一年的經驗你完全可以入行了,是時候該學習怎麼進行需求分析,怎麼設計資料庫,怎麼寫各類文件,怎麼寫更好的程式碼?這是高階程式設計師的要求!

什麼是高階程式設計師?

具有分析設計能力,能進行技術攻關,而且具有某行業深厚背景的程式設計師!

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

千萬不要認為程式設計師就是寫程式碼的哦!!!

而且,通過一個專案的開發,你要能粗略的統計出一個功能的開發時間;比如一個模組有20個小功能點,你開發了80個小時,每個小功能點平均2小時——這時在前期就能評估工作量啦。當然每個人的效率和工作質量是不同的,因人而異,但是大概的工作量應該是可以統計出來的,用於統計一個專案的工作週期;

具備上面的能力,你起碼已經是一個專案組的骨幹啦!此時,就可以帶領小弟做開發而不是平凡的一個被帶領者啦。

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

如果你工作了多年,屬於老鳥了,也要善於帶人,能提攜小弟!因為只有小弟成長了,你身上的擔子才會輕,專案才會順暢的進行!

而且高階程式設計師(本科為例)工作四年左右工資就達到一個瓶頸了(一線城市是9K—1.2W),這時候必須“轉型”—–高階程式設計師只是你能力的一部分,系統分析師,架構師,技術主管才是你應該告訴別人的職務,薪資才能再次提升。

第三. 關於跳槽

跳槽要學習的技術就多了

跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什麼要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技術原因(影響自己的發展,偏移自己規劃的軌跡),還是錢給少了,不受重視。

準備不充分的面試,完全是浪費時間,更是對自己的不負責(如果title很高,當我沒說)。

今天給大家分享下chenssy在這次跳槽中整理的Java面試大綱,其中大部分都是面試過程中的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式。

專案介紹

大部分情況,這是一場面試的開門題,面試官問這個問題,主要是考察你的概述能力和全域性視野。有的人經常抱怨自己每天在堆業務,但沒有成長。事實上,很多情況下確實在堆業務,但並不是沒有成長的。並非做中介軟體或者技術架構才是成長,例如我們的需求分析能力,溝通協作能力,產品思維能力,抽象建模能力等都是一個非常重要的硬實力。

好的,現在進入正文。

  • 1、明確專案是做什麼的
  • 2、明確專案的價值。(為什麼做這個專案,它解決了使用者什麼痛點,它帶來什麼價值?)
  • 3、明確專案的功能。(這個專案涉及哪些功能?)
  • 4、明確專案的技術。(這個專案用到哪些技術?)
  • 5、明確個人在專案中的位置和作用。(你在這個專案的承擔角色?)
  • 6、明確專案的整體架構。
  • 7、明確專案的優缺點,如果重新設計你會如何設計。
  • 8、明確專案的亮點。(這個專案有什麼亮點?)
  • 9、明確技術成長。(你通過這個專案有哪些技術成長?)

Java基礎

  • 1、List 和 Set 的區別
  • 2、HashSet 是如何保證不重複的
  • 3、HashMap 是執行緒安全的嗎,為什麼不是執行緒安全的(最好畫圖說明多執行緒環境下不安全)?
  • 4、HashMap 的擴容過程
  • 5、HashMap 1.7 與 1.8 的 區別,說明 1.8 做了哪些優化,如何優化的?
  • 6、final finally finalize
  • 7、強引用 、軟引用、 弱引用、虛引用
  • 8、Java反射
  • 9、Arrays.sort 實現原理和 Collection 實現原理
  • 10、LinkedHashMap的應用
  • 11、cloneable介面實現原理
  • 12、異常分類以及處理機制
  • 13、wait和sleep的區別
  • 14、陣列在記憶體中如何分配

Java 併發

  • 1、synchronized 的實現原理以及鎖優化?
  • 2、volatile 的實現原理?
  • 3、Java 的訊號燈?
  • 4、synchronized 在靜態方法和普通方法的區別?
  • 5、怎麼實現所有執行緒在等待某個事件的發生才會去執行?
  • 6、CAS?CAS 有什麼缺陷,如何解決?
  • 7、synchronized 和 lock 有什麼區別?
  • 8、Hashtable 是怎麼加鎖的 ?
  • 9、HashMap 的併發問題?
  • 10、ConcurrenHashMap 介紹?1.8 中為什麼要用紅黑樹?
  • 11、AQS
  • 12、如何檢測死鎖?怎麼預防死鎖?
  • 13、Java 記憶體模型?
  • 14、如何保證多執行緒下 i++ 結果正確?
  • 15、執行緒池的種類,區別和使用場景?
  • 16、分析執行緒池的實現原理和執行緒的排程過程?
  • 17、執行緒池如何調優,最大數目如何確認?
  • 18、ThreadLocal原理,用的時候需要注意什麼?
  • 19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之間的差別?
  • 20、LockSupport工具
  • 21、Condition介面及其實現原理
  • 22、Fork/Join框架的理解
  • 23、分段鎖的原理,鎖力度減小的思考
  • 24、八種阻塞佇列以及各個阻塞佇列的特性

Spring

  • 1、BeanFactory 和 FactoryBean?
  • 2、Spring IOC 的理解,其初始化過程?
  • 3、BeanFactory 和 ApplicationContext?
  • 4、Spring Bean 的生命週期,如何被管理的?
  • 5、Spring Bean 的載入過程是怎樣的?
  • 6、如果要你實現Spring AOP,請問怎麼實現?
  • 7、如果要你實現Spring IOC,你會注意哪些問題?
  • 8、Spring 是如何管理事務的,事務管理機制?
  • 9、Spring 的不同事務傳播行為有哪些,幹什麼用的?
  • 10、Spring 中用到了那些設計模式?
  • 11、Spring MVC 的工作原理?
  • 12、Spring 迴圈注入的原理?
  • 13、Spring AOP的理解,各個術語,他們是怎麼相互工作的?
  • 14、Spring 如何保證 Controller 併發的安全?

Netty

  • 1、BIO、NIO和AIO
  • 2、Netty 的各大元件
  • 3、Netty的執行緒模型
  • 4、TCP 粘包/拆包的原因及解決方法
  • 5、瞭解哪幾種序列化協議?包括使用場景和如何去選擇
  • 6、Netty的零拷貝實現
  • 7、Netty的高效能表現在哪些方面

分散式相關

  • 1、Dubbo的底層實現原理和機制
  • 2、描述一個服務從釋出到被消費的詳細過程
  • 3、分散式系統怎麼做服務治理
  • 4、介面的冪等性的概念
  • 5、訊息中介軟體如何解決訊息丟失問題
  • 6、Dubbo的服務請求失敗怎麼處理
  • 7、重連機制會不會造成錯誤
  • 8、對分散式事務的理解
  • 9、如何實現負載均衡,有哪些演算法可以實現?
  • 10、Zookeeper的用途,選舉的原理是什麼?
  • 11、資料的垂直拆分水平拆分。
  • 12、zookeeper原理和適用場景
  • 13、zookeeper watch機制
  • 14、redis/zk節點宕機如何處理
  • 15、分散式叢集下如何做到唯一序列號
  • 16、如何做一個分散式鎖
  • 17、用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連線是執行緒安全的嗎
  • 18、MQ系統的資料如何保證不丟失
  • 19、列舉出你能想到的資料庫分庫分表策略;分庫分表後,如何解決全表查詢的問題
  • 20、zookeeper的選舉策略
  • 21、全域性ID

資料庫

  • 1、mysql分頁有什麼優化
  • 2、悲觀鎖、樂觀鎖
  • 3、組合索引,最左原則
  • 4、mysql 的表鎖、行鎖
  • 5、mysql 效能優化
  • 6、mysql的索引分類:B+,hash;什麼情況用什麼索引
  • 7、事務的特性和隔離級別

快取

  • 1、Redis用過哪些資料資料,以及Redis底層怎麼實現
  • 2、Redis快取穿透,快取雪崩
  • 3、如何使用Redis來實現分散式鎖
  • 4、Redis的併發競爭問題如何解決
  • 5、Redis持久化的幾種方式,優缺點是什麼,怎麼實現的
  • 6、Redis的快取失效策略
  • 7、Redis叢集,高可用,原理
  • 8、Redis快取分片
  • 9、Redis的資料淘汰策略

JVM

  • 1、詳細jvm記憶體模型
  • 2、講講什麼情況下回出現記憶體溢位,記憶體洩漏?
  • 3、說說Java執行緒棧
  • 4、JVM 年輕代到年老代的晉升過程的判斷條件是什麼呢?
  • 5、JVM 出現 fullGC 很頻繁,怎麼去線上排查問題?
  • 6、類載入為什麼要使用雙親委派模式,有沒有什麼場景是打破了這個模式?
  • 7、類的例項化順序
  • 8、JVM垃圾回收機制,何時觸發MinorGC等操作
  • 9、JVM 中一次完整的 GC 流程(從 ygc 到 fgc)是怎樣的
  • 10、各種回收器,各自優缺點,重點CMS、G1
  • 11、各種回收演算法
  • 12、OOM錯誤,stackoverflow錯誤,permgen space錯誤

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

可以加入JAVA高階架構:705127209 群裡面有阿里,百度,點評,架構師直播指導,針對工作1--5的Java程式設計師提升自己,還有架構學習資料,jvm,手寫springmvc,分散式,高可用,高效能,資料結構,springcloud,springboot 免費獲取。

相關推薦

no