主頁 > 後端開發 > 兩萬字長文總結,梳理 Java 入門進階那些事

兩萬字長文總結,梳理 Java 入門進階那些事

2021-01-19 09:41:12 後端開發

大家好,我是程式員小躍,一名在職場已經寫了6年程式的老程式員,從一開始的菊廠 Android 開發到現在某游戲公司的Java后端架構,對Java還是相對了解的挺多,

大概是半年前吧,在知乎上有個知友私信給我,問我關于零基礎如何學習Java,以及在學習程序中會存在一定的迷茫,如何應對等等,
我想著何不把以前的內容重新整合下分享出來給大家呢,于是就有了今天的這次分享,

在過去的一年多時間里,躍哥通過這份清晰的路線圖,已經幫助 20+同學做好定位,快速認清了自己當前的現狀,并做好相應的應對措施,甚至有同學通過調整,已經拿到了心儀的 offer,

那么馬上進入主題,該篇內容主要涉及到以下主題,其中第一部分學習路線,在總結完每個路線的時候,躍哥還會有完成路線的成就感是什么,以及一些實用的書籍推薦噢,

先給大家看下完整的思維導圖,也是這篇文章的主要脈絡,

  • Java從入門到進階學習路線
  • 主導三個專案,讓我獨當一面
  • 能力提升你要怎么學
  • 全篇總結

Java 現在主要是作為后端應用在發展,尤其是他的微服務領域,根據編程語言排行來看,Java 常年占據榜單的 Top 3,學習和使用 Java 的伙伴實在是太多了,甚至有大V認為,在微服務領域 Java 目前是王者,

全球有 1200 萬以上 Java 程式員以及海量的設備,還有無所不能的 Java 生態圈,諸如阿里巴巴、京東、百度、騰訊、美團、去哪兒等互聯網公司,基本都是以 Java 為首選編程語言的,即使在最新的云計算領域,Java 仍然是 AWS、Google App Engine 等平臺上,使用最多的編程語言,

所以,我們學習 Java 的更進一步目標就是把自己培養成微服務高手,找作業的目標要么就是去大廠寫 Java,要么在小廠成為獨當一面的主程,當然目前 Android 開發雖然說使用了Kotlin,使用 Java 的還是大有人在,躍哥就是從Android開發內部轉到Java開發,也算是沒有付出很高的代價,

Java從入門到進階學習路線

了解 Java 語言
  • Java 的前世今生
  • Java 如何編譯
  • Java 環境配置
  • Java 編譯器

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

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

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

躍哥一開始寫 Java 還是敲的命令列,用記事本寫過 Java 代碼,語法錯誤都是靠編譯一步步調整過來的,雖然很累,但是很受用,

不過我們最終是需要創造生產力的,而且來我們這里學習的同學肯定都是有功底的,所以其實這個第一部分是我的廢話,比如 Java 如何編譯,環如何安裝,選擇合適的編譯器(目前基本就是 IDEA 和 Eclipse 兩強割據時代)

Java 是一門純粹的面向物件的編程語言,所以必須得弄懂它的 OOP 特性:封裝、繼承、多型,

關于基本知識學習

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

  1. 基本程式結構:基本變數型別、運算子、字串、流程控制、陣列
  2. 類與物件:類的定義和使用、靜態屬性和方法、繼承、包管理、列舉、反射
  3. 介面和抽象類:介面的定義及實作、抽象類的定義及實作
  4. 泛型:泛型類、泛型方法
  5. 集合:Set、List、Map、樹、排序和查找
  6. 例外與除錯:內置例外、宣告例外、自定義例外、捕獲例外、日志
  7. 多執行緒:多執行緒概念、使用執行緒、同步
  8. Java 8 之后的新特性:Lambda運算式、Stream(map、filter、reduce、集合)
  9. Java 網路編程:TCP、UDP
  10. Java I/O、NIO(WebSocket)
  11. 演算法與資料結構

學習基本知識,就是讓你對Java語言有一個初步的了解,話又說回來,基礎知識是學習一門編程語言的必備條件,而且大部分語言的基礎知識都是大同小異,包含基本的資料型別、程式結構等等,如果是Java這類面向物件的,那么還得掌握面向物件的知識,面向物件是重中之重,面向物件是重中之重,面向物件是重中之重,重要的事情說三遍,只有掌握面向物件的知識,在后續的開發中才會有更好的成長,

