最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot Admin的簡單使用的方法步驟

 更新時(shí)間:2022年01月14日 10:39:11   作者:zeng1994  
本文主要介紹了SpringBoot Admin的簡單使用的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

公司有個(gè)SpringBoot項(xiàng)目需要加個(gè)監(jiān)控,網(wǎng)上找了下發(fā)現(xiàn)大家都在推薦SpringBootAdmin。SpringBoot Admin是開源社區(qū)孵化的項(xiàng)目,用于對SpringBoot應(yīng)用的管理和監(jiān)控。SpringBoot Admin 分為服務(wù)端(spring-boot-admin-server)和客戶端(spring-boot-admin-client),服務(wù)端和客戶端之間采用http通訊方式實(shí)現(xiàn)數(shù)據(jù)交互;單體項(xiàng)目中需要整合spring-boot-admin-client才能讓應(yīng)用被監(jiān)控。在SpringCloud項(xiàng)目中,spring-boot-admin-server 是直接從注冊中心抓取應(yīng)用信息,不需要每個(gè)微服務(wù)應(yīng)用整合spring-boot-admin-client就可以實(shí)現(xiàn)應(yīng)用的管理和監(jiān)控。

官網(wǎng)參考鏈接:https://codecentric.github.io/spring-boot-admin/2.2.4/

本文只敘述SpringBoot Admin 管理和監(jiān)控單體應(yīng)用 ,不涉及SpringCloud相關(guān)的內(nèi)容 。

一、快速入門

1.1 SpringBoot Admin服務(wù)端的搭建

(1) Maven依賴說明 SpringBoot版本

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

添加SpringBootAdmin server依賴及SpringBoot web 依賴

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--這里由于我的springboot版本是2.2.10.RELEASE,所以 springboot admin 也要用2.2.x版-->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.2.4</version>
    </dependency>

(2)application.yml中配置端口

# 指定端口
server:
	port: 23333

(3)編寫啟動(dòng)類并開啟SpringBootAdminServer

 package com.zcode.monitor.server;
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    /**
     * AdminServerApplication
     * @author ZENG.XIAO.YAN
     * @version 1.0
     * @Date 2020-11-12
     */
    @EnableAdminServer // 開啟 springboot admin 服務(wù)端
    @SpringBootApplication
    public class AdminServerApplication {

        public static void main(String[] args) {
            SpringApplication.run(AdminServerApplication.class,args);
        }
    }

(4)瀏覽器訪問測試 瀏覽器訪問 http://localhost:23333/ 出現(xiàn)以下頁面說明SpringBoot Admin服務(wù)端搭建成功

1.2 SpringBootAdmin client端搭建

備注:所謂的 client端就是指我們需要被監(jiān)控的應(yīng)用端。這里我們寫一個(gè)簡單點(diǎn)的SpringBoot web應(yīng)用做演示

(1)Maven依賴說明

SpringBoot版本如下

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

添加SpringBootAdmin client 依賴及SpringBoot web 依賴。這里不需要添加SpringBoot actuator 依賴,因?yàn)镾pringBootAdmin client里面已經(jīng)包含了actuator相關(guān)依賴

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--這里由于我的springboot版本是2.2.10.RELEASE,所以 springboot admin 也要用2.2.x版-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.2.4</version>
        </dependency>

(2) application.yml配置

在yml中需要 配置如下信息:

應(yīng)用端口

開放端點(diǎn)用于SpringBootAdmin 監(jiān)控

配置應(yīng)用名稱(該名稱會(huì)在SpringBoot Admin的管理頁面顯示)

配置Admin Server的地址

配置下日志文件的文件名和存放位置 (如果不配置則會(huì)看不到日志)

# 端口
server:
  port: 9088


#開放端點(diǎn)用于SpringBoot Admin的監(jiān)控
management:
  endpoints:
    web:
      exposure:
        include: '*'

spring:
  application:
    name: admin-client # 給client應(yīng)用取個(gè)名字

  boot:
    admin:
      client:
        url:  http://localhost:23333   #這里配置admin server 的地址

logging:
  file:
    name: admin-client.log  #配置生成日志文件名稱

(3)寫一個(gè)Controller模擬一個(gè)普通的接口

