日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

8000字+22張圖探秘SpringCloud配置中心的核心原理

來源: 責編: 時間:2023-10-17 09:38:54 636觀看
導讀大家好,我是三友~~這篇文章來扒一扒SpringCloud配置中心的核心原理。不知你是否跟我一樣,在剛開始使用SpringCloud配置中心的時候也有很多的疑惑:SpringCloud是什么時候去拉取配置中心的?配置中心客戶端的配置信息為什么

大家好,我是三友~~oET28資訊網——每日最新資訊28at.com

這篇文章來扒一扒SpringCloud配置中心的核心原理。oET28資訊網——每日最新資訊28at.com

不知你是否跟我一樣,在剛開始使用SpringCloud配置中心的時候也有很多的疑惑:oET28資訊網——每日最新資訊28at.com

  • SpringCloud是什么時候去拉取配置中心的?
  • 配置中心客戶端的配置信息為什么要寫在bootstrap文件中?
  • 對象中注入的屬性是如何動態刷新的?
  • 一些開源的配置中心是如何整合SpringCloud的?
  • ...

本文就通過探討上述問題來探秘SpringCloud配置中心核心的底層原理。oET28資訊網——每日最新資訊28at.com

從SpringBoot的啟動過程說起

在SpringBoot啟動的時候會經歷一系列步驟,核心就是SpringApplication的run方法的邏輯oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

整個過程大致可以劃分為三個階段:oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

ApplicationContext刷新前階段,這個階段主要也干三件事oET28資訊網——每日最新資訊28at.com

  • 準備Environment(注意我這里加粗了,你懂得),也就是準備SpringBoot的整個外部化配置的對象
  • 創建一個ApplicationContext
  • 為ApplicationContext做一些準備工作

圖片圖片oET28資訊網——每日最新資訊28at.com

ApplicationContext刷新階段,這個階段其實就是調用ApplicationContext#refresh方法來刷新容器oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

刷新的整個過程可以看我之前寫的萬字+20張圖剖析Spring啟動時12個核心步驟這篇文章oET28資訊網——每日最新資訊28at.com

ApplicationContext刷新后階段,這個階段其實就是收尾的階段,這個過程其實沒有什么非常核心的事oET28資訊網——每日最新資訊28at.com

ok,在說完上面這三個階段之后,思考一個問題oET28資訊網——每日最新資訊28at.com

你覺得在上面的三個階段,哪個階段最有可能從配置中心拉取配置?oET28資訊網——每日最新資訊28at.com

其實稍微思考一下,肯定是想到的就是刷新前階段oET28資訊網——每日最新資訊28at.com

因為我已經明示了,準備EnvironmentoET28資訊網——每日最新資訊28at.com

玩笑歸玩笑,為什么是這個階段?oET28資訊網——每日最新資訊28at.com

很好理解,因為這個階段是準備Environment,也就是準備外部化配置oET28資訊網——每日最新資訊28at.com

只需要在這個階段加載配置中心的配置,放到Environment中,后面在整個ApplicationContext刷新階段創建Bean的時候,就可以使用到配置中心的配置了oET28資訊網——每日最新資訊28at.com

其實不光是配置中心的配置,比如配置文件的配置,也是在這里階段讀取的oET28資訊網——每日最新資訊28at.com

至于如何實現的,我們接著往下瞅oET28資訊網——每日最新資訊28at.com

準備Environment的核心操作

上一節得出一個結論oET28資訊網——每日最新資訊28at.com

準備Environment,也就是prepareEnvironment方法的實現,是拉取配置的核心oET28資訊網——每日最新資訊28at.com

prepareEnvironment方法prepareEnvironment方法oET28資訊網——每日最新資訊28at.com

不過在說這個方法之前,先來講一下一些前置操作oET28資訊網——每日最新資訊28at.com

前置操作

