【Spring】常見問題總結

目錄

1. 什么是 Spring 框架?

2. 列舉一些重要的Spring模塊?

3. @RestController vs @Controller

4. Spring IOC & AOP

4.1 談談自己對于 Spring IoC 和 AOP 的理解

IoC

AOP

4.2 Spring AOP 和 AspectJ AOP 有什么區別?

5. Spring bean

5.1 Spring 中的 bean 的作用域有哪些?

5.2 Spring 中的單例 bean 的線程安全問題了解嗎?

5.3 @Component 和 @Bean 的區別是什么?

5.4 將一個類聲明為Spring的 bean 的注解有哪些?

5.5 Spring 中的 bean 生命周期?

6. Spring MVC

6.1 說說自己對于 Spring MVC 了解?

6.2 SpringMVC 工作原理了解嗎?

7. Spring 框架中用到了哪些設計模式?

8. Spring 事務

8.1 Spring 管理事務的方式有幾種?

8.2 Spring 事務中的隔離級別有哪幾種?

8.3 Spring 事務中哪幾種事務傳播行為?

8.4 @Transactional(rollbackFor = Exception.class)注解了解嗎?

9. JPA

9.1 如何使用JPA在數據庫中非持久化一個字段?


這篇文章主要是想通過一些問題,加深大家對于 Spring 的理解,所以不會涉及太多的代碼!這篇文章整理了挺長時間,下面的很多問題我自己在使用 Spring 的過程中也并沒有注意,自己也是臨時查閱了很多資料和書籍補上的。網上也有一些很多關于 Spring 常見問題/面試題整理的文章,我感覺大部分都是互相 copy,而且很多問題也不是很好,有些回答也存在問題。所以,自己花了一周的業余時間整理了一下,希望對大家有幫助。

1. 什么是 Spring 框架?

Spring 是一種輕量級開發框架,旨在提高開發人員的開發效率以及系統的可維護性。Spring 官網:Spring | Home。

我們一般說 Spring 框架指的都是 Spring Framework,它是很多模塊的集合,使用這些模塊可以很方便地協助我們進行開發。這些模塊是:核心容器、數據訪問/集成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。比如:Core Container 中的 Core 組件是Spring 所有組件的核心,Beans 組件和 Context 組件是實現IOC和依賴注入的基礎,AOP組件用來實現面向切面編程。

Spring 官網列出的 Spring 的 6 個特征:

  • 核心技術 :依賴注入(DI),AOP,事件(events),資源,i18n,驗證,數據綁定,類型轉換,SpEL。

  • 測試 :模擬對象,TestContext框架,Spring MVC 測試,WebTestClient。

  • 數據訪問 :事務,DAO支持,JDBC,ORM,編組XML。

  • Web支持 : Spring MVC和Spring WebFlux Web框架。

  • 集成 :遠程處理,JMS,JCA,JMX,電子郵件,任務,調度,緩存。

  • 語言 :Kotlin,Groovy,動態語言。

2. 列舉一些重要的Spring模塊?

下圖對應的是 Spring4.x 版本。目前最新的5.x版本中 Web 模塊的 Portlet 組件已經被廢棄掉,同時增加了用于異步響應式處理的 WebFlux 組件。

Spring主要模塊

  • Spring Core: 基礎,可以說 Spring 其他所有的功能都需要依賴于該類庫。主要提供 IoC 依賴注入功能。

  • Spring Aspects : 該模塊為與AspectJ的集成提供支持。

  • Spring AOP :提供了面向切面的編程實現。

  • Spring JDBC : Java數據庫連接。

  • Spring JMS :Java消息服務。

  • Spring ORM : 用于支持Hibernate等ORM工具。

  • Spring Web : 為創建Web應用程序提供支持。

  • Spring Test : 提供了對 JUnit 和 TestNG 測試的支持。

3. @RestController vs @Controller

Controller 返回一個頁面

單獨使用 @Controller 不加 @ResponseBody的話一般使用在要返回一個視圖的情況,這種情況屬于比較傳統的Spring MVC 的應用,對應于前后端不分離的情況。

SpringMVC 傳統工作流程

@RestController 返回JSON 或 XML 形式數據