通過瀏覽器訪問這個(gè)接口就會(huì)打印日志,具體代碼如下

  /**
     * HelloController
     *
     * @author ZENG.XIAO.YAN
     * @version 1.0
     * @Date 2020-11-16
     */
    @Slf4j
    @RestController
    @RequestMapping("api")
    public class HelloController {
        private AtomicInteger count = new AtomicInteger(0);

        @GetMapping("hi")
        private String sayHi() {
            // 每次進(jìn)來如打印下日志
            log.info("{} 啪...我第{}次進(jìn)來了.", LocalDateTime.now(),  count.addAndGet(1));
            // 每次進(jìn)來new 個(gè)大對象,便于監(jiān)控觀察堆內(nèi)存變化
            byte[] bytes = new byte[100*1024*1024];
            log.info("new了 100MB");
            return "hi springboot addmin " + LocalDateTime.now();
        }
    }

(4)寫個(gè)啟動(dòng)類

啟動(dòng)類代碼就很簡單了,就是一個(gè)普通的SpringBoot項(xiàng)目的啟動(dòng)類,上面沒加其他注解。具體如下

@SpringBootApplication
public class AdminClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminClientApplication.class, args);
    }
}

1.3 效果展示

(1)已管理的應(yīng)用會(huì)在應(yīng)用墻上展示

當(dāng)我們的admin-client項(xiàng)目啟動(dòng)后,在 admin-server的管理頁面的應(yīng)用墻上就能看到admin-client這個(gè)應(yīng)用了,具體可參考下圖

(2)可查看應(yīng)用的具體信息

在應(yīng)用墻點(diǎn)擊這個(gè)應(yīng)用,我們可以看到這個(gè)應(yīng)用的具體信息,如堆內(nèi)存變化及線程數(shù)等。具體可參考下圖

(3)日志查看及堆內(nèi)存變化觀察

請求我們在admin-client中寫的模擬接口 http://localhost:9088/api/hi ,該接口請求一次則會(huì)輸出日志,同時(shí)開辟100MB的堆內(nèi)存空間。
請求多次后在網(wǎng)頁上可以實(shí)時(shí)的看到日志如下圖

由于我們直接new了100MB的大對象,此時(shí)可以查看細(xì)節(jié)中的堆內(nèi)存變化;具體如下圖

二、安全性

2.1 admin-server端安全加固

這個(gè)SpringBoot Admin的管理后臺(tái)如果沒密碼就能訪問,那實(shí)在太不安全了,因此我們要給它加上登錄的功能。

參考SpringBoot Admin的官方文檔,我們可以在Admin-Server端添加Spring Security 相關(guān)依賴及就可以實(shí)現(xiàn)需要登錄后才能訪問網(wǎng)頁管理面板。

官網(wǎng)參考鏈接為:https://codecentric.github.io/spring-boot-admin/2.2.4/#_securing_client_actuator_endpoints

下面開始具體的改造

(1)admin-server添加Spring Security 相關(guān)依賴

  <!--springboot admin 安全相關(guān)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

(2)admin-server 設(shè)置賬號和密碼

在application.yml配置賬號和密碼

# 配置一個(gè)賬號和密碼
spring:
  security:
    user:
      name: admin
      password: root123456

(3)admin-server 添加一個(gè)Spring Security 配置類

 @Configuration
    public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
        private final String adminContextPath;

        public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
            this.adminContextPath = adminServerProperties.getContextPath();
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
            successHandler.setTargetUrlParameter("redirectTo");
            successHandler.setDefaultTargetUrl(adminContextPath + "/");
            http.authorizeRequests()
                    //1.配置所有靜態(tài)資源和登錄頁可以公開訪問
                    .antMatchers(adminContextPath + "/assets/**").permitAll()
                    .antMatchers(adminContextPath + "/login").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    //2.配置登錄和登出路徑
                    .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                    .logout().logoutUrl(adminContextPath + "/logout").and()
                    //3.開啟http basic支持,admin-client注冊時(shí)需要使用
                    .httpBasic().and()
                    .csrf()
                    //4.開啟基于cookie的csrf保護(hù)
                    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                    //5.忽略這些路徑的csrf保護(hù)以便admin-client注冊
                    .ignoringAntMatchers(
                            adminContextPath + "/instances",
                            adminContextPath + "/actuator/**"
                    );
        }
    }

(4)admin-server 安全加固后訪問測試

再次訪問http://localhost:23333/ ,發(fā)現(xiàn)需要登錄

當(dāng)我們輸入正確的賬號密碼登錄后,情況如下圖

