【SpringBoot】Dubbo、Zookeeper

文章目錄

  • 前提知識概要
    • 分布式系統
      • 單體架構
      • 垂直應用架構
      • 分布式架構
      • 流式架構
    • RPC
  • Dubbo
    • 概念
    • Dubbo環境搭建
      • Zookeeper
      • 測試 Zookeeper
      • Window環境下使用Dubbo-admin
      • 版本匹配不對
    • 服務注冊實戰
      • 內容總結
      • 導入相關依賴
      • 選擇 Zookeeper 版本
      • 配置并啟用 Zookeeper
      • 創建服務接口和實現(DubboService)類,這里是配置`Provider`
      • 啟動Dubbo的掃描(EnableDubbo)
      • 重復上述操作,將需要注冊Dubbo的配置下
      • 編寫Service,這次是消費者,調用提供者所提供的內容

前提知識概要

分布式系統

  1. “分布式系統是若干獨立計算機的集合,這些計算機對于用戶來說就像單個相關系統”;
  2. 其目的是利用更多的機器,處理更多的數據
  3. 用小而多,代替大且貴
  4. 只有當單個節點的處理能力無法滿足日益增長的計算、存儲任務的時候,且硬件的提升(加內存、加磁盤、使用更好的CPU)高昂到得不償失的時候,應用程序也不能進一步優化的時候,我們才需要考慮分布式系統;
  5. 分布式系統要解決的問題本身就是和單機系統一樣的,而由于分布式系統多節點、通過網絡通信的拓撲結構,會引入很多單機系統沒有的問題,為了解決這些問題又會引入更多的機制、協議,帶來更多的問題;
  6. 但是 缺點也在于這里 過分的依賴于 網絡通信協議;

單體架構

網絡吞吐量小時,使用一個應用(application),將所有的功能都部署在一起,以減少部署的節點和成本。為此簡化CRUD的數據訪問框架ORM就是關鍵。

ORM:Mybatis、Hibernate

使用場景:小型網站,將所有功能都部署到一個地方,簡單,易用

缺點:

  • 性能擴展比較難
  • 協同開發問題
  • 不利于升級維護

垂直應用架構

數據吞吐量打的時候,單一的應用會增加機器所在壓力,將應用的幾塊拆成互不相干的幾個應用以提升效率。這個時候加速前端頁面開發的WEB框架又是關鍵:

WEB框架:MVC,MVVM

通過切分業務 來實現各個模塊的獨立部署,降低了維護和部署的難度,團隊各司其職更易管理,性能拓展也更加的方便,更有針對性。

缺點:

  • 公用的模塊無法重復利用;
  • 多重復寫功能導致資源浪費;

分布式架構

當垂直的應用越來越多,應用之間的交互不可避免,就去優化垂直應用架構;

將核心的業務提取,成為獨立的服務,逐步形成穩定的服務中心,是前段更好的應用市場。

提高業務服用整合的**分布式框架 **又是關鍵。

分布式框架:RPC

流式架構

當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,這個時候有需要一個調度中心,能夠將有限的資源得到最大的利用, 這時候,用于提高機器利用率的資源調度又成為了重點

提高機器利用率的資源調度和治理中心(SOA)[Service Oriented Architecture]是關鍵

RPC

RPC【Remote Procedure Call】是指遠程過程調用,是一只進程思想,而不是一種規范,類似于我們的。

允許程序調用另一個地址空間。(通常是共享網絡的另一臺機器上)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。

兩臺服務器A、B,主要是部署在A服務器上,想要調用B服務器,但是不在一個機器中,不能直接去調用,需要利用網絡,通過網絡傳輸將自己想要的數據及想要在B服務站執行的內容 傳輸過去。

RPC 所實現的內容就是讓A服務器調用B服務器 的過程被忽略在調用函數候像調用A自己本身的函數一樣;

RPC的兩個核心就是:通訊(HTTP、RPC)、序列化(序列化的方式就是方便數據傳輸);

如何給老婆解釋什么是RPC

假設你有一個計算器接口,Calculator,以及它的實現類CalculatorImpl,那么在系統還是單體應用時,你要調用Calculator的add方法來執行一個加運算,直接new一個CalculatorImpl,然后調用add方法就行了,這其實就是非常普通的本地函數調用,因為在同一個地址空間,或者說在同一塊內存,所以通過方法棧和參數棧就可以實現。