在SpringApplication創建的時候,會去加載spring.factories中的一些對象,其中就包括:oET28資訊網——每日最新資訊28at.com

  • org.springframework.context.ApplicationListener鍵對應的ApplicationListener的實現

圖片oET28資訊網——每日最新資訊28at.com

  • org.springframework.boot.SpringApplicationRunListener鍵對應的SpringApplicationRunListener的實現類

圖片oET28資訊網——每日最新資訊28at.com

SpringApplicationRunListener僅僅只有一個實現EventPublishingRunListeneroET28資訊網——每日最新資訊28at.com

EventPublishingRunListener

構造的時候會創建一個SimpleApplicationEventMulticaster,再將加載的ApplicationListener添加進去oET28資訊網——每日最新資訊28at.com

SimpleApplicationEventMulticaster是用來發布事件用的,不清楚的話可以看三萬字盤點Spring 9大核心基礎功能這篇文章oET28資訊網——每日最新資訊28at.com

按照傳統,畫張圖來理一下這部分前置操作oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

prepareEnvironment的核心邏輯

接著來講一下prepareEnvironment方法oET28資訊網——每日最新資訊28at.com

prepareEnvironment方法prepareEnvironment方法oET28資訊網——每日最新資訊28at.com

這個方法會首先創建一個Environment對象oET28資訊網——每日最新資訊28at.com

之后會執行這么一行方法,傳入剛剛創建的Environment對象oET28資訊網——每日最新資訊28at.com

listeners.environmentPrepared(environment);

這個方法最終會走到這個方法

EventPublishingRunListener#environmentPrepared

圖片圖片oET28資訊網——每日最新資訊28at.com

這個方法最終會發布一個ApplicationEnvironmentPreparedEvent事件oET28資訊網——每日最新資訊28at.com

而對這個事件有兩個特別重要的監聽器:oET28資訊網——每日最新資訊28at.com

  • ConfigFileApplicationListener
  • BootstrapApplicationListener

這些監聽器都是通過前置操作從spring.factories配置文件中加載的oET28資訊網——每日最新資訊28at.com

ConfigFileApplicationListener,用來處理配置文件的,他會解析配置文件的配置,放到Environment中oET28資訊網——每日最新資訊28at.com

BootstrapApplicationListener這個跟本文探討的主題相關了,它是用來專門來跟配置中心交互的oET28資訊網——每日最新資訊28at.com

到這,我們就找到了SpringCloud配置中心配置拉取的整個入口邏輯oET28資訊網——每日最新資訊28at.com

不過在分析BootstrapApplicationListener是如何從配置中心拉取配置的之前,先來張圖總結一下這部分prepareEnvironment的操作oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

SpringCloud是如何巧妙地拉取配置的?

在BootstrapApplicationListener中,他首先也會創建一個SpringApplication去執行oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

其實本質上就是創建一個Spring容器,也就是ApplicationContextoET28資訊網——每日最新資訊28at.com

這個容器非常重要,這個容器是專門用來跟配置中心交互的oET28資訊網——每日最新資訊28at.com

這個容器在創建的時候會給它兩個比較重要的配置oET28資訊網——每日最新資訊28at.com

第一個就是設置這個容器所用的配置文件的名稱oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

默認就是bootstrapoET28資訊網——每日最新資訊28at.com

這就解釋了為什么配置中心的配置信息需要寫在bootstrap配置文件中oET28資訊網——每日最新資訊28at.com

第二個就是會加入一個配置類oET28資訊網——每日最新資訊28at.com

BootstrapImportSelectorConfiguration

圖片圖片oET28資訊網——每日最新資訊28at.com

這個配置類又會通過@Import注解導入另一個配置類oET28資訊網——每日最新資訊28at.com

BootstrapImportSelector

圖片圖片oET28資訊網——每日最新資訊28at.com

BootstrapImportSelector實現了(間接)ImportSelector接口oET28資訊網——每日最新資訊28at.com

