清華大牛教你零基礎(chǔ)學(xué)習(xí)Java多久能找工作

假如生活欺騙了我,睡一覺一下子抹掉了我這十年的編程經(jīng)驗,把我變成了一只小白。我想自學(xué) Java,并且想要找到一份工作,我預(yù)計需要 5 個月的時間。

想著想著,我就覺得有必要為那一天做點準(zhǔn)備,以備不時之需。

01、第一個階段,環(huán)境和工具準(zhǔn)備

準(zhǔn)備一臺電腦,要能聯(lián)網(wǎng)

下載、安裝 JDK,配置 Java 開發(fā)環(huán)境

下載、配置Maven

下載、安裝 IntelliJ IDEA

準(zhǔn)備一個 GitHub 倉庫(或者碼云),管理 Java 源代碼

Java 是一門計算機(jī)編程語言,學(xué)它的話,連臺電腦都沒有,學(xué)個屁。我有個親戚家的孩子想學(xué)編程,就只看書,家里連臺電腦都不配,說什么“先打好理論基礎(chǔ),再實操”,我真的是有點醉。

有了電腦,還得聯(lián)網(wǎng),自學(xué)的過程中肯定會遇到很多問題,遇到問題的時候先問搜索引擎,推薦谷歌和必應(yīng);實在沒有答案的話,也可以來找我,申請加入技術(shù)交流群,問問群里面的大佬們。

既然要學(xué) Java,JDK 是必須要先安裝的,否則 Java 程序就沒法編譯和執(zhí)行。

Maven 也是需要提前安裝和配置的,因為后面進(jìn)階的話,需要一些練手項目,它們通常都需要 Maven 來加載第三方類庫。

使用集成開發(fā)環(huán)境 IntelliJ IDEA 來敲 Java 代碼吧,比 Eclipse 更流行。千萬不要使用記事本編寫源代碼了,對于小白來說,時間是寶貴的,記事本只適合大牛們用來裝逼,不適合小白用來編程(入門),純浪費時間。

有了 IDEA,后面學(xué)習(xí)源碼的話,就會方便很多,包括反編譯字節(jié)碼。

如果英語功底不太好的話,建議安裝這兩款 IDEA 插件:chinese 和 translation

如果注重編碼規(guī)范的話,建議安裝這兩款 IDEA 插件:Alibaba 和 SonarLint

為什么還需要 GitHub 倉庫或者碼云倉庫呢?它們可以用來在線云同步源代碼,防止版本丟失。學(xué)到最后,還可以形成一套自己的工具庫,輪子就有了,上班的時候工作效率就會高很多,能直接用的代碼再也不用重新寫了。

02、第二個階段,Java 基礎(chǔ)入門

1)基本數(shù)據(jù)類型

8 種基本數(shù)據(jù)類型(boolean、char、byte、short、int、long、float、double)

整形中 byte、short、int、long 的取值范圍

單精度和雙精度

為什么不能使用“==”比較浮點數(shù)

基本類型和包裝類型的區(qū)別

自動拆箱與裝箱

Integer 的緩存機(jī)制

2)流程控制語句

條件分支(if/else/else if、三元運算符、switch

循環(huán)或者遍歷(for、while、do-while)

break 和 continue

3)操作符

算術(shù)運算符

邏輯運算符

比較運算符

4)main 方法詳解

public 關(guān)鍵字

static 關(guān)鍵字

void 關(guān)鍵字

main 方法

字符串?dāng)?shù)組參數(shù)(String[] args)

5)包

創(chuàng)建包

導(dǎo)入包

包全名

6)數(shù)組

什么是數(shù)組?

訪問數(shù)組

遍歷數(shù)組

打印數(shù)組

可變參數(shù)

數(shù)組排序

數(shù)組轉(zhuǎn)成 Stream

數(shù)組轉(zhuǎn)成 List

數(shù)組搜索

java.util.Arrays

數(shù)組越界

7)注釋

單行注釋

多行注釋

文檔注釋

注釋真的不會被執(zhí)行嗎?

優(yōu)秀的程序員真的不寫注釋嗎

8)字符串

雙引號字符串和 new 字符串對象

字符串為什么是不可變的?

String、StringBuilder 和 StringBuffer? 之間的區(qū)別

字符串拼接的幾種方式

