8月11日上課內容 nginx的多實例和動靜分離

多實例部署?

在一臺服務器上有多個tomcat的服務。

配置多實例之前,看單個實例是否訪問正常。

1.安裝好 jdk


2.安裝 tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

3.配置 tomcat 環境變量


vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

export CATALINA_HOME1=/usr/local/tomcat/tomcat1

tomcat主目錄的路徑,包含所有tomcat的文件

export CATALINA BASE1=/usr/local/tomcat/tomcat1
指定tomcat實例目錄
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

tomcat主目錄的路徑,包含所有tomcat的文件

這三條在環境變量中聲明,配置成全局變量,方便后面傳參/賦值


source /etc/profile.d/tomcat.sh

進入控制tomcat運行的文件,把服務shutdown一下

基于Tomcat主目錄,強行復制一個相同的

vim /etc/profile.d/tomcat.sh


4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 實例配置不能有重復的端口號


vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">?? ??? ?#22行,修改Server prot,默認為8005 -> 修改為8006
<Connector port="8081" protocol="HTTP/1.1"?? ??? ?#69行,修改Connector port,HTTP/1.1 ?默認為8080 -> 修改為8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />?? ?
#116行,修改Connector port AJP/1.3,默認為8009 -> 修改為8010

第一個連接器默認監聽8080端口負責建立HTTP連接。在通過瀏覽器訪問Tomcat服務器的Web應用時,使用的就是這個連接器。
第二個連接器默認監聽8009端口,負責和其他的HTTP服務器建立連接
在把Tomcat與其他HTTP服務器集成時,需要用到這個連接器。

第三個連接器
port="8010":指定AJP連接器監聽的端口號。在這個示例中,AJP連接器監聽在8010端口上。

protocol="AJP/1.3":指定連接器所使用的協議。這里設置為AJP/1.3,表示使用AJP協議的版本1.3。

redirectPort="8443":指定重定向端口。當AJP連接器接收到HTTP請求時,如果請求是通過HTTPS(加密)訪問的,
則會將請求重定向到8443端口。

AJP連接器用于將靜態資源和動態請求從前端Web服務器(如Apache HTTP Server)轉發到Tomcat服務器。
這樣可以將Tomcat服務器隱藏在防火墻之后,提高安全性,同時提供更高的性能,特別是在處理動態請求時。
常見的AJP連接器配置是為了將Tomcat與Apache HTTP Server或Nginx等前端服務器集成,以實現負載均衡、反向代理等功能

引入一個很好用的功能,是第三方的,需要安裝

telnet 測試服務器ip地址是否能正常通信和測試端口通信是否正常(工作當中用得到,面試會問)

通過什么方式檢測出來80端口不通?telnet一測就知道

例:telnet 192.168.233.61 80

?

為什么能ping通卻不能訪問?因為服務器是基于端口通信的,所以也要檢查端口

端口可能不存在 端口沒有打開

telnet 192.168.233.61 80試試

出現Escape character is 就表示通信正常,已經建立了通信

去tomcat2,改tomcat2的端口,因為tomcat1已經占用8009,8080等端口。復制過來的tomcat2端口一樣,所以得改

改之前先把配置文件復制一下。注:改主文件,備份文件只是預防你改錯了好還原回去

把shutdown端口改為8006

?http通信端口8080也改為8081

和web服務器通信的端口8009改為8010

注:端口可以改為任意的數字,只要端口不被占用都可以,但是端口有范圍65535以內

5.修改各 tomcat 實例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 環境變量

vim /usr/local/tomcat/tomcat1/bin/startup.sh?
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下內容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh?
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
步驟詳解:

修改啟動文件

先改tomcat1的

vim startup.sh

在尾行添加上一步設置的全局變量

export CATALINA_BASE=$CATALINA_BASE1

export CATALINA_HOME=$CATALINA_HOME1

export TOMCAT_HOME=_TOMCAT_HOME1

vim shutdown.sh

配置這兩個的目的就是為了做系統服務控制,讓他能夠識別到我啟動是誰,關的是誰

配置完tomcat1的接著配置一下tomcat2的

