大學兩年,寫了這篇幾十萬字的乾貨總結

一隻大白兔兔兔兔兔丫發表於2020-02-04

本文十天後設定為粉絲可見,喜歡的提前關注

不要白嫖請點贊

不要白嫖請點贊

不要白嫖請點贊

文中提到的書我都有電子版,可以評論郵箱發給你。

文中提到的書我都有電子版,可以評論郵箱發給你。

文中提到的書我都有電子版,可以評論郵箱發給你。

 

本篇文章應該算是Java後端開發技術棧的,但是大部分是基礎知識,所以我覺得對任何方向都是有用的。

 

1、資料結構

資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。    ---摘自百度百科

 為什麼把資料結構放在第一位呢?因為我認為這是一切的基礎。

比如

學了時間複雜度空間複雜度,你就能寫出更好的程式,解決更多的效能問題。

學了順序表和連結串列,你就知道,在查詢操作更多時,應該使用順序表,而在修改操作更多時,應該使用連結串列;

學了棧之後,你可能才能理解並寫出遞迴,學了佇列,會對訊息佇列有一個認識,之後用輪子(比如kafka)才更得心應手。

學了串,你才知道String到底怎麼實現的,你才知道了字串如何匹配(KMP),搜尋引擎(ES)是如何做出來。

學了排序,你才知道各種排序優缺點,知道各種語言的sort是如何實現的(別給我說就是快排),用到實際專案中。

學了雜湊,你才可能讀懂HashMap是怎麼玩的。

這是我做的一些總結:舊版總結

我進行了刪減,新寫的東西懶得加了。

涉及語言:

py3:注重演算法本身的知識

c/c++:實現基礎資料結構和演算法

java:實現較複雜資料結構


1.1、概述

                        演算法體系參考

                        課上筆記1(複習c、課程概述)

                        課上筆記2(基本概念、時空複雜度)

                        時空複雜度

                        淺析P/NP/NPC

                        引入:演算法優化

1.2、線性表

        筆記:

                        課上筆記3(線性表及順序表示)

                        課上筆記5(連結串列概述)

                        課上筆記6(連結串列選講、靜態連結串列)

                        作業1講解(最大子陣列二維多維)

        基礎程式碼實現:

                        順序儲存實現(靜/動)

                        單連結串列不帶頭(標準實現)

                        單連結串列不帶頭(壓縮程式碼)

                        雙鏈錶帶頭

        應用:

                        約瑟夫環(順序、鏈式、數學)

                        線性表表示集合

                        線性表表示一元多項式

                        連結串列環相關問題

                        連結串列coding能力練習:歸併排序

                        LRU介紹和實現

                      連結串列coding能力練習:相交問題

1.3、棧和佇列

        筆記:

                        課上筆記7(棧、佇列基礎)

        基礎程式碼實現:

                        陣列實現棧

                        連結串列實現棧

                        陣列實現佇列(易懂實現迴圈)

                        連結串列實現佇列

                        雙棧

                        棧和佇列的互相模擬

        應用:

                        棧排序

                        括號匹配

                        表示式求值

                        簡單迷宮問題

                        借漢諾塔理解棧與遞迴

                        手動維護棧實現二叉樹三種遍歷

                         深搜、廣搜與棧、佇列

        相關演算法:

                        單調棧

                        單調雙端佇列

                        雙端佇列優化的揹包問題

1.4、串

        筆記:

                        課上筆記8(串基礎)

        基礎程式碼實現:

                        串的定長表示

                        串的堆分配

                        為何py整數不會溢位

                        c語言檔案操作

        相關演算法:

                        一文讀懂KMP

                        一文讀懂Manacher

                        KMP題集1

                        KMP題集2

                        KMP+DP入門

                        字串上的動態規劃

                        字首樹

                        字尾樹/字尾陣列概述

                        AC自動機

1.5、陣列和廣義表

注:題目慢慢新增

        筆記:

                        課上筆記9(陣列、廣義表)

        部分題目實現:

                        二維陣列基操四連

                        陣列基本操作三連(1)

                        陣列基本操作三連(2)

                        陣列基本操作三連(3)

                        陣列基本操作三連(4)

                        陣列精選操作(5)

                        陣列精選操作(6)

        應用:

                        2048小遊戲實現

                        吃豆人

                        貪吃蛇

