start DL from stratch (2)!!!

start DL from stratch (2)!!!

    • 一、CPU and GPU
      • cpu
      • GPU
      • 安培架構
      • 愛達·洛夫萊斯架構
    • 二、使用conda創建一個新的虛擬環境
    • 三、autodl操作先知
      • Linux復習
      • 目錄
      • 文件和數據上傳
      • 對于整個鏡像的操作
      • 守護進程
      • Tips
    • 四、autodl租用
      • 創建實例
      • ==<big>沒有所需要的版本的話<big>==
      • 連接pycharm
      • 配置環境
      • GitHub上項目
      • 開具發票
    • 五、ssh和sftp
    • 六、性能
      • nvidia-smi -l 1
      • 如果發現GPU利用率較低時可以按下述方法排查瓶頸
      • numpy
      • 其余經驗

主要解決DL入門關于相關軟件的配置問題,使用autodl遠程使用實例。

續前節 Start DL from stratch(1) !!!

一、CPU and GPU

參考:::
CPU-GPU

cpu

CPU非常重要!盡管CPU并不直接參與深度學習模型計算,但CPU需要提供大于模型訓練吞吐的數據處理能力。比如,一臺8卡NVIDIA V100的DGX服務器,訓練ResNet-50 ImageNet圖像分類的吞吐就達到8000張圖像/秒,而擴展到16卡V100的DGX2服務器卻沒達到2倍的吞吐,說明這臺DGX2服務器的CPU已經成為性能瓶頸了。
理想情況下,模型計算吞吐隨GPU數量線性增長,單GPU的合理CPU邏輯核心數分配可以直接線性擴展到多GPU上。每塊GPU應配備至少4~8核心的CPU,以滿足多線程的異步數據讀取。

GPU

我們建議在實例上啟用深度學習框架的混合精度訓練來加速模型計算相較于單精度訓練,混合精度訓練通常能夠提供2倍以上的訓練加速。

GPU的數量選擇與訓練任務有關。一般我們認為模型的一次訓練應當在24小時內完成,這樣隔天就能訓練改進之后的模型。以下是選擇多GPU的一些建議:

1塊GPU。適合一些數據集較小的訓練任務,如Pascal VOC等。
2塊GPU。同單塊GPU,但是你可以一次跑兩組參數或者把Batchsize擴大。
4塊GPU。適合一些中等數據集的訓練任務,如MS COCO等。
8塊GPU。經典永流傳的配置!適合各種訓練任務,也非常方便復現論文結果。
我要更多!用于訓練大參數模型、大規模調參或超快地完成模型訓練。

內存和CPU配置的分配邏輯為按GPU的數量成倍數分配,比如在主機上看到的CPU和內存分配規則為:32GB/GPU、8核/GPU,那么租用1塊GPU時實例的配置為1卡GPU; 8核CPU; 32GB內存,租用2塊GPU時實例的配置為2卡GPU; 16核CPU; 64GB內存,依此類推。

在這里插入圖片描述

安培架構

NVIDIA Ampere 架構
安培架構是繼圖靈(Turing)架構之后的下一代架構
用于其 RTX 30 系列顯卡(如 RTX 3090、RTX 3080、RTX 3070 等)。

愛達·洛夫萊斯架構

NVIDIA Ada Lovelace架構
是繼安培架構之后推出的下一代 GPU 架構,命名來源于 19 世紀數學家 Ada Lovelace,她被認為是世界上第一位計算機程序員
RTX 40 系列

二、使用conda創建一個新的虛擬環境

在這里插入圖片描述

三、autodl操作先知

Linux復習

在AutoDL租用實例的系統默認為Linux Ubuntu發行版,因此熟悉使用基本的Linux命令對于訓練模型非常有必要
Linux操作系統中,幾乎所有的東西都以文件夾或文件形式存在,這些文件夾/文件有一個共同的根目錄/。如果我們在某塊磁盤A上(無其他分區)安裝了Linux操作系統后,那么根目錄下將會有此類默認的系統目錄:

