商城網(wǎng)站建設(shè)經(jīng)驗seo工具軟件
1、ThreadLocal 是什么
是 Java 中線程的本地方法變量,用來存儲每個線程的私有數(shù)據(jù),每個線程都有它的獨立副本,相互隔離,互不影響
2、ThreadLocal 實現(xiàn)原理
每個 ThreadLocal 都有一個 ThreadLocalMap 對象,用來存儲 ThreadLocal 變量和對應(yīng)的值,通過 ThreadLocal 對象的 get()、set() 方法訪問對應(yīng)的 ThreadLocalMap 的值
3、ThreadLocal 的使用場景
token 驗證之后會把用戶相關(guān)的信息存儲在 ThreadLocal 中,方便之后業(yè)務(wù)獲取當(dāng)前業(yè)務(wù)信息
數(shù)據(jù)庫連接、事務(wù)管理,查日志的記錄
4、ThreadLocal 注意事項
ThreadLocal 是不安全的,存在內(nèi)存泄漏問題,當(dāng)一個線程結(jié)束時,需要手動清除對應(yīng)的 ThreadLocalMap,以避免內(nèi)存泄露問題(在線程最后 remove() )
5、ThreadLocal 優(yōu)缺點
優(yōu)點:線程安全:他會建立一個獨立的變量副本,確保他們之間互不影響
簡化編程模型
可以跨層:跨類跨方法傳遞變量
數(shù)據(jù)隔離:每個線程提供單獨的上下文環(huán)境,方便跨層傳遞,避免參數(shù)傳遞的復(fù)雜性
缺點:會造成內(nèi)存泄漏
6、Spring Boot 如何讀取配置文件
@Value 屬性注入
@ConditionalOnProperty(prefix = "") Java Bean
@PropertySource
7、Spring Boot 配置文件的優(yōu)先級
file:./config/application.properties 高
file:./application.properties
classpath:/config/application.properties
classpath:/application.properties 低
8、SpringBoot 常用注解
啟動層:@SpringBootApplication(總代理)、@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan、@MapperScan("com.by.dao")
controller 層:@RestController、@RequestMapping、@ResponseBody、@AutoWired、@GetMapping、@PostMapping、@PutMapping、@DelectMapping
service 層:@Service
dao 層:@Mapper
@Configuration、@Bean、@Resource、@value、@ConditionalOnProperty
9、常用的日志框架
SLF4j(Simple Logging Facade for Java)門面模式(抽象層)
Log4j、Log4j2、logback 日志的實現(xiàn)
10、ELK
是由Elasticsearch (ES):非關(guān)系型數(shù)據(jù)庫
Logstash (LS):采集器
Kibana (KB):UI 可視化工具
11、EFK
是由Elasticsearch (ES):非關(guān)系型數(shù)據(jù)庫
Filebeat (LS):采集器
Kibana (KB):UI 可視化工具
Filebeat 相對于 Logstash 來說更為輕量級,資源消耗較小
12、MDC
其實就是 ThreadLocal 的升級版 InheritableThreadLocal ,它不僅繼承了 ThreadLocal 還擴(kuò)展了一些功能,就比如說子線程繼承了父線程的 ThreadLocal 的值(簡單說父線程會將它腦門上的標(biāo)簽復(fù)制一份給到子線程,讓子線程也可以被 MDC 所訪問)
對于 web 應(yīng)用來說,會在請求的最開始(在攔截器 Filter)保存這些數(shù)據(jù)
13、InheritableThreadLocal 與ThreadLocal 的區(qū)別
InheritableThreadLocal 繼承了 ThreadLocal 類,還擴(kuò)展了一些其他的功能
準(zhǔn)確的說就是 InheritableThreadLocal 可以讓子線程繼承父線程的 ThreadLocal 的值,ThreadLocal 不可以