1.6、樹

        筆記:

                        課上筆記10(樹和二叉樹概述)

                        二叉樹概述

                        課上筆記11(滿二叉樹、完全二叉樹)

                        課上筆記12(二叉樹儲存與遍歷)

                        課上筆記13(樹的儲存)

        基礎程式碼實現:

                        理解二叉樹遍歷

                        二叉樹序列化/反序列化

                        先序中序後序兩兩結合重建二叉樹

                        先序中序陣列推後序陣列

                        直觀列印二叉樹

                        根據陣列建立平衡二叉搜尋樹

                        平衡二叉樹的判斷

                        完全二叉樹的判斷

                        搜尋二叉樹的判斷

                        二叉樹最長路徑

                        時間低於O(N)求完全二叉樹結點個數

        應用:

                        二叉搜尋樹

                        

                        堆應用例題三連

                        並查集

                        並查集入門題集

                        線段樹

                        樹狀陣列

        相關演算法:

                        最大搜尋子樹

                        morris遍歷 空間O(1)

1.7、圖

        筆記:

                        課上筆記14(圖基礎)

                        課上筆記15(儲存、遍歷)

        基礎:

                        最小生成樹

                        拓撲排序

                        最短路

        相關演算法:

                        迷宮

                        棋盤簡單深搜廣搜

                        皇后問題(位運算)

                        旅行商問題(認識狀態壓縮)

1.9、查詢

        基礎程式碼實現:

                        二分及擴充

                        二叉搜尋樹實現

                        陣列建立二叉搜尋樹

                        自平衡二叉搜尋樹

                        AVL Tree

        相關演算法:

                        HashMap記錄的動態規劃

                        跳錶介紹和實現

1.10、排序

        基礎程式碼實現:

                        八種排序

        相關演算法:

                        快排-荷蘭國旗

                        快排-前m大元素

                        歸併-求逆序數

                        桶思想-相鄰數最大差值

                        

                        堆應用例題三連

                        BFPRT

總之不要著急,基礎打牢。

1.10下面推薦一些學習資源:

1、資料結構 (嚴蔚敏,吳偉民編著圖書)

跟著經典走,絕對沒錯,這個書寫的真的不錯,裡面的虛擬碼你有能力自己實現一下。

2、大話資料結構

講的太入門了,看一遍對小白很有幫助

3、資料結構精講與習題詳解

另外一本經典書,是第一本的延申,有能力絕對要多看幾遍,寫的不錯。

 



二、演算法

演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間複雜度與時間複雜度來衡量。

先不說有沒有用(事實上工作上連leetcode知識用到的都不多),國內大廠面試筆試,演算法是佔很大部分的;國外(比如北美),更是刷leetcode就能進(我只是聽說的hhh)。

2.1ACM

首先關於ACM的建議:強校儘可能打一打吧,弱校除非很熱愛,否則不建議。

其中,強校指的是能穩定產出區域賽銀牌以上的學校。

如果在弱校,你可能舉步維艱:

首先我見過的,聽說過的一帶二的選手,最多也就區域銀,但是消耗了大量學習時間,還帶了兩個水貨拿牌子,這是很不值的。

其次,遇到某些讓你很難受的教練,可能你打了名額不讓你去,可能各種打壓你等等(競賽環境好的同學可能都想象不到吧)

當然,環境決定不了一切,如果你決定由你創造歷史,也是可以的,請你在大一就判斷一下:是否演算法程式設計比賽比賽每次都第一,並且落下第二兩道題以上(反正要碾壓)?如果是的話,在考慮是否走這條路。(我大一就是這樣,但是其實p都不會)。

當然,你的學校如果有打ACM的那一群人,有一個集訓隊,非常建議加入他們,

第一,可以鍛鍊自己。你不知道多少個日日夜夜為了除錯一個bug在那裡冥思苦想,你寫的程式碼加起來可能有幾萬行(500題*30行=15000行,很正常吧),而這幾萬行程式碼是你幾萬行業務程式碼不能比的。

第二,這群人不一定是將來混得最好的人,但是一定是中上游的人,而讓這些人成為你的朋友,對你很有幫助。

第三,享受快樂,你ac的那種快感。