這個(gè)時(shí)候的應(yīng)用數(shù)居然變成了0了,在我們沒進(jìn)行安全加固時(shí)是有一個(gè)admin-client應(yīng)用的,為什么就不見了? 原因是添加了賬號密碼認(rèn)證后,admin-client端也需要配置下 admin-server的賬號和密碼。

(5)admin-client 端設(shè)置 admin-server的賬號密碼

admin-client 注冊到 admin-server時(shí),admin-server端有個(gè)http Basic認(rèn)證,通過了認(rèn)證后 admin-client才能注冊到 admin-server上。 admin-client的application.yml中配置訪問密碼配置可參考下面代碼

spring:
  application:
    name: admin-client # 給client應(yīng)用取個(gè)名字

  boot:
    admin:
      client:
        url:  http://localhost:23333 #這里配置admin server 的地址
        # 配置 admin-server的賬號和密碼
        username: admin 
        password: root123456

(6) 再次訪問 admin-server 管理后臺(tái) 當(dāng)我們登錄后,終于再次看到了我們的admin-client這個(gè)應(yīng)用

2.2 admin-client端的安全

admin-client端如果把a(bǔ)ctuator端點(diǎn)都暴露出來,是非常不安全的。因此我們可以添加Spring Security對admin-client 也進(jìn)行安全加固。

下面所有操作均在admin-client中進(jìn)行

(1)添加Spring Security依賴

   <!--spring security-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

(2)yml配置

yml中需要設(shè)置client的賬號和密碼,官網(wǎng)相關(guān)配置如下圖所示

本次演示的admin-client的相關(guān)yml配置參考下面代碼

spring:
  application:
    name: admin-client # 給client應(yīng)用取個(gè)名字

  boot:
    admin:
      client:
        url:  http://localhost:23333 #這里配置admin server 的地址
        # 配置 admin-server的賬號和密碼
        username: admin
        password: root123456
        instance:
          metadata:
            # 這里配置admin-client的賬號和密碼
            user.name: ${spring.security.user.name}
            user.password: ${spring.security.user.password}

  # admin-client 的用戶名和密碼
  security:
    user:
      name: clientAdmin
      password: 123456

(3)添加Spring Security 配置類

為何要到配置?因?yàn)镾pring Security不配置時(shí)會(huì)把所有請求都攔截的,而我們這里只需要攔截監(jiān)控端點(diǎn)/actuator/**即可。同時(shí),官網(wǎng)中提到admin-server訪問admin-client時(shí),也是采用http Basic認(rèn)證方式的;因此需要配置Spring Security支持Http Basic認(rèn)證方式。

  @Configuration
    @Slf4j
    public class SpringSecurityActuatorConfig extends WebSecurityConfigurerAdapter {

        public SpringSecurityActuatorConfig() {
            log.info("SpringSecurityActuatorConfig... start");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            //  這個(gè)配置只針對  /actuator/** 的請求生效
            http.antMatcher("/actuator/**")
                    // /actuator/下所有請求都要認(rèn)證
                    .authorizeRequests().anyRequest().authenticated()
                    // 啟用httpBasic認(rèn)證模式,當(dāng)springboot admin-client 配置了密碼時(shí),
                    // admin-server走h(yuǎn)ttpbasic的認(rèn)證方式來拉取client的信息
                    .and().httpBasic()
                    // 禁用csrf
                    .and().csrf().disable();

        }
    }

(4)效果展示

admin-server端依舊能看到admin-client的信息,說明我們添加SpringSecurity 后 admin-server的監(jiān)控管理功能正常,具體見下圖

當(dāng)我們?nèi)ピL問admin-client的監(jiān)控端點(diǎn)http://localhost:9088/actuator/health 時(shí),發(fā)現(xiàn)需要進(jìn)行http Basic認(rèn)證;這也證明了我們的認(rèn)證攔截只攔截了監(jiān)控端點(diǎn)。效果如下圖

(5)存在的問題

通過上面的一通配置,admin-client 添加 Spring Security 對actuator的端點(diǎn)進(jìn)行安全認(rèn)證的功能是實(shí)現(xiàn)了,但也存在著問題。 當(dāng)我們項(xiàng)目本來就是使用SpringSecurity 安全框架進(jìn)行認(rèn)證和授權(quán)時(shí)。上述的配置就要做修改了。因?yàn)槲覀円话愣疾挥肏ttpBasic認(rèn)證,而是用的表單登錄認(rèn)證。也就出現(xiàn)了配置多個(gè)Spring Security的問題。雖然有這個(gè)問題,但是網(wǎng)上還是有解決方案的。

(6)多個(gè)Spring Security共存方案

這個(gè)方案是在Spring Security官方文檔里面找到的 鏈接為: https://docs.spring.io/spring-security/site/docs/5.3.5.RELEASE/reference/html5/ 官網(wǎng)關(guān)鍵信息截圖如下:

里面的重點(diǎn)就是通過添加Order注解來指定多個(gè)Spring Security的優(yōu)先級

下面直接貼上我的代碼;為了直觀,我就在同一個(gè)類里面建了2個(gè)靜態(tài)的Spring Security配置類

/**
 * SpringSecurity 表單和HttpBasic 共存配置參考,寫在一個(gè)類里面方便對比
 * @author ZENG.XIAO.YAN
 * @Date 2020-11-11
 * @version 1.0
 */