這部分我加了演算法和資料結構,其實我也在猶豫到底要把他分在哪個模塊里,因為學校里學的時候,會教你基本的演算法;但是作業,面試的時候,考的演算法會綜合起來,并不是生掰硬套就可以的,

現在校招演算法是必備的模塊了,所以我還是歸結在基本知識里,比如我以前面試候選人的時候,冒泡這種是常常出現的,

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

學習完上面的 1-6 條那就可以在編譯器上新建一個工程,開始初步掌握 Java 的基本操作,學完 7-11 可以嘗試完成一個簡單的聊天系統,寫一個服務端,一個客戶端,就可以進行聊天通信,那時候你的成就感會很足的噢,

推薦書單

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

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

  1. Maven:Maven與包管理、POM檔案、生命周期等
  2. 單元測驗:單元測驗的概念,Junit
  3. Spring Core:依賴注入與控制反轉、Spring概述、xml 裝配 bean、Spring容器與生命周期、自動裝配、注解裝配、切面編程(AOP)
  4. HTTP協議:基本概念、方法(GET/POST)、HttpClist 庫
  5. JSON知識:JSON 概念、JSON 與 HTTP、JSON封裝的庫(FastJson、jaskson 庫)
  6. Servlet概念:Servlet 概念、Servlet 生命周期、Filter 和 Listener、Tomcat 與 Servlet 容器
  7. Spring MVC概念:配置Spring MVC、路徑映射、引數傳遞、實作REST、權限控制等
  8. RPC框架(遠程程序呼叫)

有了第一部分的基本知識,那我們第二步就是直奔主題,在領域里,Spring就是需要學習的利器,我大學是學習客戶端的,所以那時候對后端的認知就是 Spring、Struts2、Hibernate三駕馬車,結果后等自己寫后端的時候,發現時代已經變了,現在更多的是掌握 Spring、Spring MVC、Mybatis,尤其是 Spring 框架,

這部分涉及的點也比較多,但是學習起來,基本都是連貫的,從你新建一個Spring專案開始,就一步步循序漸進,只要你開始寫代碼,這些知識都會涉及到,不用害怕自己沒接觸,學不會,

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

關于應用服務的學習

主要包括但不限于

  1. MySQL:關系型資料庫概念,資料庫的CRUD操作、JDBC API、資料庫特性,資料庫連接池
  2. MyBatis:OR映射概念,配置,映射,基本Java庫,和Spring集成
  3. 快取:快取概念、Redis的使用、快取雪崩、快取穿透、快取擊穿
  4. NoSQL:NoSQL概念,Mongodb的使用
  5. 佇列:佇列概念,RabbitMQ、Kafka
  6. 搜索引擎:Elasticsearch
  7. 反向代理:反向代理概念,Nginx的配置和使用

應用服務這一塊,涵蓋了很多領域,包括持久化、快取、佇列、反向代理等,這些是完善一個程式的重中之重,前面的那幾個知識屬于基礎框架,那么中間件就是給框架里填充一些增強的部分,讓程式健壯穩定,想必大家平時練手之類的遇到頻率很高的專案就是電商類的專案,比如電商類中的秒殺就用了redis快取知識,

這部分內容我覺得很有意思,一個功能完成了,僅僅是第一步,要完善他還需要多種配合,比如我們的資料存盤,用到了SQL相關的知識,那就去掌握起來,現在互聯網上基本都用MySQL再使用;然后你需要支持秒殺這類,就得用到Redis相關;庫存更新是門技識訓,你可能需要用到訊息佇列;歷史訂單查詢,可以選擇用mongodb,Elasticsearch;訪問壓力太大,你可能需要流量分發,甚至是熔斷,那就需要Nginx的使用,

你看,這些應用就這樣無形之中被應用起來,來提升應用的健壯性,我剛提到的這些,如果僅僅是小的專案使用或者是自己練手,存盤上SQL就足夠了,不需要用快取等其他的,但是應用大了,就不得不考慮各種情況,那么這些神器就慢慢的使用上了,

你看,編程其實就是這么神奇,都是循序漸進的程序,

