【大总结2】大学两年,写了这篇几十万字的干货总结
本文是我大學(xué)兩年知識的總結(jié)。涵蓋數(shù)據(jù)結(jié)構(gòu)、算法、語言基礎(chǔ)、操作系統(tǒng)、關(guān)系數(shù)據(jù)庫、NOSQL、網(wǎng)絡(luò)/前端/項目基礎(chǔ)知識、安全和測試、框架的學(xué)習(xí)、中間件和工具、設(shè)計模式和框架原理、我推薦的資料、我的建議
本篇文章應(yīng)該算是Java后端開發(fā)技術(shù)棧的,但是大部分是基礎(chǔ)知識,所以我覺得對任何方向都是有用的。
?
1、數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。? ? ---摘自百度百科
?為什么把數(shù)據(jù)結(jié)構(gòu)放在第一位呢?因為我認為這是一切的基礎(chǔ)。
比如
學(xué)了時間復(fù)雜度空間復(fù)雜度,你就能寫出更好的程序,解決更多的性能問題。
學(xué)了順序表和鏈表,你就知道,在查詢操作更多時,應(yīng)該使用順序表,而在修改操作更多時,應(yīng)該使用鏈表;
學(xué)了棧之后,你可能才能理解并寫出遞歸,學(xué)了隊列,會對消息隊列有一個認識,之后用輪子(比如kafka)才更得心應(yīng)手。
學(xué)了串,你才知道String到底怎么實現(xiàn)的,你才知道了字符串如何匹配(KMP),搜索引擎(ES)是如何做出來。
學(xué)了排序,你才知道各種排序優(yōu)缺點,知道各種語言的sort是如何實現(xiàn)的(別給我說就是快排),用到實際項目中。
學(xué)了哈希,你才可能讀懂HashMap是怎么玩的。
這是我做的一些總結(jié):舊版總結(jié)
我進行了刪減,新寫的東西懶得加了。
涉及語言:
py3:注重算法本身的知識
c/c++:實現(xiàn)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法
java:實現(xiàn)較復(fù)雜數(shù)據(jù)結(jié)構(gòu)
1.1、概述
? ? ? ? ? ? ? ? ? ? ? ??算法體系參考
? ? ? ? ? ? ? ? ? ? ? ??課上筆記1(復(fù)習(xí)c、課程概述)
? ? ? ? ? ? ? ? ? ? ? ??課上筆記2(基本概念、時空復(fù)雜度)
? ? ? ? ? ? ? ? ? ? ? ??時空復(fù)雜度
? ? ? ? ? ? ? ? ? ? ? ??淺析P/NP/NPC
? ? ? ? ? ? ? ? ? ? ? ??引入:算法優(yōu)化
1.2、線性表
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記3(線性表及順序表示)
? ? ? ? ? ? ? ? ? ? ? ??課上筆記5(鏈表概述)
? ? ? ? ? ? ? ? ? ? ? ??課上筆記6(鏈表選講、靜態(tài)鏈表)
? ? ? ? ? ? ? ? ? ? ? ??作業(yè)1講解(最大子數(shù)組二維多維)
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??順序存儲實現(xiàn)(靜/動)
? ? ? ? ? ? ? ? ? ? ? ??單鏈表不帶頭(標準實現(xiàn))
? ? ? ? ? ? ? ? ? ? ? ??單鏈表不帶頭(壓縮代碼)
? ? ? ? ? ? ? ? ? ? ? ??雙鏈表帶頭
? ? ? ? 應(yīng)用:
? ? ? ? ? ? ? ? ? ? ? ??約瑟夫環(huán)(順序、鏈式、數(shù)學(xué))
? ? ? ? ? ? ? ? ? ? ? ??線性表表示集合
? ? ? ? ? ? ? ? ? ? ? ??線性表表示一元多項式
? ? ? ? ? ? ? ? ? ? ? ??鏈表環(huán)相關(guān)問題
? ? ? ? ? ? ? ? ? ? ? ??鏈表coding能力練習(xí):歸并排序
? ? ? ? ? ? ? ? ? ? ? ??LRU介紹和實現(xiàn)
? ? ? ? ? ? ? ? ? ? ??鏈表coding能力練習(xí):相交問題
1.3、棧和隊列
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記7(棧、隊列基礎(chǔ))
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組實現(xiàn)棧
? ? ? ? ? ? ? ? ? ? ? ??鏈表實現(xiàn)棧
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組實現(xiàn)隊列(易懂實現(xiàn)循環(huán))
? ? ? ? ? ? ? ? ? ? ? ??鏈表實現(xiàn)隊列
? ? ? ? ? ? ? ? ? ? ? ??雙棧
? ? ? ? ? ? ? ? ? ? ? ??棧和隊列的互相模擬
? ? ? ? 應(yīng)用:
? ? ? ? ? ? ? ? ? ? ? ??棧排序
? ? ? ? ? ? ? ? ? ? ? ??括號匹配
? ? ? ? ? ? ? ? ? ? ? ??表達式求值
? ? ? ? ? ? ? ? ? ? ? ??簡單迷宮問題
? ? ? ? ? ? ? ? ? ? ? ??借漢諾塔理解棧與遞歸
? ? ? ? ? ? ? ? ? ? ? ??手動維護棧實現(xiàn)二叉樹三種遍歷
? ? ? ? ? ? ? ? ? ? ? ???深搜、廣搜與棧、隊列
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??單調(diào)棧
? ? ? ? ? ? ? ? ? ? ? ??單調(diào)雙端隊列
? ? ? ? ? ? ? ? ? ? ? ??雙端隊列優(yōu)化的背包問題
1.4、串
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記8(串基礎(chǔ))
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??串的定長表示
? ? ? ? ? ? ? ? ? ? ? ??串的堆分配
? ? ? ? ? ? ? ? ? ? ? ??為何py整數(shù)不會溢出
? ? ? ? ? ? ? ? ? ? ? ??c語言文件操作
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??一文讀懂KMP
? ? ? ? ? ? ? ? ? ? ? ??一文讀懂Manacher
? ? ? ? ? ? ? ? ? ? ? ??KMP題集1
? ? ? ? ? ? ? ? ? ? ? ??KMP題集2
? ? ? ? ? ? ? ? ? ? ? ??KMP+DP入門
? ? ? ? ? ? ? ? ? ? ? ??字符串上的動態(tài)規(guī)劃
? ? ? ? ? ? ? ? ? ? ? ??前綴樹
? ? ? ? ? ? ? ? ? ? ? ??后綴樹/后綴數(shù)組概述
? ? ? ? ? ? ? ? ? ? ? ??AC自動機
1.5、數(shù)組和廣義表
注:題目慢慢添加
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記9(數(shù)組、廣義表)
? ? ? ? 部分題目實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??二維數(shù)組基操四連
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組基本操作三連(1)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組基本操作三連(2)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組基本操作三連(3)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組基本操作三連(4)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組精選操作(5)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組精選操作(6)
? ? ? ? 應(yīng)用:
? ? ? ? ? ? ? ? ? ? ? ??2048小游戲?qū)崿F(xiàn)
? ? ? ? ? ? ? ? ? ? ? ??吃豆人
? ? ? ? ? ? ? ? ? ? ? ??貪吃蛇
1.6、樹
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記10(樹和二叉樹概述)
? ? ? ? ? ? ? ? ? ? ? ??二叉樹概述
? ? ? ? ? ? ? ? ? ? ? ??課上筆記11(滿二叉樹、完全二叉樹)
? ? ? ? ? ? ? ? ? ? ? ??課上筆記12(二叉樹存儲與遍歷)
? ? ? ? ? ? ? ? ? ? ? ??課上筆記13(樹的存儲)
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??理解二叉樹遍歷
? ? ? ? ? ? ? ? ? ? ? ??二叉樹序列化/反序列化
? ? ? ? ? ? ? ? ? ? ? ??先序中序后序兩兩結(jié)合重建二叉樹
? ? ? ? ? ? ? ? ? ? ? ??先序中序數(shù)組推后序數(shù)組
? ? ? ? ? ? ? ? ? ? ? ??直觀打印二叉樹
? ? ? ? ? ? ? ? ? ? ? ??根據(jù)數(shù)組建立平衡二叉搜索樹
? ? ? ? ? ? ? ? ? ? ? ??平衡二叉樹的判斷
? ? ? ? ? ? ? ? ? ? ? ??完全二叉樹的判斷
? ? ? ? ? ? ? ? ? ? ? ??搜索二叉樹的判斷
? ? ? ? ? ? ? ? ? ? ? ??二叉樹最長路徑
? ? ? ? ? ? ? ? ? ? ? ??時間低于O(N)求完全二叉樹結(jié)點個數(shù)
? ? ? ? 應(yīng)用:
? ? ? ? ? ? ? ? ? ? ? ??二叉搜索樹
? ? ? ? ? ? ? ? ? ? ? ??堆
? ? ? ? ? ? ? ? ? ? ? ??堆應(yīng)用例題三連
? ? ? ? ? ? ? ? ? ? ? ??并查集
? ? ? ? ? ? ? ? ? ? ? ??并查集入門題集
? ? ? ? ? ? ? ? ? ? ? ??線段樹
? ? ? ? ? ? ? ? ? ? ? ??樹狀數(shù)組
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??最大搜索子樹
? ? ? ? ? ? ? ? ? ? ? ??morris遍歷 空間O(1)
1.7、圖
? ? ? ? 筆記:
? ? ? ? ? ? ? ? ? ? ? ??課上筆記14(圖基礎(chǔ))
? ? ? ? ? ? ? ? ? ? ? ??課上筆記15(存儲、遍歷)
? ? ? ? 基礎(chǔ):
? ? ? ? ? ? ? ? ? ? ? ??最小生成樹
? ? ? ? ? ? ? ? ? ? ? ??拓撲排序
? ? ? ? ? ? ? ? ? ? ? ??最短路
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??迷宮
? ? ? ? ? ? ? ? ? ? ? ??棋盤簡單深搜廣搜
? ? ? ? ? ? ? ? ? ? ? ??皇后問題(位運算)
? ? ? ? ? ? ? ? ? ? ? ??旅行商問題(認識狀態(tài)壓縮)
1.9、查找
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??二分及拓展
? ? ? ? ? ? ? ? ? ? ? ??二叉搜索樹實現(xiàn)
? ? ? ? ? ? ? ? ? ? ? ??數(shù)組建立二叉搜索樹
? ? ? ? ? ? ? ? ? ? ? ??自平衡二叉搜索樹
? ? ? ? ? ? ? ? ? ? ? ??AVL Tree
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??HashMap記錄的動態(tài)規(guī)劃
? ? ? ? ? ? ? ? ? ? ? ??跳表介紹和實現(xiàn)
1.10、排序
? ? ? ? 基礎(chǔ)代碼實現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ??八種排序
? ? ? ? 相關(guān)算法:
? ? ? ? ? ? ? ? ? ? ? ??快排-荷蘭國旗
? ? ? ? ? ? ? ? ? ? ? ??快排-前m大元素
? ? ? ? ? ? ? ? ? ? ? ??歸并-求逆序數(shù)
? ? ? ? ? ? ? ? ? ? ? ??桶思想-相鄰數(shù)最大差值
? ? ? ? ? ? ? ? ? ? ? ??堆
? ? ? ? ? ? ? ? ? ? ? ??堆應(yīng)用例題三連
? ? ? ? ? ? ? ? ? ? ? ??BFPRT
總之不要著急,基礎(chǔ)打牢。
1.10下面推薦一些學(xué)習(xí)資源:
1、數(shù)據(jù)結(jié)構(gòu) (嚴蔚敏,吳偉民編著圖書)
跟著經(jīng)典走,絕對沒錯,這個書寫的真的不錯,里面的偽代碼你有能力自己實現(xiàn)一下。
2、大話數(shù)據(jù)結(jié)構(gòu)
講的太入門了,看一遍對小白很有幫助
3、數(shù)據(jù)結(jié)構(gòu)精講與習(xí)題詳解
另外一本經(jīng)典書,是第一本的延申,有能力絕對要多看幾遍,寫的不錯。
?
二、算法
算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時間內(nèi)獲得所要求的輸出。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務(wù)。一個算法的優(yōu)劣可以用空間復(fù)雜度與時間復(fù)雜度來衡量。
先不說有沒有用(事實上工作上連leetcode知識用到的都不多),國內(nèi)大廠面試筆試,算法是占很大部分的;國外(比如北美),更是刷leetcode就能進(我只是聽說的hhh)。
2.1ACM
首先關(guān)于ACM的建議:強校盡可能打一打吧,弱校除非很熱愛,否則不建議。
其中,強校指的是能穩(wěn)定產(chǎn)出區(qū)域賽銀牌以上的學(xué)校。
如果在弱校,你可能舉步維艱:
首先我見過的,聽說過的一帶二的選手,最多也就區(qū)域銀,但是消耗了大量學(xué)習(xí)時間,還帶了兩個水貨拿牌子,這是很不值的。
其次,遇到某些讓你很難受的教練,可能你打了名額不讓你去,可能各種打壓你等等(競賽環(huán)境好的同學(xué)可能都想象不到吧)
當(dāng)然,環(huán)境決定不了一切,如果你決定由你創(chuàng)造歷史,也是可以的,請你在大一就判斷一下:是否算法編程比賽比賽每次都第一,并且落下第二兩道題以上(反正要碾壓)?如果是的話,在考慮是否走這條路。(我大一就是這樣,但是其實p都不會)。
當(dāng)然,你的學(xué)校如果有打ACM的那一群人,有一個集訓(xùn)隊,非常建議加入他們,
第一,可以鍛煉自己。你不知道多少個日日夜夜為了調(diào)試一個bug在那里冥思苦想,你寫的代碼加起來可能有幾萬行(500題*30行=15000行,很正常吧),而這幾萬行代碼是你幾萬行業(yè)務(wù)代碼不能比的。
第二,這群人不一定是將來混得最好的人,但是一定是中上游的人,而讓這些人成為你的朋友,對你很有幫助。
第三,享受快樂,你ac的那種快感。
2.2推薦資源
這里我自己寫的ACM博客并不多,也不全,所以給你們點oj和板子合集。
新手推薦匡斌專題,刷完保銅沖銀絕對沒問題kuangbin專題合集
我推薦的,也是比較有名的一些oj
國內(nèi):(排名不分先后)
? ? 浙江大學(xué)(ZJU):http://acm.zju.edu.cn/? ? ? ? ? ? ?北京大學(xué)(PKU):http://acm.pku.edu.cn/JudgeOnline/
同濟大學(xué)(TJU):http://acm.tongji.edu.cn/? ? ? ? ? 杭州電子科技大學(xué)(HDU):http://acm.hdu.edu.cn/
吉林大學(xué)(jlu):http://acm.jlu.edu.cn/? ? ? ? ? ? ? ? 哈爾濱工程大學(xué)(hrbeu):http://acm.hrbeu.edu.cn/??
哈爾濱工業(yè)大學(xué)(HIT):http://acm.hit.edu.cn/? ? ? ? ? ? 北京郵電大學(xué)(Bupt):http://acm.scs.bupt.cn/onlinejudge/
汕頭大學(xué)(STU):http://acm.stu.edu.cn/? ? ? ? ? ? ? ? ? ? ? 福州大學(xué)(FZU):http://acm.fzu.edu.cn/
華中科技大學(xué)(HUST):http://acm.hust.edu.cn/JudgeOnline/? ? 華東師范大學(xué)(ECNU):http://acm.cs.ecnu.edu.cn/
國外:
? ? ? ?俄羅斯:烏拉爾大學(xué)(URAL):http://acm.timus.ru/? ? ? ? ? ? ?薩拉托夫大學(xué)(SGU):http://acm.sgu.ru/
美國:USACO: http://train.usaco.org/usacogate
波蘭:SPOJ:http://www.spoj.pl/
另外,基本各路模板我都有,可以找我要哈。
你也可以去洛谷,計蒜客等網(wǎng)站刷題,這些網(wǎng)站都對新手比較友好,是刷題的好去處。
?
2.3工作面試算法
?
不是每個人都會打acm,所以面向?qū)嶋H,性價比很重要,這里推薦《劍指offer》和leetcode。
其中,《劍指offer》肯定要看完并且理解,leetcode據(jù)說刷一百多道就能應(yīng)付一般面試。
我本來想總結(jié)十篇精華帖,但是說實話leetcode題解絕對夠了。
https://leetcode-cn.com/
建議刷這幾個專題,性價比高一些哈。
動態(tài)規(guī)劃入門到熟悉,看不懂來打我啊(推薦)
搜索詳解
三、語言基礎(chǔ)
這不用我說,絕對是很重要的一部分,語言都學(xué)不明白,別的更不要想。你可以學(xué)習(xí)Java、c、c++、python、go等語言。
我主要是Java技術(shù)棧的,但是總結(jié)的基礎(chǔ)知識有一些不方便放出來,是我的私密文章,我只把一些公開的放出來。
3.1Java
1、一個".java"源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制?
2、short s1= 1; s1= s1+1;?有沒有錯?3、short s1= 1; s1 += 1;有沒有錯?
4、使用final關(guān)鍵字修飾一個變量時,引用的內(nèi)容一定不能變?
5、是否可以從static方法內(nèi)對非static方法調(diào)用?為什么?
6、Overload和Override的區(qū)別?7、Overloaded的方法是否可以改變返回值的類型?
8、接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態(tài)的main方法?
9、Java中實現(xiàn)多態(tài)的機制是什么?10、abstractclass和interface有什么區(qū)別?
11、String s = "Hello";s = s + "world!";執(zhí)行后,原始的String對象中的內(nèi)容變了沒有?
12、下面這條語句一共創(chuàng)建了多少個對象:String s="a"+"b"+"c"+"d";
13、final, finally, finalize的區(qū)別。14、error和exception有什么區(qū)別?15、Java 中堆和棧區(qū)別
16、能將 int 強制轉(zhuǎn)換為 byte 類型的變量嗎?(引申到所有大類型轉(zhuǎn)小類型
17、hashCode有什么用?與 a.equals(b) 有什么關(guān)系?19,java中會存在內(nèi)存泄漏嗎
這些問題以及更多問題都是我總結(jié)的比較好的問題,要答案去評論,我發(fā)。
想獲取更多筆記的。。。。。我不會給你們的hhhhh。
3.2Java一些總結(jié)
只有這些公開的了。
java 面向?qū)ο蟊囟攀?/p>
Arrays工具類常見方法
Collections 工具類常見方法
Java的IO總結(jié)
終于,我讀懂了所有Java集合——List篇? ? ? ? ??
終于,我讀懂了所有Java集合——queue篇
終于,我讀懂了所有Java集合——sort? ? ? ? ? ??
終于,我讀懂了所有Java集合——map篇
終于,我讀懂了所有Java集合——map篇(多線程)? ? ? ? ??
終于,我讀懂了所有Java集合——set篇
反射全解
關(guān)于Java中String的問題
3.3python:
python學(xué)習(xí)實例(1)
python學(xué)習(xí)實例(2)
python學(xué)習(xí)實例(3)
python學(xué)習(xí)實例(4)
python學(xué)習(xí)實例(5)
python學(xué)習(xí)實例(6)
python學(xué)習(xí)實例(7)
基礎(chǔ)技巧總結(jié)(一)?
基礎(chǔ)技巧總結(jié)(二)
基礎(chǔ)技巧總結(jié)(三)
基礎(chǔ)技巧總結(jié)(四)
基礎(chǔ)技巧總結(jié)(五)
為什么Python整型不溢出
另外,如果是零基礎(chǔ)py,我推薦廖雪峰的教程,百度搜即可。
?
3.4其它語言
哪種語言需要小白教程,評論,我給你想想有哪些好東西。
另外,py爬蟲建議學(xué)習(xí)一下。
四、操作系統(tǒng)
如果你時間緊,可以跳過。
操作系統(tǒng)是管理計算機硬件與軟件資源的計算機程序,同時也是計算機系統(tǒng)的內(nèi)核與基石。操作系統(tǒng)需要處理如管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序、控制輸入設(shè)備與輸出設(shè)備、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù)。
4.1基礎(chǔ)知識
放下我的操作系統(tǒng)基礎(chǔ)知識總結(jié)
進程基礎(chǔ)
經(jīng)典的進程同步問題
處理機調(diào)度?、虛擬存儲器
存儲器?
輸入輸出系統(tǒng)
文件管理
4.2具體實現(xiàn)
我認為學(xué)了最好可以把經(jīng)典的算法都實現(xiàn)一下。
我模擬了一些。
模擬進程調(diào)度
模擬銀行家算法
模擬固定分區(qū)分配?
模擬基本分頁存儲
模擬動態(tài)分區(qū)分配
4.3jvm
如果你是Java技術(shù)棧,jvm是肯定要接觸的,這部分我也是小白,暫時沒怎么弄過jvm調(diào)優(yōu),但是知識一定要準備好,畢竟你學(xué)紅黑樹的時候也不知道將來寫TreeMap的時候有用呢?
Java內(nèi)存模型常見問題
Java內(nèi)存區(qū)域
如何判斷對象已經(jīng)死亡
Hotspot虛擬機的對象
垃圾回收、垃圾收集器
空間分配
類加載過程、類加載器
堆和棧的精華大總結(jié)
4.4Linux
linux是人人都要會的。
我這部分其實很菜,基本上啥都不會,但是真的很重要。。。
我懶得找我總結(jié)的東西了,其實大部分就是一些命令的使用。
Linux概述
linux-在cenos上安裝大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)
shell一文入門通
對于原理,我讀過一本書的小部分,后來因為各種原因沒有繼續(xù)讀下去,但是推薦給你們。
《linux內(nèi)核設(shè)計與實現(xiàn)(第三版)》 拉夫,機械工業(yè)出版社的那本。
4.5多線程
比如Java多線程,這其實也是屬于操作系統(tǒng)只是的一部分,所以我放到了這里。
我這部分暫時沒有總結(jié)完。
總結(jié)了線程安全性的二十四個精華問題
volatile
synchronized使用和原理全解(((((推薦)))))
?
4.6推薦資源
基礎(chǔ)知識:
推薦王道考研的視頻,真的很贊,b站就可以搜得到。
優(yōu)點:聲音好聽(有磁性)、學(xué)長總結(jié)(學(xué)生更容易聽懂)、不講廢話(節(jié)省時間)、講的通俗易懂(反正我一遍就懂)
我對比了不下五種視頻,這是最好的。
有的人可能會問我又不考研?那你不能看一遍?這么好的視頻不看多浪費啊?
多線程:
Java多線程編程核心技術(shù)(第2版) 作者:高洪巖
這本書我猶豫了很久到底要不要推薦呢?因為我看完了其實感覺一般,有些例子過于啰嗦,而且沒有底層原理的講解。但是用來入門的話,如果你是一個細心且耐得住性子的人,這本書還算不錯。
深入淺出Java多線程
這本書個人感覺比上一本好。但是還是看個人感覺吧,需要手把手教的那種,還是第一本好。
?
五、關(guān)系數(shù)據(jù)庫
開發(fā)離不開數(shù)據(jù)庫,我把數(shù)據(jù)庫的知識分為以下幾個階段:
5.1關(guān)系數(shù)據(jù)庫基本知識和任意一個語言實戰(zhàn)(MYSQL)
請注意,這是兩個事,前者我推薦數(shù)據(jù)庫系統(tǒng)概論,相信大部分學(xué)校的教材都是這本,里面的理論很重要,是基礎(chǔ)。
后者我推薦MySQL必知必會,這本書絕對是入門sql語言的最佳選擇。
這兩本書我不接受任何反駁,是相關(guān)方面國內(nèi)最好的。
再推薦一個視頻:b站上面的東南大學(xué)徐立臻教授數(shù)據(jù)庫原理,真的講的很好,我看了不止一遍。
下面放下我的總結(jié):
關(guān)系數(shù)據(jù)庫——基礎(chǔ)
關(guān)系數(shù)據(jù)庫——關(guān)系數(shù)據(jù)語言
關(guān)系數(shù)據(jù)庫——mysql數(shù)據(jù)類型大總結(jié)
關(guān)系數(shù)據(jù)庫——sql基礎(chǔ)1定義
關(guān)系數(shù)據(jù)庫——sql查詢
關(guān)系數(shù)據(jù)庫——sql增刪改
關(guān)系數(shù)據(jù)庫——mysql常用函數(shù)總結(jié)
關(guān)系數(shù)據(jù)庫——視圖/存儲過程/觸發(fā)器
關(guān)系數(shù)據(jù)庫——數(shù)據(jù)庫恢復(fù)
關(guān)系數(shù)據(jù)庫——并發(fā)控制
5.2有基本的優(yōu)化能力,復(fù)雜的sql編寫能力
這部分我認為非常重要,實際工作中都是很復(fù)雜的sql,并且涉及到優(yōu)化。
我推薦高性能MySQL(第二版),這本書說實話我讀不完,甚至只讀了十分之一,慚愧慚愧,但是還是讓我受益良多。
還有,推薦leetcode數(shù)據(jù)庫專題,真的也讓我受益良多(你們可能只知道leetcode算法吧hhhh)
5.3了解數(shù)據(jù)庫基本的實現(xiàn)原理
這里我推薦《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎(第2版)》
5.4自己寫數(shù)據(jù)庫
我當(dāng)然是沒達到的,但是我看到了很多大佬都在做這方面內(nèi)容,包括本校的幾屆畢業(yè)薪資最高的學(xué)長、包括同級的外校大神,強行讓我做但是我不會啊。。。哭了
但是我想當(dāng)推薦一下資源,我雖然沒實現(xiàn),但是看了有很多收獲,如果你按著做出來了,完全可以當(dāng)作一個不錯的項目。
推薦兩門網(wǎng)課:mit6.830 和 cmu15445(建議做前者的實驗(相對完整),看后者的課程)。
學(xué)完兩門網(wǎng)課之后,對數(shù)據(jù)庫系統(tǒng)已經(jīng)有了大致的了解。
接下來可以看數(shù)據(jù)庫系統(tǒng)概念(但是這本書寫的有點繁瑣),推薦看pingcap的tidb源碼閱讀二十四篇(https://pingcap.com/blog-cn/),看文章的時候可以看一下源碼(需要學(xué)一下go)。
另外一個好的學(xué)習(xí)資源是talent plan,作業(yè)質(zhì)量挺高的。
(https://university.pingcap.com/)
如果你對pingcap的tidb很感興趣,想繼續(xù)深入學(xué)習(xí),可以再了解一下分布式,推薦mit 6.824,接下來就是看論文,寫lab的快樂時光,接著你可能想看看tikv,那么可以學(xué)一下rust啦。
?
六、NOSQL
?
內(nèi)存越來越快、越來越便宜的今天,你要是不會一個nosql那可以不用干活了吧?
但是簡單地用當(dāng)然不夠(你會用map就會用nosql),你最好知道一下復(fù)雜的操作,和nosql的原理。
我這里研究的是redis:
6.1入門
Redis是一款基于鍵值對的NoSQL數(shù)據(jù)庫,它的值支持多種數(shù)據(jù)結(jié)構(gòu):
字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
? Redis將所有的數(shù)據(jù)都存放在內(nèi)存中,所以它的讀寫性能十分驚人,用作數(shù)據(jù)庫,緩存和消息代理。
Redis具有內(nèi)置的復(fù)制,Lua腳本,LRU逐出,事務(wù)和不同級別的磁盤持久性,并通過Redis Sentinel和Redis Cluster自動分區(qū)提供了高可用性。
? Redis典型的應(yīng)用場景包括:緩存、排行榜、計數(shù)器、社交網(wǎng)絡(luò)、消息隊列等
NOSQL及redis概述
但是我們實戰(zhàn)之前,還是要了解基本使用
數(shù)據(jù)結(jié)構(gòu)和對象的使用介紹
Java整合
6.2原理總結(jié)
這部分在我看來是最有意思的,我們有必要了解底層數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),這也是我最感興趣的。
比如,你知道redis中的字符串怎么實現(xiàn)的嗎?為什么這么實現(xiàn)?
你知道redis壓縮列表是什么算法嗎?
你知道redis為什么拋棄了紅黑樹反而采用了跳表這種新的數(shù)據(jù)結(jié)構(gòu)嗎?
你知道hyperloglog為什么用如此小的空間就可以有這么好的統(tǒng)計性能和準確性嗎?
你知道布隆過濾器為什么這么有效嗎?有沒有數(shù)學(xué)證明過?
你是否還能很快寫出來快排?或者不斷優(yōu)化性能的排序?是不是只會調(diào)庫了甚至庫函數(shù)怎么實現(xiàn)的都不知道?真的就是快排?
包括數(shù)據(jù)庫,持久化,處理事件、客戶端服務(wù)端、事務(wù)的實現(xiàn)、發(fā)布和訂閱等功能的實現(xiàn),也需要了解。
另外,
數(shù)據(jù)結(jié)構(gòu)(字典、鏈表、字符串)
數(shù)據(jù)結(jié)構(gòu)(整數(shù)集合,壓縮列表)
數(shù)據(jù)結(jié)構(gòu)(跳表介紹和手撕)
為什么選擇了跳表而不是紅黑樹?
HyperLogLog
LRU介紹和實現(xiàn)
Redis中的LRU算法改進
布隆過濾器
qsort源碼
對象(字符串對象、列表對象、哈希對象、集合對象、有序集合總結(jié))
內(nèi)存管理
數(shù)據(jù)庫簡介、數(shù)據(jù)持久化
事件
客戶端、命令的執(zhí)行過程
事務(wù)
發(fā)布和訂閱
6.3多機
舊版復(fù)制
新版復(fù)制
哨兵機制
6.4實戰(zhàn)
進一步的了解了redis的使用和原理,我們來寫一些簡單的實戰(zhàn)代碼
實戰(zhàn)點贊
實戰(zhàn)關(guān)注
緩存擊穿/穿透/雪崩
對項目的一些優(yōu)化方案
RedLock
6.5更多的細節(jié)問題
相關(guān)問題匯總
?
七、網(wǎng)絡(luò)/前端/項目基礎(chǔ)知識
7.1網(wǎng)絡(luò)原理
只要是開發(fā)肯定離不開網(wǎng)絡(luò)知識。
HTTP
響應(yīng)代碼全集
網(wǎng)絡(luò)原理知識點匯總
網(wǎng)絡(luò)原理知識點總結(jié)
但是我不建議你把那本《計算機網(wǎng)絡(luò)(第七版)謝希仁著》看完,我感覺太過無聊而且底層的那幾層我個人感覺是真的用處不大。
推薦書籍:《計算機網(wǎng)絡(luò):自頂向下》、《圖解http》
7.2前端基礎(chǔ)
除非你可以牛到給老板說:“老子就是不會前端,專做后端”,否則你還是要會一些前端的。
Java開發(fā)需要知道的HTML知識
js知識點匯總
jquery選擇器
建議上vue\react\node.js,這些是我問的前端同學(xué)的建議。
如果時間不夠上面的知識,bootstrap建議看一下(因為我就會一點hhhh)
?
7.3項目基礎(chǔ)知識
不同于基礎(chǔ)語言知識,這部分知識可能涉及到網(wǎng)絡(luò)方面知識,學(xué)會后你可以具體做一些東西比如Java,你就需要學(xué)servlet、JDBC等JavaEE技術(shù),但是這些技術(shù)又不會真的工作用,只是基礎(chǔ),但是真的很重要,建議拿這些知識寫一些項目,比如學(xué)生管理系統(tǒng)。
Java網(wǎng)絡(luò)編程
AJAX大總結(jié)
servlet基礎(chǔ)總結(jié)
servlet中的數(shù)據(jù)存儲
servlet——三兄弟的另外兩個:過濾器/監(jiān)聽器
mysql——JDBC
但是我不建議你再學(xué)JSP,這都9102年了,為啥非抱著它不放呢?你學(xué)leaf不好嗎?如果說servlet、JDBC是基礎(chǔ),我覺得jsp真的沒必要,他也不是什么所謂的“基礎(chǔ)”。
?
八、安全和測試
這部分我覺得也是很值得學(xué)習(xí)的,反向思維很重要,不要以為開發(fā)就可以不懂測試,不懂安全。
咱們寫代碼的時候也是邊寫邊側(cè)不是么。
說一下我學(xué)這些的理由:
壓測的話,LoadRunner太不方便,太過于龐大,可能專業(yè)測試需要學(xué),開發(fā)學(xué)jmeter就可以啦。
安全方面其實我挺有感觸的,你們知道為啥要放驗證碼嗎?你們知道SpringSecurity是咋實現(xiàn)的嗎?你們知道xss,sql注入,文件上傳漏洞,瀏覽器安全,這些東西怎么攻擊怎么防御嗎?
我們作為開發(fā)其實是需要知道的吧。
軟件測試基礎(chǔ)知識
探索式軟件測試
壓力測試Jmeter
安全方面知識
常見漏洞
?
九、框架的學(xué)習(xí)
Java來說,學(xué)完了JavaEE肯定要學(xué)框架的,你總不能拿servlet和jsp、JDBC寫項目吧?
推薦ssm,不要學(xué)ssh了,都9102年了,咱們就不要浪費時間了。
springboot是一定要學(xué)的,相關(guān)的spring生態(tài)圈都要學(xué),這部分我也剛接觸,以后要多多學(xué)習(xí)。
springboot——概述
springboot1——spring相關(guān)入門
springboot2——MyBatis入門
springboot-攔截器
springboot——kaptcha
springboot3——Email
Spring Security使用
至于原理,抱歉我能力有限,目前正在學(xué)習(xí)中。。。。。。。。。。。。。。。
?
十、中間件和工具
?
這一部分我暫時沒怎么寫總結(jié)博客,但是我認為都是要會用并且了解原理的。
推薦的鏈接有幾篇是其他人寫的,因為我也是小白,有的方面沒什么經(jīng)驗。
10.1消息隊列
這是必會內(nèi)容,否則你寫的項目可以說沒有什么性能可言吧。
首推kafka,當(dāng)然你學(xué)別的未嘗不可,就算拿redis也能寫,看你自己的需要吧。
建議學(xué)習(xí)原理,我覺得挺重要的。
真的,Kafka 入門一篇文章就夠了
10.2搜索引擎
這我認為不是必會的,但是最好學(xué)習(xí)一下,推薦你可以自己基于字典樹做一個小型搜索引擎,還可以統(tǒng)計熱點詞、過濾敏感詞等等,非常方便。
至于具體的我推薦elasticsearch,并且我建議原理一定要了解一下,什么倒排索引之類的。
10.3本地緩存
現(xiàn)在光會關(guān)系數(shù)據(jù)庫肯定是不行的,你要會一種nosql數(shù)據(jù)庫,你要做緩存,提升性能,,但是進一步提高性能,預(yù)防緩存問題(比如緩存雪崩),你就需要做多重緩存,本地緩存是少不了的。我推薦咖啡因。
10.4git
不多解釋,就是給你提個醒。
教程推薦廖雪峰
git大總結(jié)
10.5 maven
這個也是必學(xué)內(nèi)容,小白的直觀感受就是可以不用到處搜jar包了。還有很多其他強大的功能。
Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的項目管理工具軟件。
Maven 除了以程序構(gòu)建能力為特色之外,還提供高級項目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡單的項目。由于 Maven 的面向項目的方法,許多 Apache Jakarta 項目發(fā)文時使用 Maven,而且公司項目采用 Maven 的比例在持續(xù)增長。
手把手maven的功能/安裝/使用/idea集成
10.6nginx
沒有商量,必須會。
Nginx是一款輕量級的Web?服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
nginx學(xué)習(xí),看這一篇就夠了
10.7 zookeeper
必會,關(guān)鍵你kafka啥的都得在這上面跑。
ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護、域名服務(wù)、分布式同步、組服務(wù)等。
ZooKeeper的目標就是封裝好復(fù)雜易出錯的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。
ZooKeeper包含一個簡單的原語集,?[1]??提供Java和C的接口。
持續(xù)更新的Zookeeper知識總結(jié)
10.8 idea
必會
idea常用設(shè)置
10.9vim
必會
vim特別好的教程
10.10dubbo
dubbo知識點總結(jié) 持續(xù)更新
10.11Xmind/ProcessOn
- Xmind官網(wǎng)地址:?https://www.xmind.cn
- ProcessOn在線作圖地址:https://www.processon.com
我這里列舉了兩個工具,他們兩個都可以做概要設(shè)計的腦圖
10.12Postman
- 官網(wǎng)地址 :https://www.getpostman.com
這個是接口調(diào)試的神器,單測比較繁瑣的你可以試試這個嘛,不過很多接口還是只能寫寫單測,反正很香。
不過這個名字一看就是男生用的,那我們女生用啥呢?往下看
10.13Postwoman
官網(wǎng)地址 :https://postwoman.io
PostMan一聽就是男生用的,咋妹子們肯定要用最近開源的Postwoman啊,它是一款開源的 Postman 替代品
開源沒多久優(yōu)點如下:
輕盈,可直接在線訪問;
簡約,采用簡約的 UI 設(shè)計精心打造;
支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
支持驗證;
實時,發(fā)送請求即可獲取響應(yīng)。
10.14Gradle
官網(wǎng)地址 :https://gradle.org
Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化構(gòu)建開源工具。
它使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項目設(shè)置,目前也增加了基于Kotlin語言的kotlin-based DSL,拋棄了基于XML的各種繁瑣配置。
這個跟Maven功能是一樣的,但是兩者語法不一樣,而且我覺得版本控制的時候沒Maven好使,有小坑,勝在語法簡潔。
?
十一、設(shè)計模式和框架原理
當(dāng)你開發(fā)到一定程度,學(xué)習(xí)設(shè)計模式肯定是避免不了的
建議閱讀經(jīng)典書籍,這是筆記,我覺得看筆記也可以。
《Head First設(shè)計模式》讀書筆記_第一章
《Head First設(shè)計模式》第二章筆記 觀察者模式
《Head First設(shè)計模式》第三章筆記 裝飾者模式
《Head First設(shè)計模式》第四章筆記 工廠模式
《Head First設(shè)計模式》第五章筆記-單件模式
《Head First設(shè)計模式》第六章筆記-命令模式
《Head First設(shè)計模式》第七章-適配器模式、外觀模式
《Head First設(shè)計模式》第八章筆記-模板方法模式
《Head First設(shè)計模式》第九章(1)迭代器模式
《Head First設(shè)計模式》第九章(2)組合模式
《Head First 設(shè)計模式》第十章-狀態(tài)模式 狀態(tài)模式
學(xué)了設(shè)計模式你才敢去看源碼。
至于spring源碼,我畢竟還年輕,寫代碼太少,沒勇氣去看(也沒能力去看),以后再說吧。
?
十三、我推薦的資料
文中提到的書和視頻我都是看過的,不會只聽說過就推薦給你,那是不負責(zé)任。
1、數(shù)據(jù)結(jié)構(gòu) (嚴蔚敏,吳偉民編著圖書)
跟著經(jīng)典走,絕對沒錯,這個書寫的真的不錯,里面的偽代碼你有能力自己實現(xiàn)一下。
2、大話數(shù)據(jù)結(jié)構(gòu)
講的太入門了,看一遍對小白很有幫助
3、數(shù)據(jù)結(jié)構(gòu)精講與習(xí)題詳解
另外一本經(jīng)典書,是第一本的延申,有能力絕對要多看幾遍,寫的不錯。
推薦《劍指offer》和leetcode。
其中,《劍指offer》肯定要看完并且理解,leetcode據(jù)說刷一百多道就能應(yīng)付一般面試。
我本來想總結(jié)十篇精華帖,但是說實話leetcode題解絕對夠了。
https://leetcode-cn.com/
Java多線程編程核心技術(shù)(第2版) 作者:高洪巖
這本書我猶豫了很久到底要不要推薦呢?因為我看完了其實感覺一般,有些例子過于啰嗦,而且沒有底層原理的講解。但是用來入門的話,如果你是一個細心且耐得住性子的人,這本書還算不錯。
深入淺出Java多線程
這本書個人感覺比上一本好。但是還是看個人感覺吧,需要手把手教的那種,還是第一本好。
《計算機網(wǎng)絡(luò):自頂向下》、《圖解http》
總:
Stack Overflow,https://stackoverflow.com/questions/tagged/java
Stack Overflow 可以說是解決問題的殺手锏
嗶哩嗶哩
上邊的視頻都是非常高質(zhì)量的,你可以去搜索看一下。
慕課網(wǎng)
雖然有些視頻時付費的,但是質(zhì)量是真的高,那些免費的入門足夠看了
菜鳥教程
一聽名字就知道適合菜鳥的,但是基礎(chǔ)的知識寫的非常詳細,很清晰易懂,非常適合剛開始學(xué)習(xí)編程的小伙伴。
W3School
剛開始學(xué)WEB開發(fā)時,經(jīng)常結(jié)合w3school學(xué)習(xí)前端,開發(fā)時,如果遇到記不清的標簽,就去w3school搜索。
中國大學(xué)MOOC
如果你是非科班的,想要系統(tǒng)著補某們大學(xué)的課程,那么中國大學(xué)MOOC是個不錯的選擇,這里有各種各樣的課程,有些老師還是講的挺好了,和大學(xué)課程老師的教學(xué)差不多。我編譯原理就是在這里學(xué)到.
?
第零、最后,我的建議
0.1不要飄
永遠保持一顆謙虛的心,你認為你厲害或者你很努力是因為你的環(huán)境不好而已。
在一個中專,你會寫項目,能寫增刪改查,就覺得自己特別努力特別厲害。
在一個三本院校,你可能天天按時上課,就覺得自己特別努力特別厲害。
在一個一本院校,你可能覺得上課好好聽講,下課好好寫作業(yè),就覺得自己特別努力特別厲害。
在一個211,你可能沒課的時候也去圖書館,并且課下時間對老師講的東西做了一些拓展,就覺得自己特別努力特別厲害。
在一個985.。。。。。
還用繼續(xù)說嗎?你認為的努力和厲害,換個環(huán)境,毛都算不上。驕傲的人必定失敗
?
0.2不要慌
很多人焦慮找不到好工作,我也是。
我見過省會城市一個挺大的當(dāng)?shù)仄髽I(yè),四五十平米的屋子擠著幾十個人,每個程序員在自己的一平米空間里工作,月薪2500.
我見過清華的,手寫操作系統(tǒng)運行在自己做的cpu上,手寫數(shù)據(jù)庫,oi省一、數(shù)雙學(xué)位、一天速成java寫了個app拿了第一,GPA大部分4.0。
人和人的差距,比人和狗的差距還大。
所以不要慌,你再慌,也有人不如你,你再慌,也有人比你厲害。
一步一步走,永遠不要被別人影響,做好自己。
0.3不要猶豫
挺多人還在比那個語言好,糾結(jié)學(xué)哪個語言,糾結(jié)哪個方向掙錢。
想的多不如去做,我相信不管你做什么,只要努力一定有收獲。
0.4我不建議花時間學(xué)的東西
AWT 和 Swing
好像不知道大清朝早已經(jīng)亡了幾百年一樣。已經(jīng) 9102 了,誰還會用 AWT 和 Swing 去開發(fā)桌面應(yīng)用呢?
Struts
Struts 是早年一個優(yōu)秀的 MVC 框架,單從技術(shù)的角度來看,還是蠻不錯的。但是自從有了 SpringMVC 后,Struts 就被拍死在沙灘上了。
Hibernate
Hibernate 太重量級了,學(xué)習(xí)成本太高,取而代之的是輕量級的 MyBatis(支持定制化 SQL、存儲過程以及高級映射)。
JSP
等等。。。
當(dāng)然誰和誰的情況都不一樣,如果你入職的小公司確實需要,還是要學(xué)的(但是我建議你跑路,沒意義的)
總結(jié)
以上是生活随笔為你收集整理的【大总结2】大学两年,写了这篇几十万字的干货总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型计算机简化结构,基于FPGA的简易微
- 下一篇: leetcode551. 学生出勤记录