<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          重磅!兩萬字長文總結(jié),梳理 Java 入門進(jìn)階哪些事(推薦收藏)

          共 16993字,需瀏覽 34分鐘

           ·

          2021-01-14 21:45

          這是程序員小躍的第?162?篇原創(chuàng)分享

          作者 l 程序員小躍
          來源 l 程序員小躍(ID:runningdimple)


          大家好,我是程序員小躍,一名在職場已經(jīng)寫了6年程序的老程序員,從一開始的菊廠 Android 開發(fā)到現(xiàn)在某游戲公司的Java后端架構(gòu),對Java還是相對了解的挺多。

          大概是半年前吧,在知乎上有個(gè)知友私信給我,問我關(guān)于零基礎(chǔ)如何學(xué)習(xí)Java,以及在學(xué)習(xí)過程中會存在一定的迷茫,如何應(yīng)對等等。

          我想著何不把以前的內(nèi)容重新整合下分享出來給大家呢,于是就有了今天的這次分享。

          在過去的一年多時(shí)間里,躍哥通過這份清晰的路線圖,已經(jīng)幫助 20+同學(xué)做好定位,快速認(rèn)清了自己當(dāng)前的現(xiàn)狀,并做好相應(yīng)的應(yīng)對措施,甚至有同學(xué)通過調(diào)整,已經(jīng)拿到了心儀的 offer。

          那么馬上進(jìn)入主題,該篇內(nèi)容主要涉及到以下主題,其中第一部分學(xué)習(xí)路線,在總結(jié)完每個(gè)路線的時(shí)候,躍哥還會有完成路線的成就感是什么,以及一些實(shí)用的書籍推薦噢。(每個(gè)模塊都有思維導(dǎo)圖總結(jié)以及 PPT,如需獲取完整版導(dǎo)圖,后臺回復(fù)「學(xué)習(xí)路線」即可

          • Java從入門到進(jìn)階學(xué)習(xí)路線
          • 主導(dǎo)三個(gè)項(xiàng)目,讓我獨(dú)當(dāng)一面
          • 能力提升你要怎么學(xué)
          • 全篇總結(jié)

          Java 現(xiàn)在主要是作為后端應(yīng)用在發(fā)展,尤其是他的微服務(wù)領(lǐng)域。根據(jù)編程語言排行來看,Java 常年占據(jù)榜單的 Top 3,學(xué)習(xí)和使用 Java 的伙伴實(shí)在是太多了。甚至有大V認(rèn)為,在微服務(wù)領(lǐng)域 Java 目前是王者。

          全球有 1200 萬以上 Java 程序員以及海量的設(shè)備,還有無所不能的 Java 生態(tài)圈。諸如阿里巴巴、京東、百度、騰訊、美團(tuán)、去哪兒等互聯(lián)網(wǎng)公司,基本都是以 Java 為首選編程語言的。即使在最新的云計(jì)算領(lǐng)域,Java 仍然是 AWS、Google App Engine 等平臺上,使用最多的編程語言。

          所以,我們學(xué)習(xí) Java 的更進(jìn)一步目標(biāo)就是把自己培養(yǎng)成微服務(wù)高手,找工作的目標(biāo)要么就是去大廠寫 Java,要么在小廠成為獨(dú)當(dāng)一面的主程。當(dāng)然目前 Android 開發(fā)雖然說使用了Kotlin,使用 Java 的還是大有人在,躍哥就是從Android開發(fā)內(nèi)部轉(zhuǎn)到Java開發(fā),也算是沒有付出很高的代價(jià)。


          Java從入門到進(jìn)階學(xué)習(xí)路線


          了解 Java 語言



          • Java 的前世今生
          • Java 如何編譯
          • Java 環(huán)境配置
          • Java 編譯器

          很多同學(xué)很喜歡一上來就想著寫代碼,恨不得一拿到書本的第一頁就是教你如何如何寫代碼,其實(shí)不是這樣的。

          我們了解一門語言,一開始還是需要了解Java 的前世今生,Java 是怎么來的,如何發(fā)展,以及如何規(guī)劃的。知道 Java 怎么來,應(yīng)用在哪,我們才能去挖掘更多屬于 Java 的價(jià)值,對不對?所以請問下大家,目前大家在用哪個(gè)版本呢?最新的版本是多少?最新的長更新版本又是多少?

          所以很多教科書第一部分基本會聊一聊 Java 的歷史,以及如何編譯 Java,而不是一上來就讓大家用編譯器開始玩轉(zhuǎn)。

          躍哥一開始寫 Java 還是敲的命令行,用記事本寫過 Java 代碼,語法錯(cuò)誤都是靠編譯一步步調(diào)整過來的,雖然很累,但是很受用。

          不過我們最終是需要創(chuàng)造生產(chǎn)力的,而且來我們這里學(xué)習(xí)的同學(xué)肯定都是有功底的,所以其實(shí)這個(gè)第一部分是我的廢話。比如 Java 如何編譯,環(huán)如何安裝,選擇合適的編譯器(目前基本就是 IDEA 和 Eclipse 兩強(qiáng)割據(jù)時(shí)代)

          Java 是一門純粹的面向?qū)ο蟮木幊陶Z言,所以必須得弄懂它的 OOP 特性:封裝、繼承、多態(tài)。


          關(guān)于基本知識學(xué)習(xí)


          基礎(chǔ)知識包括(這部分主要參考《Java核心技術(shù)卷》):




          1. 基本程序結(jié)構(gòu):基本變量類型、運(yùn)算符、字符串、流程控制、數(shù)組
          2. 類與對象:類的定義和使用、靜態(tài)屬性和方法、繼承、包管理、枚舉、反射
          3. 接口和抽象類:接口的定義及實(shí)現(xiàn)、抽象類的定義及實(shí)現(xiàn)
          4. 泛型:泛型類、泛型方法
          5. 集合:Set、List、Map、樹、排序和查找
          6. 異常與調(diào)試:內(nèi)置異常、聲明異常、自定義異常、捕獲異常、日志
          7. 多線程:多線程概念、使用線程、同步
          8. Java 8 之后的新特性:Lambda表達(dá)式、Stream(map、filter、reduce、集合)
          9. Java 網(wǎng)絡(luò)編程:TCP、UDP
          10. Java I/O、NIO
          11. 算法與數(shù)據(jù)結(jié)構(gòu)

          學(xué)習(xí)基本知識,就是讓你對Java語言有一個(gè)初步的了解。話又說回來,基礎(chǔ)知識是學(xué)習(xí)一門編程語言的必備條件,而且大部分語言的基礎(chǔ)知識都是大同小異,包含基本的數(shù)據(jù)類型、程序結(jié)構(gòu)等等。如果是Java這類面向?qū)ο蟮模敲催€得掌握面向?qū)ο蟮闹R,面向?qū)ο笫侵刂兄?,面向?qū)ο笫侵刂兄?,面向?qū)ο笫侵刂兄?,重要的事情說三遍。只有掌握面向?qū)ο蟮闹R,在后續(xù)的開發(fā)中才會有更好的成長。

          這部分我加了算法和數(shù)據(jù)結(jié)構(gòu),其實(shí)我也在猶豫到底要把他分在哪個(gè)模塊里,因?yàn)閷W(xué)校里學(xué)的時(shí)候,會教你基本的算法;但是工作,面試的時(shí)候,考的算法會綜合起來,并不是生掰硬套就可以的。

          現(xiàn)在校招算法是必備的模塊了,所以我還是歸結(jié)在基本知識里。比如我以前面試候選人的時(shí)候,冒泡這種是常常出現(xiàn)的。

          成就感:學(xué)習(xí)了 Java 的前世今生,以及基本知識,就表示你可以愉快開始愉快的玩耍了。

          學(xué)習(xí)完上面的 1-6 條那就可以在編譯器上新建一個(gè)工程,開始初步掌握 Java 的基本操作,學(xué)完 7-11 可以嘗試完成一個(gè)簡單的聊天系統(tǒng),寫一個(gè)服務(wù)端,一個(gè)客戶端,就可以進(jìn)行聊天通信,那時(shí)候你的成就感會很足的噢。

          推薦書單



          • 學(xué)習(xí)過程躍哥是按照《Java 核心技術(shù)卷 1》、《Java 核心技術(shù)卷 2》來的
          • 躍哥剛開始學(xué)習(xí)的時(shí)候,是看了李剛老師的《瘋狂 Java 講義》,在實(shí)驗(yàn)室潛心學(xué)習(xí)半個(gè)多月啃出來的書
          • 并發(fā)方面,可以看看《Java 并發(fā)編程實(shí)戰(zhàn)》
          • Java 新特性,可以查閱《Java 實(shí)戰(zhàn)》,躍哥最近也在回憶鞏固,內(nèi)容很干
            算法的話,入門就推薦下去年很火的程序員小灰的《漫畫算法》,以及最近很火的東哥寫的 《labuladong的算法小抄》


          關(guān)于 Spring 學(xué)習(xí)(Web 框架)




          下面是掌握 Spring 相關(guān),需要掌握的知識(可能不止,也可能有遺漏,后續(xù)可以再補(bǔ)充)

          1. Maven:Maven與包管理、POM文件、生命周期等
          2. 單元測試:單元測試的概念,Junit
          3. Spring Core:依賴注入與控制反轉(zhuǎn)、Spring概述、xml 裝配 bean、Spring容器與生命周期、自動裝配、注解裝配、切面編程(AOP)
          4. HTTP協(xié)議:基本概念、方法(GET/POST)、HttpClist 庫
          5. JSON知識:JSON 概念、JSON 與 HTTP、JSON封裝的庫(FastJson、jaskson 庫)
          6. Servlet概念:Servlet 概念、Servlet 生命周期、Filter 和 Listener、Tomcat 與 Servlet 容器
          7. Spring MVC概念:配置Spring MVC、路徑映射、參數(shù)傳遞、實(shí)現(xiàn)REST、權(quán)限控制等

          有了第一部分的基本知識,那我們第二步就是直奔主題。在領(lǐng)域里,Spring就是需要學(xué)習(xí)的利器。我大學(xué)是學(xué)習(xí)客戶端的,所以那時(shí)候?qū)蠖说恼J(rèn)知就是 Spring、Struts2、Hibernate三駕馬車,結(jié)果后等自己寫后端的時(shí)候,發(fā)現(xiàn)時(shí)代已經(jīng)變了,現(xiàn)在更多的是掌握 Spring、Spring MVC、Mybatis,尤其是 Spring 框架。

          這部分涉及的點(diǎn)也比較多,但是學(xué)習(xí)起來,基本都是連貫的。從你新建一個(gè)Spring項(xiàng)目開始,就一步步循序漸進(jìn),只要你開始寫代碼,這些知識都會涉及到,不用害怕自己沒接觸,學(xué)不會。

          這里的書單推薦在后面,請稍等。


          關(guān)于應(yīng)用服務(wù)的學(xué)習(xí)



          主要包括但不限于

          1. MySQL:關(guān)系型數(shù)據(jù)庫概念,數(shù)據(jù)庫的CRUD操作、JDBC API、數(shù)據(jù)庫特性,數(shù)據(jù)庫連接池
          2. MyBatis:OR映射概念,配置,映射,基本Java庫,和Spring集成
          3. 緩存:緩存概念、Redis的使用、緩存雪崩、緩存穿透、緩存擊穿
          4. NoSQL:NoSQL概念,Mongodb的使用
          5. 隊(duì)列:隊(duì)列概念,RabbitMQ、Kafka
          6. 搜索引擎:Elasticsearch
          7. 反向代理:反向代理概念,Nginx的配置和使用

          應(yīng)用服務(wù)這一塊,涵蓋了很多領(lǐng)域,包括持久化、緩存、隊(duì)列、反向代理等,這些是完善一個(gè)程序的重中之重。前面的那幾個(gè)知識屬于基礎(chǔ)框架,那么中間件就是給框架里填充一些增強(qiáng)的部分,讓程序健壯穩(wěn)定。想必大家平時(shí)練手之類的遇到頻率很高的項(xiàng)目就是電商類的項(xiàng)目,比如電商類中的秒殺就用了redis緩存知識。

          這部分內(nèi)容我覺得很有意思,一個(gè)功能完成了,僅僅是第一步,要完善他還需要多種配合。比如我們的數(shù)據(jù)存儲,用到了SQL相關(guān)的知識,那就去掌握起來,現(xiàn)在互聯(lián)網(wǎng)上基本都用MySQL再使用;然后你需要支持秒殺這類,就得用到Redis相關(guān);庫存更新是門技術(shù)活,你可能需要用到消息隊(duì)列;歷史訂單查詢,可以選擇用mongodb,Elasticsearch;訪問壓力太大,你可能需要流量分發(fā),甚至是熔斷,那就需要Nginx的使用。

          你看,這些應(yīng)用就這樣無形之中被應(yīng)用起來,來提升應(yīng)用的健壯性。我剛提到的這些,如果僅僅是小的項(xiàng)目使用或者是自己練手,存儲上SQL就足夠了,不需要用緩存等其他的,但是應(yīng)用大了,就不得不考慮各種情況,那么這些神器就慢慢的使用上了。

          你看,編程其實(shí)就是這么神奇,都是循序漸進(jìn)的過程。

          書單推薦:這里提到的很多,已經(jīng)有很多優(yōu)秀的書籍,躍哥就簡單推薦幾本,供大家參考。


          • 《高性能 MySQL》(豆瓣評分 9.3,0.4K+人評價(jià)):mysql 領(lǐng)域的經(jīng)典之作,擁有廣泛的影響力。不但適合數(shù)據(jù)庫管理員(dba)閱讀,也適合開發(fā)人員參考學(xué)習(xí)。不管是數(shù)據(jù)庫新手還是專家,相信都能從本書有所收獲。
          • 《Redis 實(shí)戰(zhàn)》:如果你想了解 Redis 的一些概念性知識的話,這本書真的非常不錯(cuò)。
          • 《Redis 設(shè)計(jì)與實(shí)現(xiàn)》(豆瓣評分 8.5):躍哥學(xué)習(xí) Redis 的時(shí)候,除了看官網(wǎng),捧在手里的就是這本書啦。
          • 《RabbitMQ實(shí)戰(zhàn) : 高效部署分布式消息隊(duì)列》也是 《RabbitMQ in Action : Distributed Messaging for Everyone》的中文版。最近在學(xué)習(xí)的時(shí)候,也看到老師推薦書單,有位老師就說,《xx in Action》這種書籍是經(jīng)典書籍,很適合大家看,哈哈,這個(gè)不假,后面我還要推薦幾本 xx in Action。
          • 《Kafka權(quán)威指南》
          • 《深入理解Nginx(第2版) : 模塊開發(fā)與架構(gòu)解析》

          Web 框架進(jìn)階




          1. SpringBoot
          2. SpringCloud
            • 服務(wù)發(fā)現(xiàn)(Eureka)
            • 服務(wù)網(wǎng)關(guān)(Zuul)
            • 負(fù)載均衡(Ribbon)
            • 斷路器(Hystrix)
            • 配置管理(Config)
          3. 阿里的 Dubbo

          到這里,很多同學(xué)應(yīng)該都了解了 SSM 框架,然后你會覺得框架也不過這么回事,這里躍哥簡單描述下一個(gè)輕量級 Web 框架主要具備以下功能:

          • 可讀取用戶自定義配置文件,并以此來初始化框架;
          • 具備 Bean 容器,管理項(xiàng)目的類的對象生命周期;
          • 具備依賴注入,降低類之間的耦合性;
          • 具備 AOP 功能,使項(xiàng)目可進(jìn)行橫向編程,可不改變原有代碼的情況增加業(yè)務(wù)邏輯;
          • 具備 MVC 框架模式。

          SSM 是我認(rèn)識的第一個(gè)Web框架,其實(shí)Web框架百花齊放,Spring 全家桶又是這些中的明星,尤其是他們家族中的 SpringBoot 和 SpringCloud 框架。

          SpringBoot 彌補(bǔ)了Spring 配置上的缺點(diǎn),再也不用為繁雜的 xml 耗費(fèi)更多的精力,一接觸SpringBoot的時(shí)候,仿佛打開了我的世界,顛覆了我之前的認(rèn)知。如果你的項(xiàng)目剛開始,還在積累用戶的階段,那么SpringBoot 是一個(gè)好的選擇,包括自己練手學(xué)習(xí)的項(xiàng)目,從SpringBoot 著手再合適不過了。

          SpringCloud 是一個(gè)微服務(wù)架構(gòu),能夠?qū)㈨?xiàng)目按照業(yè)務(wù)分成一個(gè)個(gè)微服務(wù),每個(gè)微服務(wù)都可獨(dú)立部署,服務(wù)之間互相協(xié)調(diào)。當(dāng)一個(gè)項(xiàng)目越來越大時(shí),隨之而來的是越來越難以維護(hù),此時(shí)將項(xiàng)目拆分成若干個(gè)微服務(wù)、單獨(dú)維護(hù)、單獨(dú)部署,也可以降低項(xiàng)目不同業(yè)務(wù)間的耦合度。

          這里還得提一個(gè)阿里的Dubbo,開源分布式服務(wù)框架,并被廣泛應(yīng)用于中國各互聯(lián)網(wǎng)公司;只需要通過 Spring 配置的方式即可完成服務(wù)化,對于應(yīng)用無入侵,設(shè)計(jì)的目的還是服務(wù)于自身的業(yè)務(wù)為主。Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動注冊和發(fā)現(xiàn)。

          雖然中間Dubbo一度停止更新,但是阿里在2017年重新開始維護(hù),他和Spring Cloud 都是實(shí)現(xiàn)微服務(wù)有效的工具。不過兩者也有側(cè)重點(diǎn),這個(gè)大家可以搜索下,用一部分小伙伴通過臺式電腦的比喻來說就是:Dubbo 是品牌機(jī),Spring Cloud 是組裝機(jī)。

          我提供一個(gè)描述區(qū)別和聯(lián)系的資料:https://www.cnblogs.com/aspirant/p/9089146.html

          Spring、SpringBoot、SpringCloud

          估計(jì)這時(shí)候,一些小伙伴開始懵逼了,Spring、SpringBoot、SpringCloud 這三個(gè)到底是啥關(guān)系,什么和什么呢?

          躍哥這里參考了廖雪峰官網(wǎng)上的簡單描述:

          Spring 是 JavaEE 的一個(gè)輕量級開發(fā)框架,主營 IoC 和 AOP,集成JDBC、ORM、MVC等功能便于開發(fā)。

          Spring Boot是基于Spring,提供開箱即用的積木式組件,目的是提升開發(fā)效率。

          那么Spring Cloud是啥?

          Spring Cloud顧名思義是跟云相關(guān)的,云程序?qū)嶋H上就是指分布式應(yīng)用程序,所以Spring Cloud就是為了讓分布式應(yīng)用程序編寫更方便,更容易而提供的一組基礎(chǔ)設(shè)施,它的核心是Spring框架,利用Spring Boot的自動配置,力圖實(shí)現(xiàn)最簡化的分布式應(yīng)用程序開發(fā)。

          Spring Cloud包含了一大堆技術(shù)組件,既有開源社區(qū)開發(fā)的組件,也有商業(yè)公司開發(fā)的組件,既有持續(xù)更新迭代的組件,也有即將退役不再維護(hù)的組件。

          成就感:從基本知識的路上,越走越遠(yuǎn),完成了web 框架的學(xué)習(xí),以及應(yīng)用服務(wù)類的學(xué)習(xí),那么恭喜你,這時(shí)候已經(jīng)掌握了一個(gè)應(yīng)用的基本構(gòu)成。

          你已經(jīng)會很好地構(gòu)建項(xiàng)目了,也會通過多線程并發(fā)實(shí)現(xiàn)提升效率的工作;還能通過緩存來完成一定的壓力緩解,甚至是秒殺這類功能;還有消息中間件的使用,也是提升程序響應(yīng)性能、提高用戶體驗(yàn)的方式;如果你有機(jī)會接觸微服務(wù)領(lǐng)域,那就能了解限流,分發(fā),負(fù)載均衡等等,一般的應(yīng)用功能肯定就難不到你啦。

          你可以嘗試自己去構(gòu)建一個(gè)電商類項(xiàng)目,或者一個(gè) OA 類的項(xiàng)目,去鞏固自己的知識。

          書單推薦:講完了這幾個(gè)聯(lián)系和區(qū)別,我這里就隆重推出一套寫給Java開發(fā)者的經(jīng)典教程。


          圖書源自Manning公司經(jīng)典“小人書”系列,被稱為“Spring開發(fā)三劍客”,是Java開發(fā)者全面掌握Spring框架以及微服務(wù)開發(fā)的經(jīng)典書籍。

          • 《Spring實(shí)戰(zhàn) 第5版》介紹了Spring 5的核心特性。書很厚,躍哥前段時(shí)間剛送了一本給讀者。這里我們逐步構(gòu)建出一個(gè)安全的、以數(shù)據(jù)庫作為支撐的Web應(yīng)用。在這個(gè)過程中,你還將會探索反應(yīng)式編程、微服務(wù)、服務(wù)發(fā)現(xiàn)、RESTful API、部署并掌握專家級的較佳實(shí)踐,真的是 666 了。

          • 《Spring boot實(shí)戰(zhàn)》以自動配置、起步依賴、命令行界面和Actuator這四個(gè)核心特性為基礎(chǔ),深入介紹Spring Boot的用法,可以構(gòu)建出滿足你生產(chǎn)需要的工程。

          • 《Spring微服務(wù)實(shí)戰(zhàn)》顧名思義就是教讀者如何使用Java和Spring平臺構(gòu)建基于微服務(wù)的應(yīng)用程序。在構(gòu)建和部署第一個(gè)Spring Cloud應(yīng)用程序時(shí),將學(xué)習(xí)如何進(jìn)行微服務(wù)設(shè)計(jì)。而且這本書里還精心挑選了幾個(gè)真實(shí)案例展示了基于微服務(wù)的各種模式,很贊。

          • 《深入理解Apache Dubbo與實(shí)戰(zhàn)》關(guān)于 Dubbo,就推薦一本豆瓣評分7.0 的書給大家,這也是目前躍哥項(xiàng)目里在用的技術(shù),很歡迎和大家一起交流哦。


          優(yōu)化進(jìn)階類




          • 深入理解JVM虛擬機(jī)
          • Java 并發(fā)
          • Java 性能優(yōu)化
          • 設(shè)計(jì)模式:創(chuàng)建型(工廠、抽象工廠、生成器、原型、單例),結(jié)構(gòu)型(適配器、橋接、組合、裝飾器、外觀、享元、代理),行為型(責(zé)任鏈、命令、解釋器、迭代器、中介、備忘錄、觀察者、狀態(tài)、策略、模板方法、訪問者)
          • 設(shè)計(jì)原則:SOLID
          • 源碼分析

          前面描述的這么多,都是讓你成為合格的Java程序員需要成長的地方,學(xué)會了那些,此時(shí)就可以獨(dú)立完成一個(gè)Demo,獨(dú)立完成項(xiàng)目組分配給你的開發(fā)任務(wù)。對的,這僅僅是完成開發(fā)任務(wù),不過在我們程序員里,有一個(gè)和寫作差不多的道理就是:先完成后完善。

          一個(gè)需求扔給你,經(jīng)過你的一番分析,你要做的就是寫出來,完成功能。有時(shí)候僅僅完成是遠(yuǎn)遠(yuǎn)不夠的,舉個(gè)簡單的例子,我們學(xué)習(xí)多線程的時(shí)候,都會以銀行存取錢的例子來舉例,確保在多線程的情況下,銀行系統(tǒng)能穩(wěn)定。那么問題來了,多線程換一個(gè)角度,融合到你的需求里,你是不是能很好的掌握運(yùn)用起來呢?這就涉及到Java并發(fā)的掌握。

          還有,如果你的項(xiàng)目使用的人多了,忽然發(fā)現(xiàn)用戶量使用的高峰期,CPU 過載了;或者是一條請求很慢才返回,甚至出現(xiàn)了請求超時(shí);又或者是你的Java運(yùn)用看起來運(yùn)行正常,但是GC日志里發(fā)現(xiàn)一堆GC在里面,日志越來越大,有一天程序掛了。。。

          當(dāng)出現(xiàn)這些問題的時(shí)候,僅僅是完成代碼就不能解決你的困惑了,需要做的就是提升自己進(jìn)階方面的知識。比如多線程的合理運(yùn)用,同步問題,CAP問題;如果出現(xiàn)頻繁的讀寫數(shù)據(jù)庫,甚至是查詢慢的情況,還得掌握適當(dāng)?shù)臄?shù)據(jù)庫進(jìn)階,比如索引的配置,緩存的使用;針對一些代碼上的優(yōu)化,看看是不是可以合理的運(yùn)用設(shè)計(jì)模式參與,天天CRUD,也能玩出花來。

          總結(jié)起來就是,作為一名有追求的工程師,要學(xué)會用白盒的視角看待技術(shù),平時(shí)在工作中也要多問幾個(gè)為什么。正所謂,“知其然知其所以然”。你要努力逐步成為團(tuán)隊(duì)的核心成員,核心成員意味著能扛事。團(tuán)隊(duì)核心往往要能夠 Hold 住不同技術(shù)領(lǐng)域、切換不同角色,比如架構(gòu)設(shè)計(jì)、核心代碼開發(fā)、緊急線上問題攻關(guān)等(這段話引用自極客時(shí)間)。

          我在極客時(shí)間學(xué)習(xí)了很多Java相關(guān)的課程,很多老師都說強(qiáng)調(diào)一句話:源碼之下無秘密。所以,當(dāng)我們技術(shù)能力成長到一定程度的時(shí)候,就需要去學(xué)習(xí)下源碼,非必須,但你想更進(jìn)一步,這就是要多死磕了。

          成就感:都已經(jīng)到這部分了,之前的那些成就感對你來說都是毛毛雨啦。之前的那些,我們能很好地完成領(lǐng)導(dǎo)分配的需求任務(wù),不拖項(xiàng)目的后腿。

          這部分學(xué)完,那就厲害了。會性能優(yōu)化,表示你可以解決項(xiàng)目組遇到的難題(前段時(shí)間躍哥就幫助一名小伙伴完成雙休日CPU 負(fù)載 100%降到50%的過程,自己經(jīng)歷過了,成就感可能不僅僅是翻倍,真的)。

          會閱讀源碼,那你能做的事情就更多,能解決的問題也更多,舉個(gè)簡單的例子,List個(gè)種類很多,有 ArrayList、LinkList、Vector什么時(shí)候使用哪個(gè),你肯定能分析出來。

          設(shè)計(jì)模式就更不用說了,很多人說學(xué)了也用不上,一直在 CURD、你要是能靈活使用設(shè)計(jì)模式,代碼重構(gòu)不是挺簡單的事情?對吧。

          這時(shí)候,你可以挑戰(zhàn)自己,去慢慢地重構(gòu)自己之前寫的項(xiàng)目,或者是參與項(xiàng)目組更高端的任務(wù)中去,讓自己的價(jià)值更大的發(fā)揮出來。

          書單推薦:到了這部分,推薦的書單其實(shí)范圍就不多了,估計(jì)大家都耳熟能詳。


          • 《Java 并發(fā)編程實(shí)戰(zhàn)》,是一本完美的 Java 并發(fā)參考手冊。這樣解釋簡單明了吧,哈哈
          • 《Java 性能權(quán)威指南》了解如何編寫出并發(fā)的程序,你還需要了解一下如何優(yōu)化 Java 的性能,這本書比較合適。通過學(xué)習(xí),你可以比較大程度地提升性能測試的效果。其中包括:使用 JDK 中自帶的工具收集 Java 應(yīng)用的性能數(shù)據(jù),理解 JIT 編譯器的優(yōu)缺點(diǎn),調(diào)優(yōu) JVM 垃圾收集器以減少對程序的影響,學(xué)習(xí)管理堆內(nèi)存和 JVM 原生內(nèi)存的方法,了解如何最大程度地優(yōu)化 Java 線程及同步的性能,等等(這段摘抄耗子叔的《左耳聽風(fēng)》專欄)。
          • 看完上面那本書,如果還有余力,那么繼續(xù)深入,《深入理解Java虛擬機(jī)(第3版) : JVM高級特性與最佳實(shí)踐》這本書是周志明老師寫的,已經(jīng)到第三版了,躍哥學(xué)習(xí)過第二版,學(xué)完就飄了,看懂的話,得翻閱好幾次。
          • 設(shè)計(jì)模式就不解釋了,學(xué) Java 你一定要學(xué)面向?qū)ο蟮脑O(shè)計(jì)模式,經(jīng)典中的經(jīng)典自然就是《設(shè)計(jì)模式》。如果你覺得有點(diǎn)兒難度了,那么可以看一下《Head First 設(shè)計(jì)模式》。
          • 如果你想學(xué)好 Java,再去啃一啃《Java 編程思想》也無妨。真是一本透著編程思想的書。上面的書讓你從微觀角度了解 Java,而這本書則可以讓你從一個(gè)宏觀角度了解 Java。

          架構(gòu)技能



          • 架構(gòu)基礎(chǔ):高性能、高可用、可擴(kuò)展性、低成本、安全、規(guī)模
          • 高性能架構(gòu)模式:數(shù)據(jù)庫集群(讀寫分離、分庫分表);高性能 NoSQL、緩存架構(gòu);單服務(wù)器高性能模式(RPC);高性能負(fù)載均衡
          • 高可用架構(gòu):CAP 理論、細(xì)節(jié);集群和分期;異地多活保障
          • 可擴(kuò)展架構(gòu):目前主要是微服務(wù)架構(gòu)
          • 針對領(lǐng)域深究(比如音視頻領(lǐng)域、即時(shí)通信領(lǐng)域)
          • 如何做詳細(xì)設(shè)計(jì)

          到了架構(gòu)技能這里,其實(shí)就是逐步的讓自己從成為被直接喂養(yǎng)功能的一方,變成接收需求并分析,甚至是分配功能的一方。這時(shí)候要對軟件工程的執(zhí)行結(jié)果負(fù)責(zé),這包括:按時(shí)按質(zhì)進(jìn)行軟件的迭代和發(fā)布、敏捷地響應(yīng)需求變更、防范軟件質(zhì)量風(fēng)險(xiǎn)、降低迭代維護(hù)成本。如果我們機(jī)遇好,那可以涉及到一個(gè)新系統(tǒng)的誕生;也許我們沒有機(jī)遇從0到1設(shè)計(jì)一個(gè)新系統(tǒng),但是我們也可以是將架構(gòu)從1.0重構(gòu)到2.0。

          初級架構(gòu)師就是做這類事情的,基于完善的架構(gòu)設(shè)計(jì)方法論的指導(dǎo)來進(jìn)行架構(gòu)設(shè)計(jì),技術(shù)專家更多的是基于經(jīng)驗(yàn)進(jìn)行架構(gòu)設(shè)計(jì)。這兩類都可以,參與的點(diǎn)不一樣,但是實(shí)現(xiàn)的目標(biāo)就是如此。

          要完成復(fù)雜系統(tǒng)的架構(gòu)設(shè)計(jì),包含高性能、高可用、可擴(kuò)展、海量存儲等復(fù)雜系統(tǒng),例如躍哥等會兒說到的第二個(gè)項(xiàng)目,就是和老大從零開始基于Netty重新開發(fā)了公司應(yīng)用的聊天服務(wù)器系統(tǒng),從能用到好用,蛻變成長超級快。

          成長為高級架構(gòu)師需要 10 年以上時(shí)間,其典型特征是“創(chuàng)造新的架構(gòu)模式”,例如:高級架構(gòu)師與中級架構(gòu)師相比,典型區(qū)別在于“創(chuàng)造性”,高級架構(gòu)師能夠創(chuàng)造新的架構(gòu)模式,開創(chuàng)新的技術(shù)潮流。(這部分躍哥目前還在努力中)

          書單推薦:這部分躍哥也還在探索中,如果推薦的不好,大家多多見諒


          • 《從零開始學(xué)架構(gòu) : 照著做,你也能成為架構(gòu)師》這本書是我看的第一本架構(gòu)書,針對業(yè)務(wù)系統(tǒng)的架構(gòu)設(shè)計(jì),貼近日常工作,有自己的一套方法論,還是比較實(shí)用的
          • 《企業(yè)IT架構(gòu)轉(zhuǎn)型之道:阿里巴巴中臺戰(zhàn)略思想與架構(gòu)實(shí)戰(zhàn) : 阿里巴巴中臺戰(zhàn)略思想與架構(gòu)實(shí)戰(zhàn)》
          • 《軟件架構(gòu)設(shè)計(jì) : 大型網(wǎng)站技術(shù)架構(gòu)與業(yè)務(wù)架構(gòu)融合之道》
          • 《架構(gòu)整潔之道》

          其他補(bǔ)充




          1. 開發(fā)工具:IDEA、Eclipse、VS Code
          2. 版本控制工具:Git、SVN
          3. Docker、K8s
          4. 命令行工具:iterm2(MacOS)
          5. 網(wǎng)絡(luò)測試工具: PostMan、PostWoman
          6. 網(wǎng)絡(luò)抓包工具
          7. 持續(xù)集成:Jenkins
          8. Linux:遠(yuǎn)程連接Linux,Linux的常用命令(非必備)

          這部分和非技術(shù)相關(guān),但是在往后的項(xiàng)目使用中,是肯定需要用到的,屬于神兵利器吧。比如一開頭躍哥說的,初學(xué)者不要一開始就是用編譯器,但是工作需要,肯定是要選擇適合自己的編譯器。在我剛開始學(xué)習(xí)Android的時(shí)候,用的還是Eclipse,搭建環(huán)境簡直了,繁瑣的很,后來Google 推出了 Android Studio,大大減少了環(huán)境安裝的繁瑣,讓初學(xué)者一上來就可以快速使用,提升了效率。

          Android Studio 就是基于IDEA 搞出來的,然后我才了解到 IDEA,現(xiàn)在在我的工作中也是離不開了,IDEA 主要有幾個(gè)方面深深地吸引了我,讓我的效率提升很大。很多同學(xué)可能還是適應(yīng)Eclipse,這個(gè)就看自己的選擇和習(xí)慣啦,反正對于寫代碼來說,是差不多的。

          編譯器只是一方面,版本控制是團(tuán)隊(duì)協(xié)作的利器,除非你的工作是一個(gè)人單打獨(dú)斗,不然這塊還是必須要掌握的。作為一名后端,躍哥的習(xí)慣就是自己先測試完,再提供給前端調(diào)試,那需要一定程度上保證自己代碼的健壯性,必要的單元測試,甚至是流程測試都是必須的。

          如果你的公司有運(yùn)維部,去服務(wù)器上操作這種事情肯定不需要你插手了,這有利有弊吧。其實(shí),在測試環(huán)境里自己可以自己上手,為什么呢?因?yàn)榭梢钥焖俚娜inux上抓日志,查看問題,解決完之后,還能快速更新版本,省去和運(yùn)維溝通的成本。運(yùn)維有空的時(shí)候還好,如果他很忙,那你剩下的就是等待,這就得不償失了。出包發(fā)版本,還可以利用自動化工具,比如Jenkins,效率杠杠滴,用過都說香。

          書單推薦:這里推薦這些工具實(shí)用類,使用好了,開發(fā)效率提升好幾個(gè)臺階呢。


          • 《Git學(xué)習(xí)指南》 Git 現(xiàn)在是開發(fā)的必備技能,無論你是單兵作戰(zhàn)還是團(tuán)隊(duì)協(xié)作,都需要版本控制來協(xié)助,不然就會有最后一版,最最最后一版這種類似于畢業(yè)設(shè)計(jì)的效果出來,哈哈。
          • 《鳥哥的Linux私房菜 基礎(chǔ)學(xué)習(xí)篇》鳥哥屬于 Linux 的神人,談到 Linux,沒人不知道鳥哥的吧?
          • 《DevOps實(shí)踐指南》要提升自己運(yùn)維和持續(xù)集成的能力,就看著吧
          • 《第一本Docker書》
          • 《Kubernetes權(quán)威指南 : 從Docker到Kubernetes實(shí)踐全接觸(第2版)》Docker 和 K8S 現(xiàn)在是越來越廣泛了,很好地利用起來,運(yùn)維的工作也能輕松很多

          其他書單推薦:內(nèi)容里我沒有涉及到面試個(gè)的部分,學(xué)好了上面這些,鞏固了知識,面試基本是 OK 的,但是有時(shí)候?yàn)榱四芸焖僬莆眨€得突擊一下,這里就加點(diǎn)面試相關(guān)的吧。

          還有軟件編程其他方面的提升,比如代碼規(guī)范,重構(gòu)等等。

          image-20210110132603950
          • 《劍指Offer:名企面試官精講典型編程題(第2版)》躍哥周圍很多小伙伴,就是看了這本書的知識鞏固,成了 offer 收割機(jī)
          • 《代碼整潔之道:程序員的職業(yè)素養(yǎng)》這本書在我大學(xué)的時(shí)候老師就不停地開始推薦,工作之后也是一直被推薦,不得不看
          • 《重構(gòu) : 改善既有代碼的設(shè)計(jì)》舊版新版都很 OK,重構(gòu)是門技術(shù)活噢
          • 《阿里巴巴Java開發(fā)手冊(第2版)》一出來的時(shí)候就風(fēng)靡了,還順帶出了編譯器的插件,你安裝了嗎?
          • 《碼出高效:Java開發(fā)手冊》這本書源于影響了全球250萬名開發(fā)工程師的《阿里巴巴Java開發(fā)手冊》,作者靜心沉淀,對Java規(guī)約的來龍去脈進(jìn)行了全面而徹底的內(nèi)容梳理,配合著看妥妥的

          軟技能



          • 溝通能力

          軟技能這里,我單獨(dú)拎出來說。

          主要是平時(shí)程序員在很多人心中就是沉悶,不善于溝通,甚至還被調(diào)侃成沒有女朋友。但是,我們不能被這些影響,甚至需要努力去打破這種怪圈。

          躍哥確實(shí)也見過一些小伙伴沉默寡言,除了默默地寫代碼,平時(shí)很少和別人溝通,除了自己部門的人,其他部門的小伙伴認(rèn)識的不多,也不會打成一片,這樣對自己成長還是會有局限性。

          躍哥是個(gè)活潑開朗的人,也算是部門里和別的部門溝通最頻繁的那個(gè)人了,無論是工作還是閑聊。這么做的好處是什么?如果你是大公司,一整套系統(tǒng)下來需要涉及到多個(gè)部門,你不了解你隔壁部門是做什么的,就會很被動,甚至不停地讓領(lǐng)導(dǎo)去協(xié)調(diào),領(lǐng)導(dǎo)也很忙的;如果是小公司,和其他部門的人溝通無非就是走幾步的事情,再說了程序員群體里女生不多,其他部門女孩子多,萬一就成了呢(這個(gè)躍哥這里可是見過例子的);甚至你和別的部門打通了,可以了解他們是做什么的,他們的優(yōu)勢在哪,他們的困難在哪,有沒有你需要借鑒或者引以為戒的事,等等。

          躍哥經(jīng)歷了幾家公司,一直都是設(shè)備管理員,這個(gè)小小的職位,讓我打通了很多邊界,基本上和公司的人都能打成一片,至于有什么收獲?除了老婆是已經(jīng)找好了,其他的很多東西自己還是可以去接觸,去學(xué)習(xí),去獲取的。比如我的數(shù)據(jù)庫能力,除了平時(shí)寫代碼,就是煩著我們的DBA,我把他掏空。


          適當(dāng)?shù)那岸藢W(xué)習(xí)



          • Html、CSS、JavaScript
          • 前端框架:Vue、React

          這部分其實(shí)沒啥好聊的,我們這里主要是Java后段路線的學(xué)習(xí),前端就是稍稍帶過一下。

          學(xué)好前端的好處,就是前面說的,你用工具去測試你的代碼;那么有了前端,自己寫一個(gè)測試的Demo,前端請求下,比你用postman這類工具效率來的高,可以走一整套流程;躍哥會Android,一開始前后端寫作,都是我自己寫Android Demo完成的,提升了自己的效率不說,也讓App開發(fā)省了不少事,很多代碼,我都幫他們搭好框架了。

          SpringBoot + Vue 的組合學(xué)習(xí)起來,平時(shí)自己練練手,寫一個(gè)網(wǎng)站玩玩,技術(shù)人的開心,莫過于此吧。

          推薦書單:這部分的書單推薦就有點(diǎn)超綱啦,哈哈。


          • 《JavaScript高級程序設(shè)計(jì)(第3版)》要學(xué)好前端,JavaScript 是必須的
          • 《瘋狂HTML 5+CSS 3+JavaScript講義(第2版)》躍哥學(xué)習(xí)的就是和本書,學(xué)會了基礎(chǔ)才能走的更遠(yuǎn)嘛,對吧
          • 《Spring Boot+Vue全棧開發(fā)實(shí)戰(zhàn)》這本書是王松老哥寫的,我向他取了好幾次經(jīng),Vue 框架也是現(xiàn)在前端很流行的框架了,作者還是我們國人尤雨溪,驕傲吧
          • React.js 也是經(jīng)典的框架,這里屬于我的盲區(qū),就不推薦書單了


          主導(dǎo)三個(gè)項(xiàng)目,讓我獨(dú)當(dāng)一面



          這一個(gè)模塊是在 1024 程序員節(jié)的時(shí)候,我有感而發(fā),仔細(xì)回憶了我這么多年經(jīng)歷的最重要的三個(gè)項(xiàng)目,通過項(xiàng)目的方式和大家聊聊我是如何成長起來的!

          在極客時(shí)間的《設(shè)計(jì)模式之美》課程里,作者小爭哥說過一句話:對人一生有很大影響的四樣?xùn)|西:機(jī)遇、方向、能力、努力,我覺得它們一起決定了你是否能“成事”。我把我的經(jīng)歷總結(jié)起來,很應(yīng)景,就是我遇上了機(jī)遇,繼而有了能力上的提升,方向上的把控,以及持續(xù)努力的行動。

          回憶目前為止我主要經(jīng)歷了三個(gè)項(xiàng)目,仔細(xì)歸類的話,這三個(gè)竟然還都有所不同。

          我參與的第一個(gè)項(xiàng)目(Android 客戶端開發(fā))

          第一個(gè)項(xiàng)目,是我剛畢業(yè)半年之后進(jìn)到項(xiàng)目組的一個(gè)Android App 項(xiàng)目。之前 App 項(xiàng)目的主要業(yè)務(wù)邏輯是通過 JavaScript 編寫的,Android 端調(diào)用 WebView 展現(xiàn)即可,所以很多流程都是依賴于 JavaScript 的同學(xué)去完成。

          第一個(gè)技術(shù)就來了,當(dāng)時(shí)的領(lǐng)導(dǎo)們覺得有必要全部原生化,就讓我趕上了重構(gòu)的時(shí)代,說是重構(gòu),其實(shí)就是對之前在 JavaScript 上的業(yè)務(wù)遷移到 Android 原生上。

          慶幸的是,原有項(xiàng)目一開始做的就比較好,文檔之類的相對來說也齊全,做主流業(yè)務(wù)的同事一直在項(xiàng)目組里,哪怕文檔里沒有的業(yè)務(wù),自己把問題總結(jié)起來抽時(shí)間麻煩他,也能得到想要的答案,基于業(yè)務(wù)文檔的編碼還是相對輕松。

          也許老天是注定需要給我一次鍛煉的機(jī)會,在重構(gòu)伊始,我的師傅當(dāng)時(shí)的 Android 端負(fù)責(zé)人因?yàn)樯眢w原因休息了一個(gè)多月,就讓我這個(gè)徒弟去接手了當(dāng)時(shí)復(fù)雜的,核心的業(yè)務(wù),得到了一次快速成長的機(jī)會。

          抓住第一波機(jī)會的我,就這樣坑次坑次完成了人生中第一個(gè)商業(yè)化項(xiàng)目的重構(gòu)。因?yàn)轫?xiàng)目很龐大,經(jīng)歷了幾個(gè)月的加班加點(diǎn),上架的時(shí)候狂松了一口氣。幾個(gè)月的努力終于看到了回報(bào),因?yàn)榍捌跍?zhǔn)備的材料都很充分,對于業(yè)務(wù)上的阻礙輕松掃除,這次重構(gòu)對初入職場的我是很大的能力提升。

          試想一下,一個(gè)只在學(xué)校里自學(xué) Android 的科班生,第一次接手項(xiàng)目,不是反復(fù)的修改Bug,而是參與重大的版本改革,是多么的幸運(yùn);鍛煉的成長不言而喻,你能相信一開始入行的時(shí)候,我連面向?qū)ο蠖家恢虢鈫幔宽?xiàng)目的洗禮,可比學(xué)校里參考書籍寫Demo挑戰(zhàn)大多了。

          隨之而來的第二個(gè)項(xiàng)目(獨(dú)立完成聊天服務(wù)器系統(tǒng))

          第二個(gè)項(xiàng)目,是我去新公司之后的項(xiàng)目,做一個(gè)即時(shí)通信的項(xiàng)目。

          我來公司之前,有一個(gè)即時(shí)通信的在用,是基于 Flash 編寫的,從響應(yīng)速度和穩(wěn)定性來說都沒有讓領(lǐng)導(dǎo)和用戶滿意,當(dāng)時(shí)項(xiàng)目組里沒有 Java 的同事(新招一個(gè)畢業(yè)生之前也沒怎么接觸過 Java),領(lǐng)導(dǎo)想內(nèi)部發(fā)掘 Java 的員工。我做了一個(gè)方向上的選擇,所以,我的第二次機(jī)遇就在這個(gè)時(shí)候蹦出來。

          我到公司的時(shí)候是 Android 開發(fā),因?yàn)楫?dāng)時(shí)項(xiàng)目組有3個(gè) Android,沒有 Java,領(lǐng)導(dǎo)在征求大家的建議,問有沒有想轉(zhuǎn)的,我分析了自己的情況之后,主動要求轉(zhuǎn) Java,和老大一起去做這個(gè)即時(shí)通信框架。

          我們選擇 Netty 框架來進(jìn)行,用 WebSocket 通信,又一次加班加點(diǎn)的拼命時(shí)刻。(加班并不可怕,有意義的加班都不會考慮下班這件事,只會考慮能給自己帶來多少收益,多少收獲。)這次沒有文檔,只有代碼,也還是有幸運(yùn)的部分,之前框架的負(fù)責(zé)人一直在項(xiàng)目組里。

          難點(diǎn)就是,我需要看懂 Flash 的代碼,然后一步步遷移過去。此次從零開始,也有一點(diǎn)遺憾,整個(gè)框架是老大搭建好的,我的核心任務(wù)是在計(jì)劃時(shí)間之內(nèi),完全遷移即時(shí)通信的功能,盡快把項(xiàng)目跑通,調(diào)試上線完成。

          完美的人生總是不存在的,所以盡管那么點(diǎn)遺憾,搭建框架的時(shí)候我沒參與,但不妨礙我對 Netty 的理解,為此我還在掘金上付費(fèi)購買了 Netty 學(xué)習(xí)的一個(gè)專欄,加深我對 Netty 的理解。

          從客戶端轉(zhuǎn)到后端,給我最大的感觸就是我看項(xiàng)目看的范圍更大了,之前客戶端只是很片面的看到自己所負(fù)責(zé)的功能,后端能把整個(gè)項(xiàng)目都看透,尤其是業(yè)務(wù)方面的知識點(diǎn)。

          當(dāng)然,因?yàn)槌醮螀⑴c后端,第一次上線,給我當(dāng)頭一棒,現(xiàn)實(shí)著實(shí)把我教育了一番。后端編碼和客戶端還是存在不同,因?yàn)槲业牟皇炀?,在?xiàng)目上線的第一個(gè)晚上,因?yàn)榭覆蛔》逯档膲毫Γ丫W(wǎng)站給癱瘓了,業(yè)務(wù)宕機(jī)了一個(gè)小時(shí),幸虧老大幫我解決。

          這么嚴(yán)重的線上事故,給我當(dāng)頭一棒,后端完成代碼只是第一步,線上安全運(yùn)行才剛剛開始挑戰(zhàn)。這也是讓我堅(jiān)定,在做業(yè)務(wù)的同時(shí),需要持續(xù)的精進(jìn)自己的技術(shù),比如數(shù)據(jù)庫的頻繁讀寫,緩存的使用,緩存雪崩、擊穿的處理等等。


          正在進(jìn)行中的項(xiàng)目


          第三個(gè)項(xiàng)目,經(jīng)歷了第一個(gè)版本的迭代開發(fā),以及第二個(gè)版本的重構(gòu)(正在進(jìn)行中)。從別的團(tuán)隊(duì)手里接收過來,沒有文檔,純靠自己熟悉。這次的挑戰(zhàn)更大,沒有任何資料,只有App接口,參考接口一個(gè)個(gè)去熟悉項(xiàng)目,重構(gòu)項(xiàng)目。

          這就是我的1.0項(xiàng)目,我花了兩周的時(shí)間寫了35+的接口,從開發(fā)到測試,加班加點(diǎn)完成,把我累的。我之前也說了,天天CURD 也能玩出花來,這次這么緊急的情況下,我先完成了第一個(gè)版本,從一定程度上沒有拖項(xiàng)目的后腿,而且從寫代碼的時(shí)候,記錄了一些需要優(yōu)化的點(diǎn),以及需要改善的點(diǎn)。因?yàn)槭莿e人手里接手的,也是一個(gè)純外包的項(xiàng)目,和后期的規(guī)劃差了很多,就這樣,陰差陽錯(cuò),我們開始搞了第二個(gè)版本的迭代,也就是最近在做的 1.0 到 2.0 的升級。

          這次升級,把一個(gè)前后端結(jié)合在一起的臃腫的程序,拆分成了輕量級的架構(gòu);把一些冗余的數(shù)據(jù)庫進(jìn)行了改進(jìn),刪除優(yōu)化了很多表結(jié)構(gòu)信息,做了一些查詢的索引;最最最大的改變就是使用了微服務(wù)來完成重構(gòu)。

          這一整個(gè)過程,除了業(yè)務(wù)代碼是現(xiàn)成的,人都是從零開始,又是一次重大的機(jī)遇擺在我面前,不抓住那是傻子。很多群里的同學(xué),想?yún)⑴c項(xiàng)目還沒機(jī)會呢,我總是時(shí)不時(shí)地能碰到好的機(jī)會,來提升我的能力,或者這就是我的運(yùn)氣吧。

          經(jīng)歷過這次,我就不怕那種丟給你一堆代碼,甚至需求文檔都沒有的情況下,如何在保證項(xiàng)目正常運(yùn)轉(zhuǎn)的情況下,更好的做持續(xù)重構(gòu)。在項(xiàng)目重構(gòu)中熟悉業(yè)務(wù),在重構(gòu)中鞏固Java編程技能,那么在艱難的外部環(huán)境下,至少你是項(xiàng)目組那位不可或缺的人,想裁你的時(shí)候,還得考慮考慮呢,是吧。

          項(xiàng)目經(jīng)歷結(jié)語

          正如我開頭說的,總結(jié)我簡短的幾個(gè)項(xiàng)目經(jīng)歷(其實(shí)還有幾個(gè)瑣碎的項(xiàng)目,這里就省略了),就是我遇上了機(jī)遇。當(dāng)每次機(jī)會來臨的時(shí)候,放到你的面前,就看你怎么抓住了。一開始我是霸王硬上弓,但是到了后面就是不斷地通過自己的學(xué)習(xí),自己的努力,把能力提升上來;然后等待下一波機(jī)會的到來,或者是根據(jù)你的選擇,去創(chuàng)造另一個(gè)機(jī)會。

          這三次的經(jīng)歷,從我抓住機(jī)遇開始,后面又做了一次選擇,當(dāng)然加上自己平時(shí)的努力(平時(shí)多看書、多學(xué)習(xí)、多實(shí)踐還是必要的)。不過躍哥的性格上目前有點(diǎn)剛,甚至有時(shí)候覺得自己做得很好,同事都沒我強(qiáng),我有天下無敵的感覺,導(dǎo)致我蒙蔽了雙眼,還在努力嘗試改進(jìn)中。


          能力提升你要怎么學(xué)



          還沒開始實(shí)踐就有一堆煩惱


          Java開發(fā)也好,C語言也罷,還是其他的語言學(xué)習(xí),都是需要實(shí)踐的;這個(gè)你就把自己當(dāng)成一名技術(shù)工人,泥瓦工也是經(jīng)過千錘百煉才能造房子;包裝工也是經(jīng)歷過千萬次的包裝才能做到得心應(yīng)手;語言組織也是如此,作文就是一字一句積累起來的。

          編程是一門技術(shù)活,不是靠單純的體力活動能勝任的,所以想提升能力方面這個(gè)無他,唯有熟能生巧。寫代碼這個(gè)要求太低了,還遠(yuǎn)遠(yuǎn)不夠,我們還是想讓自己更加優(yōu)秀,那就需要做更多的努力

          我經(jīng)常和群友說,編程到最后并不是寫代碼,寫代碼是最最容易的事情。在寫代碼之前,還有需求分析,技術(shù)選型(選數(shù)據(jù)庫,選中間件等),架構(gòu)設(shè)計(jì),流程設(shè)計(jì),算法選擇,這些都完成了,那你把這些轉(zhuǎn)換成代碼就是水到渠成。

          這里只是給出一個(gè)最終的目標(biāo),針對初學(xué)者,一開始不能好高騖遠(yuǎn),也不能被困難所嚇倒。我上面給了學(xué)習(xí)路線,你看明白了嗎?所以,你現(xiàn)在心里有數(shù),有沒有被嚇到,如果沒有,那么請你仔細(xì)閱讀《Java核心技術(shù)卷1》,把上面的基礎(chǔ)知識都先掌握,出現(xiàn)的代碼都在編譯器上實(shí)踐,一行一行編寫,理解他。如果已經(jīng)被打倒,那后面就沒有什么事了,好好選擇一個(gè)更好的出路即可。

          等基礎(chǔ)知識都慢慢地學(xué)會,然后再去找一些小Demo,比如說實(shí)現(xiàn)一個(gè)計(jì)算器,就能檢驗(yàn)?zāi)愕膶W(xué)習(xí)成果。寫代碼是一個(gè)循序漸進(jìn)的過程,基礎(chǔ)先學(xué)會,逐漸就有成就感,那后面的困難就迎刃而解,否則等到后面學(xué)習(xí)算法,項(xiàng)目時(shí)間,困難重重。



          主動學(xué)習(xí)和被動學(xué)習(xí)



          -- 以下部分參考極客時(shí)間《左耳聽風(fēng)》專欄

          人的學(xué)習(xí)分為「被動學(xué)習(xí)」和「主動學(xué)習(xí)」兩個(gè)層次

          • 被動學(xué)習(xí):如聽講、閱讀、視聽、演示,學(xué)習(xí)內(nèi)容的平均留存率為 5%、10%、20% 和 30%。
          • 主動學(xué)習(xí):如通過討論、實(shí)踐、教授給他人,會將原來被動學(xué)習(xí)的內(nèi)容留存率從 5% 提升到 50%、75% 和 90%。

          這里可以理解出來,你聽別人講,或是自己看書,或是讓別人演示給你,這些都不能讓你真正獲得學(xué)習(xí)能力,因?yàn)槟闶窃诒粍e人灌輸,在聽別人說,在看別人的成果。

          只有你開始自己思考,開始自己總結(jié)和歸納,開始找人交流討論,開始踐行,并開始對外輸出,你才會掌握到真正的學(xué)習(xí)能力。

          學(xué)習(xí)不僅僅是為了知道,而更是為了思考和理解。在學(xué)習(xí)的過程中,我們不是為了知道某個(gè)事的表面是什么,而是要通過表象去探索其內(nèi)在的本質(zhì)和原理。真正的學(xué)習(xí),從來都不是很輕松的,而是那種你知道得越多,你的問題就會越多,你的問題越多,你就會思考得越多,你思考得越多,你就會越覺得自己知道得少,于是你就會想要了解更多。如此循環(huán),是這么一種螺旋上升上下求索的狀態(tài)。

          在學(xué)習(xí)的過程中,我們要不斷地問自己,這個(gè)技術(shù)出現(xiàn)的初衷是什么?是要解決什么樣的問題?為什么那個(gè)問題要用這種方法解?為什么不能用別的方法解?為什么不能簡單一些?……

          這些問題都會驅(qū)使你像一個(gè)偵探一樣去探索背后的事實(shí)和真相,并在不斷的思考中一點(diǎn)一點(diǎn)地理解整個(gè)事情的內(nèi)在本質(zhì)、邏輯和原理。一旦理解和掌握了這些本質(zhì)的東西,你就會發(fā)現(xiàn),整個(gè)復(fù)雜多變的世界在變得越來越簡單。你就好像找到了所有問題的最終答案似的,一通百通了。

          學(xué)習(xí)是為了改變自己的思考方式,改變自己的思維方式,改變自己與生俱來的那些垃圾和低效的算法??傊瑢W(xué)習(xí)讓我們改變自己,行動和踐行,反思和改善,從而獲得成長。

          全篇總結(jié)


          總算和大家分享完了,這里我簡單的總結(jié)一下。

          首先,就是都關(guān)心的問題,我選擇了Java,那么我以后能做什么。其實(shí)Java能做的很多,只是在現(xiàn)階段,我們通過編程語言排行榜也能看到,Java是穩(wěn)居前三,說明他有龐大的用戶群體,那么就代表著網(wǎng)絡(luò)上有海量的 Java 學(xué)習(xí)資料,良好的社區(qū)環(huán)境,優(yōu)秀的解決方案,以及超級多的框架學(xué)習(xí),你絲毫不用擔(dān)心自己找不到問題的解決方案,找不到學(xué)習(xí)的路徑,是在找不到,咱們還有星球呢。

          其次就是如何學(xué)習(xí),我列舉的 Java 學(xué)習(xí)路線也是根據(jù)后端的學(xué)習(xí)路線來,后面經(jīng)過補(bǔ)充,進(jìn)階部分也寫了。

          第三,就是學(xué)習(xí)方法,怎么學(xué)。說實(shí)話,編碼一直都是取決于個(gè)人的學(xué)習(xí)情況以及自律能力。很多人在學(xué)校里努力,在校招的時(shí)候就能有一個(gè)好的offer,有些在學(xué)校里沒能堅(jiān)持下來,可能畢業(yè)之后就放棄這條路了;還有些是一開始覺得很感興趣,后來發(fā)現(xiàn)自己不適合,要么學(xué)校里選擇轉(zhuǎn)專業(yè),要么出來之后轉(zhuǎn)產(chǎn)品,轉(zhuǎn)實(shí)施等也算是改行。那么,就是兩個(gè)結(jié)果,用籃球季后賽的術(shù)語就是 Win or Go Home。

          判斷自己是否有毅力學(xué)習(xí)下來,可以參考下我在上面的建議,當(dāng)然,如果小伙伴們有更好的建議,給我留言,讓大家一起交流交流。

          千萬不要什么都沒去實(shí)踐,但是一直在擔(dān)心擔(dān)心,擔(dān)心自己不能寫代碼。如果你不開始實(shí)踐,怎么知道自己是不是適合,是不是喜歡,是不是會走這條路呢,對吧。其實(shí)我剛讀大一,接觸 C 語言的時(shí)候,尤其是到了指針,鏈表,想過放棄,但是最后我斷了這個(gè)念頭,我要是不寫代碼,我大學(xué)不是白考了,轉(zhuǎn)專業(yè)?現(xiàn)實(shí)點(diǎn),能轉(zhuǎn)專業(yè)的,都是班里的女生,死磕學(xué)習(xí)成績,名額都搶光了。那么你還能怎么辦,硬著頭皮繼續(xù)吧。

          就這樣,一直到畢業(yè),我在實(shí)驗(yàn)室里看著書,敲著代碼,大家的暑假有兩個(gè)月,我的暑假就只給自己一個(gè)月,另外一個(gè)月都在學(xué)校里渡過,就是為了讓自己能不辜負(fù)父母的付出。后來,反正就是不斷的努力,成長,以及一定的機(jī)遇抓住就好。


          參考內(nèi)容:

          1. 極客時(shí)間左耳聽風(fēng)、設(shè)計(jì)模式、Java專題、架構(gòu)專題等專欄
          2. 廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1305158055100449
          3. 知乎關(guān)于Java的部分資料




          0、最后一天了,四個(gè)關(guān)鍵字回顧程序員小躍的2020

          瀏覽 35
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91狠狠综合 | 欧美操骚屄 | 搜国产黄色成人网站视频免费观看 | 黄色Ⅴ片一 | 亚洲第一黄色 |