學習日記-day11-5.20

完成目標:

comment.java

package com.zcr.pojo;
import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;
//JPA操作表中數據,可以將對應的實體類映射到一張表上@Entity(name = "t_comment")//表示當前的實體類與哪張表進行直接映射,自動將表中的字段名稱與實體類中的屬性名稱進行一一映射
public class Comment {@Id  //表示指定實體類中用于數據映射的主鍵@GeneratedValue(generator = "uuid")@GenericGenerator(name = "uuid", strategy = "uuid2")@Column(name = "id")private String id;@Column(name = "article_id")private Integer articleID;@Column(name = "content")private String content;@Column(name = "author")private String author;//alt+insert 快捷鍵生成get,set方法public Integer getArticleID() {return articleID;}public void setArticleID(Integer articleID) {this.articleID = articleID;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "Comment{" +"id=" + id +", articleID=" + articleID +", content='" + content + '\'' +", author='" + author + '\'' +'}';}
}
學習java課程170-200

知識點:

1.static關鍵字

知識點

核心內容

重點

static關鍵字

用于修飾成員變量和方法,使成員屬于類而非對象,實現數據共享

靜態成員與非靜態成員的內存加載順序(靜態優先)

靜態成員特點

1. 類加載時即存在; 2. 通過類名直接調用; 3. 所有對象共享同一靜態成員

區分類名.靜態成員與對象.非靜態成員的調用方式

應用場景

解決多對象共享屬性問題(如班級換教室只需修改一次靜態變量)

靜態方法中不可直接調用非靜態成員(需先實例化對象)

內存機制

靜態成員存儲在方法區,非靜態成員存儲在堆內存對象中

易混淆:靜態成員生命周期與類相同,非靜態成員與對象綁定

代碼示例

static String classroom = "111";; 修改時:Student.classroom = "222";

需注意靜態變量初始化的線程安全問題

2.static內存說明

知識點

核心內容

重點

static成員的內存存儲位置

靜態成員存儲在靜態域中,靜態域在JDK 6時位于方法區(永久代),JDK 7開始移至堆內存

方法區 vs. 堆內存:JDK 7后靜態域遷移至堆,目的是提高內存回收效率

方法區的演變

JDK 6稱“永久代”,JDK 8改為“元空間”,但均為方法區的具體實現

永久代、元空間與方法區的關系:需明確三者是同一邏輯區域的不同實現

靜態域遷移原因

堆內存回收效率高,方法區回收效率低;遷移后可及時釋放靜態成員占用的內存

為什么靜態域不留在方法區?:避免內存長期占用,優化運行性能

靜態成員共享機制

靜態成員隨類加載而加載,被該類的所有對象共享;不屬于對象成員,僅屬于類

靜態成員訪問方式:直接通過類名調用(如Student.classroom),無需實例化對象

內存模型示例(Student類)

classroom(靜態)存儲在堆的靜態區,name(實例)存儲在對象堆內存;新建對象共享靜態成員

對象與靜態區的關系:對象通過內存地址共享靜態成員,但靜態成員生命周期獨立于對象

3.靜態成員訪問特點

知識點

核心內容

重點

靜態方法訪問非靜態成員

靜態方法中不能直接訪問非靜態成員,需通過new對象調用

先出生的靜態成員無法直接訪問后出生的非靜態成員(類比秦始皇不知康熙存在)

非靜態方法訪問靜態成員

非靜態方法中能直接訪問靜態成員(同類可直接調用/類名調用,不同類需類名調用)

反編譯證明即使通過對象調用靜態方法,底層仍是類名調用

靜態方法訪問靜態成員

靜態方法中能直接訪問靜態成員(同類可直接調用,不同類需類名調用)

同類訪問時存在兩種調用方式(直接調用/類名調用)

非靜態方法訪問非靜態成員

非靜態方法中能直接訪問非靜態成員(同類直接調用,不同類需new對象調用)