$ ls /
bin  etc  lib  mnt  proc  run  tmp  var  boot  dev  home  root  srv  sys   usr

具體命令如下:::
經常去pwd + ls + tree!!!

ls # 列出當前目錄下的文件和文件夾
ls -l # 列出文件和文件夾的詳細信息:權限,Owner,Group和創建/更新時間
mkdir test_dir # 新建一個叫test_dir的路徑
mkdir a b # 創建兩個文件夾a和b
cd test_dir/ # 進入 test_dir 路徑
cd …/test_dir/ # 上一級目錄下有test_dir目錄
pwd # 查看當前路徑

mv test_dir/ test_directory # 將test_dir目錄重命名為test_directory,文件重命名同樣適用
mv a b/ # 將a移動到b目錄下。如果b目錄不存在的話,這條命令相當于將a重命名為b
cp -r a b # 將a文件夾拷貝到b文件夾下,-r代表遞歸拷貝
-rf folder/* # *是通配符號,這樣代表remmove刪除此文件夾下所有
vim # 編輯文本文件


zip和unzip。如果沒有zip請使用apt-get update && apt-get install -y zip安裝
user@host:/tmp/$ zip -r dir.zip test_directory/ # 將test_directory文件夾壓縮為dir.zip文件
ser@host:/tmp/$ unzip dir.zip # 將dir.zip文件解壓
tar. 以下參數c代表壓縮,x表示解壓,z代表壓縮/解壓為gz格式的壓縮包
user@host:/tmp/$ tar czf dir.tar.gz test_directory/ # 將test_directory文件夾壓縮為dir.tar.gz文件
user@host:/tmp/$ tar xzf dir.tar.gz # 將dir.tar.gz文件解壓
tar還可以用于壓縮和解壓其他格式的壓縮文件,比如bz2
user@host:/tmp/$ tar cjf dir.tar.bz2 test_directory/ # 將test_directory文件夾壓縮為dir.tar.bz2文件
user@host:/tmp/$ tar xjf dir.tar.bz2 # 將dir.tar.bz2文件解壓

目錄

在這里插入圖片描述
在AutoDL實例中安裝的系統軟件以及用內置的miniconda安裝的python依賴,都是安裝在了**系統盤中。 系統盤( 即系統環境
數據盤 temp 可存放讀寫IO要求高的數據 ,所以叫做數據盤,但是不能保存至鏡像中以及進行實例遷移。

文件存儲會掛載文件存儲至實例**/root/autodl-fs**
平臺內置的所有鏡像都安裝了Miniconda,安裝路徑為/root/miniconda3/

JupyerLab的工作路徑是/root,數據盤、網盤、公共數據目錄都在/root目錄下,因此進入JupyterLab后可直接看到這些平臺默認創建的目錄

題外話:::JupyterLab在關閉終端/Notebook選項卡后默認不會終止,仍然在運行
在這里插入圖片描述
所以右鍵復制路徑之后::沒有帶root的,所以需要自己手動加上/root/

文件和數據上傳

  1. 公網網盤,直接使用阿里云盤、百度網盤上傳下載數據,一般推薦
    (阿里云盤在2024年7月左右對三方應用進行了限制,需要購買三方權益包才能獲得良好的上傳下載速度
    百度網盤由于規則調整,不再支持個人認證及個人創建應用功能,需要企業認證才可開通應用)
  2. JupyterLab上傳,和網盤類似,優點簡單,但是只支持文件不支持文件夾 推薦
  3. scp命令支持文件和文件夾上傳下載,由于是命令行執行,上手難度稍高
  4. FileZilla軟件支持文件和文件夾,拖拉拽即可上傳下載,推薦使用(免費、全平臺(Mac、Linux、Windows))
  5. XShell軟件支持管理SSH連接,而且集成了xftp,支持拖拉拽上傳下載文件夾/文件(但是付費版軟件)啊啊啊
  6. AutoDL文件存儲 上傳數據,優點簡單而且不用開實例,缺點是網頁不支持上傳文件夾
    (當只是需要上傳一個zip壓縮包時,或者其他類型的單個文件時,建議直接進入到文件存儲中上傳。因為這樣可以少了連接到Xftp這個步驟,以及可以少費點錢。)
    上傳數據的時候選擇無卡開機模式,可以減少費用