書單推薦:這里提到的很多,已經有很多優秀的書籍,躍哥就簡單推薦幾本,供大家參考,

  • 《高性能 MySQL》(豆瓣評分 9.3,0.4K+人評價):mysql 領域的經典之作,擁有廣泛的影響力,不但適合資料庫管理員(dba)閱讀,也適合開發人員參考學習,不管是資料庫新手還是專家,相信都能從本書有所識訓,
  • 《Redis 實戰》:如果你想了解 Redis 的一些概念性知識的話,這本書真的非常不錯,
  • 《Redis 設計與實作》(豆瓣評分 8.5):躍哥學習 Redis 的時候,除了看官網,捧在手里的就是這本書啦,
  • 《RabbitMQ實戰 : 高效部署分布式訊息佇列》也是 《RabbitMQ in Action : Distributed Messaging for Everyone》的中文版,最近在學習的時候,也看到老師推薦書單,有位老師就說,《xx in Action》這種書籍是經典書籍,很適合大家看,哈哈,這個不假,后面我還要推薦幾本 xx in Action,
  • 《Kafka權威指南》
  • 《深入理解Nginx(第2版) : 模塊開發與架構決議》
Web 框架進階

  1. SpringBoot
  2. SpringCloud
    • 服務發現(Eureka)
    • 服務網關(Zuul)
    • 負載均衡(Ribbon)
    • 斷路器(Hystrix)
    • 配置管理(Config)
  3. 阿里的 Dubbo

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

  • 可讀取用戶自定義組態檔,并以此來初始化框架;
  • 具備 Bean 容器,管理專案的類的物件生命周期;
  • 具備依賴注入,降低類之間的耦合性;
  • 具備 AOP 功能,使專案可進行橫向編程,可不改變原有代碼的情況增加業務邏輯;
  • 具備 MVC 框架模式,

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

SpringBoot 彌補了Spring 配置上的缺點,再也不用為繁雜的 xml 耗費更多的精力,一接觸SpringBoot的時候,仿佛打開了我的世界,顛覆了我之前的認知,如果你的專案剛開始,還在積累用戶的階段,那么SpringBoot 是一個好的選擇,包括自己練手學習的專案,從SpringBoot 著手再合適不過了,

SpringCloud 是一個微服務架構,能夠將專案按照業務分成一個個微服務,每個微服務都可獨立部署,服務之間互相協調,當一個專案越來越大時,隨之而來的是越來越難以維護,此時將專案拆分成若干個微服務、單獨維護、單獨部署,也可以降低專案不同業務間的耦合度,

這里還得提一個阿里的Dubbo,開源分布式服務框架,并被廣泛應用于中國各互聯網公司;只需要通過 Spring 配置的方式即可完成服務化,對于應用無入侵,設計的目的還是服務于自身的業務為主,Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠程方法呼叫,智能容錯和負載均衡,以及服務自動注冊和發現,

雖然中間Dubbo一度停止更新,但是阿里在2017年重新開始維護,他和Spring Cloud 都是實作微服務有效的工具,不過兩者也有側重點,這個大家可以搜索下,用一部分小伙伴通過臺式電腦的比喻來說就是:Dubbo 是品牌機,Spring Cloud 是組裝機,

我提供一個描述區別和聯系的資料:https://www.cnblogs.com/aspirant/p/9089146.html

Spring、SpringBoot、SpringCloud

估計這時候,一些小伙伴開始懵逼了,Spring、SpringBoot、SpringCloud 這三個到底是啥關系,什么和什么呢?

躍哥這里參考了廖雪峰官網上的簡單描述:

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

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

那么Spring Cloud是啥?

Spring Cloud顧名思義是跟云相關的,云程式實際上就是指分布式應用程式,所以Spring Cloud就是為了讓分布式應用程式撰寫更方便,更容易而提供的一組基礎設施,它的核心是Spring框架,利用Spring Boot的自動配置,力圖實作最簡化的分布式應用程式開發,

Spring Cloud包含了一大堆技術組件,既有開源社區開發的組件,也有商業公司開發的組件,既有持續更新迭代的組件,也有即將退役不再維護的組件,