同類訪問時new對象調用非必要但可行

通用訪問規則總結

非靜態成員始終通過new對象調用;靜態成員始終推薦類名調用

靜態成員生命周期早于非靜態成員(類加載vs對象實例化)

4.靜態成員的使用場景

知識點

核心內容

重點

靜態成員的使用場景

靜態成員通過類名直接調用,無需實例化,適用于工具類等場景

靜態成員與實例成員的區別(內存加載時機)

靜態成員的局限性

所有靜態成員會在類加載時占用內存,濫用會導致內存浪費

需權衡“便利性”與“資源占用”

工具類設計規范

1. 成員全靜態化; 2. 構造方法私有化(禁止實例化); 3. 功能需高頻復用(如數組求最大值)

工具類與普通類的設計差異

代碼復用案例

抽取ArrayUtils.getMax()方法,避免重復編寫數組遍歷邏輯

工具類方法的通用性設計(參數/返回值)

5.可變參數

知識點

核心內容

注意事項

可變參數定義

使用數據類型...變量名語法定義(必須三個點)

必須三個點,兩個或四個點都不行

可變參數本質

底層實現是數組(可通過反編譯驗證)

可使用數組遍歷方式操作可變參數

參數位置規則

可變參數必須放在參數列表最后

報錯提示:varargs parameter must be the last

多參數共存

可與普通參數共存(如int i, int... arr)

普通參數需在前,順序不可顛倒

方法調用方式

可傳入任意數量同類型參數(自動轉為數組)

類型必須匹配定義的數據類型

6.遞歸

知識點

核心內容

重點

遞歸的定義

方法內部調用自身的編程技巧

與循環的區別(出口條件的必要性)

遞歸的經典案例

"從前有座山"的無限循環故事

無出口的遞歸導致棧溢出錯誤

遞歸的分類

直接遞歸(方法A調A)和間接遞歸(方法A→B→C→A循環調用)

間接遞歸的代碼實現邏輯

遞歸的注意事項

必須設置終止條件(出口),且遞歸次數不宜過多

棧內存溢出的原理(StackOverflowError)

遞歸的代碼演示

method()無限調用自身導致崩潰

實際開發中需通過條件判斷控制遞歸深度

7.斐波那契數列

知識點

核心內容

重點

斐波那契數列定義

數列中每個數字是前兩個數字之和(從1,1開始)

起始項定義(通常為F(1)=1, F(2)=1)

兔子繁殖模型

1.新生兔1個月成熟; 2.成熟后每月生1對; 3.無死亡假設

第二個月不生兔的時間延遲特性

遞歸算法實現

method(n) = method(n-1) + method(n-2)

終止條件必須包含n=1和n=2的情況

數列計算示例

月份:1→1對, 2→1對, 3→2對, 4→3對, 5→5對, 6→8對

第6個月結果8對的推導過程

遞歸調用過程

方法自調用時的參數傳遞機制(月份遞減)

遞歸樹展開時的重復計算問題

8.數組反轉

知識點

核心內容

重點

數組翻轉算法

中心思想是數組對稱索引位置上的元素互換,通過中間變量實現元素位置交換

確定交換終止條件(min >= max)和索引移動規則(min++/max--)

索引對稱原理

奇數數組中間元素自對稱,偶數數組全部成對交換(圖示[1,2,3,4,5,6,7]與[7,6,5,4,3,2,1]索引對應關系)

奇偶數組的不同處理邏輯

元素交換技術

使用臨時變量temp的三步交換法: 1. temp = arr[min]; 2. arr[min] = arr[max]; 3. arr[max] = temp

類比水杯交換的具象化理解

循環控制邏輯

for(int min=0,max=arr.length-1; min<max; min++,max--) 復合循環條件寫法

多語句初始化/迭代的語法特性

邊界條件處理

循環終止條件min < max同時覆蓋奇偶兩種情況

避免偶數數組重復交換