@RestController只返回對象,對象數據直接以 JSON 或 XML 形式寫入 HTTP 響應(Response)中,這種情況屬于 RESTful Web服務,這也是目前日常開發所接觸的最常用的情況(前后端分離)。

SpringMVC+RestController

@Controller +@ResponseBody 返回JSON 或 XML 形式數據

如果你需要在Spring4之前開發 RESTful Web服務的話,你需要使用@Controller 并結合@ResponseBody注解,也就是說@Controller +@ResponseBody= @RestController(Spring 4 之后新加的注解)。

@ResponseBody 注解的作用是將 Controller 的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到HTTP 響應(Response)對象的 body 中,通常用來返回 JSON 或者 XML 數據,返回 JSON 數據的情況比較多。

Spring3.xMVC RESTfulWeb服務工作流程

Reference:

  • Spring Framework: @RestController vs. @Controller - DZone (圖片來源)

  • https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-annotations-spring-mvc-rest.html?m=1

4. Spring IOC & AOP

4.1 談談自己對于 Spring IoC 和 AOP 的理解

IoC

IoC(Inverse of Control:控制反轉)是一種設計思想,就是 將原本在程序中手動創建對象的控制權,交由Spring框架來管理。 IoC 在其他語言中也有應用,并非 Spring 特有。 IoC 容器是 Spring 用來實現 IoC 的載體, IoC 容器實際上就是個Map(key,value),Map 中存放的是各種對象。

將對象之間的相互依賴關系交給 IoC 容器來管理,并由 IoC 容器完成對象的注入。這樣可以很大程度上簡化應用的開發,把應用從復雜的依賴關系中解放出來。 IoC 容器就像是一個工廠一樣,當我們需要創建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創建出來的。 在實際項目中一個 Service 類可能有幾百甚至上千個類作為它的底層,假如我們需要實例化這個 Service,你可能要每次都要搞清這個 Service 所有底層類的構造函數,這可能會把人逼瘋。如果利用 IoC 的話,你只需要配置好,然后在需要的地方引用就行了,這大大增加了項目的可維護性且降低了開發難度。

Spring 時代我們一般通過 XML 文件來配置 Bean,后來開發人員覺得 XML 文件來配置不太好,于是 SpringBoot 注解配置就慢慢開始流行起來。

推薦閱讀:Spring IoC有什么好處呢? - 知乎

Spring IoC的初始化過程:

Spring IoC的初始化過程

IoC源碼閱讀

  • Spring IOC 容器源碼分析_Javadoop

AOP

AOP(Aspect-Oriented Programming:面向切面編程)能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼降低模塊間的耦合度,并有利于未來的可拓展性和可維護性

Spring AOP就是基于動態代理的,如果要代理的對象,實現了某個接口,那么Spring AOP會使用JDK Proxy,去創建代理對象,而對于沒有實現接口的對象,就無法使用 JDK Proxy 去進行代理了,這時候Spring AOP會使用Cglib ,這時候Spring AOP會使用 Cglib 生成一個被代理對象的子類來作為代理,如下圖所示:

SpringAOPProcess

當然你也可以使用 AspectJ ,Spring AOP 已經集成了AspectJ ,AspectJ 應該算的上是 Java 生態系統中最完整的 AOP 框架了。

使用 AOP 之后我們可以把一些通用功能抽象出來,在需要用到的地方直接使用即可,這樣大大簡化了代碼量。我們需要增加新功能時也方便,這樣也提高了系統擴展性。日志功能、事務管理等等場景都用到了 AOP 。

4.2 Spring AOP 和 AspectJ AOP 有什么區別?

Spring AOP 屬于運行時增強,而 AspectJ 是編譯時增強。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字節碼操作(Bytecode Manipulation)。

Spring AOP 已經集成了 AspectJ ,AspectJ 應該算的上是 Java 生態系統中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加強大,但是 Spring AOP 相對來說更簡單,

如果我們的切面比較少,那么兩者性能差異不大。但是,當切面太多的話,最好選擇 AspectJ ,它比Spring AOP 快很多。

5. Spring bean