成就感:從基本知識的路上,越走越遠,完成了web 框架的學習,以及應用服務類的學習,那么恭喜你,這時候已經掌握了一個應用的基本構成,

你已經會很好地構建專案了,也會通過多執行緒并發實作提升效率的作業;還能通過快取來完成一定的壓力緩解,甚至是秒殺這類功能;還有訊息中間件的使用,也是提升程式回應性能、提高用戶體驗的方式;如果你有機會接觸微服務領域,那就能了解限流,分發,負載均衡等等,一般的應用功能肯定就難不到你啦,

你可以嘗試自己去構建一個電商類專案,或者一個 OA 類的專案,去鞏固自己的知識,

書單推薦:講完了這幾個聯系和區別,我這里就隆重推出一套寫給Java開發者的經典教程,

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

  • 《Spring實戰 第5版》介紹了Spring 5的核心特性,書很厚,躍哥前段時間剛送了一本給讀者,這里我們逐步構建出一個安全的、以資料庫作為支撐的Web應用,在這個程序中,你還將會探索反應式編程、微服務、服務發現、RESTful API、部署并掌握專家級的較佳實踐,真的是 666 了,

  • 《Spring boot實戰》以自動配置、起步依賴、命令列界面和Actuator這四個核心特性為基礎,深入介紹Spring Boot的用法,可以構建出滿足你生產需要的工程,

  • 《Spring微服務實戰》顧名思義就是教讀者如何使用Java和Spring平臺構建基于微服務的應用程式,在構建和部署第一個Spring Cloud應用程式時,將學習如何進行微服務設計,而且這本書里還精心挑選了幾個真實案例展示了基于微服務的各種模式,很贊,

  • 《深入理解Apache Dubbo與實戰》關于 Dubbo,就推薦一本豆瓣評分7.0 的書給大家,這也是目前躍哥專案里在用的技術,很歡迎和大家一起交流哦,

優化進階類

  • 深入理解JVM虛擬機
  • Java 并發
  • Java 性能優化
  • 設計模式:創建型(工廠、抽象工廠、生成器、原型、單例),結構型(配接器、橋接、組合、裝飾器、外觀、享元、代理),行為型(責任鏈、命令、解釋器、迭代器、中介、備忘錄、觀察者、狀態、策略、模板方法、訪問者)
  • 設計原則:SOLID
  • 原始碼分析

前面描述的這么多,都是讓你成為合格的Java程式員需要成長的地方,學會了那些,此時就可以獨立完成一個Demo,獨立完成專案組分配給你的開發任務,對的,這僅僅是完成開發任務,不過在我們程式員里,有一個和寫作差不多的道理就是:先完成后完善,

一個需求扔給你,經過你的一番分析,你要做的就是寫出來,完成功能,有時候僅僅完成是遠遠不夠的,舉個簡單的例子,我們學習多執行緒的時候,都會以銀行存取錢的例子來舉例,確保在多執行緒的情況下,銀行系統能穩定,那么問題來了,多執行緒換一個角度,融合到你的需求里,你是不是能很好的掌握運用起來呢?這就涉及到Java并發的掌握,

還有,如果你的專案使用的人多了,忽然發現用戶量使用的高峰期,CPU 過載了;或者是一條請求很慢才回傳,甚至出現了請求超時;又或者是你的Java運用看起來運行正常,但是GC日志里發現一堆GC在里面,日志越來越大,有一天程式掛了,,,

當出現這些問題的時候,僅僅是完成代碼就不能解決你的困惑了,需要做的就是提升自己進階方面的知識,比如多執行緒的合理運用,同步問題,CAP問題;如果出現頻繁的讀寫資料庫,甚至是查詢慢的情況,還得掌握適當的資料庫進階,比如索引的配置,快取的使用;針對一些代碼上的優化,看看是不是可以合理的運用設計模式參與,天天CRUD,也能玩出花來,

總結起來就是,作為一名有追求的工程師,要學會用白盒的視角看待技術,平時在作業中也要多問幾個為什么,正所謂,“知其然知其所以然”,你要努力逐步成為團隊的核心成員,核心成員意味著能扛事,團隊核心往往要能夠 Hold 住不同技術領域、切換不同角色,比如架構設計、核心代碼開發、緊急線上問題攻關等(這段話參考自極客時間),