9.冒泡排序

知識點

核心內容

重點

冒泡排序定義

數組排序方法,通過相鄰元素比較和交換實現排序

默認升序排序,需理解“相鄰元素”指 arr[i] 和 arr[i+1]

排序過程

1. 每輪將最大值“冒泡”到末尾; 2. 比較輪數=數組長度-1,每輪比較次數遞減

易錯點:忽略每輪減少一次比較(已排序部分無需重復比較)

代碼實現關鍵

1. 雙重循環(外層控制輪數,內層控制比較次數); 2. 相鄰元素交換條件 arr[i] > arr[i+1]

筆試高頻:需默寫代碼框架及邊界條件(如 i < arr.length-1)

性能特點

時間復雜度 O(n2),空間復雜度 O(1)

對比其他排序:效率低但實現簡單,適合小規模數據

實例演示

數組 [5,4,3,2,1] 的完整排序步驟(4輪比較,每輪次數遞減)

重點觀察:最大值如何逐步移動到末尾

10.二分查找

知識點

核心內容

重點

二分查找原理

通過不斷折半縮小查找范圍,提升查詢效率

必須保證數組有序(升序/降序)

中間索引計算

mid = (min + max) // 2,動態調整min/max

初始min=0,max=長度-1,非固定長度/2

查找流程

1. 比較目標值與mid元素; 2. 大于則min=mid+1; 3. 小于則max=mid-1; 4. 等于則命中

終止條件:min > max時未找到

效率對比

原始遍歷:O(n); 二分查找:O(log n)

數據量越大優勢越顯著(例:100數據僅需7次比較)

邊界案例

目標值在首尾/不存在時索引移動邏輯

min/max更新需嚴格±1,避免死循環

11.對象數組

知識點

核心內容

重點

對象數組定義

Person[]數組存儲Person對象,數組定義語法與基本類型數組類似

數組元素類型與對象類型的匹配關系

對象數組初始化

創建三個Person對象并存入數組,通過索引賦值

數組存儲的是對象引用(地址值)而非對象本身

數組遍歷與屬性訪問

使用for循環遍歷數組,通過getter方法獲取對象屬性

遍歷得到的是對象引用,需通過引用訪問成員方法

內存模型解析

堆內存中數組元素存儲對象引用示意圖

引用傳遞與值傳遞的本質區別

類型系統應用

接收數組元素必須使用Person類型變量

編譯期類型檢查機制

12.對象數組應用

知識點

核心內容

重點

對象數組創建

創建Student類數組并初始化三個學生對象

Student[] students = new Student[3]

匿名對象初始化方式

類定義規范

定義Student類包含私有屬性(name/score)和標準方法(構造器/getter)

無參/有參構造器同時存在的必要性

冒泡排序算法

通過嵌套循環實現對象數組排序

比較成績但交換整個對象

對象屬性訪問

通過getter方法獲取私有屬性進行比較

直接訪問私有屬性會導致編譯錯誤

數組遍歷輸出

排序后遍歷數組輸出學生信息

注意數組越界問題

13.基本類型做參數傳遞

知識點

核心內容

重點

基本數據類型與引用數據類型的區分

基本數據類型包括四類八種(byte、short、int、long、float、double、char、boolean),其余均為引用數據類型

如何快速區分:只需記住基本數據類型的范圍,其余均為引用類型

方法參數傳遞(基本數據類型)

基本數據類型作為方法參數傳遞時,傳遞的是值而非變量本身,方法內部的修改不影響原始變量

易混淆點:誤認為方法內部修改會影響原變量值

方法調用與棧內存機制

方法執行時壓棧,運行完畢后彈棧,局部變量僅作用于當前方法棧幀

關鍵理解:方法棧的獨立性導致變量作用域隔離

14.引用類型作參數傳遞

知識點

核心內容

重點

引用數據類型作為方法參數傳遞