對于整個鏡像的操作

您在一個實例中配置好了環境等,在更換主機以及開新的實例時希望復用該環境,以及長期留存該環境以備日后使用,那么保存鏡像將是最好的選擇,還支持共享鏡像給其他用戶之后的保存鏡像請在我的鏡像菜單中查看

重置系統->更換鏡像,都是系統盤清空,數據盤不動

克隆實例把整個都給復制一份
點擊克隆實例后,在創建實例頁面選擇一臺新主機創建實例即可。

Tips:如果您在克隆時忘了勾選同時拷貝數據盤,那么可以在新實例創建完成后,在原實例的更多操作中點擊【跨實例拷貝數據】,再對數據盤進行拷貝

守護進程

遠程執行程序時,那么請注意開守護進程來執行程序,避免因為SSH連接中斷導致程序終止
最簡單的方式是通過jupyterlab的終端來執行,只要jupyterlab不出現重啟(幾乎不會),jupyterlab的終端就會一直運行,無論是本地主機斷網還是關機!!!!!

Tips

  1. 可以在pycharm 中調試好 ,然后再 jupyterlab的終端 執行,這樣頁面可以關閉去做其他事情
  2. 按量計費實例在關機后會釋放GPU給其他用戶租用,如果想一直占有GPU,可選擇變更計費方式為包年包月
  3. 有時候搶不到服務器,可以提前租用多個實例,等到15天快結束的時候開機一會,又可以延時了
  4. 如果在編寫/調試代碼、上傳下載數據到實例、給他人做代碼展示等不需要GPU卡場景時,可以關機后使用無卡模式開機,無卡模式開機的區別在于對于這次開機會使用0.5核;2GB內存;無GPU卡的配置,價格統一為¥0.1/小時,對于實例之前和之后的數據均無影響,今后仍然可以使用正常的模式開關機。使用方法

四、autodl租用

更多詳細參考:-> Autodl

創建實例

首先平臺鏡像中有沒有您需要的Torch、TensorFlow等框架的相應版本,如果有首選平臺內置的鏡像
如果平臺中沒有合適的Torch、TensorFlow等框架版本,那么查詢自己的框架需要什么CUDA版本,比如PyTorch=1.9.0需要CUDA=11.1,那么可以選擇Miniconda/CUDA=11.1的平臺鏡像,然后在鏡像內安裝自己需要的框架,免去安裝cudatoolkit的麻煩。(平臺內置的CUDA均帶.h頭文件,如有二次編譯代碼的需求更方便)

沒有所需要的版本的話

安裝其他版本的Python: 參考


安裝其他版本的CUDA: 參考


安裝PyTorch: 參考


安裝TensorFlow: 參考

方法一:::可隨便挑選一個Miniconda鏡像,在開機后自行安裝相關框架、CUDA、甚至其他版本的Python。(miniconda鏡像即內部未安裝任何深度學習框架,保持運行環境干凈)

方法二:::在連接ssl的時候選擇conda 環境
在這里插入圖片描述
這個就相當于你

conda create -n Untrack python=3.7           # 構建一個虛擬環境
conda init bash && source /root/.bashrc # 更新bashrc中的環境變量
conda activate Untrack                       # 切換到創建的虛擬環境

注意創建位置/envs里面,此外 在編譯器這里就是用的他的環境,如下:::
在這里插入圖片描述
但是在termial中:::還是顯示的base環境+root目錄

在這里插入圖片描述

綜上,所以說開始不選miniconda也是可以的,就是新建一個環境,但是在克隆實例,保存鏡像什么的時候會很大的,相當與有兩份了
那python interpreter 怎么換到base里面呢,還是在ssl配置那里,選擇已有的base conda環境就可以了,注意路徑就是圖中的 /root/miniconda3

那怎么Notebook環境切換呢??
–>參考<–