5.1 Spring 中的 bean 的作用域有哪些?

  • singleton : 唯一 bean 實例,Spring 中的 bean 默認都是單例的。

  • prototype : 每次請求都會創建一個新的 bean 實例。

  • request : 每一次HTTP請求都會產生一個新的bean,該bean僅在當前HTTP request內有效。

  • session : 每一次HTTP請求都會產生一個新的 bean,該bean僅在當前 HTTP session 內有效。

  • global-session: 全局session作用域,僅僅在基于portlet的web應用中才有意義,Spring5已經沒有了。Portlet是能夠生成語義代碼(例如:HTML)片段的小型Java Web插件。它們基于portlet容器,可以像servlet一樣處理HTTP請求。但是,與 servlet 不同,每個 portlet 都有不同的會話

5.2 Spring 中的單例 bean 的線程安全問題了解嗎?

的確是存在安全問題的。因為,當多個線程操作同一個對象的時候,對這個對象的成員變量的寫操作會存在線程安全問題。

但是,一般情況下,我們常用的 ControllerServiceDao 這些 Bean 是無狀態的。無狀態的 Bean 不能保存數據,因此是線程安全的。

常見的有 2 種解決辦法:

  1. 在類中定義一個 ThreadLocal 成員變量,將需要的可變成員變量保存在 ThreadLocal 中(推薦的一種方式)。

  2. 改變 Bean 的作用域為 “prototype”:每次請求都會創建一個新的 bean 實例,自然不會存在線程安全問題。

5.3 @Component 和 @Bean 的區別是什么?

  1. 作用對象不同: @Component 注解作用于類,而@Bean注解作用于方法。

  2. @Component通常是通過類路徑掃描來自動偵測以及自動裝配到Spring容器中(我們可以使用 @ComponentScan 注解定義要掃描的路徑從中找出標識了需要裝配的類自動裝配到 Spring 的 bean 容器中)。@Bean 注解通常是我們在標有該注解的方法中定義產生這個 bean,@Bean告訴了Spring這是某個類的示例,當我需要用它的時候還給我。

  3. @Bean 注解比 Component 注解的自定義性更強,而且很多地方我們只能通過 @Bean 注解來注冊bean。比如當我們引用第三方庫中的類需要裝配到 Spring容器時,則只能通過 @Bean來實現。

@Bean注解使用示例:

@Configuration
public class AppConfig {@Beanpublic TransferService transferService() {return new TransferServiceImpl();}
?
}

上面的代碼相當于下面的 xml 配置

<beans><bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

下面這個例子是通過 @Component 無法實現的。

@Bean
public OneService getService(status) {case (status)  {when 1:return new serviceImpl1();when 2:return new serviceImpl2();when 3:return new serviceImpl3();}
}

Spring的@bean注解-CSDN博客 @Bean的例子

5.4 將一個類聲明為Spring的 bean 的注解有哪些?

我們一般使用 @Autowired 注解自動裝配 bean,要想把類標識成可用于 @Autowired 注解自動裝配的 bean 的類,采用以下注解可實現:

  • @Component :通用的注解,可標注任意類為 Spring 組件。如果一個Bean不知道屬于哪個層,可以使用@Component 注解標注。

  • @Repository : 對應持久層即 Dao 層,主要用于數據庫相關操作。

  • @Service : 對應服務層,主要涉及一些復雜的邏輯,需要用到 Dao層。

  • @Controller : 對應 Spring MVC 控制層,主要用于接受用戶請求并調用 Service 層返回數據給前端頁面。

5.5 Spring 中的 bean 生命周期?

這部分網上有很多文章都講到了,下面的內容整理自:https://yemengying.com/2016/07/14/spring-bean-life-cycle/ ,除了這篇文章,再推薦一篇很不錯的文章 :https://www.cnblogs.com/zrtqsk/p/3735273.html 。

  • Bean 容器找到配置文件中 Spring Bean 的定義。

  • Bean 容器利用 Java Reflection API 創建一個Bean的實例。

  • 如果涉及到一些屬性值 利用 set()方法設置一些屬性值。

  • 如果 Bean 實現了 BeanNameAware 接口,調用 setBeanName()方法,傳入Bean的名字。

  • 如果 Bean 實現了 BeanClassLoaderAware 接口,調用 setBeanClassLoader()方法,傳入 ClassLoader對象的實例。

  • 與上面的類似,如果實現了其他 *.Aware接口,就調用相應的方法。

  • 如果有和加載這個 Bean 的 Spring 容器相關的 BeanPostProcessor 對象,執行postProcessBeforeInitialization() 方法

  • 如果Bean實現了InitializingBean接口,執行afterPropertiesSet()方法。

  • 如果 Bean 在配置文件中的定義包含 init-method 屬性,執行指定的方法。

  • 如果有和加載這個 Bean的 Spring 容器相關的 BeanPostProcessor 對象,執行postProcessAfterInitialization() 方法

  • 當要銷毀 Bean 的時候,如果 Bean 實現了 DisposableBean 接口,執行 destroy() 方法。

  • 當要銷毀 Bean 的時候,如果 Bean 在配置文件中的定義包含 destroy-method 屬性,執行指定的方法。