引用數據類型(如數組)作為參數傳遞時,傳遞的是地址值,而非值本身。

區分基本數據類型和引用數據類型的參數傳遞方式;理解為何引用數據類型的修改會影響到原數據。

數組在內存中的存儲

數組在堆內存中存儲,變量保存的是數組的地址值。

數組的內存分配和地址值的概念;數組如何通過地址值進行訪問和修改。

方法調用與棧的壓棧彈棧

方法調用時,會在棧中壓棧運行;方法執行完畢后,會彈棧返回。

方法調用的棧機制;壓棧與彈棧對變量值的影響。

方法間參數傳遞的影響

引用數據類型作為參數傳遞時,方法間的修改會相互影響。

引用傳遞導致的修改共享問題;如何理解并避免不必要的修改。

基本數據類型與引用數據類型的區別

基本數據類型傳遞的是值,引用數據類型傳遞的是地址值。

兩者在參數傳遞、內存存儲和修改影響上的區別。

15.命令行參數

知識點

核心內容

重點

命令行參數

指main方法中的String[] args參數,通過命令行或IDE配置傳遞實參

參數傳遞格式(空格分隔)、IDE配置入口位置

參數傳遞方式

1. 命令行運行:java 類名 參數1 參數2; 2. IDEA配置:Run → Edit Configurations → Program Arguments

參數與類名需空格分隔,參數按順序對應數組元素

實際應用場景

臨時測試方法功能(如method(String s1, String s2)),避免啟動完整項目流程

與直接調用方法的區別(靈活性 vs 便捷性)

IDE操作演示

1. 創建類并編寫main方法; 2. 通過Edit Configurations設置參數(如哈哈 嘿嘿); 3. 運行后遍歷args數組輸出結果

配置路徑易忽略(需通過類名旁箭頭進入)

16.快速生成方法

知識點

核心內容

重點

方法定義與調用順序

初學者需先定義方法再調用,否則報錯;熟練者可先調用后定義(通過IDE補全)

Alt+Enter快速生成方法(自動補全參數/返回值)

IDE智能補全功能

使用Alt+Enter自動生成方法: - 無參無返回值(默認private修飾); - 有參無返回值(自動匹配參數類型); - 有返回值(自動推斷類型)

修飾符需手動調整

代碼抽取為方法

選中代碼塊后按Ctrl+Alt+M快速抽取: - 自動識別依賴變量(如數組參數); - 支持修改方法名/修飾符; - 智能提示返回值需求

未選中變量時自動補全參數

IDE操作效率技巧

- 通過快捷鍵生成代碼結構; - 抽取重復邏輯為獨立方法

需熟悉Alt+Enter與Ctrl+Alt+M組合鍵

17..debug調試

知識點

核心內容

重點

Debug調試概述

調試代碼的手段,用于監測變量變化和定位錯誤

理解斷點作用與調試模式啟動方式

斷點設置

在代碼行左側點擊添加紅色圓點(斷點),右鍵選擇Debug啟動調試

斷點可多位置設置,點擊消失的特性易忽略

調試面板功能

- 下一步(逐行執行); - 進入方法(跳轉至被調用方法內部); - 跳出方法(返回調用處); - 放行(執行當前請求代碼但不退出調試); - 結束調試(完全退出)

放行 vs 結束調試的功能差異(是否保留調試模式)

變量監控

調試過程中實時顯示變量值變化(如數組索引賦值過程)

通過變量面板觀察I=3時的數組越界問題

調試應用場景

示例:購物車功能調試(addCart方法逐行檢查變量)

結合循環調用演示放行按鈕的多次觸發特性

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

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

相關文章

機器學習第十九講:交叉驗證 → 用五次模擬考試驗證真實水平

機器學習第十九講&#xff1a;交叉驗證 → 用五次模擬考試驗證真實水平 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指南 交叉驗證…

Linux面試題集合(6)