那么這個容器在啟動的時候,就會調用BootstrapImportSelector的selectImports方法的實現獲取到一些配置類oET28資訊網——每日最新資訊28at.com

而BootstrapImportSelector的selectImports實現從截圖中也就可以看出oET28資訊網——每日最新資訊28at.com

他會加載所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration的配置類oET28資訊網——每日最新資訊28at.com

其實這里@BootstrapConfiguration的作用其實跟@EnableAutoConfiguration的作用是差不多的,都是用來導入配置類的oET28資訊網——每日最新資訊28at.com

所以,總的來說,這個用來跟配置中心交互的Spring容器最最主要就是干兩件事:oET28資訊網——每日最新資訊28at.com

  • 加載bootstrap配置文件
  • 加載所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類

圖片圖片oET28資訊網——每日最新資訊28at.com

而在spring-cloud-context包下,@BootstrapConfiguration會導入一個很重要的配置類oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

PropertySourceBootstrapConfiguration

圖片圖片oET28資訊網——每日最新資訊28at.com

PropertySourceBootstrapConfiguration

這個配置類中會注入這么一個集合對象oET28資訊網——每日最新資訊28at.com

PropertySourceLocator

PropertySourceLocatorPropertySourceLocatoroET28資訊網——每日最新資訊28at.com

這個接口非常非常重要,先來看看注釋oET28資訊網——每日最新資訊28at.com

Strategy for locating (possibly remote) property sources for the Environment. Implementations should not fail unless they intend to prevent the application from starting.oET28資訊網——每日最新資訊28at.com

我用我的四級英語功力給大家翻譯一下oET28資訊網——每日最新資訊28at.com

以一種策略的方式為Environment定位(可能是遠程)屬性配置(PropertySource)。實現不應該失敗,除非打算阻止應用程序啟動。oET28資訊網——每日最新資訊28at.com

從這個翻譯后的意思就是說,這個接口是用來定位,也就是說獲取屬性配置的oET28資訊網——每日最新資訊28at.com

并且可能是遠程告訴我們一個很重要的信息,那就是獲取的配置信息不僅僅可以存在本地,而且還可以存在遠程。oET28資訊網——每日最新資訊28at.com

遠程?作者這里就差直接告訴你可以從配置中心獲取了。。oET28資訊網——每日最新資訊28at.com

所以這個接口的作用就是用配置中心獲取配置的!oET28資訊網——每日最新資訊28at.com

那么自然而然不同的配置中心要想整合到SpringCloud就得實現這個接口oET28資訊網——每日最新資訊28at.com

當注入完PropertySourceLocator集合之后,在某個階段會調用所有的PropertySourceLocator,獲取配置中心中的配置圖片oET28資訊網——每日最新資訊28at.com

之后在把這些配置放到Environment中oET28資訊網——每日最新資訊28at.com

這樣在ApplicationContext的刷新階段就可以使用到配置中心的那些配置了oET28資訊網——每日最新資訊28at.com

小總結

到這我們就弄明白了在項目啟動中加載配置中心的配置了oET28資訊網——每日最新資訊28at.com

其實就是項目在啟動時會額外創建一個跟配置中心相關的Spring容器oET28資訊網——每日最新資訊28at.com

這個容器會去加載bootstrap配置文件和所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類oET28資訊網——每日最新資訊28at.com

之后會去調用這個容器中所有的PropertySourceLocator對象,從配置中心獲取配置oET28資訊網——每日最新資訊28at.com

再放到Environment中就完成了啟動時從配置中心獲取配置的方式oET28資訊網——每日最新資訊28at.com

最后,來張全家福概括一下前面整體的步驟oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

如何動態刷新Bean的屬性?

我們都知道,要想實現配置屬性的動態刷新,需要在類上加上一個注解oET28資訊網——每日最新資訊28at.com

@RefreshScopeoET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