2.2推薦資源

這裡我自己寫的ACM部落格並不多,也不全,所以給你們點oj和板子合集。

新手推薦匡斌專題,刷完保銅衝銀絕對沒問題kuangbin專題合集

我推薦的,也是比較有名的一些oj

國內:(排名不分先後)

    浙江大學(ZJU):http://acm.zju.edu.cn/             北京大學(PKU):http://acm.pku.edu.cn/JudgeOnline/

 同濟大學(TJU):http://acm.tongji.edu.cn/          杭州電子科技大學(HDU):http://acm.hdu.edu.cn/

 吉林大學(jlu):http://acm.jlu.edu.cn/                哈爾濱工程大學(hrbeu):http://acm.hrbeu.edu.cn/  

 哈爾濱工業大學(HIT):http://acm.hit.edu.cn/            北京郵電大學(Bupt):http://acm.scs.bupt.cn/onlinejudge/

 汕頭大學(STU):http://acm.stu.edu.cn/                      福州大學(FZU):http://acm.fzu.edu.cn/

 華中科技大學(HUST):http://acm.hust.edu.cn/JudgeOnline/    華東師範大學(ECNU):http://acm.cs.ecnu.edu.cn/

國外:   

       俄羅斯:烏拉爾大學(URAL):http://acm.timus.ru/             薩拉托夫大學(SGU):http://acm.sgu.ru/

  美國:USACO: http://train.usaco.org/usacogate

  波蘭:SPOJ:http://www.spoj.pl/

另外,基本各路模板我都有,可以找我要哈。

你也可以去洛谷,計蒜客等網站刷題,這些網站都對新手比較友好,是刷題的好去處。

 

2.3工作面試演算法

 

不是每個人都會打acm,所以面向實際,價效比很重要,這裡推薦《劍指offer》和leetcode。

其中,《劍指offer》肯定要看完並且理解,leetcode據說刷一百多道就能應付一般面試。

我本來想總結十篇精華帖,但是說實話leetcode題解絕對夠了。

https://leetcode-cn.com/

建議刷這幾個專題,價效比高一些哈。

動態規劃入門到熟悉,看不懂來打我啊(推薦)

搜尋詳解


三、語言基礎

這不用我說,絕對是很重要的一部分,語言都學不明白,別的更不要想。你可以學習Java、c、c++、python、go等語言。

我主要是Java技術棧的,但是總結的基礎知識有一些不方便放出來,是我的私密文章,我只把一些公開的放出來。

3.1Java

1、一個".java"原始檔中是否可以包括多個類(不是內部類)?有什麼限制?

2、short s1= 1; s1= s1+1; 有沒有錯?3、short s1= 1; s1 += 1;有沒有錯?

4、使用final關鍵字修飾一個變數時,引用的內容一定不能變?

5、是否可以從static方法內對非static方法呼叫?為什麼?

6、Overload和Override的區別?7、Overloaded的方法是否可以改變返回值的型別?

8、介面是否可繼承介面?抽象類是否可實現(implements)介面?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態的main方法?

9、Java中實現多型的機制是什麼?10、abstractclass和interface有什麼區別?

11、String s = "Hello";s = s + "world!";執行後,原始的String物件中的內容變了沒有?

12、下面這條語句一共建立了多少個物件:String s="a"+"b"+"c"+"d";

13、final, finally, finalize的區別。14、error和exception有什麼區別?15、Java 中堆和棧區別