創建多級目錄或者同級目錄 mkdir -p 文件名/文件名/文件名 mkdir -p 文件名 文件名 文件名 Linux創建一個文件 touch 文件名 DOS命令創建文件 echo 內容>文件名&#xff08;創建一個有內容的文件&#xff09; echo >文件名&#xff08;創建一個沒有內容的文件&#xff09…

Vue百日學習計劃Day46-48天詳細計劃-Gemini版

Day 46: <KeepAlive> - 組件緩存與優化 (~3 小時) 本日目標: 理解 <KeepAlive> 的作用&#xff0c;學會如何使用它來緩存組件實例&#xff0c;從而優化應用性能和用戶體驗。所需資源: Vue 3 官方文檔 (<KeepAlive>): https://cn.vuejs.org/guide/built-ins/…

SpringBean模塊(三)具有生命周期管理能力的類(1)AutowireCapableBeanFactory

一、介紹 1、簡介 AutowireCapableBeanFactory 是 Spring 框架中的一個接口&#xff0c;位于 org.springframework.beans.factory 包下&#xff0c;它提供了更底層的 Bean 實例化、依賴注入和生命周期管理能力&#xff0c;即使這些 Bean 沒有通過常規的 Component 或 XML 注冊…

Service Mesh

目錄 一、Service Mesh 的核心特點 二、Service Mesh 的典型架構 1. Sidecar 模式 2. 控制平面與數據平面分離 三、Service Mesh 解決的核心問題 四、典型應用場景 五、主流 Service Mesh 框架對比 六、挑戰與局限性 七、未來趨勢 總結 Istio 一、Istio 核心組件與…

黑馬Java基礎筆記-13常用查找算法

