wordpress中文 插件網(wǎng)站文章優(yōu)化技巧
某基金管理公司線下測(cè)試開(kāi)發(fā)面試題總結(jié)。
測(cè)開(kāi)題目如下
可以嘗試自己先寫(xiě),寫(xiě)完之后再去看參考解法哦 ~
1、編寫(xiě)一段代碼,把 list 的數(shù)平方(語(yǔ)言不限)
ListA = [1, 3, 5, 7, 9, 11]
2、使用 Python 語(yǔ)言編寫(xiě)一個(gè)日志裝飾器
3、進(jìn)程、線程、協(xié)程有什么區(qū)別?
4、請(qǐng)畫(huà)出 Selenium 框架的工作原理 (Appium 也可以)
5、落地自動(dòng)化測(cè)試項(xiàng)目有哪幾個(gè)關(guān)鍵節(jié)點(diǎn)? 請(qǐng)舉例說(shuō)明
6、請(qǐng)畫(huà)出 Django 框架請(qǐng)求流程 (也就是,請(qǐng)求的生命周期),如果可以寫(xiě)出函數(shù)調(diào)用鏈路是怎樣的?(如果未使用過(guò) Django,可以畫(huà)出你用過(guò)的框架)
7、wsgiref 作用是什么?
8、Django 有哪些中間件? 列舉 5 個(gè)方法,以及中間件的應(yīng)用場(chǎng)景?
9、請(qǐng)簡(jiǎn)述 WSGl/uwsgi/uwSGI 三個(gè)概念的區(qū)別是什么? 為什么有了 uWSGI 還需要 nginx?
10、請(qǐng)列舉幾種 MySQL 存儲(chǔ)引擎,分別有什么優(yōu)缺點(diǎn)?
11、請(qǐng)畫(huà)出 Docker C/S 架構(gòu)圖
12、請(qǐng)使用 docker 命令操作
a) 創(chuàng)建一個(gè) volume 名稱為 kuma
b) 啟動(dòng)一個(gè)容器,名稱為 yapi,后臺(tái)執(zhí)行,把 host 的 5000 端口映射到容器內(nèi) 3000端口,并使用上面創(chuàng)建的 volume,掛載到/data/db 目錄
解題參考如下
1、編寫(xiě)一段代碼,把 list 的數(shù)平方(語(yǔ)言不限)
輸入:ListA = [1, 3, 5, 7, 9, 11]
輸出:[1, 9, 25, 49, 81, 121]
「java代碼:」
-
//?方法一
-
import?java.util.ArrayList;
-
import?java.util.List;
-
public?class?SquareList?{
-
????public?static?void?main(String[]?args)?{
-
????????List<Integer>?listA?=?new?ArrayList<Integer>();
-
????????listA.add(1);
-
????????listA.add(3);
-
????????listA.add(5);
-
????????listA.add(7);
-
????????listA.add(9);
-
????????listA.add(11);
-
????????List<Integer>?squaredList?=?new?ArrayList<Integer>();
-
????????for?(int?num?:?listA)?{
-
????????????squaredList.add(num?*?num);
-
????????}
-
????????System.out.println(squaredList);
-
????}
-
}
-
//?方法二
-
import?java.util.Arrays;
-
import?java.util.List;
-
import?java.util.stream.Collectors;
-
public?class?SquareList?{
-
????public?static?void?main(String[]?args)?{
-
????????List<Integer>?listA?=?Arrays.asList(1,?3,?5,?7,?9,?11);
-
????????List<Integer>?squaredList?=?listA.stream()
-
????????????????.map(num?->?num?*?num)
-
????????????????.collect(Collectors.toList());
-
????????System.out.println(squaredList);
-
????}
-
}
通過(guò)使用Java 8中引入的Stream API,可以實(shí)現(xiàn)更簡(jiǎn)潔的代碼。在上述代碼中,我們將listA
轉(zhuǎn)換為一個(gè)流(stream),然后使用map()
操作將每個(gè)元素平方,最后通過(guò)collect()
操作將結(jié)果收集到一個(gè)新的列表中。這樣,我們就得到了平方后的列表并輸出結(jié)果。
「go代碼」
-
package?main
-
import?(
-
?"fmt"
-
)
-
func?main()?{
-
?listA?:=?[]int{1,?3,?5,?7,?9,?11}
-
?squaredList?:=?make([]int,?len(listA))
-
?for?i,?num?:=?range?listA?{
-
??squaredList[i]?=?num?*?num
-
?}
-
?fmt.Println(squaredList)
-
}
「python代碼」
-
#?方法一,使用列表推導(dǎo)式
-
listA?=?[1,?3,?5,?7,?9,?11]
-
squared_list?=?[num**2?for?num?in?listA]
-
print(squared_list)?#?[1,?9,?25,?49,?81,?121]
-
#?方法二,使用map方法
-
listA?=?[1,?3,?5,?7,?9,?11]
-
squared_list?=?list(map(lambda?num:?num**2,?listA))
-
print(squared_list)
map()
函數(shù)接受一個(gè)函數(shù)和一個(gè)可迭代對(duì)象作為參數(shù),并將函數(shù)應(yīng)用于可迭代對(duì)象中的每個(gè)元素
-
#方法三,普通for循環(huán)(這應(yīng)該不是面試官想看到的,但卻是最好理解的)
-
listA?=?[1,?3,?5,?7,?9,?11]
-
squared_list?=?[]
-
for?i?in?listA:
-
????squared_list.append(i*i)?#?寫(xiě)成?i**2?也是可以的
-
print(squared_list)
**2
表示一個(gè)數(shù)的平方。
2、使用 Python 語(yǔ)言編寫(xiě)一個(gè)日志裝飾器
方式一:簡(jiǎn)易版
-
def?log_decorator(func):
-
????def?wrapper(*args,?**kwargs):
-
????????print("調(diào)用函數(shù):",?func.__name__)
-
????????print("傳入的參數(shù):",?args,?kwargs)
-
????????result?=?func(*args,?**kwargs)
-
????????print("函數(shù)返回結(jié)果:",?result)
-
????????return?result
-
????return?wrapper
-
@log_decorator
-
def?add(a,?b):
-
????return?a?+?b
-
result?=?add(3,?5)
-
print("最終結(jié)果:",?result)?#?最終結(jié)果:?8
方式一:稍微不簡(jiǎn)易版
-
import?logging
-
logging.basicConfig(level=logging.INFO)
-
def?log_decorator(func):
-
????def?wrapper(*args,?**kwargs):
-
????????logger?=?logging.getLogger()
-
????????logger.info("調(diào)用函數(shù):?%s",?func.__name__)
-
????????logger.info("傳入的參數(shù):?%s?%s",?args,?kwargs)
-
????????result?=?func(*args,?**kwargs)
-
????????logger.info("函數(shù)返回結(jié)果:?%s",?result)
-
????????return?result
-
????return?wrapper
-
@log_decorator
-
def?add(a,?b):
-
????return?a?+?b
-
result?=?add(3,?5)
-
print("最終結(jié)果:",?result)
代碼不做過(guò)多解釋。
3、進(jìn)程、線程、協(xié)程有什么區(qū)別?
進(jìn)程、線程和協(xié)程是計(jì)算機(jī)中用于實(shí)現(xiàn)并發(fā)和并行的概念,它們之間有以下區(qū)別:
-
進(jìn)程(Process):
-
進(jìn)程是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。
-
每個(gè)進(jìn)程有自己獨(dú)立的地址空間、堆棧和數(shù)據(jù)段,相互之間不共享內(nèi)存。
-
進(jìn)程之間的通信需要通過(guò)進(jìn)程間通信(IPC)機(jī)制,例如管道、信號(hào)、消息隊(duì)列等。
-
進(jìn)程之間切換開(kāi)銷較大,資源占用較多。
-
進(jìn)程之間是相互獨(dú)立的,崩潰或異常不會(huì)影響其他進(jìn)程。
-
-
線程(Thread):
-
線程是在進(jìn)程內(nèi)執(zhí)行的獨(dú)立執(zhí)行流。
-
在同一進(jìn)程中的線程共享資源,包括內(nèi)存、文件句柄等。
-
線程之間切換開(kāi)銷相對(duì)較小,資源占用較少。
-
線程之間通過(guò)共享內(nèi)存進(jìn)行通信,但需要注意線程同步和互斥問(wèn)題。
-
線程的崩潰或異??赡軐?dǎo)致整個(gè)進(jìn)程的崩潰。
-
-
協(xié)程(Coroutine):
-
協(xié)程是一種用戶態(tài)的輕量級(jí)線程,也稱為微線程。
-
協(xié)程的調(diào)度由程序員自己控制,可以通過(guò)yield/yield from等關(guān)鍵字在執(zhí)行中保存和恢復(fù)上下文。
-
協(xié)程之間切換開(kāi)銷非常小,可以高效地執(zhí)行異步操作,提高程序的并發(fā)性能。
-
協(xié)程適合處理IO密集型任務(wù),但對(duì)于計(jì)算密集型任務(wù),需要與多線程或多進(jìn)程配合使用。
-
「什么場(chǎng)景適合用進(jìn)程?」
計(jì)算密集型的任務(wù)(比如:大規(guī)模的數(shù)據(jù)計(jì)算和處理)
「什么場(chǎng)景適合用線程?」
IO密集型的任務(wù)(比如:文件讀寫(xiě)多的,網(wǎng)絡(luò)請(qǐng)求多的任務(wù))
「什么場(chǎng)景適合用協(xié)程?」
IO密集型項(xiàng)目切要求高并發(fā)( 比如:用locust 搞壓測(cè)里面就是用的協(xié)程) ,實(shí)際上真實(shí)項(xiàng)目中對(duì) 應(yīng)高并發(fā)的業(yè)務(wù)并不會(huì)選擇使用python語(yǔ)言。
總結(jié)來(lái)說(shuō),進(jìn)程是操作系統(tǒng)資源分配和調(diào)度的基本單位,線程是在進(jìn)程內(nèi)執(zhí)行的獨(dú)立執(zhí)行流,而協(xié)程是一種用戶態(tài)的輕量級(jí)線程。它們?cè)谫Y源占用、切換開(kāi)銷以及通信方式等方面存在不同,應(yīng)根據(jù)具體情況選擇合適的并發(fā)實(shí)現(xiàn)方式。
后面我會(huì)專門(mén)寫(xiě)幾篇進(jìn)程線程協(xié)程的文章。
4、請(qǐng)畫(huà)出 Selenium 框架的工作原理 (Appium 也可以)
「selenium工作原理」
Selenium工作原理
-
selenium client(python等語(yǔ)言編寫(xiě)的自動(dòng)化測(cè)試腳本)初始化一個(gè)service服務(wù),通過(guò)Webdriver啟動(dòng)瀏覽器驅(qū)動(dòng)程序chromedriver.exe
-
通過(guò)RemoteWebDriver向?yàn)g覽器驅(qū)動(dòng)程序發(fā)送HTTP請(qǐng)求,瀏覽器驅(qū)動(dòng)程序解析請(qǐng)求,打開(kāi)瀏覽器,并獲得sessionid,如果再次對(duì)瀏覽器操作需攜帶此id
-
打開(kāi)瀏覽器,綁定特定的端口,把啟動(dòng)后的瀏覽器作為webdriver的remote server
-
打開(kāi)瀏覽器后,所有的selenium的操作(訪問(wèn)地址,查找元素等)均通過(guò)RemoteConnection鏈接到remote server,然后使用execute方法調(diào)用_request方法通過(guò)urlib3向remote server發(fā)送請(qǐng)求
-
瀏覽器通過(guò)請(qǐng)求的內(nèi)容執(zhí)行對(duì)應(yīng)動(dòng)作
-
瀏覽器再把執(zhí)行的動(dòng)作結(jié)果通過(guò)瀏覽器驅(qū)動(dòng)程序返回給測(cè)試腳本
「Appium工作原理」
此圖高清圖可以在公眾號(hào)后臺(tái)回復(fù):「selenium&appium工作原理」獲得
標(biāo)appium&selenium工作原理題
5、落地自動(dòng)化測(cè)試項(xiàng)目有哪幾個(gè)關(guān)鍵節(jié)點(diǎn)? 請(qǐng)舉例說(shuō)明
這個(gè)問(wèn)題非常寬泛,需要考慮的因素也很多,可以結(jié)合自己簡(jiǎn)歷和工作經(jīng)歷進(jìn)行闡述,以下為關(guān)鍵點(diǎn)參考。
1、從功能測(cè)試用例中篩選自動(dòng)化測(cè)試用例
2、調(diào)研實(shí)踐討論可執(zhí)行自動(dòng)化測(cè)試用例
3、相關(guān)自動(dòng)化方案的排期,預(yù)期,展望
3、選擇自動(dòng)化測(cè)試框架或自己搭建相應(yīng)自動(dòng)化測(cè)試框架
4、自動(dòng)化腳本編寫(xiě)
5、持續(xù)集成與自動(dòng)化構(gòu)建
6、定期維護(hù)與更新
7、自動(dòng)化推行(最重要)
6、請(qǐng)畫(huà)出 Django 框架請(qǐng)求流程 (也就是,請(qǐng)求的生命周期),如果可以寫(xiě)出函數(shù)調(diào)用鏈路是怎樣的?(如果未使用過(guò) Django,可以畫(huà)出你用過(guò)的框架)
-
用戶通過(guò)瀏覽器發(fā)送請(qǐng)求
-
請(qǐng)求到達(dá)request中間件,中間件對(duì)request請(qǐng)求做預(yù)處理或者直接返回response
-
若未返回response,會(huì)到達(dá)urlconf路由,找到對(duì)應(yīng)視圖函數(shù)
-
視圖函數(shù)做相應(yīng)預(yù)處理或直接返回response
-
View中的方法可以選擇性的通過(guò)Models訪問(wèn)底層的數(shù)據(jù)
-
取到相應(yīng)數(shù)據(jù)后回到django模板系統(tǒng),templates通過(guò)filter或tags把數(shù)據(jù)渲染到模板上
-
返回response到瀏覽器展示給客戶
7、wsgiref 作用是什么?
wsgiref 是 Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了一個(gè)簡(jiǎn)單而有效的 WSGI(Web 服務(wù)器網(wǎng)關(guān)接口)服務(wù)器和中間件的實(shí)現(xiàn)。主要分為五個(gè)模塊:simple_server, util, headers, handlers, validate。
wsgiref源碼地址:https://pypi.python.org/pypi/wsgiref
8、Django 有哪些中間件? 列舉 5 個(gè)方法,以及中間件的應(yīng)用場(chǎng)景?
Django 提供了很多內(nèi)置的中間件,用于處理請(qǐng)求和響應(yīng)。以下是 5 個(gè)常用的中間件以及它們的應(yīng)用場(chǎng)景:
-
SessionMiddleware
:處理會(huì)話狀態(tài)的中間件。它通過(guò)在請(qǐng)求處理過(guò)程中添加一個(gè)會(huì)話對(duì)象來(lái)支持會(huì)話管理。應(yīng)用場(chǎng)景包括用戶認(rèn)證、用戶狀態(tài)跟蹤功能。 -
AuthenticationMiddleware
:處理用戶身份驗(yàn)證的中間件。它負(fù)責(zé)在每個(gè)請(qǐng)求處理過(guò)程中檢查用戶的認(rèn)證狀態(tài),并將用戶的認(rèn)證信息添加到請(qǐng)求對(duì)象中。應(yīng)用場(chǎng)景包括用戶登錄、權(quán)限控制和身份驗(yàn)證。 -
CsrfViewMiddleware
:處理跨站請(qǐng)求偽造(CSRF)保護(hù)的中間件。它會(huì)自動(dòng)為每個(gè) POST 請(qǐng)求生成 CSRF 令牌,并在提交表單時(shí)驗(yàn)證令牌的有效性。應(yīng)用場(chǎng)景包括保護(hù)表單提交免受 CSRF 攻擊。 -
GZipMiddleware
:處理壓縮響應(yīng)的中間件。它在發(fā)送響應(yīng)之前對(duì)內(nèi)容進(jìn)行 GZip 壓縮,從而減小數(shù)據(jù)傳輸?shù)拇笮?。?yīng)用場(chǎng)景包括提高網(wǎng)站性能和減少帶寬消耗。 -
LocaleMiddleware
:處理多語(yǔ)言支持的中間件。它通過(guò)根據(jù)請(qǐng)求提供的語(yǔ)言首選項(xiàng)來(lái)設(shè)置適當(dāng)?shù)恼Z(yǔ)言環(huán)境,并將其應(yīng)用于請(qǐng)求的響應(yīng)。應(yīng)用場(chǎng)景包括多語(yǔ)言網(wǎng)站和國(guó)際化應(yīng)用程序。
這些中間件提供了一系列常用的功能和處理程序,可以方便地集成到 Django 應(yīng)用程序中,簡(jiǎn)化了開(kāi)發(fā)人員的工作。根據(jù)具體的需求,可以根據(jù)需要啟用和配置這些中間件,以實(shí)現(xiàn)不同的功能和處理邏輯。
9、請(qǐng)簡(jiǎn)述 WSGl/uwsgi/uwSGI 三個(gè)概念的區(qū)別是什么? 為什么有了 uWSGI 還需要 nginx?
WSGI
WSGI(Web Server Gateway Interface):WSGI 是一種被廣泛接受和使用的 Python Web 應(yīng)用程序與服務(wù)器之間的標(biāo)準(zhǔn)接口。它定義了 Web 服務(wù)器與 Web 應(yīng)用程序之間的通信規(guī)則,使得服務(wù)器能夠理解和與應(yīng)用程序交互。WSGI 規(guī)范允許開(kāi)發(fā)人員使用一種統(tǒng)一的方式來(lái)編寫(xiě) Web 應(yīng)用程序,而不用擔(dān)心特定服務(wù)器的細(xì)節(jié)。
簡(jiǎn)言之,是一種描述web服務(wù)器(如nginx,uWSGI等服務(wù)器)如何與web應(yīng)用程序(如用Django、Flask框架寫(xiě)的程序)「通信協(xié)議」。
uwsgi協(xié)議
是一個(gè)uWSGI服務(wù)器自有的協(xié)議,是一種「線路協(xié)議」而不是通信協(xié)議。它用于定義傳輸信息的類型(type of information),每一個(gè)uwsgi packet前4byte為傳輸信息類型描述,用于與nginx等代理服務(wù)器通信,它與WSGI相比是兩樣?xùn)|西。
uwSGI
是實(shí)現(xiàn)了uwsgi和WSGI兩種協(xié)議的「Web服務(wù)器」
為什么有了 uWSGI 還需要 nginx?
這是因?yàn)?Nginx 和 uWSGI 的角色不同。Nginx 主要作為前端服務(wù)器、反向代理和負(fù)載均衡器,它可以處理靜態(tài)資源和大量并發(fā)連接,將請(qǐng)求轉(zhuǎn)發(fā)給后端的 uWSGI 進(jìn)程處理動(dòng)態(tài)請(qǐng)求。而 uWSGI 則專注于處理 Web 應(yīng)用程序的請(qǐng)求,它支持 WSGI 協(xié)議,負(fù)責(zé)解析并執(zhí)行應(yīng)用程序代碼。因此,通過(guò) Nginx 和 uWSGI 的結(jié)合,可以提高系統(tǒng)的性能、可靠性和安全性,并實(shí)現(xiàn)更好的負(fù)載均衡和更高的并發(fā)處理能力。
10、請(qǐng)列舉幾種 MySQL 存儲(chǔ)引擎,分別有什么優(yōu)缺點(diǎn)?
MySQL 提供了多種存儲(chǔ)引擎,每個(gè)存儲(chǔ)引擎都有其獨(dú)特的特性和適用場(chǎng)景。以下是一些常見(jiàn)的 MySQL 存儲(chǔ)引擎以及它們的優(yōu)缺點(diǎn):
-
InnoDB:
-
優(yōu)點(diǎn):支持事務(wù)處理和外鍵約束,提供高并發(fā)性能和數(shù)據(jù)完整性。具備行級(jí)鎖定和多版本并發(fā)控制(MVCC)支持,適用于高并發(fā)寫(xiě)入和大量的讀寫(xiě)混合場(chǎng)景。
-
缺點(diǎn):相對(duì)于其他存儲(chǔ)引擎,InnoDB 的存儲(chǔ)和讀取速度相對(duì)較慢。因?yàn)樗С质聞?wù)和ACID特性,需要更多的磁盤(pán)空間。
-
-
MyISAM:
-
優(yōu)點(diǎn):具備較高的讀取性能,適合于大量的只讀操作和全文搜索。存儲(chǔ)和索引數(shù)據(jù)非常緊湊,占用更少的磁盤(pán)空間。
-
缺點(diǎn):不支持事務(wù)和外鍵約束。不具備行級(jí)鎖定,只支持表級(jí)鎖定,因此在并發(fā)寫(xiě)入場(chǎng)景下性能較差。容易發(fā)生表?yè)p壞,不具備故障恢復(fù)能力。
-
-
Memory(內(nèi)存):
-
優(yōu)點(diǎn):數(shù)據(jù)完全存儲(chǔ)在內(nèi)存中,讀取和寫(xiě)入速度非???。適合于緩存表、臨時(shí)表和高速度數(shù)據(jù)捕獲等場(chǎng)景。
-
缺點(diǎn):只能存儲(chǔ)在內(nèi)存中,斷電或重啟會(huì)導(dǎo)致數(shù)據(jù)丟失。不支持事務(wù)處理,不適合長(zhǎng)期存儲(chǔ)。
-
-
Archive:
-
優(yōu)點(diǎn):適合于歸檔和歷史數(shù)據(jù)的存儲(chǔ),存儲(chǔ)和壓縮效率非常高,占用很少的磁盤(pán)空間。適合對(duì)數(shù)據(jù)進(jìn)行稀疏插入和不經(jīng)常更新的場(chǎng)景。
-
缺點(diǎn):不支持索引和事務(wù)處理。只能進(jìn)行追加操作,不適合常規(guī)的查詢和更新操作。
-
-
NDB Cluster:
-
優(yōu)點(diǎn):適用于高可用性和高容量的分布式系統(tǒng),支持?jǐn)?shù)據(jù)分片和自動(dòng)故障恢復(fù)。具備事務(wù)處理和ACID特性,適合于高并發(fā)讀寫(xiě)和實(shí)時(shí)應(yīng)用場(chǎng)景。
-
缺點(diǎn):相對(duì)復(fù)雜,需要專門(mén)配置和管理,對(duì)硬件要求較高。不適合單機(jī)和小規(guī)模的應(yīng)用。
-
這些存儲(chǔ)引擎的選擇應(yīng)該根據(jù)實(shí)際需求和應(yīng)用場(chǎng)景來(lái)決定,權(quán)衡每個(gè)存儲(chǔ)引擎的優(yōu)缺點(diǎn),并根據(jù)具體場(chǎng)景的讀寫(xiě)要求、數(shù)據(jù)一致性和可用性需求來(lái)確定最適合的存儲(chǔ)引擎。
11、請(qǐng)畫(huà)出 Docker C/S 架構(gòu)圖
在 Docker C/S 架構(gòu)中,有以下幾個(gè)關(guān)鍵組件:
-
Docker主機(jī)(Docker Host):它是運(yùn)行 Docker 引擎的物理或虛擬機(jī)。Docker 主機(jī)負(fù)責(zé)管理容器的創(chuàng)建、運(yùn)行和銷毀,以及對(duì)容器進(jìn)行資源管理和隔離。
-
Docker引擎(Docker Engine):它是 Docker 的核心組件,負(fù)責(zé)接收和處理來(lái)自 Docker 客戶端的命令,執(zhí)行容器的創(chuàng)建、運(yùn)行、停止等操作。Docker 引擎由 Docker 守護(hù)進(jìn)程(Docker Daemon)和 Docker REST API 組成。
-
Docker客戶端(Docker Client):它是與 Docker 引擎進(jìn)行通信的用戶界面,可以使用命令行工具(如docker命令)或圖形界面工具來(lái)與 Docker 引擎進(jìn)行交互,通過(guò)向 Docker 引擎發(fā)送命令來(lái)控制容器的創(chuàng)建、運(yùn)行和管理。
-
Docker鏡像(Docker Image):它是容器的基礎(chǔ),用于創(chuàng)建容器的模板。Docker 鏡像包含了一個(gè)完整的文件系統(tǒng),其中包含了運(yùn)行所需的所有文件和配置??梢酝ㄟ^(guò)從 Docker Hub 或私有鏡像倉(cāng)庫(kù)下載現(xiàn)有的鏡像,或者通過(guò) Dockerfile 來(lái)構(gòu)建自己的鏡像。
-
Docker倉(cāng)庫(kù)(Docker Registry):它是用于存儲(chǔ)和分享 Docker 鏡像的中央倉(cāng)庫(kù)。Docker Hub 是默認(rèn)的公共倉(cāng)庫(kù),提供了大量的官方和社區(qū)維護(hù)的鏡像供用戶使用。用戶也可以部署私有的 Docker 倉(cāng)庫(kù)來(lái)保存和管理自己的鏡像。
12、請(qǐng)使用 docker 命令操作
a) 創(chuàng)建一個(gè) volume 名稱為 kuma
docker volume create kuma
b) 啟動(dòng)一個(gè)容器,名稱為 yapi,后臺(tái)執(zhí)行,把 host 的 5000 端口映射到容器內(nèi) 3000端口,并使用上面創(chuàng)建的 volume,掛載到/data/db 目錄
docker run -d --name yapi -p 5000:3000 -v kuma:/data/db <yapi_image_name>
需要將?<yapi_image_name>
?替換為實(shí)際的 yapi 鏡像名稱。
這樣就可以使用上述步驟創(chuàng)建的 volume kuma 并掛載到容器內(nèi)的 /data/db 目錄,同時(shí)進(jìn)行端口映射,將 host 的 5000 端口映射到容器內(nèi)的 3000 端口。容器名稱為 yapi,并以后臺(tái)模式運(yùn)行。
總結(jié):
感謝每一個(gè)認(rèn)真閱讀我文章的人!!!
作為一位過(guò)來(lái)人也是希望大家少走一些彎路,如果你不想再體驗(yàn)一次學(xué)習(xí)時(shí)找不到資料,沒(méi)人解答問(wèn)題,堅(jiān)持幾天便放棄的感受的話,在這里我給大家分享一些自動(dòng)化測(cè)試的學(xué)習(xí)資源,希望能給你前進(jìn)的路上帶來(lái)幫助。
軟件測(cè)試面試文檔
我們學(xué)習(xí)必然是為了找到高薪的工作,下面這些面試題是來(lái)自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
?
? ? ? ? ? 視頻文檔獲取方式:
這份文檔和視頻資料,對(duì)于想從事【軟件測(cè)試】的朋友來(lái)說(shuō)應(yīng)該是最全面最完整的備戰(zhàn)倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)也陪伴我走過(guò)了最艱難的路程,希望也能幫助到你!以上均可以分享,點(diǎn)下方小卡片即可自行領(lǐng)取。