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

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

 

本篇文章應該算是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

等等。。。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章