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

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議

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

  • Xmind官網地址:?https://www.xmind.cn
  • ProcessOn在線作圖地址:https://www.processon.com

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

10.12Postman

  • 官網地址 :https://www.getpostman.com

這個是接口調試的神器,單測比較繁瑣的你可以試試這個嘛,不過很多接口還是只能寫寫單測,反正很香。

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

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

等等。。。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了,這篇文章,值得99%的人收藏 此文后續會改為粉絲可見,所以喜歡的請提前關注和收藏,不迷路。 最近有五本我喜歡的redis實體新書,想要的去評論,我寫個隨機數抽獎包郵送給你。 那么,準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則,又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差,按一定概率確定一個區間,凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題,谷歌面試天天問,來看看吧,帶你來一步一步達到最優解。 谷歌不知道問了多少遍,藍橋杯也出現過,leetcode上是頂級難題,到底是什么題能如此頻繁地出現?我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽,這次的二分也值得你們一看,這個系列是特別用心寫的,準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了,女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集,敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征: 1)順序性:處理機嚴格按照程序所規定的順序執行,每一步操作必須在下一步操作開始前執行 2)封…

配置tomcat6.0的HTTPS(單向)

利用JDK自帶的產生證書的工具 生成證書 建立一個腳本文件,內容如下: set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之數據重塑——【stack()方法和unstack()方法、pivot()方法】

文章目錄重塑層次化索引對于單層索引的DataFrame類對象stack()方法unstack()方法對于多層索引的DataFrame類對象辨析操作內層索引與外層索引的區別查看多層索引對象轉換后的類型軸向旋轉——pivot()方法重塑層次化索引 Pandas中重塑層次化索引的操作主要是stack()方法和unstac…

超硬核!學霸把操作系統經典算法給敲完了!要知行合一

上期的筆記,瀏覽快1萬了,既然關注的人很多,那就發出來承諾過的算法全模擬,希望幫到你們。 上期的操作系統學霸筆記,考試復習面試全靠它 一、模擬進程調度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之數據轉換——【rename()方法、cut()函數、get_dummies()函數】

文章目錄重命名軸索引離散化連續數據啞變量處理類別型數據重命名軸索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!數據結構學霸筆記,考試面試吹牛就靠它

上次發操作系統筆記,很快瀏覽上萬,這次數據結構比上次硬核的多哦,同樣的會發超硬核代碼,關注吧。 超硬核!操作系統學霸筆記,考試復習面試全靠它 第一次筆記(復習c,課程概述&#xff…

Python之數據拆分——groupby()方法

文章目錄groupby()方法通過列名進行分組通過Series對象進行分組Series對象與原數據的行索引長度相等Series對象與原數據的行索引長度不等通過字典進行分組按照columns軸的方向進行分組按照index軸的方向進行分組通過函數進行分組groupby()方法 groupby( self, byNone, axis0, l…

超硬核!小白讀了這篇文章,就能在算法圈混了

作為一只超級硬核的兔子,從來不給你說廢話,只有最有用的干貨!這些神級算法送給你 目錄 第一節 1.1bogo排序 1.2位運算 1.3打擂臺 1.4morris遍歷 第二節 2.1睡眠排序 2.2會死的兔子 2.3矩陣快速冪 2.4摔手機/摔雞蛋 時空復雜度目錄 …

Python之數據聚合——aggregate()方法

文章目錄使用內置統計方法聚合數據面向列的聚合方法aggregate()方法對每一列數據應用同一個函數對某列數據應用不同的函數對不同列數據應用不同函數使用內置統計方法聚合數據 實現數據拆分成組并分別計算平均數的操作 代碼: import pandas as pd import numpy as…

超硬核十萬字!全網最全 數據結構 代碼,隨便秒殺老師/面試官,我說的

本文代碼實現基本按照《數據結構》課本目錄順序,外加大量的復雜算法實現,一篇文章足夠。能換你一個收藏了吧? 當然如果落下什么了歡迎大家評論指出 目錄 順序存儲線性表實現 單鏈表不帶頭標準c語言實現 單鏈表不帶頭壓縮c語言實現 約瑟…

Python之分組級運算——【transform()方法、apply()方法】

文章目錄數據轉換——transform()方法數據應用——apply()方法數據轉換——transform()方法 使用aggregate()方法進行聚合運算已經在上一篇博客中詳細闡述,我們知道aggregate()方法返回的數據集的形狀(shape)與被分組的數據集的形狀是不同的…

java限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中,出于安全性考慮,經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是: 1、在同一臺電腦上一次只允許有一個用戶登錄系統; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Matplotlib——繪制圖表

文章目錄通過figure()函數創建畫布通過subplot()函數創建單個子圖通過subplots()函數創建多個子圖通過add_subplot()方法添加和選中子圖添加各類標簽繪制常見圖表繪制直方圖——hist()函數繪制散點圖——scatter()函數繪制柱狀圖——bar()函數設定線條的相關參數本地保存圖片通…