# 創建Conda新的虛擬環境(如已創建,請忽略!)
conda create -n tf python=3.7             # 構建一個虛擬環境,名為:tf
conda init bash && source /root/.bashrc   # 更新bashrc中的環境變量# 將新的Conda虛擬環境加入jupyterlab中
conda activate tf                         # 切換到創建的虛擬環境:tf
conda install ipykernel
ipython kernel install --user --name=tf   # 設置kernel,--user表示當前用戶,tf為虛擬環境名稱

在這里插入圖片描述

具體例子,參考我的另一篇->>>

連接pycharm

選擇File—Settings,點擊Add interpreter----On SSH即可。
在這里插入圖片描述

或者 Tools -> Deployment -> Configuration點擊…進入SSH Configurations
在這里插入圖片描述
檢驗:::
在這里插入圖片描述

配置環境

在PyCharm中進入終端,或者在通過JupyterLab進入終端------>>>>編輯文件+刷新,使得能使用conda的一些其他命令,比如conda activate 環境,以進行后續的環境配置
否則報錯
在這里插入圖片描述
怎么辦呢::::::

輸入:vim ~/.bashrc
開始進行編輯:輸入i
光標移動到文件的最后一行,插入source /root/miniconda3/etc/profile.d/conda.sh
保存文件并退出:按Esc鍵,輸入:wq,再回車
輸入bash重啟終端(即刷新一下)

在這里插入圖片描述
重新輸入命令:::
進來啦::在這里插入圖片描述

參考AutoDL
Autodl

GitHub上項目

  1. 記得下面兩個文件加上目錄,就可以直接install
  2. 如果項目提供了 requirements.txt,你可以直接使用以下命令安裝依賴:
pip install -r requirements.txt
  1. 使用 conda
    若項目有 environment.yml 文件,可以用以下命令創建 conda 環境:
conda env create -f environment.yml

開具發票

發票抬頭請填寫真實姓名,統一社會信用代碼請填寫身份證號之后會發送到郵箱電子版的
單次開票金額滿10元可開票
在這里插入圖片描述
autod開具的都是具有增值稅的,沒有 普通的個人發票貌似嘞
在這里插入圖片描述

五、ssh和sftp

  1. SSH (Secure Shell)
    作用:SSH 是一種安全的遠程登錄協議,主要用于通過不安全的網絡(例如互聯網)安全地訪問和管理遠程計算機。它允許用戶通過命令行界面(CLI)連接到遠程服務器,執行命令、管理文件和執行其他管理任務。
    加密:SSH 使用加密技術(如對稱加密、非對稱加密、哈希算法等)來確保數據傳輸的安全性,因此,它比傳統的 Telnet 或 FTP 更加安全。
    主要功能:
    遠程登錄:使用終端在遠程服務器上執行命令。
    安全的文件傳輸:SSH 本身并不直接用于文件傳輸,但它可以與 SCP 或 SFTP 一起使用
  2. SFTP (Secure File Transfer Protocol)
    作用:SFTP 是一種通過 SSH 提供的安全文件傳輸協議。它用于通過安全的加密通道,在遠程計算機和本地計算機之間傳輸文件。與 FTP 相比,SFTP 是加密的,因此數據在傳輸過程中不會被竊取或篡改。
    加密:SFTP 使用 SSH 協議進行加密,確保傳輸過程中的文件和命令的保密性和完整性。

六、性能

nvidia-smi -l 1