現在,基于高性能和高可靠等因素的考慮,你決定將系統改造為分布式應用,將很多可以共享的功能都單獨拎出來,比如上面說到的計算器,你單獨把它放到一個服務里頭,讓別的服務去調用它。

**問題:**服務A里頭并沒有CalculatorImpl這個類,那它要怎樣調用服務B的CalculatorImpl的add方法呢?

  • 可以模仿B/S架構的調用方式呀,在B服務暴露一個Restful接口,然后A服務通過調用這個Restful接口來間接調用CalculatorImpl的add方法。

很好,這已經很接近RPC了,不過如果是這樣,那每次調用時,是不是都需要寫一串發起http請求的代碼呢?比如httpClient.sendRequest…之類的,能不能像本地調用一樣,去發起遠程調用,讓使用者感知不到遠程調用的過程呢,像這樣:

  • 代理模式呀!而且最好是結合Spring IoC一起使用,通過Spring注入calculator對象,注入時,如果掃描到對象加了@Reference注解,那么就給它生成一個代理對象,將這個代理對象放進容器中。而這個代理對象的內部,就是通過httpClient來實現RPC遠程過程調用的。

就是很多RPC框架要解決的問題和解決的思路,比如阿里的Dubbo。

ps:Dubbo以前是阿里的,后來才移交給了Apache

RPC要解決的兩個問題:

  • 解決分布式系統中,服務之間的調用問題。
  • 遠程調用時,要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯。

RPC很少用到http(超文本傳輸協議)協議來進行數據傳輸,畢竟我只是想傳輸一下數據而已,何必動用到一個文本傳輸的應用層協議呢,我為什么不直接使用二進制傳輸?比如直接用Java的Socket協議進行傳輸。

以左邊的Client端為例,Application就是rpc的調用方,Client Stub就是我們上面說到的代理對象,也就是那個看起來像是Calculator的實現類,其實內部是通過rpc方式來進行遠程調用的代理對象,至于Client Run-time Library,則是實現遠程調用的工具包,比如jdk的Socket,最后通過底層網絡實現實現數據的傳輸。

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

作者:柳樹之

鏈接:https://www.jianshu.com/p/2accc2840a1b

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

Client將數據進行序列化 傳輸給Server,Server對數據進行反序列化,讀取數據內容,只進行服務調用,程序處理,將處理的內容結果通過在進行序列化 傳輸到Client,最終實現全局的調用;

Dubbo

類比于SpringCloud,都是使用的分布式架構思想,但是Dubbo是一個框架,而SpringCloud是一套整合于Spring的生態;

概念

Apache Dubbo |?d?b??| 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:

  • 面向接口的遠程方法調用;
  • 智能容錯和負載均衡;
  • 服務自動注冊和發現;

官網:cn.dubbo.apache.org

QuickStart:https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/starter/

  1. 基本概念

**服務提供者(**Provider):暴露服務的服務提供方,服務提供者在啟動時,向注冊中心注冊自己提供的服務。

服務消費者(Consumer):調用遠程服務的服務消費方,服務消費者在啟動時,向注冊中心訂閱自己所需的服務,服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

注冊中心(Registry):注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者

監控中心(Monitor):服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

調用關系:

  1. 服務Provider容器 Container負責啟動start,加載,運行服務提供者。
  2. 服務提供者Provider在啟動時,向注冊中心Registry注冊register自己提供的服務。
  3. 服務消費者Consumer在啟動時,向注冊中心Registry訂閱subscribe自己所需的服務。
  4. 注冊中心Registry返回服務提供者Provider地址列表通知notify給消費者,如果有變更,注冊中心將基于長連接推送invoke變更數據給消費者。
  5. 服務消費者Consumer,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

Dubbo環境搭建

在最新的3.3.0版本官網上,可以直接創建你 基于Spring Boot 的微服務應用 ,需要注意

因為是看的狂神的20年的視頻,所以先按照他當時的做法思路使用zookeeper,這個要參照官網

Zookeeper

學習文檔:https://cn.dubbo.apache.org/zh-cn/overview/reference/integrations/zookeeper/