@Slf4j
public class SpringSecurityConfig2 {

    /*
     * 這個(gè)表單和HttpBasic 共存配置玩法,參考url如下:
     *  官方url:https://docs.spring.io/spring-security/site/docs/4.2.3.BUILD-SNAPSHOT/reference/htmlsingle/#multiple-httpsecurity
     *  項(xiàng)目啟動(dòng)日志如下,可以看到創(chuàng)建了2條過濾鏈
	 * 2020-11-11 22:57:56.340  INFO 12692 --- [main] o.s.s.web.DefaultSecurityFilterChain: Creating filter chain: Ant [pattern='/actuator/**'],
	 * 2020-11-11 22:57:56.344  INFO 12692 --- [main] o.s.s.web.DefaultSecurityFilterChain: Creating filter chain: any request,
     */


    /**
     * HttpBasic 認(rèn)證方式,只對/actuator/** 生效,由于設(shè)置了Order,優(yōu)先級會(huì)高于FormLoginWebSecurityConfigurerAdapter
     * @author ZENG.XIAO.YAN
     * @Date 2020-11-11
     * @version 1.0
     */
    @Configuration
    @Order(1)
    public static class HttpBasicSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        public HttpBasicSecurityConfigurationAdapter() {
            log.info("HttpBasicSecurityConfigurationAdapter... start");
        }

        protected void configure(HttpSecurity http) throws Exception {
            //  這個(gè)配置只針對  /actuator/** 的請求生效
            http.antMatcher("/actuator/**")
                    // /actuator/下所有請求都要認(rèn)證
                    .authorizeRequests().anyRequest().authenticated()
                    // 啟用httpBasic認(rèn)證模式,當(dāng)springboot admin-client 配置了密碼時(shí),
                    // admin-server走h(yuǎn)ttpbasic的認(rèn)證方式來拉取client的信息
                    .and().httpBasic()
                    // 禁用csrf
                    .and().csrf().disable();
        }
    }

    /**
     * 表單登錄認(rèn)證方式配置,由于沒有指定Order,所以默認(rèn)是最大2147483647,數(shù)值越大,優(yōu)先級越低
     * @author ZENG.XIAO.YAN
     * @Date 2020-11-11
     * @version 1.0
     */
    @Configuration
    public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
        
        public FormLoginWebSecurityConfigurerAdapter() {
            log.info("FormLoginWebSecurityConfigurerAdapter... start");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin();
        }
    }

}

添加完這個(gè)配置類后,記得把我們上面配置的SpringSecurityActuatorConfig 這個(gè)類刪除了,然后重啟項(xiàng)目。效果如下:

訪問http://localhost:9088/actuator/health ,則出現(xiàn)的是httpBasic認(rèn)證的頁面

訪問 http://localhost:9088/api/hi,則出現(xiàn)的是Spring Security 自帶的表單登錄頁面

訪問admin-server 的管理頁面,發(fā)現(xiàn)admin-client應(yīng)用信息正常,說明本次修改的Spring Security配置沒有問題

三、小結(jié)

(1)本文介紹了SpringBoot Admin的簡單使用,同時(shí)介紹了admin-server端的安全配置和admin-client端的安全配置

(2)在介紹admin-client端的安全配置時(shí),引申出了 如何實(shí)現(xiàn)多個(gè)SpringSecurity 配置 共存

作者:zeng1994
出處:http://www.cnblogs.com/zeng1994/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載!但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接!