圖示:

Spring Bean 生命周期

與之比較類似的中文版本:

Spring Bean 生命周期

6. Spring MVC

https://blog.51cto.com/haolloyin/346128

從SpringMVC來看適配器模式-CSDN博客

6.1 說說自己對于 Spring MVC 了解?

談到這個問題,我們不得不提提之前 Model1 和 Model2 這兩個沒有 Spring MVC 的時代。

  • Model1 時代 : 很多學 Java 后端比較晚的朋友可能并沒有接觸過 Model1 模式下的 JavaWeb 應用開發。在 Model1 模式下,整個 Web 應用幾乎全部用 JSP 頁面組成,只用少量的 JavaBean 來處理數據庫連接、訪問等操作。這個模式下 JSP 既是控制層又是表現層。顯而易見,這種模式存在很多問題。比如①將控制邏輯和表現邏輯混雜在一起,導致代碼重用率極低;②前端和后端相互依賴,難以進行測試并且開發效率極低;

  • Model2 時代 :學過 Servlet 并做過相關 Demo 的朋友應該了解“Java Bean(Model)+ JSP(View,)+Servlet(Controller) ”這種開發模式,這就是早期的 JavaWeb MVC 開發模式。Model:系統涉及的數據,也就是 dao 和 bean。View:展示模型中的數據,只是用來展示。Controller:處理用戶請求都發送給 ,返回數據給 JSP 并展示給用戶。

Model2 模式下還存在很多問題,Model2的抽象和封裝程度還遠遠不夠,使用Model2進行開發時不可避免地會重復造輪子,這就大大降低了程序的可維護性和復用性。于是很多JavaWeb開發相關的 MVC 框架應運而生比如Struts2,但是 Struts2 比較笨重。隨著 Spring 輕量級開發框架的流行,Spring 生態圈出現了 Spring MVC 框架, Spring MVC 是當前最優秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加簡單和方便,開發效率更高,并且 Spring MVC 運行速度更快。

MVC 是一種設計模式,Spring MVC 是一款很優秀的 MVC 框架。Spring MVC 可以幫助我們進行更簡潔的Web層的開發,并且它天生與 Spring 框架集成。Spring MVC 下我們一般把后端項目分為 Service層(處理業務)、Dao層(數據庫操作)、Entity層(實體類)、Controller層(控制層,返回數據給前臺頁面)。

Spring MVC 的簡單原理圖如下:

6.2 SpringMVC 工作原理了解嗎?

原理如下圖所示:

SpringMVC運行原理

上圖的一個筆誤的小問題:Spring MVC 的入口函數也就是前端控制器 DispatcherServlet 的作用是接收請求,響應結果。

流程說明(重要):

  1. 客戶端(瀏覽器)發送請求,直接請求到 DispatcherServlet

  2. DispatcherServlet 根據請求信息調用 HandlerMapping,解析請求對應的 Handler

  3. 解析到對應的 Handler(也就是我們平常說的 Controller 控制器)后,開始由 HandlerAdapter 適配器處理。

  4. HandlerAdapter 會根據 Handler來調用真正的處理器來處理請求,并處理相應的業務邏輯。

  5. 處理器處理完業務后,會返回一個 ModelAndView 對象,Model 是返回的數據對象,View 是個邏輯上的 View

  6. ViewResolver 會根據邏輯 View 查找實際的 View

  7. DispaterServlet 把返回的 Model 傳給 View(視圖渲染)。

  8. View 返回給請求者(瀏覽器)

7. Spring 框架中用到了哪些設計模式?