重點來了oET28資訊網——每日最新資訊28at.com

加了@RefreshScope注解的Bean,就拿上圖中的UserService舉例oET28資訊網——每日最新資訊28at.com

Spring在生成的時候會生成兩個UserService的Bean:oET28資訊網——每日最新資訊28at.com

  • 第一個是UserService的代理動態代理的Bean,后面我稱為第一個Bean
  • 第二個就是UserService這個Bean,后面我稱為第二個Bean

當你在其它類中需要注入一個UserService時,真正注入的是第一個Bean,也就是動態代理的BeanoET28資訊網——每日最新資訊28at.com

當你使用這個注入的動態代理的Bean的時候,他會去找第二個Bean,也就是真正的UserService這個Bean,然后調用對應的方法oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

比如你調用注入的UserService代理對象的getUsername方法,最終就會調用到第二個BeangetUsername方法oET28資訊網——每日最新資訊28at.com

獲取到的username屬性值自然也就是第二個Bean中的username值oET28資訊網——每日最新資訊28at.com

那么為什么要生成兩個Bean?oET28資訊網——每日最新資訊28at.com

接著往下瞅oET28資訊網——每日最新資訊28at.com

在SpringCloud中有這么一項規定oET28資訊網——每日最新資訊28at.com

當配置中心客戶端一旦感知到服務端的某個配置有變化的時候,需要發布一個RefreshEvent事件來告訴SpringCloud配置有變動oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

在SpringCloud中RefreshEventListener類會去監聽這個事件oET28資訊網——每日最新資訊28at.com

RefreshEventListenerRefreshEventListeneroET28資訊網——每日最新資訊28at.com

一旦監聽到這個事件,SpringCloud會再次從配置中心拉取配置oET28資訊網——每日最新資訊28at.com

這個拉取配置的核心邏輯跟啟動時拉取配置的核心邏輯是一樣的oET28資訊網——每日最新資訊28at.com

也是通過 BootstrapApplicationListener 來實現的oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

這部分代碼邏輯在ContextRefresher類中,順著RefreshEventListener就能看到,有興趣可以扒一扒oET28資訊網——每日最新資訊28at.com

怕你忘了,我再把上面拉取配置的圖拿過來oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

有了最新的配置之后,就會進行一步騷操作來移花接木”刷新“注入到對象的屬性oET28資訊網——每日最新資訊28at.com

這個騷操作就是銷毀所有的前面提到的第二個Bean,但是第一個Bean,也就是代理對象保持不變oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

當程序運行調用代理對象的方法的時候,發現第二個Bean沒有了,此時他就會去重新創建第二個Bean,也就是重新創建一個UserService對象oET28資訊網——每日最新資訊28at.com

由于此時已經拉到最新的配置了,也就是這個被重新創建的UserService對象注入的就是最新的屬性了oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

之后再調用的這個新創建的第二個Bean,拿到的自然就是最新的配置oET28資訊網——每日最新資訊28at.com

所以,給你的感覺是對象的屬性發生了變化,實際上是真正被調用的對象重新創建了oET28資訊網——每日最新資訊28at.com

所以這招移花接木還是有點意思的!oET28資訊網——每日最新資訊28at.com

小總結

其實到這就弄明白了Bean的屬性動態刷新的原理oET28資訊網——每日最新資訊28at.com

其實就是當配置中心客戶端發現服務端的配置有變化,需要發送一個RefreshEvent事件來告訴SpringCloud配置有變動oET28資訊網——每日最新資訊28at.com

SpringCloud會去監聽這個事件,按照項目啟動的方式重新拉取配置中心最新的屬性配置oET28資訊網——每日最新資訊28at.com

當拉取完屬性配置之后,就會銷毀所有的第二個Bean,也就是真正被使用的BeanoET28資訊網——每日最新資訊28at.com