NVIDIA System Management Interface
-l 1:是該工具的一個參數,表示以每秒 1 次的loop刷新輸出

  1. GPU 信息:
    GPU:表示 GPU 的編號。例如,GPU 0、GPU 1 等,這個編號通常是按照設備的插槽順序分配的。
    GPU-Name:顯示 GPU 的具體型號,例如 Tesla T4、GeForce RTX 3090 等。
    Bus-Id:表示 GPU 在系統中的 PCI 總線地址(例如 00000000:00:1E.0),可以幫助區分不同的 GPU。
    Disp.A:表示是否有顯示器連接到該 GPU。如果顯示器連接,通常顯示 On,如果沒有顯示器連接,顯示 Off。
  2. GPU 使用情況:
    GPU-Util:表示 GPU 的當前計算利用率,范圍從 0% 到 100%。顯示 GPU 在進行計算時的負載情況。如果 GPU 沒有進行計算或處于空閑狀態,值通常為 0%。
    Memory-Usage:顯示 GPU 顯存的使用情況。格式通常為 XMiB / YMiB,其中 X 是已用的顯存,Y 是總顯存大小。例如 100MiB / 8192MiB 表示已用顯存為 100MiB,總顯存為 8GB。
    GPU Temp:表示 GPU 當前的溫度,單位是攝氏度(°C)。GPU 溫度過高可能會影響性能,并且可能會自動降低性能以避免過熱。
    Power-Usage:顯示 GPU 當前的功耗,單位為瓦特(W)。這表明 GPU 在運行時的功率消耗情況。
    Fan Speed:表示 GPU 風扇的轉速,單位是 RPM(轉/分鐘)。如果 GPU 溫度過高,風扇轉速通常會增大,以提供更多的冷卻。
  3. 計算進程(Processes):
    PID (Process ID):顯示正在使用 GPU 的進程的 ID。每個正在運行的程序都會有一個唯一的進程 ID。
    User:顯示啟動該進程的用戶。例如,root 或 user。
    GPU Memory Usage:顯示該進程使用的 GPU 顯存大小。例如,100MiB 表示該進程已使用了 100MB 顯存。
    Type:顯示該進程是計算任務(C)還是顯示任務(G)。例如,C 表示該進程在執行計算任務,G 表示該進程用于顯示或渲染圖形。
    Process Name:顯示該進程的名稱,通常是啟動該進程的應用程序的名稱,如 python、tensorflow 等。
    Memory-Usage:顯示該進程占用的顯存量。如果該值較高,表示該進程正在進行大型計算任務。
  4. 驅動與 CUDA 版本:
    Driver Version:顯示當前系統安裝的 NVIDIA 驅動版本。例如,460.39 表示安裝了 NVIDIA 460.39 版本的驅動。
    CUDA Version:顯示當前系統支持的 CUDA 版本。

如果發現GPU利用率較低時可以按下述方法排查瓶頸

如果GPU占用率為0說明代碼可能沒有使用GPU,需檢查代碼。

如果GPU占用率忽高忽低、占用率峰值在50%以下,那么可能是數據預處理跟不上GPU的處理速度 數據處理和CPU掛鉤

如果CPU占用率遠沒有達到N00%的,說明您的代碼沒有把CPU的算力壓榨出來,一般可以通過修改Torch Dataloader中的worker_num提高CPU負載,經驗值num_worker = 略小于核心數量,最好測試不同worker num值對性能的影響。

numpy

NumPy會使用OpenBlas或MKL做計算加速。Intel的CPU支持MKL,AMD CPU僅支持OpenBlas。

如果使用Intel的CPU,MKL會比OpenBlas有幾倍的性能提升(部分矩陣計算),對最終的性能影響非常大。一般來說AMD CPU使用OpenBlas會比Intel的CPU使用OpenBlas更快,因此不用過份擔心AMD CPU使用OpenBlas的性能差。
在使用清華等國內的Conda源時,安裝NumPy時默認會使用OpenBlas的加速方案
我的設備是:::

在這里插入圖片描述
所以不用修改了
修改的話參考:::Pref

# 第一步:卸載當前的NumPy
pip uninstall numpy (如果是conda安裝的, conda uninstall numpy)
# 第二步:刪除國內的Conda源
echo "" > /root/.condarc
# 第三步:重新安裝NumPy
conda install numpy

其余經驗

如果您在使用單機多卡并行,并且使用了PyTorch框架,那么一般將torch.nn.DataParallel (DP)更換為torch.nn.DistributedDataParallel (DDP) 能提升性能。官方原文是:DistributedDataParallel offers much better performance and scaling to multiple-GPUs.

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

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

相關文章

機器學習:線性回歸,梯度下降

線性回歸模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的數學公式