同樣的在最后一行,把tomcat2的添加一下

vim startup.sh 同樣配置一下startup

這樣1和2的多實例就都配置好了

啟動一下服務

6.瀏覽器訪問測試


http://192.168.233.71:8080
http://192.168.233.71:8081

看一下頁面是否能正常訪問。都是基于71這臺服務器,分別看一下8080和8081端口

nginx+tomcat實現動靜分離

靜:靜態頁面
動: 動態頁面
分別可以對靜態頁面和動態頁面發起不同的請求,會有不同的響應結果。


nginx反向代理------負載均衡------tomcat是后端服務器------web靜態nginx------靜態請求----->nginx

------動態頁面------tomcat

tomcat并發量能力弱,只有nginx的六分之一,所以要有負載均衡進行合理的調用分配。

示例圖:

開始正式操作

準備好了4臺服務器

test1 192.168.233.10 作為客戶端

nginx1 61?作為web服務器

tomcat 71 多實例

tomcat 72 單獨后端web服務器,用來處理動態請求

先配置nginx1
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
?? ?#gzip on;
?? ?
?? ?#配置負載均衡的服務器列表,weight參數表示權重,權重越高,被分配到的概率越大
?? ?upstream tomcat_server {
?? ??? ?server 192.168.233.71:8080 weight=1;
?? ??? ?server 192.168.233.71:8081 weight=1;
?? ?}
?? ?
?? ?server {
?? ??? ?listen 80;
?? ??? ?server_name localhost;
?? ?
?? ??? ?charset utf-8;
?? ?
?? ??? ?#access_log logs/host.access.log main;
?? ??? ?
?? ??? ?#配置Nginx處理動態頁面請求,將 .jsp文件請求轉發到Tomcat 服務器處理
?? ??? ?location ~ .*\.jsp$ {
?? ??? ??? ?proxy_pass http://tomcat_server;
? ? ? ? ? ?#設置后端的Web服務器可以獲取遠程客戶端的真實IP
? ? ? ? ? ?#設定后端的Web服務器接收到的請求訪問的主機名(域名或IP、端口),默認HOST的值為proxy_pass指令設置的主機名。如果反向代理服務器不重寫該請求頭的話,那么后端真實服務器在處理時會認為所有的請求都來自反向代理服務器,如果后端有防攻擊策略的話,機器就被封了。
?? ??? ??? ?proxy_set_header HOST $host;
? ? ? ? ? ?#把$remote_addr賦值給X-Real-IP,來獲取源IP
?? ??? ??? ?proxy_set_header X-Real-IP $remote_addr;
? ? ? ? ? ?#在nginx 作為代理服務器時,設置的IP列表,會把經過的機器ip,代理機器ip都記錄下來
?? ??? ??? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
?? ??? ?}
?? ??? ?
?? ??? ? ?#配置Nginx處理靜態圖片請求
?? ??? ?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
?? ??? ??? ?root /usr/local/nginx/html;
?? ??? ??? ?expires 10d;
?? ??? ?}
?? ??? ?
?? ??? ?location / {
?? ??? ??? ?root html;
?? ??? ??? ?index index.html index.htm;
?? ??? ?}
......
?? ?}
......
}

location ~ .*\.jsp$ {
?? ??? ??? ?proxy_pass http://tomcat_server;
?? ??? ??? ?proxy_set_header HOST $host;
?? ??? ??? ?proxy_set_header X-Real-IP $remote_addr;
?? ??? ??? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
?? ??? ?}

備份配置文件

編輯配置文件 vim nginx.conf

在http模塊當中配置

寫上后端要調用的服務器,配置權重,多實例權重分配小一點,單實例權重稍高一點,讓其訪問量偏大一點

server里面配置處理動態請求的location

檢查語法,沒有問題,nginx配置完成

配置tomcat1 實例1

動態頁面

建立一個動態頁面訪問內容,訪問后端服務器,就會訪問到這個頁面

配置多實例中的tomcat2

?

再回到tomcat1

把默認配置的host刪除掉

再去tomcat2,一樣把server.vml配置一下

