刷完三個Java教程后不再猶豫
成年人最大的底氣是你擁有一技之長,人生才不會被動。從事測試開發崗位,需要精通一門編程語言,是核心,是大招,是招牌技能。我內心一直在Java和Python之間選擇,反復橫跳。
「在《2020年度總結,似乎沒有什么大的長進,似乎也得到了一些收獲》中寫到:」 “Python 編程。我并不是沒有編程基礎,匯編語言、C 語言、C++、數據結構、算法導論是大學必修課,我自己學過 JavaScript、Java(大學有選修課我沒報) 和 Golang。我的問題有 2 個,一個是同學對比下的挫敗感導致對編程的畏懼,另一個是就業方向太多,我想的也太多,徘徊在十字路口,沒有真正磨煉過。直到 Python 大火,我找到了適合我的路。它解決了我這 2 個問題,因為簡單,所以我很輕松就能獲得編程的成就感,Python 的生態雖然不是最好,但也還算不錯。與其來回糾結,不如選擇一條路走下去。精通 Python,也許能為我在工作上帶來還沒有出現過的那種興奮。”
「在《2021非正式年度總結》中寫到:」 “在任何行業都存在金字塔原理,從下往上,越往上門檻越高,人越少,但是所獲更多。對于測試來說,功能測試人員無疑是最多的,然后是自動化性能之類會寫代碼的,在寫代碼中,肯定是會Python的人是最多的,會Java的人少。而我身邊除了前面提到的兩位同事,以前聽說拿高薪,以及我在招聘網站看到高薪崗位的要求,都是要求會Java的。甚至我還在TesterHome上研究了一些大佬,這些大佬有9成都是會Java的。在國內,Java程序員是最多的,會Java的測試理所當然會更加吃香。忘了說,去初創公司的那位同事,這家公司的創始人是阿里P10。”
很顯然,最近這兩三年,就是在猶豫中度過的。躁動的原因無非以下幾點:
1.Python簡單,Java太難;
2.只會Python好像還差點意思;
3.想學Java一直沒找到門路;
直到我偶然遇見了它。
Java官方教程?:
我花了2周時間,像看小說一樣,迫不及待的把這個教程一口氣看完了。最震撼的,反復品味的一個認知點是,Java8大數據類型:byte、short、int、long、float、double、boolean、char。它們都是「小寫」。
Java中有嚴格的大小寫約定,大寫字母開頭的都是類名,基本類型都有對應的包裝類,封裝了更多對基本類型的方法,如Integer。
還有2個特殊的小寫關鍵字:void和array(數組)。而大寫的String其實是個類,而不是基本類型。
聯想到Python的基本類型:Number(數字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)、Dictionary(字典),一下就明白為啥Python是“萬物皆對象”這句話的含義了。Python沒有Java的「元類型」,Python的基本類型就已經是「類維度」的了。所以Python的變量都是指向的類的對象。Python中出現的int()、str()等小寫的其實都是「函數」而已,不是基本類型。
語言果然是相通的!打通了這一點,很多之前卡住的概念順理成章的就融會貫通了。對象、類、接口、包、繼承、集合、泛化、Lambda表達式、注解、異常等概念很輕松就吃下來了。最難理解的還是Stream流那一塊,以后在實踐中再慢慢掌握吧。
另外一個感觸很深的點是「Java的包管理機制」。它的命名是公司域名倒置如com.jd + 一級目錄 + 二級目錄 + 三級目錄 + 以此類推?的形式。Java提供了幾個默認的包,比如java.lang,Java本身的很多類都在這個包里面,隱式已經import了,不需要再單獨import。跟Python不一樣的是,Python每個文件都是一個module,引用其他文件里面的對象必須import;而Java每個文件是一個class,文件夾是package,同一個package下面的文件,想引用其他文件里面的類不需要import。并且,Java只有相同層級的才是一個包,父文件夾和子文件夾不是同一個包,也就是說,子文件夾的class想引用父文件夾的class,還是需要import的。
理解了這一層,再看公司后端的代碼,就要清晰很多了。所謂的分層設計,都要用到Java的包管理機制。
SpringBoot官方教程?
刷完Java官方教程后,我又馬不停蹄的刷了SpringBoot官方教程。說實話體驗很不好,我印象最深刻的就是spring-boot-start?開頭的是SpringBoot官方提供的封裝好的庫,而以它結尾的是三方自定義的庫。這在看pom.xml的時候能有眉目一點。后面的知識點很多都是各種配置,加上全英文,理解難度很大。不過還是囫圇吞棗式的完整刷了一遍,說不定萬一以后想到了,有點印象,能幫助檢索呢。
PS:后來明白了,SpringBoot本身就是約定大于配置,幫助簡化開發的。真正要學習的框架是「Spring」。
Java全棧知識體系?
這不是官方教程了,是大佬整理的博客。建議大家重點看下Spring欄目下的內容。
我刷完了Spring、框架|中間件、架構3個欄目下的全部內容,大部分是略過,重點看了Spring演進過程、緩存、限流、降級和熔斷、負載均衡幾塊內容。有三大收獲:
「一、Spring是由bean構成的。」 Spring中的bean相當于功能組件,我們通過組裝這些bean來實現一個系統應用。IOC容器就是來存放這些bean的容器,IOC是控制反轉,它的意思是,我們不需要自己用new來創建bean,而是由Spring來幫我們創建bean。把創建后的bean注入到程序代碼里面,就叫做依賴注入,有3種方式:XML配置、代碼配置、注解。理解到這個底層邏輯后,再往上看就能看懂設計理念了。Spring的演進過程是:J2EE (Java to 企業版) → Spring (SpringMVC是遵循MVC規范的Web開發框架) → SpringBoot (簡化Spring開發)。
「二、接觸Java才能拓展視野。」 在看架構欄目的時候,好多概念是在學習Python時無法體會的,比如緩存、限流、降級和熔斷、負載均衡、分布式系統、全局唯一ID、數據庫Sharding等。這些都是很多公司的后端技術,了解這些技術,有助于進行更深層次的測試。
「三、要善于畫圖。」 文章包含了很多圖,流程圖,結構圖,時序圖,架構圖,各種圖。也有淘寶、京東、閑魚、美團等公司的案例分享文章,也是各種圖。這說明在匯報時,圖是最有表現力的一種形式,這是社會共識。我在快速瀏覽過程中,也是會優先看圖,再看字。畫圖、會寫PPT是很重要的一項軟技能。
回想起左耳朵耗子的那段話:“離開Java的世界,基本上離開了做架構的世界 注:我以為用Java適合做架構這事應該是常識了,但是評論中有很多人非常反對這個事。那我解釋一下吧:首先,小型的項目用什么語言都行,愛用什么用什么。但是,真正的企業級架構就不一樣了,其中并不僅僅只是RESTful API或RPC,還有各種配套設施和控制系統,比如:應用網關,服務發現、配置中心、健康檢查、服務監控、服務治理(熔斷、限流、冪等、重試、隔離、事務補償)、Tracing監控、SOA/ESB、CQRS、EDA……這些東西在非Java的技術棧體系內,很難看到全貌,Java強大的生態環境,就是讓你把注意力放到更高層次的架構和業務上來的。(千萬不要覺得,整幾個服務RPC一下,加個緩存,加個隊列,就能叫架構,那只是系統集成罷了)”。
「以【努力成為一名測試架構師】為目標來看,精通Java是必經之路了。」
參考資料:
Java官方教程 https://dev.java/learn/
SpringBoot官方教程 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-started
Java全棧知識體系 https://pdai.tech/
別讓自己“墻”了自己 https://coolshell.cn/articles/20276.html