論文筆記-NeurIPS2017-DropoutNet

論文筆記-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解決推薦系統中的冷啟動問題摘要1.引言2.前言3.方法3.1模型架構3.2冷啟動訓練3.3推薦 4.實驗4.1實驗設置4.2在CiteULike上的實驗結果4.2.1 Dropout率的影響4.2.2 實驗結…

nvm的學習

學習 nvm&#xff08;Node Version Manager&#xff09; 是掌握 Node.js 開發的關鍵技能之一。以下是系統的學習路徑和實戰指南&#xff0c;涵蓋從基礎到進階的內容&#xff1a; 一、基礎入門 1. nvm 的核心作用 多版本共存&#xff1a;安裝和管理多個 Node.js 版本&#xff…

GPT-4.5實際性能評測:實際探索

摘要 經過數萬輪嚴格測試&#xff0c;GPT-4.5的性能并未超越其前代產品GPT-4。此前發布的《GPT-4.5 一手實測&#xff1a;垃圾》一文中存在不準確描述&#xff0c;在此向讀者致歉。盡管GPT-4.5在價格上有所提升且響應速度較慢&#xff0c;但測試結果顯示其模型素質并未達到預期…

從UNIX到Linux:操作系統進化史與開源革命

從UNIX到Linux&#xff1a;操作系統進化史與開源革命 一、操作系統&#xff1a;數字世界的基石 1.1 什么是操作系統&#xff1f; 操作系統&#xff08;OS&#xff09;是計算機系統的核心管理者&#xff0c;承擔著三大核心使命&#xff1a; 硬件指揮官&#xff1a;直接管理C…

如何修改安全帽/反光衣檢測AI邊緣計算智能分析網關V4的IP地址?

TSINGSEE青犀推出的智能分析網關V4&#xff0c;是一款集成了BM1684芯片的高性能AI邊緣計算智能硬件。其內置的高性能8核ARM A53處理器&#xff0c;主頻可高達2.3GHz&#xff0c;INT8峰值算力更是達到了驚人的17.6Tops。此外&#xff0c;該硬件還預裝了近40種AI算法模型&#xf…

【全棧開發】----Mysql基本配置與使用

本篇是在已下載Mysql的情況下進行的&#xff0c;若還未下載或未創建Mysql服務&#xff0c;請轉到這篇: 2024 年 MySQL 8.0.40 安裝配置、Workbench漢化教程最簡易&#xff08;保姆級&#xff09;_mysql8.0.40下載安裝教程-CSDN博客 本文對于mysql的操作均使用控制臺sql原生代碼…

C++ primer plus 第四節 復合類型

本章內容包括: ? 創建和使用數組 ? 創建和使用 c-風格字符串 ? 創建和使用 string 類字符串 ? 使用方法getline( )和 get( )讀取字符串 ? 混合輸入字符串和數字 ? 創建和使用結構 ? 創建和使用共用休 ? 創建和使用枚舉 ? 創建和使用指針 ? 使用 new和delete 管理動態…

Java中的泛型類 --為集合的學習做準備

學習目標 ● 掌握在集合中正確使用泛型 ● 了解泛型類、泛型接口、泛型方法 ● 了解泛型上下限 ● 了解基本的使用場景 1.有關泛型 1.1泛型的概念 泛型&#xff08;Generics&#xff09;是Java中引入的參數化類型機制&#xff0c;允許在定義類、接口或方法時使用類型參數&a…

VUE3+Vite使用TailwindCSS【若依前后端分離框架】

參考&#xff1a;https://tailwind.nodejs.cn/docs/guides/vite#vue 和 https://blog.csdn.net/hjl_and_djj/article/details/144694485依次運行命令&#xff1a; cnpm install -D tailwindcss3.4.17 postcss autoprefixernpx tailwindcss init -p修改配置文件tailwind.config.…

FFmpeg入門:最簡單的音頻播放器