Zookeeper: https://zookeeper.apache.org/releases.html

  1. 下載Zookeeper

下載3.8.4 是穩定版;

官網太慢,去鏡像站下載:https://mirrors.aliyun.com/apache/zookeeper

  1. 解壓 apache-zookeeper-3.8.4widows運行"D:\work\apache-zookeeper-3.8.4\bin\zkServer.cmd",添加pause ,報錯查看錯誤信息
  2. 解決 java.lang.ClassNotFoundException問題

發現調用jar包找不到,我下載的是源碼版,重新下載個二進制版,把libcopy進去,網絡不好的情況下不要自己編譯。

  1. 解決 Error processing D:\work\apache-zookeeper-3.8.4\bin\..\conf\zoo.cfg的問題

目錄下沒有zoo.cfg文件,copy sample生成一個,根據上述內容配置,然后啟動

  1. 啟動成功

測試 Zookeeper

  1. run zkCli.cmd,顯示連接成功;
  2. create –e /aaa 123:創建一個aaa節點,值為123

在 Zookeeper 3.8 版本之后,create -e(表示創建一個帶有 ephemeral 選項的節點)已被廢棄。現在,如果你想創建一個臨時節點(ephemeral node),你應該使用 create 命令時直接指定 -e 參數后面跟路徑和數據。

  1. get /aaa,顯示沒有創建?檢查問題,重新創建使用 create /aaa 123就好了;

Window環境下使用Dubbo-admin

在官網可以看到這段描述,Dubbo-admin可以對整個集群進行查詢調用,

官網:

  • https://cn.dubbo.apache.org/zh-cn/overview/reference/proposals/admin/
  • https://cn.dubbo.apache.org/zh-cn/overview/notices/admin/

文檔編輯完 沒檢查就提交了 哈哈哈

  1. 下載Dubbo-admin
  • https://cn.dubbo.apache.org/zh-cn/overview/reference/setup/install/
  • https://cn.dubbo.apache.org/zh-cn/download/
  1. 下載完解壓,使用目前最新的 最穩定版本,解壓 ;
  2. 檢查 dubbo-admin-server\src\main\resources\application.properties的端口號配置;
  3. 打包 cd 到根目錄mvn clean package -Dmaven.test.skip=true,等待打包完成;
  4. 執行打包好的jar包java -jar dubbo-admin-0.4.0.jar
  5. Session 0x0 for server 127.0.0.1/<unresolved>:2181, unexpected error, closing socket connection and attempting reconnect提示報錯,配置host文件 把localhost的地址映射加進去;
  6. 一直啟動失敗??問題好奇怪
  7. 訪問http://localhost:7001/?,默認賬號名root 密碼 root

版本匹配不對

對應的版本不對?

  • Dubbo Admin 0.4.0發布于2020年,其設計主要針對JDK8環境
  • Zookeeper 3.8.4對JDK17的支持尚不完善,已知存在NIO通道問題

更換完版本后,啟動依舊報錯,系統提示 java.lang.IllegalStateException

java.lang.IllegalStateException: zookeeper not connected, the address is: zookeeper://127.0.0.1:2181/org.apache.dubbo.config.ConfigCenterConfig?check=true&config-file=dubbo.properties&group=dubbo&highest-priority=false&namespace=dubbo&timeout=30000 at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init> (CuratorZookeeperClient.java:118)

Jdk17連接zookeeper報錯:127.0.0.1/<unresolved>:2181_java.lang.illegalargumentexception: unable to cano-CSDN博客

使用 Dubbo Admin 0.6.0看看,訪問 http://localhost:38080

好了,終于進去了,使用Dubbo Admin 0.6.0也是報錯,之后再去檢查pom中的依賴,發現org.apache.zookeeper的依賴默認版本是zookeeper-3.4.14,于是將他升級為最新版,啟動成功。其他問題還在等待校驗。

服務注冊實戰

官方文檔: https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/zookeeper/

內容總結

  1. zookeeper :一個jar包 (必須存在)
  2. dubbo-admin:是一個監控管理后臺 (可有可無)
  3. Dubbo:jar包 (需要用)
  4. 最新的Dubbo 有好多實現方案,根據具體情況使用,阿里云本身有nacos