字符串常量池

關(guān)于 intern

字符串比較(== 和 equals)

字符串拆分

字符串操作小技巧

字符串轉(zhuǎn)整形

生成 UUID

字符串可以引用傳遞嗎?

字符串長度

關(guān)于 substring

03、第三個階段,Java 核心技術(shù)

1)面向?qū)ο?/p>

面向?qū)ο蠛兔嫦蜻^程

封裝

繼承

多態(tài)

接口

抽象類

重寫和重載

構(gòu)造方法

局部變量、成員變量、靜態(tài)變量、常量

值傳遞還是引用傳遞

final 關(guān)鍵字

this 關(guān)鍵字

super 關(guān)鍵字

不可變對象

equals() 和 hashCode()

打印 Java 對象

NullPointerException

2)常用工具類

字符串相關(guān)的工具類

日期時間相關(guān)的工具類

枚舉

隨機(jī)數(shù)

正則表達(dá)式

Apache-commons 工具庫

Guava 工具庫

3)集合框架

ArrayList

LinkedList

ArrayList 和 LinkedList? 之間的區(qū)別

不可變 List

CopyOnWriteArrayList

HashMap

LinkedHashMap

TreeMap

ConcurrentHashMap

fail-fast

4)反射機(jī)制

什么是反射?

反射有什么用?

Class 類

5)異常處理

為什么需要異常處理機(jī)制?

Error 和 Exception

try-catch-finally

try-with-resource

自定義異常

盡量捕獲原始異常

不要打印堆棧后再拋出異常

不要用異常處理機(jī)制代替判斷

不要過早捕獲異常

6)注解

注解是什么?

注解的生命周期

注解裝飾的目標(biāo)

自定義注解

使用注解

7)IO 流

字符流、字節(jié)流

輸入流、輸出流

同步、異步

阻塞、非阻塞

BIO、NIO 和 AIO

NIO 2.0

8)序列化

什么是序列化和反序列化

Java 如何實現(xiàn)序列化和反序列化

Serializbale 和 Externalizable

serialVersionUID

9)泛型

什么是泛型?

類型擦除

泛型帶來的問題

泛型中 K T V E 這些特殊字幕的含義

通配符

上下界限定符 extends 和 super

不要在集合中使用 Java 原始類型

10)單元測試

Junit

TestNG

11)編碼方式

ASCII

Unicode

UTF-8

GBK、GB2312

如何解決亂碼問題

12)并發(fā)編程

什么是并發(fā)

什么是并行

什么是線程

什么是進(jìn)程

線程的狀態(tài)

線程的優(yōu)先級

創(chuàng)建線程

創(chuàng)建線程池

什么是線程安全

多級緩存和一致性問題

CPU 時間片和原子性問題

指令重排和有序性問題

線程安全和內(nèi)存模型

happens-before

可重入鎖

阻塞鎖

樂觀鎖

悲觀鎖

分布式鎖

CAS

ABA

偏向鎖

輕量級鎖

重量級鎖

自旋鎖

什么是死鎖

如果避免死鎖

synchronized

volatile

ThreadLocal

Executors

CountDownLatch

Thread

Runnable

Callable

ReentrantLock

ReentrantReadWriteLock

Atomic 相關(guān)類

13)Java 8 新特性

Lambda 表達(dá)式

Stream流

Optional

14)源碼閱讀

String

Integer

ArrayList

LinkedList

CopyOnWriteArrayList

HashMap

TreeMap

LinkedHashMap

ConcurrentHashMap

CopyOnWriteArrayList

04、第四個階段,Java 進(jìn)階升級

1)JVM

Java 內(nèi)存結(jié)構(gòu)

垃圾回收

JVM 參數(shù)調(diào)優(yōu)

Java 對象模型

HotSpot

類加載機(jī)制

編譯和反編譯

反編譯工具

JIT

虛擬機(jī)性能監(jiān)控和故障處理工具(jps、jstack、jmap、jstat、jconsole、javap)

2)性能優(yōu)化

使用單例

使用線程池

減少上下文切換

減小鎖粒度

數(shù)據(jù)壓縮

Stream 并行流

GC 調(diào)優(yōu)

JVM 內(nèi)存分配調(diào)優(yōu)

btrace

3)設(shè)計模式