到此這篇關(guān)于SpringBoot Admin的簡單使用的方法步驟的文章就介紹到這了,更多相關(guān)SpringBoot Admin使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java讓泛型實(shí)例化的方法

    Java讓泛型實(shí)例化的方法

    這篇文章主要介紹了Java讓泛型實(shí)例化的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 如何使用JaCoCo分析java單元測試覆蓋率

    如何使用JaCoCo分析java單元測試覆蓋率

    在做單元測試時(shí),代碼覆蓋率常常被拿來作為衡量測試好壞的指標(biāo),甚至,用代碼覆蓋率來考核測試任務(wù)完成情況,比如,代碼覆蓋率必須達(dá)到80%或 90%。于是乎,測試人員費(fèi)盡心思設(shè)計(jì)案例覆蓋代碼。下面我們來學(xué)習(xí)一下吧
    2019-06-06
  • Springboot單元測試編寫實(shí)踐

    Springboot單元測試編寫實(shí)踐

    在日常的開發(fā)過程中,為了提高代碼的可靠性和健壯性,同時(shí)也是檢測代碼的質(zhì)量,減少測試環(huán)節(jié)的問題,會(huì)對完成的業(yè)務(wù)功能代碼編寫單元測試,在本文中,將分享一些單元測試的實(shí)踐和心得,需要的朋友可以參考下
    2023-11-11
  • Java基于ShardingSphere實(shí)現(xiàn)分庫分表的實(shí)例詳解

    Java基于ShardingSphere實(shí)現(xiàn)分庫分表的實(shí)例詳解

    ShardingSphere?已于2020年4月16日成為?Apache?軟件基金會(huì)的頂級項(xiàng)目,?它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)水平擴(kuò)展、分布式事務(wù)和分布式治理等功能,可適用于如?Java?同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場景,對ShardingSphere分庫分表相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • 阿里、華為、騰訊Java技術(shù)面試題精選

    阿里、華為、騰訊Java技術(shù)面試題精選

    這篇文章主要為大家分享了阿里、華為、騰訊Java技術(shù)面試題精選,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java利用CompletionService保證任務(wù)先完成先獲取到執(zhí)行結(jié)果

    java利用CompletionService保證任務(wù)先完成先獲取到執(zhí)行結(jié)果

    這篇文章主要為大家詳細(xì)介紹了java如何利用CompletionService來保證任務(wù)先完成先獲取到執(zhí)行結(jié)果,文中的示例代碼講解詳細(xì),需要的可以參考下
    2023-08-08
  • 關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType對Filter配置的影響

    關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType

    這篇文章主要介紹了關(guān)于request.getRequestDispatcher().forward()的妙用及DispatcherType對Filter配置的影響,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring使用AOP完成統(tǒng)一結(jié)果封裝實(shí)例demo

    Spring使用AOP完成統(tǒng)一結(jié)果封裝實(shí)例demo

    這篇文章主要介紹了Spring使用AOP完成統(tǒng)一結(jié)果封裝,本文通過實(shí)現(xiàn)demo給大家詳細(xì)講解,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java內(nèi)存模型final的內(nèi)存語義

    Java內(nèi)存模型final的內(nèi)存語義

    這篇文章主要介紹了Java內(nèi)存模型final的內(nèi)存語義,上篇介紹volatile的內(nèi)存語義,本文講述的是final的內(nèi)存語義,相比之下,final域的讀和寫更像是普通變量的訪問。下面我們一起來看看文章學(xué)校內(nèi)容吧,需要的朋友可以參考一下
    2021-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    并查集是一種用來管理元素分組情況的數(shù)據(jù)結(jié)構(gòu)。并查集可以高效地進(jìn)行如下操作。本文將通過Java實(shí)現(xiàn)并查集,感興趣的小伙伴可以了解一下
    2022-01-01

最新評論

无极县| 忻城县| 德阳市| 阿荣旗| 正镶白旗| 临江市| 顺昌县| 南雄市| 灵宝市| 英吉沙县| 乐安县| 营山县| 临海市| 福鼎市| 北川| 潢川县| 永州市| 平江县| 梁山县| 定边县| 寿光市| 醴陵市| 石林| 海伦市| 蒙山县| 镇康县| 沂源县| 玉门市| 浮梁县| 定襄县| 朝阳市| 大同市| 德庆县| 来宾市| 房产| 轮台县| 蓬莱市| 扎鲁特旗| 江门市| 惠州市| 老河口市|