導入相關依賴

  1. SpringBoot
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.3.0</version>
</dependency>
<!-- 僅當 Zookeeper Server 版本是 3.4.x 及以下時,使用此依賴 -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-zookeeper-spring-boot-starter</artifactId><version>3.3.0</version>
</dependency>
<!-- 僅當 Zookeeper Server 版本是 3.5.x 及以上時,使用此依賴-->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-zookeeper-curator5-spring-boot-starter</artifactId><version>3.3.0</version>
</dependency>

檢查自己 的Zookeeper的版本是 3.8.4 所以使用dubbo-zookeeper-curator5-spring-boot-starter;

找不著依賴就mvn clean install

  1. 不使用SpringBoot
<dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.3.0</version></dependency><!-- This dependency helps to introduce Curator and Zookeeper dependencies that are necessary for Dubbo to work with zookeeper as transitive dependencies. --><!-- 僅當 Zookeeper Server 版本是 3.4.x 及以下時,使用此依賴 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>3.3.0</version><type>pom</type></dependency><!-- 僅當 Zookeeper Server 版本是 3.5.x 及以上時,使用此依賴	--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>3.3.0</version><type>pom</type></dependency></dependencies>

選擇 Zookeeper 版本

Dubbo 3.3.0 版本開始正式支持 JDK 17,如果您使用 JDK 17,則必須選用 dubbo-dependencies-zookeeper-curator5 或 dubbo-zookeeper-curator5-spring-boot-starter 依賴,對應的 Zookeeper Server 推薦是 3.8.0 版本及以上。

::當前使用的最新穩定版 3.8.4

配置并啟用 Zookeeper

配置properties,注冊中心的地址,服務發現名 和 掃描包

# dubbo.properties
dubbo.registry.address=zookeeper://localhost:2181
# 新用戶請設置此值,表示啟用應用級服務發現,可選值 interface、instance、all,默認值為 all,未來版本將切換默認值為 instance
dubbo.registry.register-mode=instance

address 是啟用 zookeeper 注冊中心唯一必須指定的屬性,而在生產環境下,address 通常被指定為集群地址,如 address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181

protocol 與 address 分開配置的模式也可以,

<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

創建服務接口和實現(DubboService)類,這里是配置Provider

使用@DubboService的注解 ,為了將接口暴漏出去,使外部接口可以掃描的到TicketService

package com.demo.service.impl;import com.demo.service.TicketService;
import org.apache.dubbo.config.annotation.DubboService;@DubboService
public class TicketImpl implements TicketService {@Overridepublic String getTicket() {return "Mrs.K sailed ticket";}
}

啟動Dubbo的掃描(EnableDubbo)

  1. 如果沒有找到注解@EnableDubbo,記得去更新下maven包,看看有沒有把依賴導進來,依賴啟動器導入的情況下一般就能夠發現;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo
@SpringBootApplication
public class Springboot09DubboserveApplication {public static void main(String[] args) {SpringApplication.run(Springboot09DubboserveApplication.class, args);}}
  1. 啟動項目測試,項目正常啟動,

  1. 服務測試

重復上述操作,將需要注冊Dubbo的配置下

  1. 配置端口,注冊地址;

  1. 啟動類開啟Dubbo;

編寫Service,這次是消費者,調用提供者所提供的內容

在Dubbo中,分提供者Provider和消費者Consumer兩個概念;

  • 提供者實現接口,提供具體的實現內容;
  • 消費者負責調用接口,使用提供者所實現的功能;
  • 因為不是在一個服務中啟動,所以存在RPC的管理,Dubbo的解決方案由此而生;
  1. 在Dubbo中,消費者所需要使用的是Refer,選擇指向的地址@DubboReference
@Component
public class UserServiceImpl implements UserService {//我們需要去拿去注冊中心的服務@DubboReferenceprivate TicketService ticketService;public void buyTicket() {System.out.println("》》User正在買票...");System.out.println("User正在調用ticket服務...");System.out.println(ticketService.getTicket());System.out.println("調用Ticket完成《《");}}
  1. 這樣子代碼就會去找 TicketService接口,但是因為TicketService是在另一個服務中啟用的,所以需要把那個接口在這重現一下

package com.demo.service;public interface TicketService {String getTicket();}
  1. 在Dubbo-admin中查找,啟用成功