設(shè)計模式的六大原則

創(chuàng)建型設(shè)計模式(單例、抽象工廠、建造者、工廠、原型)

結(jié)構(gòu)型設(shè)計模式(適配器、橋接、裝飾、組合、外觀、享元、代理)

行為型設(shè)計模式(模板方法、命令、迭代器、觀察者、中介者、備忘錄、解釋器、狀態(tài)、策略、責(zé)任鏈、訪問者)

單例的七種寫法

4)數(shù)據(jù)結(jié)構(gòu)和算法

簡單的數(shù)據(jù)結(jié)構(gòu)(棧、隊列、鏈表、數(shù)組、哈希表)

樹(二叉樹、字典樹、平衡樹、排序樹、B 樹、B+ 樹、R 樹、紅黑樹、多路樹)

圖(拓?fù)?、有向圖、無向圖)

穩(wěn)定的排序算法(冒泡排序、插入排序、雞尾酒排序、桶排序、計數(shù)排序、歸并排序、原地歸并排序、二叉排序樹排序、鴿巢排序、基數(shù)排序、侏儒排序、圖書館排序、塊排序)

不穩(wěn)定的排序算法(選擇排序、希爾排序、梳排序、堆排序、平滑排序、快速排序、內(nèi)省排序、耐心排序、Clover 排序)

時間復(fù)雜度

空間復(fù)雜度

貪心算法

KMP 算法

5)操作系統(tǒng)

Linux 常用命令(find、top、tar、move、grep、tail、netstat、curl、wget、ping、ssh)

服務(wù)器性能指標(biāo)(qps、CPU 利用率)

進(jìn)程同步

分段和分頁

虛擬內(nèi)存和主存

6)網(wǎng)絡(luò)安全

CSRF

XSS

SQL 注入

加密和解密(對稱加密、非對稱加密)

MD5、SHA1、DES、RSA

DDOS 攻擊

HTTP 和 HTTPS

SSL

TLS

TCP 和 UDP

Cookie、Session

CDN

DNS

7)數(shù)據(jù)庫

MySql

索引

存儲過程

分庫分表

binlog

讀寫分離

數(shù)據(jù)庫緩存(RedisMongoDB

數(shù)據(jù)庫中間件(MyCat)

數(shù)據(jù)庫連接池(Durid)

8)大數(shù)據(jù)

搜索(Elasticsearch、Solr)

流式計算(Storm、Spark、Flink)

Hadoop

9)服務(wù)器

Tomcat

jetty

Nginx

10)框架

Spring

MyBatis

Spring MVC

Spring Boot

Spring Security

Spring Cloud

Netty

Dubbo

11)消息隊列

RabbitMQ

Kafka

12)容器

Docker

K8s

光看了一下目錄,就有點吸引我。

05、第五個階段,活著最重要

技術(shù)是沒有終點的,也是學(xué)不完的,最重要的是活著、不禿。

零基礎(chǔ)入門的時候看書還是看視頻,我覺得成年人,何必做選擇題呢,兩個都要。喜歡看書就看書,喜歡看視頻就看視頻。

最重要的是在學(xué)的過程中,一定不要眼高手低,要實戰(zhàn),把學(xué)到的技術(shù)投入到項目當(dāng)中,解決問題,之后進(jìn)一步錘煉自己的技術(shù)。

去哪里找JAVA項目練手?

學(xué)最怕的就是缺乏自驅(qū)力,一定要自律,杜絕“三天打魚兩天曬網(wǎng)”,到最后白忙活一場。

高度自律的同時,要保持耐心,不拋棄不放棄,切勿自怨自艾,每天給自己一點點鼓勵,學(xué)習(xí)的勁頭就會很足,不容易犯困。

技術(shù)學(xué)到手后,找工作的時候一定要好好準(zhǔn)備一份簡歷,不要無頭蒼蠅一樣去海投簡歷,容易“竹籃打水一場空”。好好的準(zhǔn)備一下簡歷,畢竟是找工作的敲門磚。

拿到面試邀請后,在面試的過程中一定要大大方方,盡力把自己學(xué)到的知識舒適地表達(dá)出來,不要因為是自學(xué)就不夠自信,給面試官一個好的印象,面試成功的幾率就會大很多,加油吧,騷年

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容