之后當第一個Bean(動態代理的Bean)需要使用這個第二個Bean時,就會重新創建這個第二個BeanoET28資訊網——每日最新資訊28at.com

此時由于已經有最新的配置了,那么創建的這個第二個Bean就會被注入最新的屬性,這樣就實現了屬性的”刷新“oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

補充個東西:@RefreshScope的秘密

上面大致說了@RefreshScope動態刷新的原理oET28資訊網——每日最新資訊28at.com

這里我補充一下@RefreshScope代碼層面的實現原理oET28資訊網——每日最新資訊28at.com

本來這部分原理我是寫在前面的,但是我發現這塊比較繞,怕打斷文章的節奏,所以就準備刪除了oET28資訊網——每日最新資訊28at.com

但是想想既然都寫了,那么就給放到補充里面吧,看不懂也不耽誤前面的理解oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

這個注解是個衍生注解,真正起作用的就是@Scope注解oET28資訊網——每日最新資訊28at.com

@Scope注解并不陌生,他其實是定義Bean的作用域oET28資訊網——每日最新資訊28at.com

比如多例(原型),就可以加上@Scope("prototype")注解oET28資訊網——每日最新資訊28at.com

還有一些八股文常背的作用域,比如session作用域等等oET28資訊網——每日最新資訊28at.com

而@RefreshScope也可以看做是一種Bean的作用域,名字叫做refreshoET28資訊網——每日最新資訊28at.com

這些除了單例和多例之外的作用域的底層實現邏輯都是一樣的oET28資訊網——每日最新資訊28at.com

這些帶有作用域的Bean相比于普通的單例Bean主要有以下幾點不同:oET28資訊網——每日最新資訊28at.com

  • 會注冊兩個Bean,這個前面已經提到過
  • 保存的地方不同,比如單例Bean最終會存在三級緩存中的第一級緩存中,而不同作用域的Bean是存在不同的地方的

先說會注冊兩個Bean,還是以前面提到的UserService舉個例子,這兩個Bean分別是oET28資訊網——每日最新資訊28at.com

  • 第一個Bean的Bean名稱為userService,Bean class為ScopedProxyFactoryBean.class,這個scope為默認,也就是單例
  • 第二個Bean的Bean名稱為scopedTarget.userService,Bean class為UserService.class,scope為refresh(如果是session作用域就是session)

第一個Bean的class為ScopedProxyFactoryBean,是個FactoryBean的實現oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

這個最終會生成一個代理對象,上面的例子就是為UserService生成一個代理對象,并且由于是單例的,所以最終這個對象會被放到一級緩存中,我們使用時注入的也就是這個對象oET28資訊網——每日最新資訊28at.com

第二個Bean的class是UserService,所以生成的就是真正的UserService對象,但是由于scope為refresh,所以不會存在第一級緩存中oET28資訊網——每日最新資訊28at.com

這部分注冊兩個Bean的代碼是在ScopedProxyUtils#createScopedProxy方法中,有興趣的可以扒扒oET28資訊網——每日最新資訊28at.com

再來講一講保存的地方不同oET28資訊網——每日最新資訊28at.com

不同的作用域都需要實現一個Scope接口來存放對應的BeanoET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

比如refresh、session作用域都有對應的實現oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

也就是通過Scope就可以管理不同作用域的BeanoET28資訊網——每日最新資訊28at.com

所以,對于refresh這個作用域來說,他的所有的Bean都在RefreshScope中oET28資訊網——每日最新資訊28at.com

后面說的銷毀,只需要移除RefreshScope中的Bean就可以了oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

代碼也在ContextRefresher類中

開源配置中心是如何整合SpringCloud的?

首先我們再來梳理一下拉取配置和刷新配置的核心關鍵點oET28資訊網——每日最新資訊28at.com

拉取配置關鍵點就是項目啟動的時候(也包括重新拉取配置),會去創建一個容器oET28資訊網——每日最新資訊28at.com