我在極客時間學習了很多Java相關的課程,很多老師都說強調一句話:原始碼之下無秘密,所以,當我們技術能力成長到一定程度的時候,就需要去學習下原始碼,非必須,但你想更進一步,這就是要多死磕了,

成就感:都已經到這部分了,之前的那些成就感對你來說都是毛毛雨啦,之前的那些,我們能很好地完成領導分配的需求任務,不拖專案的后腿,

這部分學完,那就厲害了,會性能優化,表示你可以解決專案組遇到的難題(前段時間躍哥就幫助一名小伙伴完成雙休日CPU 負載 100%降到50%的程序,自己經歷過了,成就感可能不僅僅是翻倍,真的),

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

設計模式就更不用說了,很多人說學了也用不上,一直在 CURD、你要是能靈活使用設計模式,代碼重構不是挺簡單的事情?對吧,

這時候,你可以挑戰自己,去慢慢地重構自己之前寫的專案,或者是參與專案組更高端的任務中去,讓自己的價值更大的發揮出來,

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

  • 《Java 并發編程實戰》,是一本完美的 Java 并發參考手冊,這樣解釋簡單明了吧,哈哈
  • 《Java 性能權威指南》了解如何撰寫出并發的程式,你還需要了解一下如何優化 Java 的性能,這本書比較合適,通過學習,你可以比較大程度地提升性能測驗的效果,其中包括:使用 JDK 中自帶的工具收集 Java 應用的性能資料,理解 JIT 編譯器的優缺點,調優 JVM 垃圾收集器以減少對程式的影響,學習管理堆記憶體和 JVM 原生記憶體的方法,了解如何最大程度地優化 Java 執行緒及同步的性能,等等(這段摘抄耗子叔的《左耳聽風》專欄),
  • 看完上面那本書,如果還有余力,那么繼續深入,《深入理解Java虛擬機(第3版) : JVM高級特性與最佳實踐》這本書是周志明老師寫的,已經到第三版了,躍哥學習過第二版,學完就飄了,看懂的話,得翻閱好幾次,
  • 設計模式就不解釋了,學 Java 你一定要學面向物件的設計模式,經典中的經典自然就是《設計模式》,如果你覺得有點兒難度了,那么可以看一下《Head First 設計模式》,
  • 如果你想學好 Java,再去啃一啃《Java 編程思想》也無妨,真是一本透著編程思想的書,上面的書讓你從微觀角度了解 Java,而這本書則可以讓你從一個宏觀角度了解 Java,
架構技能

  • 架構基礎:高性能、高可用、可擴展性、低成本、安全、規模
  • 高性能架構模式:資料庫集群(讀寫分離、分庫分表);高性能 NoSQL、快取架構;單服務器高性能模式(RPC);高性能負載均衡
  • 高可用架構:CAP 理論、細節;集群和分期;異地多活保障
  • 可擴展架構:目前主要是微服務架構
  • 針對領域深究(比如音視頻領域、即時通信領域)
  • 如何做詳細設計

到了架構技能這里,其實就是逐步的讓自己從成為被直接喂養功能的一方,變成接收需求并分析,甚至是分配功能的一方, 這時候要對軟體工程的執行結果負責,這包括:按時按質進行軟體的迭代和發布、敏捷地回應需求變更、防范軟體質量風險、降低迭代維護成本,如果我們機遇好,那可以涉及到一個新系統的誕生;也許我們沒有機遇從0到1設計一個新系統,但是我們也可以是將架構從1.0重構到2.0,

初級架構師就是做這類事情的,基于完善的架構設計方法論的指導來進行架構設計,技術專家更多的是基于經驗進行架構設計,這兩類都可以,參與的點不一樣,但是實作的目標就是如此,

要完成復雜系統的架構設計,包含高性能、高可用、可擴展、海量存盤等復雜系統,例如躍哥等會兒說到的第二個專案,就是和老大從零開始基于Netty重新開發了公司應用的聊天服務器系統,從能用到好用,蛻變成長超級快,

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

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

  • 《從零開始學架構 : 照著做,你也能成為架構師》這本書是我看的第一本架構書,針對業務系統的架構設計,貼近日常作業,有自己的一套方法論,還是比較實用的
  • 《企業IT架構轉型之道:阿里巴巴中臺戰略思想與架構實戰 : 阿里巴巴中臺戰略思想與架構實戰》
  • 《軟體架構設計 : 大型網站技術架構與業務架構融合之道》
  • 《架構整潔之道》