關于下面一些設計模式的詳細介紹,可以看筆主前段時間的原創文章《面試官:“談談Spring中都用到了那些設計模式?”。》 。

  • 工廠設計模式 : Spring使用工廠模式通過 BeanFactoryApplicationContext 創建 bean 對象。

  • 代理設計模式 : Spring AOP 功能的實現。

  • 單例設計模式 : Spring 中的 Bean 默認都是單例的。

  • 模板方法模式 : Spring 中 jdbcTemplatehibernateTemplate 等以 Template 結尾的對數據庫操作的類,它們就使用到了模板模式。

  • 包裝器設計模式 : 我們的項目需要連接多個數據庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的數據庫。這種模式讓我們可以根據客戶的需求能夠動態切換不同的數據源。

  • 觀察者模式: Spring 事件驅動模型就是觀察者模式很經典的一個應用。

  • 適配器模式 :Spring AOP 的增強或通知(Advice)使用到了適配器模式、spring MVC 中也是用到了適配器模式適配Controller

  • ......

8. Spring 事務

8.1 Spring 管理事務的方式有幾種?

  1. 編程式事務,在代碼中硬編碼。(不推薦使用)

  2. 聲明式事務,在配置文件中配置(推薦使用)

聲明式事務又分為兩種:

  1. 基于XML的聲明式事務

  2. 基于注解的聲明式事務

8.2 Spring 事務中的隔離級別有哪幾種?

TransactionDefinition 接口中定義了五個表示隔離級別的常量:

  • TransactionDefinition.ISOLATION_DEFAULT: 使用后端數據庫默認的隔離級別,Mysql 默認采用的 REPEATABLE_READ隔離級別 Oracle 默認采用的 READ_COMMITTED隔離級別.

  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔離級別,允許讀取尚未提交的數據變更,可能會導致臟讀、幻讀或不可重復讀

  • TransactionDefinition.ISOLATION_READ_COMMITTED: 允許讀取并發事務已經提交的數據,可以阻止臟讀,但是幻讀或不可重復讀仍有可能發生

  • TransactionDefinition.ISOLATION_REPEATABLE_READ: 對同一字段的多次讀取結果都是一致的,除非數據是被本身事務自己所修改,可以阻止臟讀和不可重復讀,但幻讀仍有可能發生。

  • TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔離級別,完全服從ACID的隔離級別。所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止臟讀、不可重復讀以及幻讀。但是這將嚴重影響程序的性能。通常情況下也不會用到該級別。

8.3 Spring 事務中哪幾種事務傳播行為?

支持當前事務的情況:

  • TransactionDefinition.PROPAGATION_REQUIRED: 如果當前存在事務,則加入該事務;如果當前沒有事務,則創建一個新的事務。

  • TransactionDefinition.PROPAGATION_SUPPORTS: 如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。

  • TransactionDefinition.PROPAGATION_MANDATORY: 如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。(mandatory:強制性)

不支持當前事務的情況:

  • TransactionDefinition.PROPAGATION_REQUIRES_NEW: 創建一個新的事務,如果當前存在事務,則把當前事務掛起。

  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事務方式運行,如果當前存在事務,則把當前事務掛起。

  • TransactionDefinition.PROPAGATION_NEVER: 以非事務方式運行,如果當前存在事務,則拋出異常。

其他情況:

  • TransactionDefinition.PROPAGATION_NESTED: 如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價于TransactionDefinition.PROPAGATION_REQUIRED。

8.4 @Transactional(rollbackFor = Exception.class)注解了解嗎?

我們知道:Exception分為運行時異常RuntimeException和非運行時異常。事務管理對于企業應用來說是至關重要的,即使出現異常情況,它也可以保證數據的一致性。

@Transactional注解作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。如果類或者方法加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數據庫里面的數據也會回滾。

@Transactional注解中如果不配置rollbackFor屬性,那么事務只會在遇到RuntimeException的時候才會回滾,加上rollbackFor=Exception.class,可以讓事務在遇到非運行時異常時也回滾。

關于 @Transactional 注解推薦閱讀的文章:

  • 透徹的掌握 Spring 中@transactional 的使用

9. JPA

9.1 如何使用JPA在數據庫中非持久化一個字段?

假如我們有有下面一個類:

