分享一篇写的非常好的文章《如何掌握企业级技术和项目经验》,非常值得一看!
前言:
這是一位有17年工作經驗的大佬寫的一篇文章,看完真的受益匪淺,非常值得一看!
正文:
????????為什么我意識到學習方法的重要性了呢?因為我發現有的同學很迷茫。技術這么多,學也學不完,更不知道應該學什么?其他講師分享的都是某個技術某個框架,很少看到有人談學習方法的,所以借著這次分享,我跟大家先聊一下學習的事情。
首先我們要做好學習計劃,時間就按照一年來規劃。每年給自己制定一個研究的方向,比如說今年我要成為數據庫領域的專家;明年后年我要作Java領域的達人;大后年我要成為前端領域的小強。每年集中精力突破一個技術方向,是最容易取得成就的。
????????這就跟恒星誕生的過程一樣,一個天體在宇宙里不停地俘獲物質,增加自己質量,總有一天,到達臨界點的時候,這個天體突然點亮了,發生核聚變反應,于是照亮了宇宙。學習的過程也是這樣,你專攻一個領域的時候,積累了大量的學習材料,努力專研是最容易出成果的。
????????因為我看咱們群里很多小伙伴都是20多歲上下的樣子。年輕人容易受到新事物的吸引,不容易集中注意力,往往生活中時間就不知不覺過去了。咱們群里面不知道有沒有做大數據業務的,大數據里面有個協同過濾算法很厲害,網站不需要長期跟蹤你,積累用戶數據,就能快速的識別出你的喜好。
????????比如說你剛下載了淘寶APP,不需要下訂單買東西,淘寶就能找出你的喜好。假如你看一個運動鞋挺好的,點開看兩眼,然后就給關上了。下次再打開淘寶APP,首頁出現的商品都是你喜歡的。這就是淘寶后臺利用協同過濾算法,分析出看這個運動鞋的一類人,大部分人會買什么東西,比如很多人買了籃球、充電寶、護膚品等等。所以你的APP上就會出現這類東西,然后你的購物欲就被勾引起來了,不停地買買買。抖音也是類似的原理,讓你不停的看視頻。
????????現在的年輕人在學習的時候,越來越難以集中精力了。然后更糟糕的是,學習編程技術,必須要用大段大段的時間,才有效果。你用碎片化的時間去學編程,拿過來一個框架看五分鐘,然后就去聊QQ、打游戲去了。過了幾個小時,再回來看學一會兒,這一天下來,跟什么都沒學一樣,什么東西也記不住。
人的大腦,調動理性思維讓它活躍起來是需要時間的,前半個小時都是預熱的過程,然后才能進入到學習的狀態。所以我給大家的建議就是舍小取大,把零碎的事情都集中在一起處理,然后留出大段的時間去學習,這樣的效果會非常好。
????????那么有的同學會說,學習這么辛苦,我堅持不下來。確實,學習是這個世界上最痛苦的事情。打游戲可比學習有意思多了,這是因為打游戲跟結果之間存在必然聯系。砍死一個Boss能掉什么裝備,得到多少經驗,是有明確結果的。所以很多人追求這個明確的結果,不停的升級刷裝備,沉迷于游戲。但是我們平時很少看見有人能沉迷于學習的,這是因為學習跟成果沒有必然聯系。比如說你今天背了50個單詞,沒人會給你承諾,四六級考試一定會考這些單詞。
????????我們的大腦進化的還不完全,大腦只會為有明確結果的事情,分泌出多巴胺,讓你感到快樂。你在做沒有明確結果的事情的時候,大腦就不會分泌多巴胺,用不了多久,一件事情你就會做膩了。原始社會,物質條件很差,你要是整天不務正業,仰望星空,就容易餓死。所以大腦為了禁止你做一些消耗能量,而又不會有結果的事情,就不給你分泌多巴胺,讓你感覺不到快樂,從而放棄一件事情,達到節省能量的目的。
????????恰恰學習就是一個沒有明確結果的事情,所以從你上學的第一天起,就感受不到學習快樂,原因就在這兒。我們現在開始制定學習計劃,要是一路枯燥的學習,恐怕有很多人都堅持不下去。那該怎么辦呢?先找到一個參照物,然后自我鼓勵。這個參照物可以是你自己,也可以是周邊的人。你在學習的過程中,經常與這個參照物去比較,感知到自己的進步,就很容收獲成就感。這樣就把一個沒有結果的事情,轉化成有明確結果的事情。起碼我知道我每個月的學習,都在進步。
????????比如說,公司目前用的是SSM單體架構。如果遇到高負載的情況下,肯定有問題。所以我應該學習一下Nginx負載均衡。等你搞明白負載均衡以后,又發現輪詢式的請求轉發,會造成Session丟失。比如說用戶訪問網站,Nginx把請求負載均衡到A節點,你在A節點登陸之后,HttpSession保存在A節點。如果刷新一下瀏覽器,請求被負載均衡到了B節點,B節點沒有你的HTTPSession對象,于是就被判定成沒有登陸。這時候就得用Redis緩存Session了,或者說把認證信息以Token的形式存儲在客戶端。
????????然后沒多久,你又發現數據表記錄太多了,需要縮表,要搞冷熱數據分離,于是又要學習TokuDB引擎。這么一路研究下來,再跟你周圍的同事比較一下,或者跟半年前的你自己,比較一下。技術水平,還有思考的維度都大不一樣了,這種技術上碾壓周圍人的快感就是成就感。這種成就感會一路推動你后續的學習,從而走上終身學習的道路。學習是一件快樂的事情,其實很容易做到。這比會一個框架,學習一門語言,更重要。
????????接下來,我舉一個反面的例子,相信很多同學都有過相似的經歷。剛學會一個新的語言或者框架,就急不可待的虛構一個項目,立即用這種語言或者框架實現一下。比如說你剛學會Spring框架,于是就虛構了一個小型的微商系統,采用極限編程的方式,先不寫文檔,匆忙建了幾張數據表,直接就進入到編碼環節了。
????????過了幾天,你在錄入數據的時候,忽然發現有重大問題,商品表創建的不對,很難把所有商品數據都保存進入。食品有保質期屬性,電視沒有保質期屬性。手機有操作系統屬性,化妝品就沒有這個屬性。我建表怎么規定字段呢?不行,得重新設計數據表。一下子,SQL語句要改、PO和VO類要改、業務層要改、視圖層也要改,然后還要跑一堆測試案例。你看,這是你的項目第一次推翻重來。
沒過多久,你又發現了一個重大設計問題。如果訂單表直接引用商品ID的話。如果顧客購買了進口奶粉,賣家偷換成了國產奶粉發貨。顧客來投訴,賣家馬上篡改商品信息,跟顧客說,我們賣的就是國產奶粉。電商平臺絕對不可以出現這種行為,所以你又得去修改數據表結構。然后項目又推翻重來一次。
????????這種把項目反復退倒重來的經歷,我相信很多小伙伴都有過。錯誤的學習實踐方法,只會浪費我們大量的時間。每個人的職業生涯都是有限的,我們要在有限的時間里,學習到更多的技術,這樣才不會出現中年職業危機。關于職業危機的事情,我放在后面再說。
在學習的過程中,同學們不要先著急做虛擬項目。每一個項目都不是靠單一技術實現的,所以我建議大家先充實理論知識,然后再去做項目。你掌握的技術多了,創建項目的時候,考慮的維度和深度也就到位了,具備了整合能力,所以再去做項目,基本上就可以駕馭了。
下面我來說一下,怎么選擇學習方向。很多同學感嘆,現在技術太多了,聽上去都挺重要的,自己好像都快追趕不上了。這就需要我們抓大放小,利用有限的時間,多學習關鍵性的技術。
????????比如說技術體系里面,速成的是前端和Python方向,慢成的是Java方向。各位擅長Java的小伙伴,也都發現了,Java領域太復雜了,學起來太累了,那我們學習Java的意義何在呢?不如搞前端或者學習Python去了。其實從后臺轉前端和移動端,很容易;轉到大數據領域也不難。但是從前端往后端轉,就很困難,至少我身邊前端工程師轉型做后臺開發的成功案例很少。所以我建議,大家在選擇學習方向的時候,應該先從后端開始。
這樣就行 大上周有同學問我,該不該學習一下GO語言。我覺得這是一個典型的普遍性問題。面對一個冉冉升起的語言或者技術,很多人都覺得自己不應該落下。但是理性思維告訴我:抓大放小,先學習主流技術。你不妨問問自己,GO語言是不是主流語言?GO語言的就業市場有多大?GO語言的資料多不多?GO語言工程師月薪是多少?GO語言職位在北京有多少,Java工程師職位有多少?一路追問下來,雖然你感興趣GO語言,但是還是得把學習的注意力放在主流的語言上。編程語言的老大哥Java語言,你學透徹了嗎?
如果把需要研究的后臺技術,排一個先后次序的話,無疑應該先從數據庫開始。我知道你會用MYSQL,會寫CRUD語句,這些還都太初級了,鉆研的深度不夠。比如說我們經常編寫表連接SQL,數據庫可不會按照書寫的順序去連接數據表,優化器會篩選出數據最少的表,優先查詢,因為結果集數量比較少,所以連接大表的速度會很快。
當然了,這是理想的情況,有的時候SQL語句里面帶上GROUP BY或者ORDER BY之后,優化器對SQL的優化就出問題了,不是小表驅動大表,這就需要我們在SQL語句里面添加STRAIGHT JOIN關鍵字調整表連接的順序。一直以來我都保持手寫SQL語句的習慣,對于Hibernate跟MyBatis Plus框架提供Criteria操作方式,一直都不感冒。
這些只是SQL層面的事情,還有數據庫架構層面的事情。想去BATJ工作,寫代碼不懂得從MySQL集群中提取數據,怎么能行。所以作為一個大廠的后端程序員,操作數據庫集群是個必備的工作。然而數據庫集群的SQL語句跟單實例MySQL差別又很大,不能按照原有思路去想問題。
舉個例子,在數據庫集群中跨分片的表連接就很難實現。在水平切分的場景下,數據被切分到不同的數據庫分片中。A分片具有客戶表和訂單表,B分片也有客戶表和訂單表。如果李強的客戶記錄被切分存儲在A分片的客戶表里面。李強開始在電商平臺購物,他的訂單如果有的被切分到A分片的訂單表,有的被切分到B分片的訂單表。如果這種情況下,你要查詢李強等人的購物記錄是不可能的。無論A分片把數據傳給B分片,還是B分片把數據傳給A分片做表連接,都要在網絡里傳輸大量數據,而且查詢的速度又很慢。所以就要在數據庫中間件上配置父子表,客戶表是父表,訂單表是子表。子表的數據跟隨父表,被切分到同一個分片里面。
比如李強被切分到A分片,他的所有購物記錄都被切分到A分片。如果陳浩被切分到B分片,那么他的所有購物記錄就連帶著被切分到B分片,這樣我們做表連接的時候,就不用跨分片了。分片內做表連接就能查詢出數據,然后兩個分片的數據匯總到MyCat,做一下合并就可以返回給客戶端了。
還有就是冷熱數據分離方面的事情,InnoDB引擎數據超過2000萬,讀寫性能會很差。即便你加上很多索引也無濟于事。所以我們要定期縮表,比如把1年以上的數據轉移到歸檔庫。如果冷數據也很重要,那就用TokuDB存儲,帶著事務寫入速度是InnoDB的7-11倍。如果不是重要數據,扔到MongoDB里面就好了。
數據庫是所有項目的基礎,大部分人每天寫程序都是圍繞數據處理展開的,所以我建議你第一年應該徹底把數據庫研究明白,看SQL語句優化、數據庫參數優化、Replication集群、PXC集群、MHA集群、分布式事務等等。
吃透MySQL方向的前提下,有多余時間可以研究一下MongoDB、Redis之類的。Oracle、PG數據庫之類的,非主流的數據庫盡量少碰,節省時間學習下一個階段的內容。
當你成為數據庫專家之后,下一個要攻克的是編程語言跟設計模式。我知道大家會Java編程、有的人還會Python、PHP什么的。我在工作中經常能遇到有的程序員明顯對一門語言的API掌握的不夠。
舉個例子,有很多人知道Java語言里面調用Math.random(),能生成一個0至1之間的隨機數。但是更多的人不知道,ThewadLocalRandom.current().nextint(1,100),可以生成1至100之間的隨機數。
再比如,所有編程語言里面的浮點數運算都不精確,Java里面用BigDecimal來做精確的浮點數運算,那你搞懂了為什么BigDecimal的運算就一定精確呢?所以這個階段,我建議同學們花上3個月左右的時間,查缺補漏,徹底搞明白一門編程語言。將來在筆面試的時候,基礎知識牢固,對你是一個很大的加分項。
另外我說一下設計模式的問題。這個一定一定要認真學習。有不少人,是在學習完框架之后才去看設計模式。我建議在學習框架之前看設計模式。Struts、Spring、MyBatis、Hibernate都用了大量的設計模式。包括很多公司私有的框架,也都使用了很多設計模式。如果先有設計模式的基礎,學習框架會更加透徹。
我這里就舉工廠模式的例子。工廠模式每個人都會寫,看似簡單,實則意義非凡。工廠模式不就是創建對象的么,比我直接new對象復雜多了,我干嘛要用工廠模式呢?那么多框架都是用工廠創建對象,是不是設計者腦子進水了,你們不會直接new對象么?
初學者這么想問題也比較正常,如果你了解設計模式,那就到了“看山不是山,見水不是水”的境界了。工廠模式最大的好處就是可以對調用者和被調用者解耦。
如果Person類里面直接new了一個Car對象,那么Person類跟Car類就產生了強耦合關系。
在沒有SVN的年代,改代碼最好的辦法是做一個子類,在子類中修改代碼。這樣就形成了代碼版本的升級(較為原始)。如果直接在當前類修改代碼,代碼覆蓋之后,將來就沒法找回上一個版本的代碼了。
你也知道,平時我們不能不修改代碼。如果代碼是強耦合的關系。你創建了CarSubVerion_1這個子類,還要去修改以前所有new Car對象的對方。改成new CarSubVersion1。沒過幾天你又寫了CarSubVerion_2這個子類,接著還要修new對象的代碼,你說多麻煩。
如果使用了工廠模式,工廠方法的返回類型是Car,至于說返回的是Car對象,還是CarSubVersion_1或者CarSubVersion_2,Person類根本不知道。某天,你寫完CarSubVersion_3這個類,只需要修改一下工廠方法的XML文件,從此以后Person類從工廠方法獲得對象就是CarSubVersion_3。
你仔細看,隨便插拔一個Car子類,對于Person來說不需要修改任何代碼,其他依賴Car的地方也不需要修改。我們只需要集中修改工廠類的XML文件即可。這樣就把原來分散的強耦合,變成了松耦合,集中到了工廠類身上,維護代碼的時候只需要修改工廠類XML文件即可,這樣維護程序的工作量就小多了。每個框架為了自己的可維護性,都是用工廠來創建對象的。
工廠模式的另一個好處就是創建對象之后,可以初始化對象,變量怎么賦值,你可以自己在XML文件中規定。省去了我們自己初始化復雜對象的麻煩過程。
了解了這么多,你覺得new對象跟工廠模式比起來是不是low爆了。那么以后所有的對象都用工廠類去創建行不行呢?也不行。如果有的類,需求已經固定,不會再變了。將來它不會再派生出version_n,那么我們就直接new對象,出現強耦合又有什么關系呢?像是Java API中類,不會發生變化,所以我們直接new對象就好了,根本不用工廠類去創建對象。
Java有23種設計模式,都是精髓中的精髓,我建議你用兩個月左右的時間去吃透這些設計模式。你再去看Spring框架,它不就是用工廠模式去整合各種技術么,一下子就頓悟Spring了。
講到Java語言,我不得不提一件事情。很多初學者都鬧不清楚的一個問題。上學的時候,老師告訴我們設計程序要優先用抽象類或者接口去建模。我怎么覺得,寫程序不寫抽象類跟接口,也能行呢?那么抽象類跟接口是不是擺設啊。“老師,你讓我們用抽象類跟接口去建模,我覺得沒有必要,你這是照本宣科,不是實干做派,實際寫程序根本用不上抽象類跟接口。”
年輕人,我覺得你是沒有體會到程序設計的美感。抽象類跟接口就很美,可惜你沒體會到。我簡單說幾句。抽象類跟接口解決的是并發編程的問題,你先記住這一點。我來慢慢跟你解釋。
比如我家里現在來客人了,我跟妻子說,你把冰箱里的蘋果、香蕉和橘子拿出來,招待一下客人。我這么說的前提是,我要先打開冰箱,確認這里有蘋果、香蕉跟橘子,然后才能跟妻子說上面的一番話。兩個動作變成了依賴關系,先打開冰箱確認之后,才能跟妻子說話。
如果我把具體的蘋果、香蕉跟橘子抽象成水果這個概念,我跟妻子說,你把冰箱里的水果拿出來招待一下客人。水果是抽象概念,我用抽象指代具體水果,所以我就不用打開冰箱門,直接就可以吩咐妻子做什么事情,這不就產生了行為上的并發么。我不用等什么東西,先用抽象指代一下,我接著做我的事情就好了。
兩個人寫程序,甲要調用乙寫成的代碼。想要并發編程,乙把自己要寫的程序,先定義成抽象類或者接口,發給甲不就行了么,甲就可以寫程序了。你看這才是抽象類和接口的真正意義所在,剛才我讓你記下,抽象類跟接口是解決并發編程的,你仔細想想,是不是這么回事兒。(PS:這里應該有掌聲,我就當你鼓掌了,哈哈)
有的同學還不死心,“我不寫抽象類跟接口也能寫代碼?沒覺得抽象類跟接口有多重要。”
同學,你自己一個人寫程序,當然不需要定義抽象類跟接口了。沒人跟你并發編程。不妨你試試團隊開發,少了抽象類或者接口行不行。(PS:再次鼓掌)
接下來說一下框架階段,集中精力學好Spring、MyBatis這兩個框架就行了。Spring體系,上周有老師分享過了,這里我就不細講了。
MyBatis框架也不難學,但是我對Criteria操作保留意見。
學完框架,再簡單了解一下常用的第三方組件技術,比如說各種項目都能用到的權限框架,你可以學習一下Shiro之類的框架。還有報表組件、任務調度、Excel開發包、工作流引擎、全文索引等等。
以上是夯實后端技術的一個整體計劃,我知道這個群里面的同學,多少都懂一些技術。我列出的學習計劃僅供參考,你覺得那里不行,就重點學習哪里。比如說Spring你很熟悉了,不妨去看看設計模式。
實施學習計劃的時候要兩耳不聞窗外事,不要管前端、Python、人工智能、大數據怎么發展,大家要堅持自己的學習計劃,先穩扎穩打,努力成為后端領域的專家。然后你再往前端、大數據、Python方向轉型也來得及,而且還很容易。
有一些同學面臨抉擇,我現在已經精通后端技術了,下一步應該學習大數據、人工智能還是前端呢?趁著年輕,先挑戰最難的?前端最難。你沒聽錯,前端確實很難。難在你無法設計出精致的界面。我見過太多的后端人員,要么界面設計的超級丑(EasyUI、BootStrap),要么就是不會設計界面。這個短板你一定要補齊。
35歲是開發人員都要面臨的一個門檻,在35歲之前盡量爭取做到行業翹楚。如果做不到,退而求其次,你也得做一個萬金油,各個領域都擅長。
在職場里,你的技術就是你的議價權。我建議大家在35歲之前,要補齊自己的技術短板。對于公司而言,既可以把你調往前端組,也可以把你調往運維組,你的使用價值遠遠高過其他員工,所以即便到35歲,你依然可以活躍在IT行業。而且技術全面還有一個好處,就是可以再往上做到架構師或者技術總監的職位。
選擇技術專才做為技術總監或者項目經理,經常會出現很多事故。比如說甲方周末打電話給你,有個模塊的需求發生改變了,要你評估一下,開發周期跟開發費用是不是有變更。如果你只擅長前端,周一開會的時候,問了一下Java組的人,他們說這個需求的兩三天就能做完。然后你就是這么回復給甲方客戶的。
實際開發的時候,數據表一改動才發現,好多模塊的VO、PO、SQL語句、業務層都要跟著改,然后還要跑一大堆測試用例。這下可壞了,沒法按時交付了。作為一個技術領導,技術不可以有短板,你才能可以帶好整個團隊。
下面我說一下前端的學習計劃。都知道前端的技術挺雜,而且更新速度還很快。
傳統的HTML/CSS/JavaScript,學習資料很多,重點學習一下CSS的排版布局。動畫特效方面,我認為沒有必要去重點學習,畢竟還有UI工程師不是么。JS可以深挖一下面向對象、Prototype、事件冒泡處理等等。
JQuery可以作為過度階段了解一下,重點學習一下Node.js還有VUE,這兩個是前端的重點。其他的像什么React、AngularJS有時間可以看兩眼,沒時間就略過。
掌握前端之后可以了解一下移動端,Hybird模式用的基本也是前端這些技術,所以學習起來并不困難。UNI-APP移動端框架不錯,可以把VUE工程編譯成微信小程序、支付寶小程序、APP等等,可以學習一下這個框架。
說過了應用層面的技術,第三階段,我建議你認真學一下系統級的技術,因為這些技術對設計架構很用用處。初級一點的比如說Linux系統、高級一些的像什么Docker、K8S都要學習一下。
架構層面可不是什么人都能進入的,你完成了這個階段的學習,基本上給自己打造了一個別人無法介入的技術壁壘,以后就不存在職業危機這種事情了。這就是我們多年辛苦奮斗和學習所要達成的最終目標。
接下來我說一下怎么去開發一個企業級的項目。有的同學已經步入開發崗位了,有的同學還在學校里努力學習。工作了的同學,拿到業務需求相對簡單一些。沒有參加工作的同學,要想參與企業級的項目,只能先找一個參照。
在校的學生選擇模擬項目的時候,盡量選擇跟錢無關的項目去做,比如說新聞類的項目、信息聚合類的項目、招聘類項目、某某管理系統等等。因為只要跟錢沾邊,申請移動支付的資質你不具備,再者跟錢有關系的項目,技術實現上要求都很苛刻,你寫在簡歷上,面試官會問的非常詳細,所以在校同學最好不要選擇跟錢有關系的項目。
作為在校學生,自己不了解需求的情況下,自己去設計一個模擬項目,還是比較困難的。所以你可以在網上找到很多云端的體驗版本的管理系統。比如說有一個云端軟件,叫做易訂貨。
老司機們,看到菜單列表,基本上就明白這個進銷存項目的業務模型還是比較完整的,而且它還有移動端,你也可以體驗一下。或者說,你找到別的項目,覺得不錯也是可以的。
挑選好模擬項目之后,先使用一個禮拜。你在這個系統上不斷的做業務,熟悉整套系統的業務模型和流程。我們只不過是把網上的業務模型拿過來而已,程序實現還是要我們自己動手完成的。你可以把學到的各種技術,在模擬項目中整合到一起。寫程序不要模仿極限編程。你在敲代碼之前,先要做好充分的設計。因為是做逆向工程嘛,可以免去Axture原型設計。先畫用例圖,這個過程可以幫你理清思路。系統用多少個模塊,每種角色可以使用其中哪些模塊,角色之間的權限是怎么繼承的。然后要畫部署圖,你這個項目打算部署在什么樣的服務器上面,用幾個節點,使用什么樣的負載均衡。根據自己本地電腦的硬件條件,規劃好部署方案,然后才能去搭建項目架構。
比如說,數據庫我們采用的是Replication集群,做了兩個4節點分片(集群)對數據切分,用MyCat管理,而且還做了讀寫分離。用Zookeeper存儲MyCat配置信息,兩個MyCat做雙機熱備,爭搶虛擬IP。一個MyCat宕機,另一個MyCat立即投入使用。并且全局主鍵也是用Zookeeper來生成的。
如果是跟錢有關系的項目,重要的數據一定要存儲在MySQL的PXC集群中,那就是另外一套數據庫集群的方案了。不管怎么說,數據庫平臺搭建出來之后,接下來就應該是對業務數據建表了。我讓你熟悉了一周的業務,建表應該不成問題。這個階段是一次性集中時間把所有的數據表都創建出來。反復修改表結構的痛苦,大家都知道。所以設計數據表就一次成型,以后盡量不要再動數據庫的表結構。
再往下就該搭建項目了。我不建議大家把大量的時間花在項目搭建上,沒必要重復發明輪子。我們可以借助開源項目,做二次開發。比如說人人網開源了一個renren-fast項目。是前后端分離的結構。后端用的是SpringMVC+MyBatis,還集成了Shiro、Swagger、Jwt、Druid等一系列第三方的組件。
我對比過很多開源框架,只有renren-fast做的最好。它自帶了一個代碼生成工具,可以根據數據表來生成DAO、Service、Controller代碼,而且還可以自動生成前端的VUE畫面,大家可以去觀看體驗一下。
我們把生成的代碼拷貝到工程里面,這就省去我們70%的工作量,開發效率也就提高了很多。
renren-fast不是微服務項目,只是一個前后端分離項目。但是我們可以把它做成分布式的項目,以后部署的時候,把后端項目組成集群,用Nginx或者Haproxy做負載均衡。加上Keepalived技術,Nginx或者Haproxy掛掉一個也不用擔心,冗余的Nginx馬上會上線。
Java項目搭建出來之后,因為還要使用緩存,所以配置一套RedisCluster集群出來,然后對接到Spring Cache上面,讓Spring管理緩存。
寫模擬項目的時候,就跟正式的項目開發一樣。日志文件正常生成;防止XSS攻擊,數據要轉義后再存儲;有審批的地方,就引入工作流。需要任務調度,就用QuartZ。
renren-fast前端用的是VUE+ElementUI,都是常用的前端技術。而且頁面已經生成的七七八八了,你往里面再添加點東西就可以了。而且renren-fast生成的VUE頁面里面是包含了權限判斷的。權限不夠,根本看不到VUE頁面的內容。
綜合來看,如果數據庫平臺已經建立起來的條件下,我自己寫一個普通的管理系統,一個月左右的時間吧。
如果你來寫一個管理系統,邊查資料邊寫程序,三個月左右差不多能完成一個管理系統。前提是數據庫一定一定要設計的合理,要不然你這個項目總是推翻重來。
如果是已經工作的同學,直接可以把你當前項目的需求拿過來,然后把它改造成微服務或者分布式架構的,再實現一遍。因為是模擬項目,所以技術的取舍完全由你來把控,各種厲害的技術都往上添加吧。
項目做完之后,就到了部署環節。MySQL、Redis都已經集群了,后端項目也要集群,然后做負載均衡,前端前端項目也是如此。
我不建議大家把模擬項目部署在云平臺,分布式架構的項目需要很多云主機實例,配置還不能低了。為了省錢,大家還是在本地用VMware搭建虛擬機環境吧。給自己的電腦多加一條8GB的內存,也就是200多塊錢的事情。
在面試的時候不用跟面試官大吹特吹自己會多牛的技術,容易招致反感。首先你從包里掏出設計文檔,交給面試官過目,他看到你寫的需求文檔,還包括用例圖、流程圖、部署圖、狀態圖,ER圖,對你的第一印象會比較好,起碼項目是真實做過的,而不是“包裝過”的。
接下來,你打開筆記本,演示一下你的項目。當場掛掉幾個數據庫節點、Redis節點、Java節點和前端節點,然后再訪問這個Web系統,依然可以正常使用。于是你就可以跟面試官聊一下,你這個項目架構是怎么設計的。
這么一套流程走下來,基本上offer就到手了。大家記住,在面試的時候一定要演示自己項目,切記切記。
之前我在咱們群里說過,曾經我項目組里面有個實習的同學,讀的只是個普通的211學校,高校排名90多,幾乎相當于一本B段的學校了。2015年實習期滿,去北京投了幾家公司,大半天時間去了百度、京東、用友面試,當天就拿到這些公司的offer,然后又去了中石油旗下的中油瑞飛面試,也順利的拿到了Offer。
他說面試的當天,都是清華、浙大、交大、復旦這些學校的人,而且研究生還占了一大半。之所以中石油這么受歡迎,因為入職滿五年就可以落戶北京。他等到面試的環節,按照我說的,把項目演示了一遍,于是就拿到了Offer。這是他簽完offer之后,在微信上跟我的聊天。
所以你看,學歷沒優勢,技術夠強悍,依然能脫穎而出。去BATJ大廠面試,僅憑一門技術是不行的,要精通多種技術,并且精通Linux系統,能熟練駕馭項目集群架構。如果你具備這些,對于BATJ的HR來說,你每天思考的程序,就是BATJ這些程序員每天做的事情。錄用你,基本上不用什么培訓,短期就能上崗。進BATJ這些還是很容易的,但是你磨練技術的過程是艱辛的,努力吧!
接下來,我談一下第一份工作應該選擇創業公司,還是大型名企?這個問題,想都不用想,往名企努力。如果你一上來就選擇去小企業工作,三年之后,技術提升的并不大,再想去大企業工作,難上加難。年紀大了,成本比應屆生高,但是技術水平并不比應屆生高多少。小企業往大企業跳槽真的很難,建議大家,聽完今天的分享,奮發圖強,抓大放小,利用有限的時間學習更多的技術。
今天的主題是怎么樣掌握企業級的技術,我列出來一個學習計劃,把企業級技術融入到平時學習的過程中,而不是在模擬項目中學習企業級技術,那樣你永遠是推翻再重來,既浪費時間,又沒做出來什么東西。
這次分享,我是在戰略的層面介紹了一下學習的路徑。雖然沒有像上一個講師那樣,深入講解某一個知識點。但是戰略層面的東西往往更加重要。
比如說楚漢相爭,項羽在戰術層面上,每次都贏了劉邦。但是形勢對自己卻越來越不利,人心跟地盤都在往劉邦那一方聚集。最后一戰,終于輸給了劉邦。
說這個例子是想勸告大家,你距離35歲職業危機的大限時間是有限的。你不能在這期間胡亂學習技術,時間浪費了,就再也找不回來了。按照我規劃的路徑,抓住這些核心技術,找準戰略目標,幾年之后你也能成為公司里的技術大牛!好了以上就是我這一次的技術分享,感謝大家的支持!
讀完大佬分享的這篇文章有沒有豁然開朗的感覺呢?
最后:
愿大家前程似錦,加油!!
總結
以上是生活随笔為你收集整理的分享一篇写的非常好的文章《如何掌握企业级技术和项目经验》,非常值得一看!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【FPGA】数码管电子时钟
- 下一篇: Java面试--堆和栈的概念和区别