-
1 # 加瓦程式設計師
-
2 # IT人劉俊明
不少應用級程式設計師在工作的前三年都會有一個較快的成長速度,一方面是因為在工作的早期獲得的資訊量比較大,需要掌握的技術也比較多,另一個方面是接觸到的專案重複率比較低,所以程式設計師前三年一般都是快速成長期。
當三年過去之後,隨著專案重複率的增加,從專案中獲得的知識量就會下降,很多專案基本上就是體力勞動了,這個時候通常就會經歷職場上的第一個發展的瓶頸期,要想解決這個職場瓶頸,可以採用以下幾個方式:
第一:自主學習。自主學習對於程式設計師來說是非常重要的,當遇到重複率較高的專案時,可以採用不同的開發方式來提高知識量的獲取。舉個例子來說,如果後端開發之前採用的是Java語言,那麼可以在重複率比較高的專案中採用Go語言來實現,這樣就能夠完成新語言的學習,而且目前Go語言的發展前景還是不錯的。自主學習一方面要緊跟技術發展的腳步,另一方面要把新技術應用到工作中,這樣才會深入。
第二:崗位升級。要想突破初級發展瓶頸一個比較好的解決辦法就是透過轉崗來完成,比如從應用級崗位轉向研發級崗位。轉崗的前提是要具備紮實的基礎知識,比如從Web開發轉向大資料開發,或者轉向人工智慧開發崗位,大資料和人工智慧對數學的要求比較高,需要在日常的工作中做好基礎知識的積累。看一個深度優先搜尋的描述過程:
第三:考研。不少工作3年左右的程式設計師選擇考研來突破發展的瓶頸,讀研確實能明顯提升自己的職場競爭力,按照歷史經驗來看,大部分程式設計師讀研之後都完成了崗位升級。
其實除了以上三種途徑,還有兩個途徑也比較常見,一個是轉做技術加管理,開始做“行業”,另一個途徑就是能用英語進行流暢的交流,一口流利的英語能明顯提升程式設計師的職場競爭力。
最後,如果選擇考研,那麼一定要趁早。
-
3 # mikechen的網際網路架構
工作3年了,同樣是程式設計師,為什麼別人每月28K你卻只有16K,如何才能突破自己得到持續成長呢?這是每一個程式設計師都繞不開的話題。在這裡和大家分享我從程式設計師進階成為java高階工程師/架構師的一些學習方向,Java進階之路離不開一個長期系統的學習規劃,方向方法正確了,結果自然是好的。以下,enjoy~
一、常見模式與工具
1. 常用設計模式:Proxy代理模式、Factory工廠模式、Singieton單例模式等
2. Spring5:IOC容器設計原理及高階特性,AOP設計原理、FactoryBean與BeanFactory,Spring事務處理機制等
3. MyBatis:程式碼自動生成品,快取使用場景及選擇策略,MyBatis的事務分析MyBatis的動態代理的真正實現等
二、常用工具
1. Maven:專案管理
2. Jenkins:持續整合
3. Sonar:程式碼質量管理
4. Git:版本管理
三、分散式架構1. 架構原理
2. 架構策略
3. 中介軟體
4. 架構實戰
四、微服務架構
1. 微服務框架
2. Spring Cloud
3. Docker與虛擬化
4. 微服務架構
五、效能最佳化
1. 效能指標體系
2. JVM調優
3. Tomcat調優
4. MySQL調優
六、底層知識
1. 記憶體模型
2. 併發模式
3. 執行緒模型
4. 鎖細節
以上,只是列舉一個大概的學習方向,工作幾年,走著走著,我們就會發現,身邊總有些程式設計師成長得特別快,對此,不能一葉障目,只見他人加薪晉級,卻看不見他人工作之餘對學習的堅持不懈。人生機會並不多,當下努力,以後才能有更多自由與選擇。以下福利,送給希望進階成為架構師的你,助力進階加薪~
-
4 # 玩著學程式設計
工作的前三年是成長極快的階段,前期的這個階段更多的是需要不斷的去學習,在工作中實踐,更加深入的瞭解Java基礎。
工作1-2年,已經對Java有了更加深入的瞭解,但是對於面向物件的體會可能還不夠深刻,程式設計的時候還停留在完成功能的層次,很少去考慮設計的問題,這個時候,設計模式就來了,學會使用設計模式,提高程式碼能力,寫出一手優雅的程式碼。
工作2-3年,之前應該接觸過併發,這個時候,應該更加深入的瞭解併發相關的知識,有空看看jdk的原始碼也是可以的。
瞭解過“如鵬網”的Java提高技術學習路線,可以作為學習的參考,有網路的地方就可以學習,利用空餘的時間來系統的提升自己。主要內容有:分散式、設計模式、前端技術、網路支付、全文搜尋引擎、Docker、WebService等。第一階段:
2、NoSQL
3、設計模式
4、分散式技術
5、綜合專案實戰
-
5 # 頑皮的coder
三年工作經驗,應該做東西都沒有障礙,不管是新老技術的學習,這個階段應該選擇一個好的平臺,學習架構方面的技術
-
6 # 會點程式碼的大叔
在我看來,Java程式設計師三年是一個坎兒,至少我是在三年的時候,感覺到自己有了質的飛越,當然工資也有了很大的提升(三年、四年連續漲薪50%)。
當然三年這個時間不是固定的,希望大家儘可能的縮短這個時間。
下面我來談談如何突破程式設計師的第一個門檻。
現在很多公司在SSH、Spring boot基礎上封裝一下,起個響亮的名字,就叫做什麼什麼框架,所有的專案都用這個開發。這種東西,你前半年會有一些提升,後面基本就荒廢了。個人的一些建議:
對於技術,不能只是會用,還要知道為什麼用、原理是什麼;保持技術的敏感度,不要公司用什麼技術,就只學什麼技術。現在流行的可能就是Spring boot,基於Spring Cloud的微服務了吧,這裡麵包含的東西就很多了;還有一個流派是阿里的Dubbo;別隻會用資料庫了,快取技術得懂一些吧,所以Redis得看一下。Orm框架也別隻知道hibernate了,mybatis和JPA也得懂吧。介面也不能只知道webservice加xml了,現在rest加josn比較主流。說到介面,也不能還在word裡面維護吧,swagger這類工具也最好會用。還有什麼單元測試,持續整合,自動化部署,灰度釋出……實在是太多太多了。
接上,現在開始習慣看英文文件,因為你研究一些新的技術的時候會發現,沒有好的中文資料。最好的資料就是官方文件,基本上都是英文的。
在專案中,不能只是單純的完成專案經理分配的任務,而是要把眼光放高一些,全流程的去熟悉專案、熟悉業務。未來你不管向什麼方向發展,專案經理、架構師甚至變成需求、產品經理,都需要需要業務知識的積累。
從專案新人變成老人,逐漸也開始做一些管理方面的工作,例如一些專案組比較大,可能會細分成多個小組,成為組長,或者需要帶帶新人,一定要珍惜這些機會。
-
7 # Java清風
不邀自來,對於Java程式設計師如何突破三年的門檻在這裡寫寫一名3年工作經驗的Java程式設計師應該具備的技能及如何突破的這個門檻,這可能是Java程式設計師們比較關心的內容。我這裡要說明一下,以下列舉的內容不是都要會的東西,但是如果你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。
1、基本語法這包括static、final、transient等關鍵字的作用,foreach迴圈的原理等等。今天面試我問你static關鍵字有哪些作用,如果你答出static修飾變數、修飾方法我會認為你合格,答出靜態塊,我會認為你不錯,答出靜態內部類我會認為你很好,答出靜態導包我會對你很滿意,因為能看出你非常熱衷研究技術。
最深入的一次,我記得面試官直接問到了我volatile關鍵字的底層實現原理(順便插一句,面試和被面試本身就是相對的,面試官能問這個問題同時也讓面試者感覺到面試官也是一個喜愛研究技術的人,增加了面試者對公司的好感,我最終選擇的就是問了這個問題的公司),不要覺得這太吹毛求疵了,越簡單的問題越能看出一個人的水平,別人對你技術的考量絕大多數都是以深度優先、廣度次之為標準的,切記。
2、集合非常重要,也是必問的內容。基本上就是List、Map、Set,問的是各種實現類的底層實現原理,實現類的優缺點。
集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實現原理,能流利作答,當然能掌握CopyOnWrite容器和Queue是再好不過的了。另外多說一句,ConcurrentHashMap的問題在面試中問得特別多,大概是因為這個類可以衍生出非常多的問題,關於ConcurrentHashMap,我給網友朋友們提供三點回答或者是研究方向:
(1)ConcurrentHashMap的鎖分段技術
(2)ConcurrentHashMap的讀是否要加鎖,為什麼
(3)ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器
3、設計模式本來以為蠻重要的一塊內容,結果只在阿里巴巴B2B事業部面試的時候被問了一次,當時問的是裝飾器模式。
當然咱們不能這麼功利,為了面試而學習,設計模式在工作中還是非常重要、非常有用的,23種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:
(1)你的專案中用到了哪些設計模式,如何使用
(2)知道常用設計模式的優缺點
(3)能畫出常用設計模式的UML圖
4、多執行緒這也是必問的一塊了。因為三年工作經驗,所以基本上不會再問你怎麼實現多執行緒了,會問得深入一些比如說Thread和Runnable的區別和聯絡、多次start一個執行緒會怎麼樣、執行緒有哪些狀態。當然這只是最基本的,出乎意料地,幾次面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這麼一個意思:
假如有Thread1、Thread2、Thread3、Thread4四條執行緒分別統計C、D、E、F四個盤的大小,所有執行緒都統計完畢交給Thread5執行緒去做彙總,應當如何實現?
聰明的網友們對這個問題是否有答案呢?不難,java.util.concurrent下就有現成的類可以使用。
另外,執行緒池也是比較常問的一塊,常用的執行緒池有幾種?這幾種執行緒池之間有什麼區別和聯絡?執行緒池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的執行緒池比較合適。
最後,雖然這次面試問得不多,但是多執行緒同步、鎖這塊也是重點。synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等。
5、IO再次補充IO的內容,之前忘了寫了。
IO分為File IO和Socket IO,File IO基本上是不會問的,問也問不出什麼來,平時會用就好了,另外記得File IO都是阻塞IO。
Socket IO是比較重要的一塊,要搞懂的是阻塞/非阻塞的區別、同步/非同步的區別,藉此理解阻塞IO、非阻塞IO、多路複用IO、非同步IO這四種IO模型,Socket IO如何和這四種模型相關聯。這是基本一些的,深入一些的話,就會問NIO的原理、NIO屬於哪種IO模型、NIO的三大組成等等,這有些難,當時我也是研究了很久才搞懂NIO。提一句,NIO並不是嚴格意義上的非阻塞IO而應該屬於多路複用IO,面試回答的時候要注意這個細節,講到NIO會阻塞在Selector的select方法上會增加面試官對你的好感。
如果用過Netty,可能會問一些Netty的東西,畢竟這個框架基本屬於當前最好的NIO框架了(Mina其實也不錯,不過總體來說還是比不上Netty的),大多數網際網路公司也都在用Netty。
6、JDK原始碼要想拿高工資,JDK原始碼不可不讀。上面的內容可能還和具體場景聯絡起來,JDK原始碼就是實打實地看你平時是不是愛鑽研了。我面試過程中被問了不少JDK原始碼的問題,其中最刁鑽的一個問了我,String的hashCode()方法是怎麼實現的,幸好我平時String原始碼看得多,答了個大概。JDK原始碼其實沒什麼好總結的,純粹看個人,總結一下比較重要的原始碼:
(1)List、Map、Set實現類的原始碼
(2)ReentrantLock、AQS的原始碼
(3)AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的
(4)執行緒池的實現原理
(5)Object類中的方法以及每個方法的作用
這些其實要求蠻高的,我去年一整年基本把JDK中重要類的原始碼研究了個遍,真的花費時間、花費精力,當然回頭看,是值得的----不僅僅是為了應付面試。
7、框架老生常談,面試必問的東西。一般來說會問你一下你們專案中使用的框架,然後給你一些場景問你用框架怎麼做,比如我想要在Spring初始化bean的時候做一些事情該怎麼做、想要在bean銷燬的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。
如果上面你的問題答得好,面試官往往會深入地問一些框架的實現原理。問得最多的就是Spring AOP的實現原理,當然這個很簡單啦,兩句話就搞定的的事兒,即使你不會準備一下就好了。我遇到的最變態的是讓我畫一下Spring的Bean工廠實現的UML圖,當然面對這樣一個有深度的問題,我是絕對答不出來的/(ㄒoㄒ)/~~
8、資料庫資料庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是資料庫效能的最佳化,如果對於資料庫的效能最佳化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL最佳化的內容準備一下。
不過資料庫倒是不用擔心,一家公司往往有很多部門,如果你對資料庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對資料庫使用不是要求非常高的部門鍛鍊一下。
9、資料結構和演算法分析資料結構和演算法分析,對於一名程式設計師來說,會比不會好而且在工作中絕對能派上用場。陣列、連結串列是基礎,棧和佇列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不瞭解它們的具體實現,但是要知道什麼是二叉查詢樹、什麼是平衡樹,AVL樹和紅黑樹的區別。記得某次面試,某個面試官和我聊到了資料庫的索引,他問我:
你知道索引使用的是哪種資料結構實現嗎?
我答到用的Hash表吧,答錯。他又問,你知道為什麼要使用樹嗎?我答到因為Hash表可能會出現比較多的衝突,在千萬甚至是上億級別的資料面前,會大大增加查詢的時間複雜度。而樹比較穩定,基本保證最多二三十次就能找到想要的資料,對方說不完全對,最後我們還是交流了一下這個問題,我也明白了為什麼要使用樹,這裡不說,網友朋友們覺得索引為什麼要使用樹來實現呢?
至於演算法分析,不會、不想研究就算了,記得某次面試對方問我,Collections.sort方法使用的是哪種排序方法,額,吐血三升。當然為了顯示我的博學,對演算法分析也有一定的研究(⊙﹏⊙)b,我還是硬著頭皮說了一句可能是氣泡排序吧。當然答案肯定不是,有興趣的網友朋友們可以去看一下Collections.sort方法的原始碼,用的是一種叫做TimSort的排序法,也就是增強型的歸併排序法。
10、Java虛擬機器出乎我的意料,Java虛擬機器應該是很重要的一塊內容,結果在這幾家公司中被問到的機率幾乎為0。要知道,我去年可是花了大量的時間去研究Java虛擬機器的,光周志明老師的《深入理解Java虛擬機器:JVM高階特性與最佳實踐》,我就讀了不下五遍。
言歸正傳,雖然Java虛擬機器沒問到,但我覺得還是有必要研究的,我就簡單地列一個提綱吧,談談Java虛擬機器中比較重要的內容:
Java虛擬機器的記憶體佈局GC演算法及幾種垃圾收集器類載入機制,也就是雙親委派模型Java記憶體模型happens-before規則volatile關鍵字使用規則也許面試無用,但在走向大牛的路上,不可不會。
11、Web方面的一些問題Java主要面向Web端,因此Web的一些問題也是必問的。我碰到過問得最多的兩個問題是:
談談分散式Session的幾種實現方式
常用的四種能答出來自然是讓面試官非常滿意的,另外一個常問的問題是:
講一下Session和Cookie的區別和聯絡以及Session的實現原理
這兩個問題之外,web.xml裡面的內容是重點,Filter、Servlet、Listener,不說對它們的實現原理一清二楚吧,至少能對它們的使用知根知底。另外,一些細節的方面比如get/post的區別、forward/重定向的區別、HTTPS的實現原理也都可能會被考察到。
噢,想起來了,一致性Hash演算法貌似也被問到了幾次~
最後,如果有興趣有時間,建議學習、研究一下SOA和RPC,面向服務體系,大型分散式架構必備,救命良方、包治百病、屢試不爽。
-
8 # Lucifer351
如果是一直做javaweb可以考慮學習一下java大資料, 分散式或者大資料等方向。尚學堂的王牌專業就是JAVA,專注課程升級14年,全面涵蓋新增高階技術,高階框架專案、分散式專案、微服務架構專案,整體課程按照年薪30萬標準設計。不止用於學員就業、也可用於學員工作1-3年內的提升。
回覆列表
java這行我混了4年,從18歲開始工作,到23辭職,都不知道你說的3年門檻是什麼。難道是可以帶人了?個人愚見。一兩年程式設計師一般都問技術。3,4年雖然也問技術,但更多是傾向於我們這裡有幾個1,2年工作經驗的。你能來帶著他們弄不,類似於小組長的職務,稍微在厲害點3年就當專案經理也不是沒有。但你說3年門檻我還真不明白到底指的是什麼。