FFmpeg入門&#xff1a;最簡單的音頻播放器 歡迎大家來到FFmpeg入門的第二章&#xff0c;今天只做一個最簡單的FFmpeg音頻播放器&#xff1b;同樣&#xff0c;話不多說&#xff0c;先上流程圖 流程圖 以上流程和視頻播放器的解碼過程基本上是一致的&#xff1b; 不同點在于 S…

在Ubuntu下,源碼編譯安裝Python

在Ubuntu下&#xff0c;源碼編譯安裝Python 知識點 知識點1&#xff1a;在 Linux 系統里&#xff0c;/usr 目錄通常用于存放一些共享的、只讀的程序和數據&#xff0c;是系統安裝軟件的一個重要位置。而 /usr/src 目錄一般是用來存放系統源代碼以及一些軟件包的源代碼的地方 …

《每天讀一個JDK源碼》之HashMap解讀

&#x1f4cc;《每天讀一個JDK源碼》之HashMap解讀 &#x1f517;源碼定位&#xff1a;java.util.HashMap&#xff08;建議IDE對照閱讀&#xff09; 今天我們來破解Java集合框架中最精妙的藝術品——HashMap&#xff01;它不僅是面試必考題&#xff08;出現率99%&#xff09;&…

【Java項目】基于SpringBoot的Java學習平臺

【Java項目】基于SpringBoot的Java學習平臺 技術簡介&#xff1a;采用Java技術、SpringBoot框架、MySQL數據庫等實現。系統基于B/S架構&#xff0c;前端通過瀏覽器與后端數據庫進行信息交互&#xff0c;后端使用SpringBoot框架和MySQL數據庫進行數據處理和存儲&#xff0c;實現…

使用ChatGPT-Deep Reaserch兩步給出文獻綜述!

文獻綜述是學術論文寫作中不可或缺的一部分&#xff0c;它不僅是對已有研究的梳理和總結&#xff0c;更是為后續研究奠定理論基礎的關鍵步驟。通過文獻綜述研究者能夠全面了解當前研究領域的現狀、主要觀點和研究方法&#xff0c;從而找到自己研究的切入點和創新點。這一過程需…

java基礎知識(理論篇)

一、java介紹 1.1Java語言 Java 是一種廣泛使用的、通用的、面向對象的編程語言&#xff0c;Java 的設計目標是“一次編寫&#xff0c;到處運行”&#xff0c;這也這意味著 Java 程序可以在任何支持 Java 的平臺&#xff08;如 Windows、Linux、macOS 等&#xff09;上運行。 …

金融賦能紹興紡織 民生銀行助力外貿中小微企業“走出去”

在浙江紹興&#xff0c;紡織業作為一張熠熠生輝的產業名片&#xff0c;承載著深厚的歷史底蘊與蓬勃的發展活力。這里依傍長三角經濟圈&#xff0c;交通網絡縱橫交錯&#xff0c;將原材料產地與廣闊市場緊密相連&#xff1b;產業集群高度成熟&#xff0c;上下游產業鏈完備&#…

綜合實驗處理表格

新建excel表格&#xff0c;輸入信息&#xff0c;另存為csv文件。 利用notepad打開csv文件&#xff0c;可以觀察格式 目標&#xff1a;通過編程處理文件&#xff0c;實現對數據的處理&#xff0c;成績求和以及評價 對數據逐行處理&#xff0c;讀一行&#xff0c;處理一行&#…

我和我的通義靈碼

我和我的通義靈碼 我和我的通義靈碼個人版&企業版個人版登錄個人版workspace應用場景terminal 企業版登錄企業版#team docs 體驗總結 我和我的通義靈碼 說到通義靈碼&#xff0c;作為程序員的我們是最有發言權的。從全國首個AI代碼助手-通義靈碼公測到現在&#xff0c;不知…

一文學會Volatile關鍵字

引言 在 Java 多線程實戰中&#xff0c;volatile 是一個重要的關鍵字&#xff0c;用于修飾變量&#xff0c;經常在JUC源碼中出現&#xff0c;本文詳細解析一下這個關鍵字的奧秘 1. 基本概念 volatile 關鍵字的主要作用是保證變量的可見性以及在一定程度上禁止指令重排序。在…