16、能將 int 強制轉換為 byte 型別的變數嗎?(引申到所有大型別轉小型別

17、hashCode有什麼用?與 a.equals(b) 有什麼關係?19,java中會存在記憶體洩漏嗎

這些問題以及更多問題都是我總結的比較好的問題,要答案去評論,我發。

想獲取更多筆記的。。。。。我不會給你們的hhhhh。

3.2Java一些總結

只有這些公開的了。

java 物件導向必懂概述

Arrays工具類常見方法

Collections 工具類常見方法

Java的IO總結

終於,我讀懂了所有Java集合——List篇          

終於,我讀懂了所有Java集合——queue篇

終於,我讀懂了所有Java集合——sort            

終於,我讀懂了所有Java集合——map篇

終於,我讀懂了所有Java集合——map篇(多執行緒)          

終於,我讀懂了所有Java集合——set篇

反射全解

關於Java中String的問題

3.3python:

python學習例項(1)

python學習例項(2)

python學習例項(3)

python學習例項(4)

python學習例項(5)

python學習例項(6)

python學習例項(7)

基礎技巧總結(一) 

基礎技巧總結(二)

基礎技巧總結(三)

基礎技巧總結(四)

基礎技巧總結(五)

為什麼Python整型不溢位

另外,如果是零基礎py,我推薦廖雪峰的教程,百度搜即可。

 

3.4其它語言

哪種語言需要小白教程,評論,我給你想想有哪些好東西。


另外,py爬蟲建議學習一下。

四、作業系統

如果你時間緊,可以跳過。

作業系統是管理計算機硬體與軟體資源的計算機程式,同時也是計算機系統的核心與基石。作業系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入裝置與輸出裝置、操作網路與管理檔案系統等基本事務。

4.1基礎知識

放下我的作業系統基礎知識總結

程式基礎

經典的程式同步問題

處理機排程 、虛擬儲存器

儲存器 

輸入輸出系統

檔案管理

4.2具體實現

我認為學了最好可以把經典的演算法都實現一下。

我模擬了一些。

模擬程式排程

模擬銀行家演算法

模擬固定分割槽分配 

模擬基本分頁儲存

模擬動態分割槽分配

4.3jvm

如果你是Java技術棧,jvm是肯定要接觸的,這部分我也是小白,暫時沒怎麼弄過jvm調優,但是知識一定要準備好,畢竟你學紅黑樹的時候也不知道將來寫TreeMap的時候有用呢?

Java記憶體模型常見問題

Java記憶體區域

如何判斷物件已經死亡

Hotspot虛擬機器的物件

垃圾回收垃圾收集器

空間分配

類載入過程類載入器

堆和棧的精華大總結

4.4Linux

linux是人人都要會的。

我這部分其實很菜,基本上啥都不會,但是真的很重要。。。

我懶得找我總結的東西了,其實大部分就是一些命令的使用。

Linux概述

linux-在cenos上安裝大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

shell一文入門通

對於原理,我讀過一本書的小部分,後來因為各種原因沒有繼續讀下去,但是推薦給你們。

《linux核心設計與實現(第三版)》 拉夫,機械工業出版社的那本。

4.5多執行緒

比如Java多執行緒,這其實也是屬於作業系統只是的一部分,所以我放到了這裡。

我這部分暫時沒有總結完。

總結了執行緒安全性的二十四個精華問題

volatile

synchronized使用和原理全解(((((推薦)))))

 

4.6推薦資源

基礎知識:

推薦王道考研的視訊,真的很贊,b站就可以搜得到。

優點:聲音好聽(有磁性)、學長總結(學生更容易聽懂)、不講廢話(節省時間)、講的通俗易懂(反正我一遍就懂)

我對比了不下五種視訊,這是最好的。

有的人可能會問我又不考研?那你不能看一遍?這麼好的視訊不看多浪費啊?

多執行緒:

Java多執行緒程式設計核心技術(第2版) 作者:高洪巖

這本書我猶豫了很久到底要不要推薦呢?因為我看完了其實感覺一般,有些例子過於囉嗦,而且沒有底層原理的講解。但是用來入門的話,如果你是一個細心且耐得住性子的人,這本書還算不錯。

深入淺出Java多執行緒

這本書個人感覺比上一本好。但是還是看個人感覺吧,需要手把手教的那種,還是第一本好。

 


五、關聯式資料庫

開發離不開資料庫,我把資料庫的知識分為以下幾個階段:

5.1關聯式資料庫基本知識和任意一個語言實戰(MYSQL)

請注意,這是兩個事,前者我推薦資料庫系統概論,相信大部分學校的教材都是這本,裡面的理論很重要,是基礎。

後者我推薦MySQL必知必會,這本書絕對是入門sql語言的最佳選擇。

這兩本書我不接受任何反駁,是相關方面國內最好的。

再推薦一個視訊:b站上面的東南大學徐立臻教授資料庫原理,真的講的很好,我看了不止一遍。

下面放下我的總結:

關聯式資料庫——基礎

關聯式資料庫——關係資料語言

關聯式資料庫——mysql資料型別大總結

關聯式資料庫——sql基礎1定義

關聯式資料庫——sql查詢

關聯式資料庫——sql增刪改

關聯式資料庫——mysql常用函式總結

關聯式資料庫——檢視/儲存過程/觸發器

關聯式資料庫——資料庫恢復

關聯式資料庫——併發控制

5.2有基本的優化能力,複雜的sql編寫能力

這部分我認為非常重要,實際工作中都是很複雜的sql,並且涉及到優化。

我推薦高效能MySQL(第二版),這本書說實話我讀不完,甚至只讀了十分之一,慚愧慚愧,但是還是讓我受益良多。

還有,推薦leetcode資料庫專題,真的也讓我受益良多(你們可能只知道leetcode演算法吧hhhh)

5.3瞭解資料庫基本的實現原理

這裡我推薦《MySQL技術內幕:InnoDB儲存引擎(第2版)》

5.4自己寫資料庫

我當然是沒達到的,但是我看到了很多大佬都在做這方面內容,包括本校的幾屆畢業薪資最高的學長、包括同級的外校大神,強行讓我做但是我不會啊。。。哭了

但是我想當推薦一下資源,我雖然沒實現,但是看了有很多收穫,如果你按著做出來了,完全可以當作一個不錯的專案。

推薦兩門網課:mit6.830 和 cmu15445(建議做前者的實驗(相對完整),看後者的課程)。
學完兩門網課之後,對資料庫系統已經有了大致的瞭解。
接下來可以看資料庫系統概念(但是這本書寫的有點繁瑣),推薦看pingcap的tidb原始碼閱讀二十四篇(https://pingcap.com/blog-cn/),看文章的時候可以看一下原始碼(需要學一下go)。
另外一個好的學習資源是talent plan,作業質量挺高的。
(https://university.pingcap.com/)
如果你對pingcap的tidb很感興趣,想繼續深入學習,可以再瞭解一下分散式,推薦mit 6.824,接下來就是看論文,寫lab的快樂時光,接著你可能想看看tikv,那麼可以學一下rust啦。

 

六、NOSQL

 

記憶體越來越快、越來越便宜的今天,你要是不會一個nosql那可以不用幹活了吧?

但是簡單地用當然不夠(你會用map就會用nosql),你最好知道一下複雜的操作,和nosql的原理。

我這裡研究的是redis:

6.1入門

Redis是一款基於鍵值對的NoSQL資料庫,它的值支援多種資料結構:
字串(strings)、雜湊(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
• Redis將所有的資料都存放在記憶體中,所以它的讀寫效能十分驚人,用作資料庫,快取和訊息代理。

Redis具有內建的複製,Lua指令碼,LRU逐出,事務和不同級別的磁碟永續性,並通過Redis Sentinel和Redis Cluster自動分割槽提供了高可用性。
• Redis典型的應用場景包括:快取、排行榜、計數器、社交網路、訊息佇列等

NOSQL及redis概述

但是我們實戰之前,還是要了解基本使用

資料結構和物件的使用介紹

Java整合

6.2原理總結

這部分在我看來是最有意思的,我們有必要了解底層資料結構的實現,這也是我最感興趣的。

比如,你知道redis中的字串怎麼實現的嗎?為什麼這麼實現?

你知道redis壓縮列表是什麼演算法嗎?

你知道redis為什麼拋棄了紅黑樹反而採用了跳錶這種新的資料結構嗎?

你知道hyperloglog為什麼用如此小的空間就可以有這麼好的統計效能和準確性嗎?

你知道布隆過濾器為什麼這麼有效嗎?有沒有數學證明過?

你是否還能很快寫出來快排?或者不斷優化效能的排序?是不是隻會調庫了甚至庫函式怎麼實現的都不知道?真的就是快排?

包括資料庫,持久化,處理事件、客戶端服務端、事務的實現、釋出和訂閱等功能的實現,也需要了解。

另外,

資料結構(字典、連結串列、字串)

資料結構(整數集合,壓縮列表)

資料結構(跳錶介紹和手撕)

為什麼選擇了跳錶而不是紅黑樹?

HyperLogLog

LRU介紹和實現

Redis中的LRU演算法改進

布隆過濾器

qsort原始碼

物件(字串物件、列表物件、雜湊物件、集合物件、有序集合總結)

記憶體管理

資料庫簡介資料持久化

事件

客戶端命令的執行過程

事務

釋出和訂閱

6.3多機

舊版複製

新版複製

哨兵機制

6.4實戰

進一步的瞭解了redis的使用和原理,我們來寫一些簡單的實戰程式碼

實戰點贊

實戰關注

快取擊穿/穿透/雪崩

對專案的一些優化方案

RedLock

6.5更多的細節問題

相關問題彙總

 

七、網路/前端/專案基礎知識

7.1網路原理

只要是開發肯定離不開網路知識。

HTTP

響應程式碼全集

網路原理知識點彙總

網路原理知識點總結

但是我不建議你把那本《計算機網路(第七版)謝希仁著》看完,我感覺太過無聊而且底層的那幾層我個人感覺是真的用處不大。

推薦書籍:《計算機網路:自頂向下》、《圖解http》

7.2前端基礎

除非你可以牛到給老闆說:“老子就是不會前端,專做後端”,否則你還是要會一些前端的。

Java開發需要知道的HTML知識

js知識點彙總

jquery選擇器

建議上vue\react\node.js,這些是我問的前端同學的建議。

如果時間不夠上面的知識,bootstrap建議看一下(因為我就會一點hhhh)

 

7.3專案基礎知識

不同於基礎語言知識,這部分知識可能涉及到網路方面知識,學會後你可以具體做一些東西比如Java,你就需要學servlet、JDBC等JavaEE技術,但是這些技術又不會真的工作用,只是基礎,但是真的很重要,建議拿這些知識寫一些專案,比如學生管理系統。

Java網路程式設計

AJAX大總結

servlet基礎總結

servlet中的資料儲存

servlet——三兄弟的另外兩個:過濾器/監聽器

mysql——JDBC

但是我不建議你再學JSP,這都9102年了,為啥非抱著它不放呢?你學leaf不好嗎?如果說servlet、JDBC是基礎,我覺得jsp真的沒必要,他也不是什麼所謂的“基礎”。

 

八、安全和測試

這部分我覺得也是很值得學習的,反向思維很重要,不要以為開發就可以不懂測試,不懂安全。

我們們寫程式碼的時候也是邊寫邊側不是麼。

說一下我學這些的理由:

壓測的話,LoadRunner太不方便,太過於龐大,可能專業測試需要學,開發學jmeter就可以啦。

安全方面其實我挺有感觸的,你們知道為啥要放驗證碼嗎?你們知道SpringSecurity是咋實現的嗎?你們知道xss,sql注入,檔案上傳漏洞,瀏覽器安全,這些東西怎麼攻擊怎麼防禦嗎?

我們作為開發其實是需要知道的吧。

軟體測試基礎知識

探索式軟體測試

壓力測試Jmeter

安全方面知識

常見漏洞

 

九、框架的學習

Java來說,學完了JavaEE肯定要學框架的,你總不能拿servlet和jsp、JDBC寫專案吧?

推薦ssm,不要學ssh了,都9102年了,我們們就不要浪費時間了。

springboot是一定要學的,相關的spring生態圈都要學,這部分我也剛接觸,以後要多多學習。

springboot——概述

springboot1——spring相關入門

springboot2——MyBatis入門

springboot-攔截器

springboot——kaptcha

springboot3——Email

Spring Security使用

至於原理,抱歉我能力有限,目前正在學習中。。。。。。。。。。。。。。。

 

十、中介軟體和工具

 

這一部分我暫時沒怎麼寫總結部落格,但是我認為都是要會用並且瞭解原理的。

推薦的連結有幾篇是其他人寫的,因為我也是小白,有的方面沒什麼經驗。

10.1訊息佇列

這是必會內容,否則你寫的專案可以說沒有什麼效能可言吧。

首推kafka,當然你學別的未嘗不可,就算拿redis也能寫,看你自己的需要吧。

建議學習原理,我覺得挺重要的。

真的,Kafka 入門一篇文章就夠了

10.2搜尋引擎

這我認為不是必會的,但是最好學習一下,推薦你可以自己基於字典樹做一個小型搜尋引擎,還可以統計熱點詞、過濾敏感詞等等,非常方便。

至於具體的我推薦elasticsearch,並且我建議原理一定要了解一下,什麼倒排索引之類的。

10.3本地快取

現在光會關聯式資料庫肯定是不行的,你要會一種nosql資料庫,你要做快取,提升效能,,但是進一步提高效能,預防快取問題(比如快取雪崩),你就需要做多重快取,本地快取是少不了的。我推薦咖啡因。

10.4git

不多解釋,就是給你提個醒。

教程推薦廖雪峰

git大總結

10.5 maven

這個也是必學內容,小白的直觀感受就是可以不用到處搜jar包了。還有很多其他強大的功能。

Maven專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的專案管理工具軟體。

Maven 除了以程式構建能力為特色之外,還提供高階專案管理工具。由於 Maven 的預設構建規則有較高的可重用性,所以常常用兩三行 Maven 構建指令碼就可以構建簡單的專案。由於 Maven 的面向專案的方法,許多 Apache Jakarta 專案發文時使用 Maven,而且公司專案採用 Maven 的比例在持續增長。

手把手maven的功能/安裝/使用/idea整合

10.6nginx

沒有商量,必須會。

Nginx是一款輕量級Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,在BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力在同型別的網頁伺服器中表現較好,中國大陸使用nginx網站使用者有:百度、京東新浪網易騰訊淘寶等。

nginx學習,看這一篇就夠了

10.7 zookeeper

必會,關鍵你kafka啥的都得在這上面跑。

ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

ZooKeeper包含一個簡單的原語集, [1]  提供Java和C的介面。

持續更新的Zookeeper知識總結

10.8 idea

必會

idea常用設定

10.9vim

必會

vim特別好的教程

10.10dubbo

dubbo知識點總結 持續更新

10.11Xmind/ProcessOn

我這裡列舉了兩個工具,他們兩個都可以做概要設計的腦圖

10.12Postman

這個是介面除錯的神器,單測比較繁瑣的你可以試試這個嘛,不過很多介面還是隻能寫寫單測,反正很香。

不過這個名字一看就是男生用的,那我們女生用啥呢?往下看

10.13Postwoman


官網地址 :https://postwoman.io
PostMan一聽就是男生用的,咋妹子們肯定要用最近開源的Postwoman啊,它是一款開源的 Postman 替代品

開源沒多久優點如下:

輕盈,可直接線上訪問;
簡約,採用簡約的 UI 設計精心打造;
支援 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
支援驗證;
實時,傳送請求即可獲取響應。

10.14Gradle


官網地址 :https://gradle.org
Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化構建開源工具。

它使用一種基於Groovy的特定領域語言(DSL)來宣告專案設定,目前也增加了基於Kotlin語言的kotlin-based DSL,拋棄了基於XML的各種繁瑣配置。

這個跟Maven功能是一樣的,但是兩者語法不一樣,而且我覺得版本控制的時候沒Maven好使,有小坑,勝在語法簡潔。
 

十一、設計模式和框架原理

當你開發到一定程度,學習設計模式肯定是避免不了的

建議閱讀經典書籍,這是筆記,我覺得看筆記也可以。

《Head First設計模式》讀書筆記_第一章

《Head First設計模式》第二章筆記 觀察者模式

《Head First設計模式》第三章筆記 裝飾者模式

《Head First設計模式》第四章筆記 工廠模式

《Head First設計模式》第五章筆記-單件模式

《Head First設計模式》第六章筆記-命令模式

《Head First設計模式》第七章-介面卡模式、外觀模式

《Head First設計模式》第八章筆記-模板方法模式

《Head First設計模式》第九章(1)迭代器模式

《Head First設計模式》第九章(2)組合模式

《Head First 設計模式》第十章-狀態模式 狀態模式

學了設計模式你才敢去看原始碼。

至於spring原始碼,我畢竟還年輕,寫程式碼太少,沒勇氣去看(也沒能力去看),以後再說吧。

 

十三、我推薦的資料

文中提到的書和視訊我都是看過的,不會只聽說過就推薦給你,那是不負責任。

1、資料結構 (嚴蔚敏,吳偉民編著圖書)

跟著經典走,絕對沒錯,這個書寫的真的不錯,裡面的虛擬碼你有能力自己實現一下。

2、大話資料結構

講的太入門了,看一遍對小白很有幫助

3、資料結構精講與習題詳解

另外一本經典書,是第一本的延申,有能力絕對要多看幾遍,寫的不錯。

推薦《劍指offer》和leetcode。

其中,《劍指offer》肯定要看完並且理解,leetcode據說刷一百多道就能應付一般面試。

我本來想總結十篇精華帖,但是說實話leetcode題解絕對夠了。

https://leetcode-cn.com/

Java多執行緒程式設計核心技術(第2版) 作者:高洪巖

這本書我猶豫了很久到底要不要推薦呢?因為我看完了其實感覺一般,有些例子過於囉嗦,而且沒有底層原理的講解。但是用來入門的話,如果你是一個細心且耐得住性子的人,這本書還算不錯。

深入淺出Java多執行緒

這本書個人感覺比上一本好。但是還是看個人感覺吧,需要手把手教的那種,還是第一本好。

《計算機網路:自頂向下》、《圖解http》

總:

Stack Overflow,https://stackoverflow.com/questions/tagged/java

Stack Overflow 可以說是解決問題的殺手鐗

嗶哩嗶哩

上邊的視訊都是非常高質量的,你可以去搜尋看一下。

慕課網

雖然有些視訊時付費的,但是質量是真的高,那些免費的入門足夠看了

菜鳥教程

一聽名字就知道適合菜鳥的,但是基礎的知識寫的非常詳細,很清晰易懂,非常適合剛開始學習程式設計的小夥伴。

W3School

剛開始學WEB開發時,經常結合w3school學習前端,開發時,如果遇到記不清的標籤,就去w3school搜尋。

中國大學MOOC

如果你是非科班的,想要系統著補某們大學的課程,那麼中國大學MOOC是個不錯的選擇,這裡有各種各樣的課程,有些老師還是講的挺好了,和大學課程老師的教學差不多。我編譯原理就是在這裡學到.

 

第零、最後,我的建議

0.1不要飄

永遠保持一顆謙虛的心,你認為你厲害或者你很努力是因為你的環境不好而已。

在一箇中專,你會寫專案,能寫增刪改查,就覺得自己特別努力特別厲害。

在一個三本院校,你可能天天按時上課,就覺得自己特別努力特別厲害。

在一個一本院校,你可能覺得上課好好聽講,下課好好寫作業,就覺得自己特別努力特別厲害。

在一個211,你可能沒課的時候也去圖書館,並且課下時間對老師講的東西做了一些擴充,就覺得自己特別努力特別厲害。

在一個985.。。。。。

還用繼續說嗎?你認為的努力和厲害,換個環境,毛都算不上。驕傲的人必定失敗
 

0.2不要慌

很多人焦慮找不到好工作,我也是。

我見過省會城市一個挺大的當地企業,四五十平米的屋子擠著幾十個人,每個程式設計師在自己的一平米空間裡工作,月薪2500.

我見過清華的,手寫作業系統執行在自己做的cpu上,手寫資料庫,oi省一、數雙學位、一天速成java寫了個app拿了第一,GPA大部分4.0。

人和人的差距,比人和狗的差距還大。

所以不要慌,你再慌,也有人不如你,你再慌,也有人比你厲害。

一步一步走,永遠不要被別人影響,做好自己。

0.3不要猶豫

挺多人還在比那個語言好,糾結學哪個語言,糾結哪個方向掙錢。

想的多不如去做,我相信不管你做什麼,只要努力一定有收穫。

0.4我不建議花時間學的東西

AWT 和 Swing

好像不知道大清朝早已經亡了幾百年一樣。已經 9102 了,誰還會用 AWT 和 Swing 去開發桌面應用呢?

Struts

Struts 是早年一個優秀的 MVC 框架,單從技術的角度來看,還是蠻不錯的。但是自從有了 SpringMVC 後,Struts 就被拍死在沙灘上了。

Hibernate

Hibernate 太重量級了,學習成本太高,取而代之的是輕量級的 MyBatis(支援定製化 SQL、儲存過程以及高階對映)。

JSP

等等。。。

當然誰和誰的情況都不一樣,如果你入職的小公司確實需要,還是要學的(但是我建議你跑路,沒意義的)

相關文章