Entity(name="USER")
public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "ID")private Long id;@Column(name="USER_NAME")private String userName;@Column(name="PASSWORD")private String password;private String secrect;}

如果我們想讓secrect 這個字段不被持久化,也就是不被數據庫存儲怎么辦?我們可以采用下面幾種方法:

static String transient1; // not persistent because of static
final String transient2 = “Satish”; // not persistent because of final
transient String transient3; // not persistent because of transient
@Transient
String transient4; // not persistent because of @Transient

一般使用后面兩種方式比較多,我個人使用注解的方式比較多。

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

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

相關文章

C語言第二十九彈---浮點數在內存中的存儲

?個人主頁&#xff1a; 熬夜學編程的小林 &#x1f497;系列專欄&#xff1a; 【C語言詳解】 【數據結構詳解】 目錄 1、浮點數在內存中的存儲 1.1、練習 1.2、浮點數怎么轉化為二進制 1.3、浮點數的存儲 1.3.1、浮點數存的過程 1.3.2、浮點數取的過程 1.3、題目解析…

FPGA領域頂級學術會議

FPGA領域頂級學術會議主要有FPGA,FCCM,FPL和FPT。 1 FPGA 會議全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 網站是:https://dl.acm.org/conference/fpga FPGA常年在美國舉辦,每年2月,偏FPGA基礎研究; 該會議的論文免費下載。這個比…

【MATLAB源碼-第144期】基于matlab的蝴蝶優化算法(BOA)無人機三維路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 ?蝴蝶優化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶覓食行為的一種新穎的群體智能算法。它通過模擬蝴蝶個體在尋找食物過程中的嗅覺導向行為以及隨機飛行行為&#xff0c;來探索解空間…

vue3前端項目開發,具備純天然的防止爬蟲采集的特征

vue3前端項目開發,具備純天然的防止爬蟲采集的特征&#xff01;眾所周知&#xff0c;網絡爬蟲可以在網上爬取到一些數據&#xff0c;很多公司&#xff0c;為了自己公司的數據安全&#xff0c; 尤其是web端項目&#xff0c;不希望被爬蟲采集。那么&#xff0c;您可以使用vue技術…

spark ui的job數,stage數以及task數

背景 我們在查看spark ui的界面時&#xff0c;一段spark sql的執行經常看到會有對應有幾個job&#xff0c;然后每個job又有幾個stage&#xff0c;而每個stage又有好多個task&#xff0c;那么這些job,stage,task是怎么和spark 算子對應的呢 算子和job數,stage數以及task數的對…

代碼隨想錄算法訓練營29期|day59 任務以及具體安排

第九章 動態規劃part16 583. 兩個字符串的刪除操作 // dp數組中存儲word1和word2最長相同子序列的長度 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for …

Gartner信息圖:2024 年44種安全和風險管理技術采用路線圖

Gartner發布的該信息圖確定了全球企業正在采用的 44 種安全相關技術&#xff0c;并根據采用階段、部署風險和企業價值對它們進行了映射。安全和風險管理領導者可以使用此信息圖將他們的技術投資與同行進行比較。 2024 年安全和風險管理技術采用路線圖 SRM 領導者可以使用此信息…

世微AP8P059 靜態功耗小 太陽能人體紅外線感應IC

概述 AP8P059 是一款集成低壓 LDO 、光 控、充電控制、過充保護、欠壓保護、 PIR 感應、延時為一體的人體感應太陽能 LED 燈控制芯片&#xff0c;只需要很少的外接元件&#xff0c;適 用于鋰電池供電的 PIR 人體感應 LED 燈具 的應用。 外置的一級帶通增益放大 器便…

Python實現視頻轉音頻、音頻轉文本的最佳方法

文章目錄 Python實現視頻轉音頻和音頻轉文字視頻轉音頻步驟 1&#xff1a;導入moviepy庫步驟 2&#xff1a;選擇視頻文件步驟 3&#xff1a;創建VideoFileClip對象步驟 4&#xff1a;提取音頻步驟 5&#xff1a;保存音頻文件 音頻轉文字步驟 1&#xff1a;導入SpeechRecognitio…

RV新聞概要 --- 2024/02/23