其他補充

  1. 開發工具:IDEA、Eclipse、VS Code
  2. 版本控制工具:Git、SVN
  3. Docker、K8s
  4. 命令列工具:iterm2(MacOS)
  5. 網路測驗工具: PostMan、PostWoman
  6. 網路抓包工具
  7. 持續集成:Jenkins
  8. Linux:遠程連接Linux,Linux的常用命令(非必備)

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

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

編譯器只是一方面,版本控制是團隊協作的利器,除非你的作業是一個人單打獨斗,不然這塊還是必須要掌握的,作為一名后端,躍哥的習慣就是自己先測驗完,再提供給前端除錯,那需要一定程度上保證自己代碼的健壯性,必要的單元測驗,甚至是流程測驗都是必須的,

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

書單推薦:這里推薦這些工具實用類,使用好了,開發效率提升好幾個臺階呢,

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

其他書單推薦:內容里我沒有涉及到面試個的部分,學好了上面這些,鞏固了知識,面試基本是 OK 的,但是有時候為了能快速掌握,還得突擊一下,這里就加點面試相關的吧,

還有軟體編程其他方面的提升,比如代碼規范,重構等等,

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

  • 溝通能力

軟技能這里,我單獨拎出來說,

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

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

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

躍哥經歷了幾家公司,一直都是設備管理員,這個小小的職位,讓我打通了很多邊界,基本上和公司的人都能打成一片,至于有什么識訓?除了老婆是已經找好了,其他的很多東西自己還是可以去接觸,去學習,去獲取的,比如我的資料庫能力,除了平時寫代碼,就是煩著我們的DBA,我把他掏空,

適當的前端學習

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

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

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

SpringBoot + Vue 的組合學習起來,平時自己練練手,寫一個網站玩玩,技術人的開心,莫過于此吧,

推薦書單:這部分的書單推薦就有點超綱啦,哈哈,

  • 《JavaScript高級程式設計(第3版)》要學好前端,JavaScript 是必須的
  • 《瘋狂HTML 5+CSS 3+JavaScript講義(第2版)》躍哥學習的就是和本書,學會了基礎才能走的更遠嘛,對吧
  • 《Spring Boot+Vue全堆疊開發實戰》這本書是王松老哥寫的,我向他取了好幾次經,Vue 框架也是現在前端很流行的框架了,作者還是我們國人尤雨溪,驕傲吧
  • React.js 也是經典的框架,這里屬于我的盲區,就不推薦書單了

主導三個專案,讓我獨當一面

這一個模塊是在 1024 程式員節的時候,我有感而發,仔細回憶了我這么多年經歷的最重要的三個專案,通過專案的方式和大家聊聊我是如何成長起來的!

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

回憶目前為止我主要經歷了三個專案,仔細歸類的話,這三個竟然還都有所不同,

我參與的第一個專案(Android 客戶端開發)

第一個專案,是我剛畢業半年之后進到專案組的一個Android App 專案,之前 App 專案的主要業務邏輯是通過 JavaScript 撰寫的,Android 端呼叫 WebView 展現即可,所以很多流程都是依賴于 JavaScript 的同學去完成,

第一個技術就來了,當時的領導們覺得有必要全部原生化,就讓我趕上了重構的時代,說是重構,其實就是對之前在 JavaScript 上的業務遷移到 Android 原生上,

慶幸的是,原有專案一開始做的就比較好,檔案之類的相對來說也齊全,做主流業務的同事一直在專案組里,哪怕檔案里沒有的業務,自己把問題總結起來抽時間麻煩他,也能得到想要的答案,基于業務檔案的編碼還是相對輕松,

也許老天是注定需要給我一次鍛煉的機會,在重構伊始,我的師傅當時的 Android 端負責人因為身體原因休息了一個多月,就讓我這個徒弟去接手了當時復雜的,核心的業務,得到了一次快速成長的機會,