多實例tomcat配置完成,去驗證一下單實例服務是否正常

正常,開始配置

單實例,只需部署一下訪問頁面即可

vim index.jsp配置

vim server.xml 一樣把原來的host刪除,再添加一個Host

注意路徑指向要一直,否則獲取不到index文件

從tomcat1開始,重啟服務

tomcat2

看看是否能夠訪問到服務

因為路徑錯誤,所以訪問不到

/usr/local/tomcat/tomcat2不存在,改為/usr/local/tomcat2

改tomcat1的server文件?

?重啟

?這樣就可以了

把靜態頁面請求也配置一下

?

把圖片拖進來

請求一下靜態頁面

請求一下動態頁面:

這樣就完成了動靜分離

綜合:

四層轉發流量+七層后端代理+動靜分離

架構如圖:

四層轉發流量+七層后端代理
環境:
192.168.233.61 nginx四層代理
192.168.233.62 nginx七層代理
192.168.233.63 nginx七層代理
192.168.233.71 tomcat1多實例
192.168.233.72 tomcat2單實例

systemctl stop firewalld
setenforce 0

192.1682.233.61 nginx四層代理:
vim /usr/local/nginx/conf/nginx.conf

pid /usr/local/nginx/run/nginx.pid;


events {
? ? worker_connections ?1024;
}

stream {
? ?upstream test {
? ? ? ?server 192.168.233.62:80;
? ? ? ?server 192.168.233.63:80;


? }
? server {

? ? ? ?listen 8080;
? ? ? ?proxy_pass test;
?}

}

nginx七層代理62和63:
? ? upstream ky30 {
? ? ? ?server 192.168.233.71:8080 weight=1;
? ? ? ?server 192.168.233.71:8081 weight=1;
? ? ? ?server 192.168.233.72:8080 weight=1;
? ? }
? ? server {
? ? ? ? listen ? ? ? 80;
? ? ? ? server_name ?localhost;

? ? ? ? #charset koi8-r;

? ? ? ? #access_log ?logs/host.access.log ?main;
? ? ? ? location ~ .*\.jsp$ {
? ? ? ? ? ?proxy_pass http://ky30; #配置Nginx處理動態頁面請求,將 .jsp文件請求轉發到Tomcat 服務器處理
?? ??? ? ??
? ? ? ? ? ?proxy_set_header HOST $host; #設定后端的Web服務器接收到的請求訪問的主機名(域名或IP、端口),
?? ??? ? ? 默認HOST的值為proxy_pass指令設置的主機名。
?? ??? ? ??
? ? ? ? ? ?proxy_set_header X-Real-IP $remote_addr; ?#把$remote_addr賦值給X-Real-IP,來獲取源IP
?? ??? ? ??
? ? ? ? ? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;?
?? ??? ? ? #在nginx 作為代理服務器時,設置的IP列表,會把經過的機器ip,代理機器ip都記錄下來
?? ??? ? ??
? ? ? ? }
?? ??? ?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
?? ??? ??? ?root /usr/local/nginx/html;
?? ??? ??? ?expires 10d;
?? ??? ?}
配置相同

192.168.233.71 tomcat1多實例:

cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

#配置多實例tomcat
vim /etc/profile.d/tomcat.sh
#tomcat1的全局變量設置
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
?
#tomcat2的全局變量設置
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
?
#加載設置好的全局變量
source /etc/profile.d/tomcat.sh

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 實例配置不能有重復的端口號
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">?? ??? ?#22行,修改Server prot,默認為8005 -> 修改為8006
<Connector port="8081" protocol="HTTP/1.1"?? ??? ?#69行,修改Connector port,HTTP/1.1 ?默認為8080 -> 修改為8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />?? ?#116行,修改Connector port AJP/1.3,
默認為8009 -> 修改為8010

修改各 tomcat 實例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 環境變量
vim /usr/local/tomcat/tomcat1/bin/startup.sh?
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下內容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh?
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

配置tomcat01的測試頁面

?
mkdir /usr/local/tomcat/tomcat1/webapps/test?
?
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>tomcat01</title> ??
</head>
<body>
<% out.println("tomcat01 running");%>
</body>
</html>