  1. 代碼測試,要先關閉Dubbo-admin,還是不行。。。

技術沒到家,一直在報端口占用服務沖突的錯

package com.demo;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.demo.service.UserService;@SpringBootTest
class Springboot09DubboserveApplicationTests {@AutowiredUserService userService;@Testvoid contextLoads() {userService.buyTicket();}
}
  1. 寫個Controller,在Controller中調用Service之后,啟動頁面測試

  1. 優化下 優化內容顯示到頁面上

項目啟動成功:

測試功能

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

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

相關文章

【不說廢話】pytorch張量相對于numpy數組的優勢

核心關系 我們首先需要了解&#xff1a;PyTorch 張量在設計上深受 NumPy 數組的影響&#xff0c;它們共享許多相似的 API 和概念。實際上&#xff0c;PyTorch 張量可以看作是支持 GPU 加速和自動求導功能的 NumPy 數組。PyTorch 張量的主要優勢 1. GPU 加速支持&#xff08;最重…

拼團小程序源碼分享拼團余額提現小程序定制教程開發源碼二開

功能詳細說明&#xff08;一&#xff09;首頁功能進入首頁&#xff0c;可看到以下核心功能&#xff1a;1、優惠券&#xff0c;錢包&#xff0c;簽到&#xff0c;拼團&#xff0c;分銷等各種功能入口2、推薦的商品和活動3、下方功能欄的各種功能&#xff08;二&#xff09;客服功…

pikachu之XSS

XSS&#xff08;跨站腳本&#xff09;概述Cross-Site Scripting 簡稱為“CSS”&#xff0c;為避免與前端疊成樣式表的縮寫"CSS"沖突&#xff0c;故又稱XSS。一般XSS可以分為如下幾種常見類型&#xff1a;1.反射性XSS;2.存儲型XSS;3.DOM型XSS;XSS漏洞一直被評估為web漏…

【Element Plus `el-select` 下拉菜單響應式定位問題深度解析】

Element Plus el-select 下拉菜單響應式定位問題深度解析 本文檔旨在深入剖析一個在響應式布局中常見的 UI 問題&#xff1a;如何確保一個靠近屏幕邊緣的 el-select 組件的下拉菜單&#xff0c;在任何屏幕尺寸下都能以預期的、優雅的方式顯示。 1. 需求背景 在一個大屏數據展示…

Qt 項目文件(.pro)中添加 UI 文件相關命令

在 Qt 的 .pro 項目文件中&#xff0c;處理 UI 文件&#xff08;.ui 文件&#xff09;通常需要以下配置&#xff1a; 基本 UI 文件配置 自動包含 UI 文件&#xff1a; qmake FORMS yourfile.ui \anotherfile.ui Qt 構建系統會自動使用 uic&#xff08;用戶界面編譯器&#xff…

展會回顧 | 聚焦醫療前沿 , 禮達先導在廣州醫博會展示類器官自動化培養技術

8月22-24日&#xff0c;廣州醫博會在廣交會展館B區圓滿落幕。此次盛會匯聚了來自全球醫療健康領域的頂尖專家學者、企業代表與合作伙伴。展會內容涵蓋基礎研發、臨床應用、前沿技術、產業轉化、醫療服務及金融支持&#xff0c;全景呈現醫療健康產業的創新生態&#xff0c;成為連…

華為eNSP防火墻綜合網絡結構訓練.docx

1.IP及VLAN規劃情況 設備 接口 IP vlan 備注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

從 Oracle 到 TiDB,通過ETL工具,高效實現數據拉通

在當前企業數字化轉型的浪潮中&#xff0c;打破數據孤島、實現異構數據庫間的數據高效流轉已成為提升業務敏捷性與決策效率的關鍵。許多企業在要將 Oracle 數據庫中的海量數據準確地同步至TiDB 分布式數據庫時遇到了挑戰。這一過程不僅要求數據的絕對一致性&#xff0c;還對同步…

Effective c++ 35條款詳解

您問到了最關鍵的一點&#xff01;這正是策略模式的精妙之處——它通過組合&#xff08;composition&#xff09;而非繼承&#xff08;inheritance&#xff09;來實現多態效果。讓我詳細解釋這是如何工作的&#xff0c;以及它與傳統繼承多態的區別。&#x1f504; 策略模式如何…

51c自動駕駛~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首個基于Mamba的端到端運動規劃器 運動規劃是一項具有挑戰性的任務&#xff0c;在高度動態和復雜的環境中生成安全可行的軌跡&#xff0c;形成自動駕駛汽車的核心能力。在本文中&#xff0c;我…

大數據新視界 -- Hive 數據倉庫:架構深度剖析與核心組件詳解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎你們來到 青云交的博客&#xff01;能與你們在此邂逅&#xff0c;我滿心歡喜&#xff0c;深感無比榮幸。在這個瞬息萬變的時代&#xff0c;我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的…

軟考 系統架構設計師系列知識點之雜項集萃(137)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(136) 第253題 在面向對象設計中,用于描述目標軟件與外部環境之間交互的類被稱為( ),它可以( )。 第1空 A. 實體類 B. 邊界類 C. 模型類 D. 控制類 正確答案:B。 第2空 A. 表示目標軟件系統中具有持久…

(附源碼)基于Spring Boot公務員考試信息管理系統設計與實現

摘 要 隨著公務員考試日益受到社會的廣泛關注&#xff0c;一個高效、便捷的公務員考試信息管理系統顯得尤為重要。本文設計并實現了一個基于前端Vue框架&#xff0c;后端采用Java與Spring Boot技術&#xff0c;數據庫選用MySQL&#xff0c;并部署在Tomcat服務器上的信息管理系統…

學習JavaScript的第一個簡單程序:Hello World

在JavaScript中&#xff0c;最簡單的程序是打印"Hello World"。可以通過以下方式實現&#xff1a; console.log("Hello World");將上述代碼保存為hello.js文件&#xff0c;通過Node.js運行或在瀏覽器控制臺中執行。 瀏覽器環境實現 在HTML文件中嵌入Jav…

【Big Data】Alluxio 首個基于云的數據分析和開源AI數據編排技術

目錄 1. 什么是 Alluxio&#xff1f;? 2. Alluxio 的誕生背景&#xff1a;為什么需要數據編排層&#xff1f;? 痛點 1&#xff1a;計算與存儲強耦合&#xff0c;適配成本高? 痛點 2&#xff1a;跨集群 / 跨云數據移動效率低? 痛點 3&#xff1a;數據訪問延遲高&#x…

uniApp App 嵌入 H5 全流程:通信與跳轉細節拆解

在 uniApp App 開發中&#xff0c;通過 WebView 嵌入 H5 頁面是常見需求&#xff08;如活動頁、第三方頁面&#xff09;&#xff0c;核心需解決「H5 與 App 通信」「H5 操作后返回/跳轉 App」兩大問題。本文基于 DCloud 官方方案&#xff08;原文鏈接&#xff09;&#xff0c;對…

技能提升必備:鴻蒙HarmonyOS應用開發者認證

技能提升必備&#xff1a;鴻蒙HarmonyOS應用開發者認證&#xff0c;HarmonyOS 認證是華為為開發者打造的能力衡量體系。隨著 HarmonyOS 系統影響力不斷擴大&#xff0c;市場對相關開發人才需求激增。該認證分為基礎與高級等不同級別&#xff0c;覆蓋應用開發、設備開發等方向。…

Chromium 架構中的 ContentClient / ContentBrowserClient 設計原理全解析

一、前言在閱讀 Chromium 源碼時&#xff0c;很多人會對這樣一段調用產生疑惑&#xff1a;bool BrowserMainLoop::AudioServiceOutOfProcess() const { return base::FeatureList::IsEnabled(features::kAudioServiceOutOfProcess) && !GetContentClient()->browser…

window和liunx提權學習筆記

liunx提權 反彈shell升級交互式反彈sehell 反彈的服務器 接受的服務器 連接上之后的shell&#xff0c;沒有tab鍵補全&#xff0c;不可以上下鍵顯示歷史命令 你會發現并不能如愿所償&#xff0c;「上下方向鍵」被強制轉換為了 ^[[A、^[[B 等字符。 正是由于「簡單 shell」的各種…

畢業項目推薦:47-基于yolov8/yolov5/yolo11的焊縫質量檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全&#xff08;可點擊查看&#xff0c;不定時更新中&#xff09;概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式…