抓住第一波機會的我,就這樣坑次坑次完成了人生中第一個商業化專案的重構,因為專案很龐大,經歷了幾個月的加班加點,上架的時候狂松了一口氣,幾個月的努力終于看到了回報,因為前期準備的材料都很充分,對于業務上的阻礙輕松掃除,這次重構對初入職場的我是很大的能力提升,

試想一下,一個只在學校里自學 Android 的科班生,第一次接手專案,不是反復的修改Bug,而是參與重大的版本改革,是多么的幸運;鍛煉的成長不言而喻,你能相信一開始入行的時候,我連面向物件都一知半解嗎?專案的洗禮,可比學校里參考書籍寫Demo挑戰大多了,

隨之而來的第二個專案(獨立完成聊天服務器系統)

第二個專案,是我去新公司之后的專案,做一個即時通信的專案,

我來公司之前,有一個即時通信的在用,是基于 Flash 撰寫的,從回應速度和穩定性來說都沒有讓領導和用戶滿意,當時專案組里沒有 Java 的同事(新招一個畢業生之前也沒怎么接觸過 Java),領導想內部發掘 Java 的員工,我做了一個方向上的選擇,所以,我的第二次機遇就在這個時候蹦出來,

我到公司的時候是 Android 開發,因為當時專案組有3個 Android,沒有 Java,領導在征求大家的建議,問有沒有想轉的,我分析了自己的情況之后,主動要求轉 Java,和老大一起去做這個即時通信框架,

我們選擇 Netty 框架來進行,用 WebSocket 通信,又一次加班加點的拼命時刻,(加班并不可怕,有意義的加班都不會考慮下班這件事,只會考慮能給自己帶來多少收益,多少識訓,)這次沒有檔案,只有代碼,也還是有幸運的部分,之前框架的負責人一直在專案組里,

難點就是,我需要看懂 Flash 的代碼,然后一步步遷移過去,此次從零開始,也有一點遺憾,整個框架是老大搭建好的,我的核心任務是在計劃時間之內,完全遷移即時通信的功能,盡快把專案跑通,除錯上線完成,

完美的人生總是不存在的,所以盡管那么點遺憾,搭建框架的時候我沒參與,但不妨礙我對 Netty 的理解,為此我還在掘金上付費購買了 Netty 學習的一個專欄,加深我對 Netty 的理解,

從客戶端轉到后端,給我最大的感觸就是我看專案看的范圍更大了,之前客戶端只是很片面的看到自己所負責的功能,后端能把整個專案都看透,尤其是業務方面的知識點,

當然,因為初次參與后端,第一次上線,給我當頭一棒,現實著實把我教育了一番,后端編碼和客戶端還是存在不同,因為我的不熟練,在專案上線的第一個晚上,因為扛不住峰值的壓力,把網站給癱瘓了,業務宕機了一個小時,幸虧老大幫我解決,

這么嚴重的線上事故,給我當頭一棒,后端完成代碼只是第一步,線上安全運行才剛剛開始挑戰,這也是讓我堅定,在做業務的同時,需要持續的精進自己的技術,比如資料庫的頻繁讀寫,快取的使用,快取雪崩、擊穿的處理等等,

正在進行中的專案

第三個專案,經歷了第一個版本的迭代開發,以及第二個版本的重構(正在進行中),從別的團隊手里接收過來,沒有檔案,純靠自己熟悉,這次的挑戰更大,沒有任何資料,只有App介面,參考介面一個個去熟悉專案,重構專案,

這就是我的1.0專案,我花了兩周的時間寫了35+的介面,從開發到測驗,加班加點完成,把我累的,我之前也說了,天天CRUD 也能玩出花來,這次這么緊急的情況下,我先完成了第一個版本,從一定程度上沒有拖專案的后腿,而且從寫代碼的時候,記錄了一些需要優化的點,以及需要改善的點,因為是別人手里接手的,也是一個純外包的專案,和后期的規劃差了很多,就這樣,陰差陽錯,我們開始搞了第二個版本的迭代,也就是最近在做的 1.0 到 2.0 的升級,

這次升級,把一個前后端結合在一起的臃腫的程式,拆分成了輕量級的架構;把一些冗余的資料庫進行了改進,洗掉優化了很多表結構資訊,做了一些查詢的索引;最最最大的改變就是使用了微服務來完成重構,