更進一步完整架構后面再說

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

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

相關文章

Linux系統管理:虛擬機ESXi安裝

目錄 一、理論 1.VMware Workstation 2.VMware vSphere Client 3.ESXi 二、實驗 1.ESXi 7安裝 一、理論 1.VMware Workstation 它是一款專業的虛擬機軟件&#xff0c;可以在一臺物理機上運行多個操作系統&#xff0c;支持Windows、Linux等操作系統&#xff0c;可以模擬…

使用selenium如何實現自動登錄

回顧使用requests如何實現自動登錄一文中&#xff0c;提到好多網站在我們登錄過后&#xff0c;在之后的某段時間內訪問該網頁時&#xff0c;不會給出請登錄的提示&#xff0c;時間到期后就會提示請登錄&#xff01;這樣在使用爬蟲訪問網頁時還要登錄&#xff0c;打亂我們的節奏…

item_get_sales-獲取商品銷量詳情

一、接口參數說明&#xff1a; item_get_sales-獲取商品銷量詳情&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名稱類型必須描述keyString是調用key&#xff08…

ACM模式刷Leetcode題目

139題單詞拆分 鏈接: link #include<iostream> #include<sstream> #include<string> #include<vector> #include<algorithm> #include<unordered_set> using namespace std;int main() {// 實現輸入第一行為s字符串。// 第二行為wordDic…

【代碼隨想錄day22】爬樓梯

題目 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f; 示例 1&#xff1a; 輸入&#xff1a;n 2 輸出&#xff1a;2 解釋&#xff1a;有兩種方法可以爬到樓頂。 1. 1 階 1 階 2. 2 階 示例 2…

Spring的三種異常處理方式

1.SpringMVC 異常的處理流程 異常分為編譯時異常和運行時異常&#xff0c;編譯時異常我們 try-cache 進行捕獲&#xff0c;捕獲后自行處理&#xff0c;而運行時異常是不 可預期的&#xff0c;就需要規范編碼來避免&#xff0c;在SpringMVC 中&#xff0c;不管是編譯異常還是運行…

java:JDBC

文章目錄 什么是JDBCJDBC使用步驟詳解各個對象DriverManagerConnectionStatementResultSetPreparedStatement JDBC控制事務操作步驟示例 什么是JDBC 我們知道&#xff0c;數據庫有很多種&#xff0c;比如 mysql&#xff0c;Oracle&#xff0c;DB2等等&#xff0c;如果每一種數…

C# WPF 中 外部圖標引入iconfont,無法正常顯示問題 【小白記錄】

wpf iconfont 外部圖標引入&#xff0c;無法正常顯示問題。 1. 檢查資源路徑和引入格式是否正確2. 檢查資源是否包含在程序集中 1. 檢查資源路徑和引入格式是否正確 正確的格式&#xff0c;注意字體文件 “xxxx.ttf” 應寫為 “#xxxx” <TextBlock Text"&#xe7ae;…

不重啟Docker能添加自簽SSL證書鏡像倉庫嗎?

應用背景 在企業應用Docker規劃初期配置非安全鏡像倉庫時&#xff0c;有時會遺漏一些倉庫沒配置&#xff0c;但此時應用程序已經在Docker平臺上部署起來了&#xff0c;體量越大就越不會讓人去直接重啟Docker。 那么&#xff0c;不重啟Docker能添加自簽SSL證書鏡像倉庫嗎&…

經典人體模型SMPL介紹(一)

SMPL是馬普所提出的經典人體模型&#xff0c;目前已成為姿態估計、人體重建等領域必不可少的基礎先驗。SMPL基于蒙皮和BlendShape實現&#xff0c;從數千個三維人體掃描結果得來&#xff0c;后通過PCA統計學習得來。 論文&#xff1a;SMPL: A Skinned Multi-Person Linear Mode…

Python讀取svn版本

本文將詳細介紹如何使用Python讀取svn版本。 一、安裝svn庫 首先&#xff0c;我們需要使用Python來連接svn服務器&#xff0c;并獲取版本號。這里我們使用pysvn庫來完成這個工作。 pip install pysvn需要注意的是&#xff0c;如果你需要安裝特定版本的pysvn&#xff0c;你可…

