現(xiàn)在的報(bào)稅網(wǎng)站怎么做更正申報(bào)seo公司關(guān)鍵詞
你好你好!
以下內(nèi)容僅為當(dāng)前認(rèn)識(shí),可能有不足之處,歡迎討論!
文章目錄
- 文檔內(nèi)容
- docker相關(guān)術(shù)語(yǔ)
- docker常用命令
- 容器常用命令
- 根據(jù)dockerfile創(chuàng)建容器
- dokerfile文件內(nèi)容
- docker問(wèn)題:
- 可能的原因和解決方法
- 示例修改
- 修改后的Dockerfile示例:
- start.sh腳本示例:
- 可能的原因和解決方法
- 原因1:預(yù)安裝的Python不存在
- 原因2:安裝Python 3.7后不需要手動(dòng)更新pip
- 修改后的Dockerfile示例
- ④默認(rèn)啟動(dòng)為Ubuntu
- 在開(kāi)始學(xué)習(xí)時(shí)自己的問(wèn)題
- 相關(guān)資料
文檔內(nèi)容
分為docker是什么,docker有哪些常用命令,docker制作過(guò)程,docker制作過(guò)程中出現(xiàn)的問(wèn)題。
資料路線推薦:①黑馬程序員;②相關(guān)知乎介紹;③該文檔。
①黑馬程序員:大致看幾節(jié)課,了解是什么東西。以及對(duì)應(yīng)文字筆記。
②相關(guān)知乎介紹:別人的安裝過(guò)程。參考1結(jié)合參考2,參考3選看??磶灼私膺^(guò)程后再構(gòu)建就行。
其他相關(guān)鏈接:
- 基于docker的深度學(xué)習(xí)-入門(mén)
- 基于docker的深度學(xué)習(xí)環(huán)境-Windows
- 從硬件到軟件起步搭建深度學(xué)習(xí)環(huán)境-Docker+conda+pytorch+ssh+vscode
- 2023完整版-深度學(xué)習(xí)環(huán)境在docker上搭建
③該文檔:調(diào)整合適的python版本,基礎(chǔ)鏡像版本,requirements文件中的pip包。
docker相關(guān)術(shù)語(yǔ)
docker這項(xiàng)技術(shù),包括專(zhuān)業(yè)術(shù)語(yǔ)(目前我遇到的用到的)有:鏡像,容器,SSH,ubuntu,cudatoolkit,/devel,
鏡像可以看作類(lèi),容器看作實(shí)例 | 對(duì)象。這兩個(gè)概念與python/java/c++中的類(lèi)對(duì)象一致。
SSH—這個(gè)沒(méi)理解,百度的話自己看吧……
Ubuntu系統(tǒng)——簡(jiǎn)單理解,運(yùn)行起來(lái)快。
cudatoolkit——能夠跑深度學(xué)習(xí)的環(huán)境。
devel——通過(guò)添加編譯器工具鏈、調(diào)試工具、頭文件和靜態(tài)庫(kù)來(lái)擴(kuò)展運(yùn)行時(shí)映像。
runtime——通過(guò)添加cuda工具包中的所有共享庫(kù)擴(kuò)展基本映像。
base——從cuda9.0開(kāi)始,包含部署預(yù)構(gòu)建cuda應(yīng)用程序的最低限度。
docker的英文翻譯為碼頭工人。我理解為一種技術(shù)。這個(gè)工人包括運(yùn)行深度學(xué)習(xí)模型的所有技能(環(huán)境),所以,現(xiàn)在如果自己是女?huà)z,自己要根據(jù)不同的深度學(xué)習(xí)環(huán)境來(lái)造出不同的"人"——docker鏡像。
docker常用命令
-
查看鏡像有多少
docker images
-
對(duì)鏡像進(jìn)行更名
docker tag 原鏡像:原tag 目標(biāo)倉(cāng)庫(kù)/目標(biāo)鏡像:目標(biāo)-tag
-
通過(guò)dockerfile新建一個(gè)鏡像:
dockerbuild -t 倉(cāng)庫(kù)名/鏡像名:tag名
-
保存鏡像:
docker save -o 保存文件名稱(chēng).后綴(一般用tar) 倉(cāng)庫(kù)名/鏡像名:tag
-
加載他人的鏡像:
docker load -i 導(dǎo)入的文件
容器常用命令
根據(jù)已有鏡像創(chuàng)建對(duì)應(yīng)容器:docker run --it --gpus all --name 容器名 倉(cāng)庫(kù)名/鏡像名:tag名
參數(shù)說(shuō)明:
--it
,交互式地啟動(dòng)容器。
--gpus
,gpu數(shù)量為多少,我只用過(guò)all。
--name
,指定容器名稱(chēng)。
根據(jù)dockerfile創(chuàng)建容器
我的是Windows系統(tǒng),安裝了wsl虛擬子系統(tǒng)——Ubuntu18.04LTS。
使用設(shè)置默認(rèn)命令后,在wsl中輸出即可進(jìn)入U(xiǎn)buntu子系統(tǒng)。由于我之前就進(jìn)入了mnt文件夾,所以直接顯示如此。另外,mnt文件夾是Windows系統(tǒng)的文件目錄,所以要?jiǎng)?chuàng)建docker鏡像,直接進(jìn)入dockerfile文件夾中即可。
注意,如果Windows系統(tǒng)可以在命令行中運(yùn)行
nvidia-smi
,那子系統(tǒng)就不需要安裝cudatoolkit,否則徒增空間。
dokerfile文件內(nèi)容
內(nèi)容包括cudatoolkit,Ubuntu系統(tǒng),jupyter,ssh相關(guān)服務(wù),requirements.txt包,senteval
from nvidia/cuda:11.0.3-cudnn8-devel-ubuntu18.04# 安裝ssh相關(guān)組件RUN apt-get clean && apt-get update && \apt-get install -y openssh-client openssh-server && \ssh-keygen -A && \cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \mv -f /etc/ssh/ssh_config.new /etc/ssh/ssh_config && \cat /etc/ssh/sshd_config | grep -v PermitRootLogin > /etc/ssh/sshd_config.new && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.new && \mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_configCOPY start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]# 升級(jí)apt-get
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils# 下載依賴(lài)并安裝所有依賴(lài)
RUN apt-get install -y build-essential libncurses5-dev libgdbm-dev libnss3-dev \libssl-dev libreadline-dev libffi-dev zlib1g-dev libsqlite3-dev# 下載并安裝Python3.7
WORKDIR /home/inspur/image_components/pythonRUN if [ -e /usr/bin/python ]; then rm /usr/bin/python; fi && \ln -s /usr/local/bin/python3.7 /usr/bin/pythonRUN apt-get update && \apt-get install -y wget build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev && \wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz && \tar -zxvf Python-3.7.12.tgz && \cd Python-3.7.12 && \./configure --enable-optimizations && \make -j $(nproc) && \make altinstall && \ln -sf /usr/local/bin/python3.7 /usr/bin/python && \/usr/local/bin/python3.7 -m pip install --upgrade pip# 將SentEval文件夾復(fù)制到鏡像中
COPY SentEval /app/SentEval# 切換到SentEval目錄并安裝
WORKDIR /app/SentEval
RUN python setup.py install# 安裝Jupyter
RUN pip install jupyterlab==3.2.5# 配置Jupyter
WORKDIR /home/inspur/image_components/jupyter_configure
RUN wget https://raw.githubusercontent.com/Winowang/jupyter_gpu/master/jupyter_notebook_config.py && \wget https://raw.githubusercontent.com/Winowang/jupyter_gpu/master/custom.js && \mkdir /etc/jupyter && \cp -rf /home/inspur/image_components/jupyter_configure/* /etc/jupyter# 設(shè)置工作目錄
WORKDIR /app# 復(fù)制 requirements.txt 到容器內(nèi)
COPY requirements.txt .# 安裝 Python 包
RUN pip install --no-cache-dir -r requirements.txt# 可以在此執(zhí)行更多的配置或安裝步驟
解析下這個(gè)dockerfile做了什么。
第1行,需要看清楚自己的cuda&torch版本,這個(gè)GitHub較為詳細(xì)??梢詤⒖?。找好后,在docker官網(wǎng)找到對(duì)應(yīng)tag下載Ubuntu+cudatoolkit基礎(chǔ)環(huán)境。
第3-17行,安裝ssh及其服務(wù)。
第19-42行,就是下載安裝python。
第45-50行,因?yàn)檫@個(gè)包沒(méi)辦法通過(guò)requirements.txt下載,只能離線下載,所以這是我額外的操作,如果沒(méi)有這個(gè)要求可以忽略。
第53-61行,安裝jupyter,看服務(wù)器環(huán)境,我的平臺(tái)上沒(méi)有,所以需要安裝jupyter及其服務(wù)。
第65-71行,安裝特定深度學(xué)習(xí)環(huán)境下的python包。也可以離線安裝——把torch-wheel包放在dockerfile目錄下,用離線安裝命令就可以。
dockerfile編寫(xiě)好后,直接進(jìn)入wls的Linux窗口,有個(gè)mnt的文件夾,是本地電腦的目錄。就能夠通過(guò)build命令本地文件安裝鏡像了。
執(zhí)行docker build -t {images-name} . 就可以了,如下:
docker問(wèn)題:
遇到問(wèn)題:
①ssh配置問(wèn)題
原來(lái)的dockerfile文件內(nèi)容是:
# 安裝ssh相關(guān)組件
RUN apt-clean && apt-get update && \apt-get install -y openssh-client openssh-server && \ssh-keygen -A && \cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \mv -f /etc/ssh/ssh_config.new /etc/ssh/ssh_config && \cat /etc/ssh/sshd_config | grep -v PermitRootLogin > /etc/ssh/sshd_config.new && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.new && \mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_config && \/usr/sbin/sshd
報(bào)錯(cuò)為:
dockerfile:4
--------------------3 | # 安裝ssh相關(guān)組件4 | >>> RUN apt-get clean && apt-get update && \5 | >>> apt-get install -y openssh-client openssh-server && \6 | >>> ssh-keygen -A && \7 | >>> cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \8 | >>> echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \9 | >>> mv -f /etc/ssh/ssh_config.new /etc/ssh/ssh_config && \10 | >>> cat /etc/ssh/sshd_config | grep -v PermitRootLogin > /etc/ssh/sshd_config.new && \11 | >>> echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.new && \12 | >>> mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_config && \13 | >>> /usr/sbin/sshd14 |
--------------------
ERROR: failed to solve:
process "/bin/sh -c apt-get clean && apt-get update && apt-get install -y openssh-client openssh-server && ssh-keygen -A && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && echo \" StrictHostKeyChecking no\" >> /etc/ssh/ssh_config.new && mv -f /etc/ssh/ssh_config.new /etc/ssh/ssh_config && cat /etc/ssh/sshd_config | grep -v PermitRootLogin > /etc/ssh/sshd_config.new && echo \"PermitRootLogin yes\" >> /etc/ssh/sshd_config.new && mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_config && /usr/sbin/sshd"
did not complete successfully: exit code: 255
這個(gè)問(wèn)題我是真看不懂,所以直接問(wèn)GPT了……給出的問(wèn)題以及解決方法如下:
出現(xiàn)此錯(cuò)誤表明在執(zhí)行
RUN
指令時(shí)遇到了問(wèn)題,導(dǎo)致整個(gè)命令未能成功完成。這個(gè)錯(cuò)誤可能由多種原因引起,但考慮到錯(cuò)誤消息中提及的內(nèi)容,我們可以針對(duì)性地分析幾個(gè)可能的原因和解決方法:可能的原因和解決方法
SSH服務(wù)不能在Docker構(gòu)建過(guò)程中啟動(dòng): 在Dockerfile的構(gòu)建過(guò)程中直接啟動(dòng)
sshd
服務(wù)(使用/usr/sbin/sshd
命令)可能會(huì)失敗,因?yàn)镈ocker構(gòu)建過(guò)程不支持后臺(tái)服務(wù)運(yùn)行。構(gòu)建過(guò)程主要用于設(shè)置環(huán)境和安裝依賴(lài),而不是運(yùn)行服務(wù)。解決方法:不要在構(gòu)建過(guò)程中啟動(dòng)
sshd
服務(wù)。相反,配置一個(gè)入口腳本,該腳本在容器啟動(dòng)時(shí)執(zhí)行必要的初始化操作(如生成SSH密鑰和啟動(dòng)sshd
服務(wù))。然后,使用CMD
或ENTRYPOINT
指令在Dockerfile的末尾調(diào)用這個(gè)腳本。引用錯(cuò)誤: 錯(cuò)誤提示中顯示的雙引號(hào)被轉(zhuǎn)義(
\"
),這可能是由于在Dockerfile或者某些編輯器中不正確地處理引號(hào)所導(dǎo)致的。解決方法:確保使用正確的引號(hào),不需要在Dockerfile中額外轉(zhuǎn)義雙引號(hào)。
權(quán)限問(wèn)題: 直接執(zhí)行
/usr/sbin/sshd
可能由于權(quán)限不足而失敗。解決方法:確保容器具有執(zhí)行所需操作的權(quán)限。一種常見(jiàn)做法是使用
USER
指令切換到合適的用戶,或者確保容器以足夠權(quán)限運(yùn)行相關(guān)命令。示例修改
為了解決這個(gè)問(wèn)題,您可以將啟動(dòng)SSH服務(wù)的部分移除出構(gòu)建過(guò)程,改為在容器啟動(dòng)時(shí)執(zhí)行。以下是修改后的一部分Dockerfile示例和一個(gè)入口腳本示例:
修改后的Dockerfile示例:
DockerfileCopy code... RUN apt-get clean && apt-get update && \apt-get install -y openssh-client openssh-server && \ssh-keygen -A && \cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \mv -f /etc/ssh/ssh_config.new /etc/ssh/ssh_config && \cat /etc/ssh/sshd_config | grep -v PermitRootLogin > /etc/ssh/sshd_config.new && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.new && \mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_configCOPY start.sh /start.sh RUN chmod +x /start.sh CMD ["/start.sh"]
start.sh腳本示例:
bashCopy code#!/bin/bash# 啟動(dòng)SSH服務(wù) /usr/sbin/sshd -D
確保
start.sh
腳本在Docker容器的文件系統(tǒng)中的適當(dāng)位置,且具有執(zhí)行權(quán)限(如示例中所示)。這樣,當(dāng)容器啟動(dòng)時(shí),它將執(zhí)行start.sh
腳本,該腳本負(fù)責(zé)啟動(dòng)SSH服務(wù)。通過(guò)這種方式,您可以避免在構(gòu)建過(guò)程中直接啟動(dòng)服務(wù)的問(wèn)題,同時(shí)確保容器啟動(dòng)后服務(wù)正常運(yùn)行。
②python安裝包問(wèn)題
報(bào)錯(cuò)為:
1517.0 Looking in links: /tmp/tmpfu9f5ef7
1517.0 Processing /tmp/tmpfu9f5ef7/setuptools-47.1.0-py3-none-any.whl
1517.0 Processing /tmp/tmpfu9f5ef7/pip-20.1.1-py2.py3-none-any.whl
1517.1 Installing collected packages: setuptools, pip
1517.9 Successfully installed pip-20.1.1 setuptools-47.1.0
1517.9 rm: cannot remove '/usr/bin/python': No such file or directory
------
dockerfile:30
--------------------29 | WORKDIR /home/inspur/image_components/python30 | >>> RUN apt-get update && \31 | >>> apt-get install -y wget build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev && \32 | >>> wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz && \33 | >>> tar -zxvf Python-3.7.12.tgz && \34 | >>> cd Python-3.7.12 && \35 | >>> ./configure --enable-optimizations && \36 | >>> make -j $(nproc) && \37 | >>> make altinstall && \38 | >>> rm /usr/bin/python && \39 | >>> ln -s /usr/local/bin/python3.7 /usr/bin/python && \40 | >>> ln -s /usr/local/bin/pip3 /usr/bin/pip && \41 | >>> wget https://bootstrap.pypa.io/get-pip.py && \42 | >>> python3.7 get-pip.py43 |
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y wget build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev && wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz && tar -zxvf Python-3.7.12.tgz && cd Python-3.7.12 && ./configure --enable-optimizations && make -j $(nproc) && make altinstall && rm /usr/bin/python && ln -s /usr/local/bin/python3.7 /usr/bin/python && ln -s /usr/local/bin/pip3 /usr/bin/pip && wget https://bootstrap.pypa.io/get-pip.py && python3.7 get-pip.py" did not complete successfully: exit code: 1
可以看到在第6行,顯示沒(méi)有該文件或文件夾,對(duì)應(yīng)到dockerfile中為第38行rm /usr/bin/python
,詢(xún)問(wèn)GPT,給的原因分析為:
錯(cuò)誤提示顯示,在嘗試刪除
/usr/bin/python
時(shí)遇到問(wèn)題,因?yàn)闆](méi)有找到這個(gè)文件。這個(gè)問(wèn)題發(fā)生在您嘗試安裝Python 3.7、移除現(xiàn)有的Python鏈接并創(chuàng)建新鏈接到安裝的Python 3.7版本的過(guò)程中。這個(gè)錯(cuò)誤可能意味著在嘗試刪除/usr/bin/python
之前,該文件并不存在。可能的原因和解決方法
原因1:預(yù)安裝的Python不存在
在某些基于Ubuntu的鏡像中,
/usr/bin/python
可能默認(rèn)不存在,尤其是在一些更新的Ubuntu版本中(如18.04及以上),它們可能不包含Python 2,而是包含Python 3,且命名為python3
。解決方法:在嘗試刪除
/usr/bin/python
之前,先檢查該文件是否存在。如果目的是確保python
命令指向Python 3.7,可以改用更安全的方法來(lái)創(chuàng)建鏈接,只在文件存在時(shí)才刪除它。例如:DockerfileCopy codeRUN if [ -e /usr/bin/python ]; then rm /usr/bin/python; fi && \ln -s /usr/local/bin/python3.7 /usr/bin/python
或者,簡(jiǎn)化這個(gè)過(guò)程,直接創(chuàng)建一個(gè)新鏈接,如果舊的鏈接不存在,這個(gè)命令也不會(huì)出錯(cuò):
DockerfileCopy code RUN ln -sf /usr/local/bin/python3.7 /usr/bin/python
原因2:安裝Python 3.7后不需要手動(dòng)更新pip
安裝Python 3.7時(shí)使用
make altinstall
避免覆蓋默認(rèn)的python
命令,這是推薦的做法。但之后的步驟嘗試手動(dòng)更新pip可能是不必要的,因?yàn)?code>altinstall安裝的Python版本已包含了pip(假設(shè)是較新的Python版本)。解決方法:可以省略手動(dòng)安裝pip的步驟,因?yàn)槊總€(gè)Python安裝通常都會(huì)包含pip。如果確實(shí)需要更新pip,可以考慮使用Python自帶的pip來(lái)更新:
DockerfileCopy code RUN /usr/local/bin/python3.7 -m pip install --upgrade pip
修改后的Dockerfile示例
結(jié)合以上建議,修改相關(guān)部分如下:
DockerfileCopy codeRUN apt-get update && \apt-get install -y wget build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev && \wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz && \tar -zxvf Python-3.7.12.tgz && \cd Python-3.7.12 && \./configure --enable-optimizations && \make -j $(nproc) && \make altinstall && \ln -sf /usr/local/bin/python3.7 /usr/bin/python && \/usr/local/bin/python3.7 -m pip install --upgrade pip
這樣修改后,應(yīng)該能夠解決構(gòu)建過(guò)程中遇到的錯(cuò)誤,并確保Python 3.7成功安裝且
python
命令鏈接到正確的Python版本。
可以看到,第9-10行替換為原來(lái)的38-41行。原先命令的意思是:
修改后命令的意思是:
③nvidia-smi
無(wú)法識(shí)別。導(dǎo)致torch無(wú)法使用。
啟動(dòng)命令不正確,需要加上--gpus all
的參數(shù)創(chuàng)建容器。啟動(dòng)容器后,就可以正常執(zhí)行nvidia-smi
的命令,打開(kāi)python后,torch.cuda.is_available()
的命令也能顯示true。
④默認(rèn)啟動(dòng)為Ubuntu
使用wsl -d Ubuntu
可以進(jìn)入虛擬環(huán)境中。通過(guò)管理員權(quán)限在powershell中可以設(shè)置將wsl2的默認(rèn)系統(tǒng)設(shè)置為Ubuntu:wslconfig /setdefault Ubuntu
。
在開(kāi)始學(xué)習(xí)時(shí)自己的問(wèn)題
Windows下的Ubuntu和docker是什么關(guān)系?因?yàn)樵赨buntu中沒(méi)法使用docker命令。
😵問(wèn)題:如何下載指定版本的包?下載指定版本的包下載錯(cuò)了怎么辦?目錄是哪里的目錄?入口需要寫(xiě)什么?
可以通過(guò)深度學(xué)習(xí)環(huán)境先導(dǎo)出requirements.txt,再加入到dockerfile同一目錄中,在dockerfile中pip安裝。
😵如何下載指定的包?
①在創(chuàng)建鏡像時(shí),就聲明需要下載哪些包及其對(duì)應(yīng)版本。本文檔中的dockefile就是該操作。
②在原有鏡像基礎(chǔ)上,生成容器后,在容器中下載包,下載完成后將其打包成新的鏡像。需要額外操作。
😵下載指定版本的包錯(cuò)了怎么辦?
用本地文件導(dǎo)入試試。以及pypi.org找到指定包。
😵目錄是哪里的目錄?
Ubuntu可以直接在mnt目錄下進(jìn)入本地目錄。
😵入口需要寫(xiě)什么?
這個(gè)沒(méi)找到……答案
相關(guān)資料
-
cudnn+torch對(duì)應(yīng)版本
-
Ubuntu+cudatoolkit基礎(chǔ)鏡像
-
wsl鏡像遷移
-
Ubuntu查看系統(tǒng)版本
-
查看Windows安裝了哪些wsl子系統(tǒng)
-
將docker上傳至hub
以上是我的學(xué)習(xí)筆記,希望對(duì)你有所幫助!
如有不當(dāng)之處歡迎指出!謝謝!