這一整個程序,除了業務代碼是現成的,人都是從零開始,又是一次重大的機遇擺在我面前,不抓住那是傻子,很多群里的同學,想參與專案還沒機會呢,我總是時不時地能碰到好的機會,來提升我的能力,或者這就是我的運氣吧,

經歷過這次,我就不怕那種丟給你一堆代碼,甚至需求檔案都沒有的情況下,如何在保證專案正常運轉的情況下,更好的做持續重構,在專案重構中熟悉業務,在重構中鞏固Java編程技能,那么在艱難的外部環境下,至少你是專案組那位不可或缺的人,想裁你的時候,還得考慮考慮呢,是吧,

專案經歷結語

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

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

能力提升你要怎么學

還沒開始實踐就有一堆煩惱

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

編程是一門技識訓,不是靠單純的體力活動能勝任的,所以想提升能力方面這個無他,唯有熟能生巧,寫代碼這個要求太低了,還遠遠不夠,我們還是想讓自己更加優秀,那就需要做更多的努力

我經常和群友說,編程到最后并不是寫代碼,寫代碼是最最容易的事情,在寫代碼之前,還有需求分析,技術選型(選資料庫,選中間件等),架構設計,流程設計,演算法選擇,這些都完成了,那你把這些轉換成代碼就是水到渠成,

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

等基礎知識都慢慢地學會,然后再去找一些小Demo,比如說實作一個計算器,就能檢驗你的學習成果,寫代碼是一個循序漸進的程序,基礎先學會,逐漸就有成就感,那后面的困難就迎刃而解,否則等到后面學習演算法,專案時間,困難重重,


主動學習和被動學習

-- 以下部分參考極客時間《左耳聽風》專欄

人的學習分為「被動學習」和「主動學習」兩個層次

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

這里可以理解出來,你聽別人講,或是自己看書,或是讓別人演示給你,這些都不能讓你真正獲得學習能力,因為你是在被別人灌輸,在聽別人說,在看別人的成果,

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

學習不僅僅是為了知道,而更是為了思考和理解,在學習的程序中,我們不是為了知道某個事的表面是什么,而是要通過表象去探索其內在的本質和原理,真正的學習,從來都不是很輕松的,而是那種你知道得越多,你的問題就會越多,你的問題越多,你就會思考得越多,你思考得越多,你就會越覺得自己知道得少,于是你就會想要了解更多,如此回圈,是這么一種螺旋上升上下求索的狀態,

在學習的程序中,我們要不斷地問自己,這個技術出現的初衷是什么?是要解決什么樣的問題?為什么那個問題要用這種方法解?為什么不能用別的方法解?為什么不能簡單一些?……

這些問題都會驅使你像一個偵探一樣去探索背后的事實和真相,并在不斷的思考中一點一點地理解整個事情的內在本質、邏輯和原理,一旦理解和掌握了這些本質的東西,你就會發現,整個復雜多變的世界在變得越來越簡單,你就好像找到了所有問題的最終答案似的,一通百通了,

學習是為了改變自己的思考方式,改變自己的思維方式,改變自己與生俱來的那些垃圾和低效的演算法,總之,學習讓我們改變自己,行動和踐行,反思和改善,從而獲得成長,

全篇總結

總算和大家分享完了,這里我簡單的總結一下,

首先,就是都關心的問題,我選擇了Java,那么我以后能做什么,其實Java能做的很多,只是在現階段,我們通過編程語言排行榜也能看到,Java是穩居前三,說明他有龐大的用戶群體,那么就代表著網路上有海量的 Java 學習資料,良好的社區環境,優秀的解決方案,以及超級多的框架學習,你絲毫不用擔心自己找不到問題的解決方案,找不到學習的路徑,是在找不到,咱們還有星球呢,

其次就是如何學習,我列舉的 Java 學習路線也是根據后端的學習路線來,后面經過補充,進階部分也寫了,

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

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

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

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


參考內容:

  1. 極客時間左耳聽風、設計模式、Java專題、架構專題等專欄
  2. 廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1305158055100449
  3. 知乎關于Java的部分資料

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250604.html

標籤:Java

上一篇:MyBatis初級實戰之三:springboot集成druid

下一篇:goto語法在PHP中的使用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more