來源&#xff1a;https://mp.weixin.qq.com/s/EEJVLQnXvgQTbtU_yrW9lw 晶心科技是一家上市公司&#xff08;TWSE&#xff1a;6533&#xff1b;SIN&#xff1a;US03420C2089&#xff1b;ISIN&#xff1a;US03420C1099&#xff09;&#xff0c;已有18 年的經營歷史&#xff0c;是…

單向循環鏈表的操作

main函數&#xff1a; #ifndef __loopLinkList_H__#define __loopLinkList_H__typedef int datatype;union msg{ //若數據的類型也為int&#xff0c;則不需要這個聯合體datatype data;int len; //放頭結點&#xff0c;記錄鏈表長度};typedef struct node{union msg te…

Istio實戰:Istio Kiali部署與驗證

目錄 前言一、Istio安裝小插曲 注意事項 二、Kiali安裝三、Istio測試參考資料 前言 前幾天我就開始搗騰Istio。前幾天在執行istioctl install --set profiledemo -y 的時候老是在第二步就報錯了&#xff0c;開始我用的istio版本是1.6.8。 后面查看k8s與istio的版本對應關系后發…

vCenter、vSphere Client硬盤擴容詳解

文章目錄 1、需求2、vSphere 操作流程3、服務器操作3.1、查看分區空間大小3.2、列出所有可用塊設備的信息3.3、新建分區3.4、重讀分區表信息3.5、格式化分區信息3.6、查看卷組的詳細狀態3.7、創建物理卷3.8、擴容卷組3.9、邏輯卷在線擴容3.10、顯示物理卷屬性3.11、XFS 文件系統…

最少停車數(C 語言)

題目描述 特定大小的停車場&#xff0c;數組cars[]表示&#xff0c;其中1表示有車&#xff0c;0表示沒車。車輛大小不一&#xff0c;小車占一個車位&#xff08;長度1&#xff09;&#xff0c;貨車占兩個車位&#xff08;長度2&#xff09;&#xff0c;卡車占三個車位&#xf…

Rollup + Ts

Rollup Ts RollupTs demo 一、文件配置 | - src | | - utils | | | - .ts | | - .babelrc | | - main.js | | - style.css | - package.json | - rollup.config.js | - tsconfig.json二、插件下載 rollup // rollup 基本的包 typescript // ts 包 rollup/plug…

如何做bug分析 ?bug分析什么 ? 為什么要做bug分析 ?

每當我們完成一個版本測試時&#xff0c;總會在測試報告中添加一些分析bug的指標 &#xff0c;主要用于分析在測試過程中存在的問題 。但是在分析的過程中你就可能遇到如下的問題 &#xff1a; 我應該分析那些指標呢 &#xff1f;每一個具體的指標該如何分析 &#xff1f;它能說…

Vue3學習——computed、watch、watchEffect

computed 與Vue2.x中computed配置功能一致寫法 import {computed} from vuesetup(){...//計算屬性——簡寫let fullName computed(()>{return person.firstName - person.lastName})//計算屬性——完整let fullName computed({get()return person.firstName - perso…

算法——模擬

1. 什么是模擬算法&#xff1f; 官方一點來說 模擬算法&#xff08;Simulation Algorithm&#xff09;是一種通過模擬現實或抽象系統的運行過程來研究、分析或解決問題的方法。它通常涉及創建一個模型&#xff0c;模擬系統中的各種事件和過程&#xff0c;以便觀察系統的行為&a…

Redis緩存一致性問題(自用記錄)

背景 在開發過程中&#xff0c;redis緩存技術被大范圍應用。由于現在的系統大多是分布式的&#xff0c;高并發的&#xff0c;redis和傳統的數據庫&#xff0c;存在數據不一致的問題。 解決方案 本文主要探討兩者數據不一致的解決方案&#xff1a; 給緩存設置過期時間&#x…

dell戴爾電腦靈越系列Inspiron 15 3520原廠Win11系統中文版/英文版

Dell戴爾筆記本靈越3520原裝出廠Windows11系統包&#xff0c;恢復出廠開箱預裝OEM系統 鏈接&#xff1a;https://pan.baidu.com/s/1mMOAnvXz5NCDO_KImHR5gQ?pwd3nvw 提取碼&#xff1a;3nvw 原廠系統自帶所有驅動、出廠主題壁紙、系統屬性聯機支持標志、Office辦公軟件、MyD…