查找算法 基本查找(也叫順序查找&#xff0c;線性查找) 二分查找&#xff08;需要有序數據&#xff09; public static int binarySearch(int[] arr, int number){//1.定義兩個變量記錄要查找的范圍int min 0;int max arr.length - 1;//2.利用循環不斷的去找要查找的數據wh…

Go 語言 vs C+Lua(Skynet)游戲服務器方案對比分析

為啥挑這兩個呢&#xff1f;因為兩種技術分別對應CSP模型和Actor模型&#xff0c;都是經過時間檢驗的成熟且可靠的并發模型&#xff0c;問了很多地方&#xff0c;經過gpt整理得出如下報告。 從開發效率、運行性能、熱更新擴展、云部署與水平擴展能力、多類型游戲支持等五個維度…

LeetCode 925. 長按鍵入 java題解

雙指針。不會寫。 https://leetcode.cn/problems/long-pressed-name/description/ class Solution {public boolean isLongPressedName(String name, String typed) {int len1name.length();int len2typed.length();int i0,j0;while(i<len1&&j<len2){if(name.ch…

如何使用通義靈碼提高前端開發效率

工欲善其事&#xff0c;必先利其器。對于前端開發而言&#xff0c;使用VSCode已經能夠極大地提高前端的開發效率了。但有了AI加持后&#xff0c;前端開發的效率又更上一層樓了&#xff01; 本文采用的AI是通義靈碼插件提供的通義千問大模型&#xff0c;是目前AI性能榜第一梯隊…

【小明劍魔視頻Viggle AI模仿的核心算法組成】

Viggle AI 作為一款先進的生成式視頻AI工具&#xff0c;其核心技術棧融合了多項前沿算法。以下是深度解析其核心算法架構及實現原理&#xff1a; 一、核心算法組成 1. 運動控制生成&#xff08;Motion Control Generation&#xff09; 算法框架&#xff1a;基于擴散模型&…

解決Power BI Desktop導入Excel數據第一行不是列標題問題

選中第一行不是列標題的表→鼠標右鍵→選擇編輯查詢→進入Power Query界面→點擊“將第一行用作標題”→點擊左邊的“關閉并應用” 第一行就提升為標題了

對 Lambda 架構問題的深入理解

感謝 GPT&#xff0c;對很多問題的理解有機會更深。 大家攻擊 Lambda 架構&#xff0c;常說的一個點就是 “實時離線指標存在差異”。“實時離線指標存在差異”&#xff0c;是一個真實困擾運營方的問題嗎&#xff1f; 答案&#xff1a;是的&#xff0c;這是一個真實生活中的痛…

React中使用ahooks處理業務場景

// 從 ahooks 引入 useDynamicList 鉤子函數&#xff0c;用于管理動態列表數據&#xff08;增刪改&#xff09; import { useDynamicList } from ahooks;// 從 ant-design/icons 引入兩個圖標組件&#xff1a;減號圓圈圖標和加號圓圈圖標 import { MinusCircleOutlined, PlusCi…

藍橋杯2114 李白打酒加強版

問題描述 話說大詩人李白, 一生好飲。幸好他從不開車。 一天, 他提著酒顯, 從家里出來, 酒顯中有酒 2 斗。他邊走邊唱: 無事街上走&#xff0c;提顯去打酒。 逢店加一倍, 遇花喝一斗。 這一路上, 他一共遇到店 N 次, 遇到花 M 次。已知最后一次遇到的是花, 他正好把酒喝光了。…

小土堆pytorch--神經網路-卷積層池化層

神經網路-卷積層&池化層 一級目錄二級目錄三級目錄 1. 神經網路-卷積層2. 神經網路最大池化的應用 一級目錄 二級目錄 三級目錄 1. 神經網路-卷積層 在PyTorch中&#xff0c;torch.nn.Conv2d函數定義了一個二維卷積層&#xff0c;其常用參數包括&#xff1a; in_channel…

C++顯式聲明explicit

C顯示聲明explicit 在 C 中&#xff0c;explicit 關鍵字用于修飾單參數構造函數或多參數構造函數&#xff08;C11 起&#xff09;&#xff0c;其核心作用是禁止編譯器的隱式類型轉換。 一、必須加 explicit 的典型場景 1. 單參數構造函數 當構造函數只有一個參數時&#xff…

【springboot】HttpClient快速入門

介紹 HttpClient 是Apache Jakarta Common 下的子項目&#xff0c;可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包&#xff0c;并且它支持 HTTP 協議最新的版本和建議 就是我們可以在java程序中使用HttpClient構造http請求&#xff0c;還可以發送h…

安全版4.5.8開啟審計后,hac+讀寫分離主備切換異常

文章目錄 環境BUG/漏洞編碼癥狀觸發條件解決方案 環境 系統平臺&#xff1a;UOS &#xff08;飛騰&#xff09; 版本&#xff1a;4.5.8 BUG/漏洞編碼 3043 癥狀 BUG安裝包&#xff1a; hgdb-see-4.5.8-db43858.aarch64.rpm 異常&#xff1a;hac集群一主兩備環境&#xff…

企業級 Go 多版本環境部署指南-Ubuntu CentOS Rocky全兼容實踐20250520

&#x1f6e0;? 企業級 Go 多版本環境部署指南-Ubuntu / CentOS / Rocky 全兼容實踐 兼顧 多版本管理、安全合規、最小權限原則與 CI/CD 可復現性&#xff0c;本指南以 Go 官方 toolchain 為主&#xff0c;結合 asdf 實現跨語言統一管理&#xff0c;并剔除已過時的 GVM。支持 …

Linux 的 TCP 網絡編程 -- 回顯服務器,翻譯服務器

目錄 1. 相關函數介紹 1.1 listen() 1.2 accept() 1.3 connect() 2. TCP 回顯服務器 2.1 Common.hpp 2.2 InetAddr.hpp 2.3 TcpClient.cc 2.4 TcpServer.hpp 2.5 TcpServer.cc 2.6 demo 測試 3. TCP 翻譯服務器 3.1 demo 測試 1. 相關函數介紹 其中一些函數在之前…