2023連鎖收銀系統該如何選?值得推薦的5款連鎖收銀系統

現在不管是連鎖店還是零售店&#xff0c;只要是開店做生意賺錢的&#xff0c;都少不了要和錢打交道&#xff0c;尤其是對連鎖店來說&#xff0c;收銀工作更是重中之重。 連鎖店涉及的門店較多&#xff0c;必須要有一套足夠優秀的連鎖收銀系統&#xff0c;才能做好每個門店的收銀…

【ARM 嵌入式 編譯系列 5 -- GCC 內建函數 __builtin 詳細介紹】

文章目錄 什么是GCC內建函數?GCC 常見內建函數GCC內建函數使用示例上篇文章:ARM 嵌入式 編譯系列 4.2 – GCC 鏈接規范 extern “C“ 介紹 下篇文章:ARM 嵌入式 編譯系列 6 – GCC objcopy, objdump, readelf, nm 介紹 什么是GCC內建函數? GCC提供了一些專門的功能,用于…

使用 `tailwindcss-patch@2` 來提取你的類名吧

使用 tailwindcss-patch2 來提取你的類名吧 使用 tailwindcss-patch2 來提取你的類名吧 安裝使用方式 命令行 Cli 開始提取吧 Nodejs API 的方式來使用 配置 初始化 What’s next? tailwindcss-patch 是一個 tailwindcss 生態的擴展項目。也是 tailwindcss-mangle 項目重要…

redis的Key的過期策略是如何實現的?

Key的過期策略 一個redis中可能同時存在很多很多key&#xff0c;這些key可能有很大一部分都有過期時間&#xff0c;此時&#xff0c;redis服務器咋知道哪些key已經過期要被刪除&#xff0c;哪些key還沒有過期&#xff1f; 如果直接遍歷所有的key&#xff0c;顯然是行不通的&am…

Abandon_Ubuntu Declaration

鑒于以下幾個原因&#xff0c;持續到明年考研結束&#xff0c;我將不再搗鼓ubuntu和任何linux系統&#xff0c; 原因如下&#xff1a; ubuntu23.04不支持wps編輯pdf這個核心功能&#xff0c;且開機向canonial公司發送遠程遙測&#xff0c;暫時不會用iptables禁用&#xff0c;故…

第幾天(day)

廬陽區2021年信息學競賽試題 題目描述 Description 給定一個日期&#xff0c;求這一天是當年的第幾天。每年的元旦&#xff0c;1月1日&#xff0c;都是每年的第一天&#xff0c;但是每年的最后一天&#xff0c;12月31日&#xff0c;有可能是第365天&#xff0c;也有可能是第3…

2023年上半年網絡工程師上午真題及答案解析

1.固態硬盤的存儲介質是( )。 A.光盤 B.閃存 C.軟盤 D.磁盤 2.虛擬存儲技術把( )有機地結合起來使用&#xff0c;從而得到一個更大容量的“內存”。 A.內存與外存 B.Cache與內存 C.寄存器與Cache D.Cache與外存 3.下列接口協議中&…

關于安卓高版本gradle(7.0+)引入aar包報錯問題

背景 項目開發過程中&#xff0c;接入三方sdk&#xff0c;引入了本地aar包依賴&#xff0c;as rebuild項目的過程中&#xff0c;報錯&#xff0c;提示依賴找不到問題。 報錯&#xff1a;“bundleDebugAar FAILED”等 開發環境 win10 jdk11 gradle 7.5 原因 由于gradle的版…

找不到msvcp140.dll無法繼續執行代碼怎么解決?分享三個解決方法

當你在運行某個程序或游戲時遇到msvcp140.dll缺失的錯誤提示&#xff0c;你可能會感到困惑和煩惱。在修復msvcp140.dll的過程中&#xff0c;我遇到了一些挑戰&#xff0c;但最終成功解決了這個問題。以下是我總結的三個解決方法&#xff0c;希望能幫助你解決這個問題。 找不到m…