這個容器只讀取bootstrap配置文件和spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類oET28資訊網——每日最新資訊28at.com

之后會獲取這個容器中的PropertySourceLocator,從而獲取配置中心的配置oET28資訊網——每日最新資訊28at.com

刷新配置關鍵點就是一旦配置中心配置變動,就需要發送RefreshEvent事件,之后一系列刷新操作都是由SpringCloud的來完成的oET28資訊網——每日最新資訊28at.com

所以,配置中心整合到SpringCloud其實就很簡單,就兩點oET28資訊網——每日最新資訊28at.com

第一點就是需要實現PropertySourceLocator,并且配置中心一些相關的Bean需要通過org.springframework.cloud.bootstrap.BootstrapConfiguration來裝配到這個容器中oET28資訊網——每日最新資訊28at.com

第二點,當配置發生變更需要發送RefreshEvent事件,這部分配置中心一些相關的Bean配置肯定是需要通過自動裝配來完成oET28資訊網——每日最新資訊28at.com

有了這兩點我們來看看Nacos作為配置中心是如何整合到SpringCloud的oET28資訊網——每日最新資訊28at.com

我們直接看Nacos的spring.factories文件oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

NacosConfigBootstrapConfiguration是用來實現第一點的oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

除了Nacos自己的一些Bean,他還聲明了一個NacosPropertySourceLocator這個BeanoET28資訊網——每日最新資訊28at.com

NacosPropertySourceLocatorNacosPropertySourceLocatoroET28資訊網——每日最新資訊28at.com

這個Bean就實現了PropertySourceLocator接口oET28資訊網——每日最新資訊28at.com

第二點的實現就是通過NacosConfigAutoConfiguration配置類來實現的oET28資訊網——每日最新資訊28at.com

這里面有這么一個BeanoET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

這個Bean就實現了配置變化發送事件的操作oET28資訊網——每日最新資訊28at.com

圖片圖片oET28資訊網——每日最新資訊28at.com

除了Nacos,比如說Consul作為配置中心的時候也是這么一套實現邏輯oET28資訊網——每日最新資訊28at.com

但是值的注意的是,像Apollo配置中心,他并沒有適配SpringCloud這套規范oET28資訊網——每日最新資訊28at.com

當然,如果你有興趣,可以自己實現Apollo適配SpringCloud這套規范oET28資訊網——每日最新資訊28at.com


oET28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-13640-0.html8000字+22張圖探秘SpringCloud配置中心的核心原理

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 掌握這五種多線程方法,提高Java代碼效率

下一篇: 從0手寫一個多線程日志包

標簽:
  • 熱門焦點
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 容量越大越不壞?24萬塊硬盤故障率報告公布 這些產品零故障

    8月5日消息,云存儲服務商Backblaze發布了最新的硬盤故障率報告,年故障率有所上升。Backblaze發布的硬盤季度統計數據,其中包括故障率等重要方面。這些結
  • 28個SpringBoot項目中常用注解,日常開發、求職面試不再懵圈

    前言在使用SpringBoot開發中或者在求職面試中都會使用到很多注解或者問到注解相關的知識。本文主要對一些常用的注解進行了總結,同時也會舉出具體例子,供大家學習和參考。注解
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
Top 主站蜘蛛池模板: 嘉黎县| 齐齐哈尔市| 江城| 饶阳县| 临泽县| 卫辉市| 古丈县| 平阴县| 炎陵县| 通辽市| 高碑店市| 南岸区| 余干县| 迭部县| 信阳市| 高陵县| 平顺县| 弋阳县| 余江县| 宾川县| 南乐县| 普安县| 陇西县| 灵川县| 关岭| 迭部县| 开江县| 嘉黎县| 祁阳县| 郯城县| 麻城市| 资阳市| 建阳市| 德安县| 连山| 南充市| 湖州市| 商洛市| 清水县| 梅州市| 隆化县|