Java學(xué)習(xí)筆記-2022年12月12日
(這是第一行)
牢記使命:文化基因的傳播
暫時(shí)的計(jì)劃:優(yōu)秀程序員
項(xiàng)目需求
管理系統(tǒng):程序員書店
網(wǎng)頁游戲:模擬程序員人生
小說形式的Java從入門到精通
學(xué)習(xí)方法
形而上的是意思,不是文字,盡量不要發(fā)展自己的namespace,否則別人不懂
工科,不必看太細(xì)
自言自語,輸入同時(shí)輸出,學(xué)習(xí)是為了面試、跟同事討論、做視頻輸出
我的優(yōu)勢:項(xiàng)目想象力、知識點(diǎn)串連
程序員的工作就是邊做邊學(xué),工科,實(shí)現(xiàn)最重要
每次進(jìn)度慢下來,這是直覺在提醒我,走錯(cuò)路了。我要讓成功變成必然
回憶好狀態(tài):智力題(聯(lián)系現(xiàn)實(shí)),讀書-進(jìn)化心理學(xué)(創(chuàng)作)
多用百度
腦子動(dòng)起來,迷茫時(shí)關(guān)注大佬up主
學(xué)概念時(shí),哲學(xué)三問:這是什么?這怎么實(shí)現(xiàn)的?這可以用來做什么?
喜歡學(xué)理論,腦子動(dòng)起來,迷茫時(shí)關(guān)注大佬
認(rèn)清自己,單兵實(shí)干家
學(xué)習(xí)過程中找狀態(tài),不著急
關(guān)注大佬up主,跟著大佬的思路
自己做整理,存ROM,求精不求多,對新的概念做聯(lián)想
腦子動(dòng)起來,腦子從一個(gè)狀態(tài)變成另一個(gè)狀態(tài),混亂時(shí)停下來,及時(shí)止損
?
Java基礎(chǔ)
注釋
/* 注釋 */
// 注釋
/**
?* 多行注釋
?*/
?
public class
package
import
?
Class object = new Class();
?
基本類型
數(shù)字 * 6 + char + boolean
byte short int long float double char boolean
void用于空返回的方法
long默認(rèn)0L
float默認(rèn)0.0f
double默認(rèn)0.0d
char最小值是 \u0000;最大值是 \uffff
?
引用類型
Java引用類型的變量類似于C/C++的指針。
變量一旦聲明后,類型就不能被改變了。
對象、數(shù)組都是引用數(shù)據(jù)類型。
所有引用類型的默認(rèn)值都是null。
一個(gè)引用變量可以用來引用任何與之兼容的類型。
?
final double PI = 3.14; // final不可修改,通常用大寫字母
?
自動(dòng)類型轉(zhuǎn)換
short轉(zhuǎn)int,float轉(zhuǎn)double
boolean不能
float轉(zhuǎn)int,舍棄小數(shù),不是四舍五入
?
強(qiáng)制類型轉(zhuǎn)換
int i = 100;
byte b = (byte) i;
?
隱含強(qiáng)制類型轉(zhuǎn)換
整數(shù)默認(rèn)int
小數(shù)默認(rèn)double
float f = 1.1f // 定義float時(shí)要有f
?
Java語言支持的變量類型有:
類變量:方法之外,用 static 修飾。
實(shí)例變量:方法之外,沒有 static 。
局部變量:類的方法中的變量。
?
Java 局部變量
在方法、構(gòu)造方法、語句塊
不能用訪問修飾符
分配棧內(nèi)存,run時(shí)new,run完就沒了
?
實(shí)例變量
在類中,但在方法、構(gòu)造方法和語句塊之外,多是private
對象被new之后,實(shí)例變量就有了,在對象被銷毀的時(shí)候銷毀
在靜態(tài)方法或其他類中,應(yīng)該用完全限定名:ObjectReference.VariableName。
?
類變量(靜態(tài)變量)
大多數(shù)是public static final,用大寫字母。
存在靜態(tài)存儲區(qū),只有一份,在第一次被訪問時(shí)創(chuàng)建,在程序結(jié)束時(shí)銷毀。
?
同一個(gè)類private,同一個(gè)包(默認(rèn)),子類protected,所有包public
?
private
private用來隱藏類的實(shí)現(xiàn)細(xì)節(jié)和保護(hù)類的數(shù)據(jù)
private可用于變量、方法、構(gòu)造方法
類和接口不能用private
private變量只能通過類中的public?getter方法被外部類訪問
?
protected(復(fù)雜,少用)
如果子類和基類不在同一package:那么在子類中,子類實(shí)例可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類實(shí)例的protected方法。
?
運(yùn)算符
算術(shù)運(yùn)算符 + - * / % ++ --
關(guān)系運(yùn)算符 == != > < >= <=
邏輯運(yùn)算符?&& || !
賦值運(yùn)算符?= += -= *= /= %=
三元運(yùn)算符?int max?= a > b?? a?: b
位運(yùn)算符,少用
?
instanceof 運(yùn)算符
String str = "abc";
boolean b?= str?instanceof String; // 由于 str 是 String 類型,所以返回真
?
循環(huán)控制
while( i > 0?)
至少一次的do while
for( int i = 0; i < 10; i++)
for each
?
break 打斷循環(huán)或switch
?
continue 關(guān)鍵字
continue 讓程序立刻跳轉(zhuǎn)到下一次循環(huán)。
在 for 循環(huán)中,continue 跳轉(zhuǎn)到更新語句i++。
在 while 或者 do…while 循環(huán)中,跳轉(zhuǎn)到布爾表達(dá)式的判斷語句i>0。
?
if else
?
switch case
?
包裝類
Number Boolean Character
?
日期時(shí)間
?
正則表達(dá)式
?
try catch finally
為什么要有try?方法調(diào)用時(shí),不可run,返回原因
?
extends class
implements?interface
this自己 super引用當(dāng)前對象的父類
final
?
重寫(Override)?extends父類
重載(Overload)?同一class中,方法名同,參數(shù)不同,返回值隨意
?
多態(tài)
?
implements interface
?
HashMap key-value
HashSet沒重復(fù)
?
泛型:
E - Element (集合的元素)
T - Type(Java 類)
K - Key(鍵)
V - Value(值)
N - Number(數(shù)值類型)
??- 不確定的 java 類型
?
JVM
JRE
JDK
.txt -> .exe // 編譯之后,操作系統(tǒng)可直接run
.java -> .class -> JVM // 編譯之后,給JVM解釋執(zhí)行,JVM運(yùn)行在操作系統(tǒng)上
JavaWeb
Servlet是一個(gè)能處理HTTP請求,發(fā)送HTTP響應(yīng)的程序
JSP簡單輸出HTML,混帶Java代碼
out
session
request
?
Cookie存在用戶瀏覽器中
Session存在服務(wù)器端,存在服務(wù)器上的文件、數(shù)據(jù)庫、內(nèi)存或 Redis 這種內(nèi)存型數(shù)據(jù)庫。
Session ID存在Cookie和服務(wù)器各一份
客戶端之后對同一個(gè)服務(wù)器進(jìn)行請求時(shí)會順帶Cookie,服務(wù)器收到之后找Session ID,繼續(xù)之前的業(yè)務(wù)操作。
框架
順序
new Maven Project
pom.xml
application.yml
前端html放進(jìn)來
再后面全是java類
Spring
控制反轉(zhuǎn)IoC
對象實(shí)例化的控制權(quán)交給外部環(huán)境(Spring框架、IoC容器)
例如:現(xiàn)有類A依賴于類B
●傳統(tǒng)的開發(fā)?:在類A中手動(dòng)new一個(gè)B的對象
●使用IoC思想的開發(fā)?:通過IoC容器(Spring框架)來實(shí)例化對象,要用哪個(gè)對象,直接從IoC容器里面拿
?
Bean依賴注入DI
Spring中的bean
?
面向切面AOP
多個(gè)方法的相同位置出現(xiàn)了重復(fù)的代碼,比如:權(quán)限檢查,日志代碼等,橫切邏輯代碼
AOP橫向抽取,把橫切邏輯代碼和業(yè)務(wù)邏輯代碼分離
SpringMVC
對接前端
簡化Servlet
MyBatis
簡化數(shù)據(jù)庫操作
MyBatis工作量大,要寫SQL,性能好
對比Hibernate隱藏SQL
SpringBoot
Ctrl-v SpringBoot骨架代碼from官網(wǎng)
?
自動(dòng)配置,省事
SpringCloud
微服務(wù)
分布式
注冊中心、配置中心、服務(wù)器集群、負(fù)載均衡
SQL
對data的操作都有封裝,要用時(shí)查字典
?
Database,Table,Column
?
SELECT * FROM students;
SELECT * FROM students WHERE score >= 80;
SELECT id, name, score FROM students;
SELECT id, name, score FROM students ORDER BY score;
SELECT id, name, score FROM students ORDER BY score DESC;
SELECT COUNT(*) FROM students;
SELECT AVG(score) average FROM students;
INSERT INTO students (name, score) VALUES ( '小明', 80);
UPDATE students SET name='小明', score=90 WHERE id=1;
DELETE FROM students WHERE id=1;
?
視圖是虛擬的表,用戶只能拿到視圖,安全
?
存儲過程是對一系列 SQL 操作的批處理。
好處:
代碼封裝,安全;
代碼復(fù)用;
預(yù)先編譯,高性能。
?
在存儲過程中用游標(biāo)對一個(gè)結(jié)果集做移動(dòng)遍歷。
游標(biāo)用于交互式應(yīng)用,用戶對數(shù)據(jù)集中的任意行做瀏覽和修改。
?
觸發(fā)器在某個(gè)操作時(shí)自動(dòng)run:DELETE、INSERT、UPDATE。
觸發(fā)器在語句run之前run用 BEFORE ,之后run使用 AFTER 。
BEFORE 用于數(shù)據(jù)驗(yàn)證和凈化,AFTER 用于審計(jì)跟蹤,將修改記錄到另外一張表中。
MySQL 不允許在觸發(fā)器用 CALL ,不能調(diào)用存儲過程。
?
事務(wù)(transaction)
回退(rollback)
提交(commit)
不能回退 CREATE 和 DROP 語句
?
索引
B樹BalanceTree
B+樹
hash散列
Redis
NoSQL
緩存 響應(yīng)快
6種數(shù)據(jù)結(jié)構(gòu),邏輯少,速度快
理論
設(shè)計(jì)模式
常用的軟件設(shè)計(jì)原則
軟件工程
開發(fā)流程:
分析、設(shè)計(jì)、實(shí)現(xiàn)、測試
?
軟件設(shè)計(jì)原則:
高內(nèi)聚、低耦合,文件為單位
?
直接完整開發(fā),瀑布模型。
為了預(yù)防需求變更,增量模型。
算法
一組動(dòng)作,有結(jié)果,時(shí)間有限
結(jié)構(gòu)*3:順序、判斷、循環(huán)
常用的排序、查找
遞歸:用到自己,每次不同,最后有結(jié)果
數(shù)據(jù)結(jié)構(gòu)
數(shù)組
鏈表
棧
隊(duì)列
樹
二叉樹
圖
操作系統(tǒng)
抽象硬件,管理硬件,提供API,提供用戶界面UI
?
管理:內(nèi)存、進(jìn)程、硬件設(shè)備、文件
?
餓死:進(jìn)程缺資源,不能run了
?
死鎖:
互斥
占有和等待
不可搶占
環(huán)路等待
?
自舉
網(wǎng)絡(luò)
單機(jī)之間的通信是互聯(lián)網(wǎng)
軟件進(jìn)程線程之間的通信歸操作系統(tǒng)管
硬件之間的通信用總線
?
HTTP
三個(gè)部分
get / HTTP
key-value
post參數(shù)
?
UDP 無連接 不可靠 低耗
TCP 面向連接 可靠
IP 標(biāo)識唯一的連接
?
URL
C/S
P2P
?
分組交換
每個(gè)分組都有首部和尾部,包含了源地址和目的地址等控制信息,在同一個(gè)傳輸線路上同時(shí)傳輸多個(gè)分組互相不會影響
?
總時(shí)延 = 排隊(duì)時(shí)延 + 處理時(shí)延 + 傳輸時(shí)延 + 傳播時(shí)延
處理時(shí)延:主機(jī)或路由器收到分組時(shí)進(jìn)行處理所需要的時(shí)間,例如分析首部、從分組中提取數(shù)據(jù)、進(jìn)行差錯(cuò)檢驗(yàn)或查找適當(dāng)?shù)穆酚傻?/p>
傳輸時(shí)延:主機(jī)或路由器傳輸數(shù)據(jù)幀所需要的時(shí)間
傳播時(shí)延:電磁波在信道中傳播所需要花費(fèi)的時(shí)間
?
網(wǎng)絡(luò)分層
5層
應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層
7層OSI
應(yīng)用層,表示層,會話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層
幫助應(yīng)用程序開發(fā)者處理表示層和會話層
TCP/IP
應(yīng)用層,傳輸層TCP,網(wǎng)絡(luò)層IP,網(wǎng)絡(luò)接口層
TCP/IP 體系結(jié)構(gòu)不嚴(yán)格遵循 OSI 分層概念,應(yīng)用層可能會直接使用 IP 層或者網(wǎng)絡(luò)接口層
?
HTTP的URL前綴是http://,端口號默認(rèn)80
HTTPS的URL前綴是https://,端口號默認(rèn)443,安全性高,但耗費(fèi)更多服務(wù)器資源
計(jì)算機(jī)組成
1010是基礎(chǔ),有了10之分,就有了變數(shù)
?
CPU軟件、內(nèi)存數(shù)據(jù)、IO硬件
?
CPU
CPU組成:算術(shù)邏輯單元、控制單元、一系列寄存器
?
內(nèi)存
寄存器+RAM+ROM(IO快的容量?。?/p>
RAM通過地址找ROM
?
IO
總線連接各個(gè)硬件
總線分類:數(shù)據(jù)、地址、控制
數(shù)據(jù)
數(shù)字:自然界的類似抽象為相同
文本:人類交流
音頻:模擬,有損,話筒輸入,音箱輸出
圖像:二維點(diǎn)圖或形狀描述圖
視頻:連續(xù)圖像帶音頻
程序設(shè)計(jì)語言
發(fā)展:
1010、匯編、C、C++、Java、Spring
?
匯編
最快,CPU相關(guān),不可移植
用英文字母、符號串來替代一個(gè)特定的指令的二進(jìn)制串,比如,用"ADD"代表加法,"MOV"代表數(shù)據(jù)傳遞等等
匯編程序的每一句指令只能對應(yīng)實(shí)際操作過程中的一個(gè)很細(xì)微的動(dòng)作,例如移動(dòng)、自增
?
C語言
C語言把相關(guān)的機(jī)器指令合成為單條指令,去掉了操作細(xì)節(jié),例如操作寄存器。
在C語言之前,操作系統(tǒng)是用匯編語言寫的,不可移植。
移植性:C語言的核心以及ANSI函數(shù)調(diào)用都具有移植性,但僅限于流程控制、內(nèi)存管理和簡單的文件處理。其他的東西都跟平臺有關(guān)。
比如說,為Windows和Mac開發(fā)可移植的程序,用戶界面部分就需要用到與系統(tǒng)相關(guān)的函數(shù)調(diào)用,所以要寫兩次用戶界面代碼。有一些庫可以減輕工作量。
?
C++
C語言+面向?qū)ο?/p>
面向?qū)ο缶幊淌墙Y(jié)構(gòu)化編程的下一步。
程序由對象組成,其中的對象是數(shù)據(jù)和函數(shù)的離散集合。
有很多對象庫,編程簡單,只要將一些程序堆在一起。
比如說,有很多的GUI和數(shù)據(jù)庫的庫實(shí)現(xiàn)為對象的集合。
優(yōu)點(diǎn):組織大型程序時(shí)比C好得多。支持面向?qū)ο蟆Mㄓ脭?shù)據(jù)結(jié)構(gòu)組成的庫減輕了處理低層細(xì)節(jié)的負(fù)擔(dān)。
缺點(diǎn):非常大而復(fù)雜。跟C一樣語法濫用。比C慢。
移植性:比C好多了,但還不是很好。因?yàn)樗蠧語言相同的缺點(diǎn),大多數(shù)可移植性用戶界面庫都使用C++對象實(shí)現(xiàn)。
?
Java
Java從C++中借用了大量的語法,丟棄了C++的復(fù)雜功能,強(qiáng)制面向?qū)ο?,所以緊湊、易學(xué)。
沒有指針、自動(dòng)分配垃圾回收、虛擬機(jī)機(jī)制,所以不易崩潰且不會泄漏資源。
移植性好,二進(jìn)制碼可移植到其他平臺。
內(nèi)含的類庫非常標(biāo)準(zhǔn)且極其健壯。
缺點(diǎn):虛擬機(jī)run可移植的字節(jié)碼而非本地機(jī)器碼,程序?qū)⒈日嬲幾g器慢。早期的功能如AWT沒經(jīng)過慎重考慮,雖然被正式廢除,但為了向后兼容而保留。
?
編程語言都有一些共性是不變的,3點(diǎn):
1:1或0,內(nèi)存電位的設(shè)置
2:if?else條件判斷,該功能可通過邏輯門實(shí)現(xiàn)
3:goto程序下一條指令地址可設(shè)置,可循環(huán),默認(rèn)順序
?
鏈接庫,靜態(tài)或動(dòng)態(tài)的
編譯,txt轉(zhuǎn)成exe,run exe
解釋,run txt,按行run
?
對比其他exe軟件,編程軟件為專業(yè)人員專用
人工智能
問題求解
蠻力搜索或啟發(fā)式搜索
?
專家系統(tǒng)
可以推理的基于規(guī)則的系統(tǒng)
抽象事實(shí),得到知識
可控的
?
神經(jīng)網(wǎng)絡(luò)
仿生,接受刺激則加強(qiáng)聯(lián)系
?
造機(jī)器人
感知、學(xué)習(xí)、思考、動(dòng)作
如果加入進(jìn)化心理學(xué),給單機(jī)行為動(dòng)機(jī),機(jī)器就有自主行為,像人一樣,之后發(fā)育成為超人
大事記錄
1997年10月6日出生
2022年10月21日決定自學(xué)Java,走優(yōu)秀程序員路線,最終目標(biāo)永不變:文化基因的傳播
2022年11月7日開了這篇整理
2022年11月29日到12月3日,刷了一遍進(jìn)化心理學(xué)