Excel MODE 眾數函數:尋找出現次數最多的數字教學
HashMap和HashTable
HashTable是執行緒安全的,HashMap不是執行緒安全的
HashTable是使用Entry陣列作為儲存鍵值對的,HashMap是使用Node陣列來儲存鍵值對的,Entry和Node基本功能相似,但是Entry裡面多了個Clone方法
HashMap預設初始化Node陣列長度是16,臨界值大於四分之三就會進行擴容2倍,如果key的Hash值衝突就會形成連結串列然後連線上陣列,如果長度大於8就會形成紅黑樹。
HashTable也是當超過四分之三就會擴容,擴容2倍+1,hash衝突是隻是用連結串列進行儲存
HashMap在Node陣列中儲存方式是使用hashCode進行儲存和獲取的,而當Hash衝突後是通過equals進行比較,然後獲取的,後面值會覆蓋前面的
HashMap可以key為null,value為null,而HashTable中key或者value為null就會報空指標異常
HashMap和ConcurrentHashMap
ConcurrentHashMap是執行緒安全的,HashMap不是執行緒安全的
ConcurrentHashMap中基本操作和HashMap是一致的,比如初始化長度16,擴容2倍,紅黑樹也是衝突數8才轉換
Mysql事務
四種特性:
原子性:即不可分割性,事務要麼全部被執行,要麼就全部不被執行。
一致性:事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態
永續性:事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到儲存。
隔離性:在事務正確提交之前,不允許把該事務對資料的任何改變提供給任何其他事務,
四種隔離界別:
- read uncommitted 髒讀,可重複讀,幻讀
- read committed:可重複讀,幻讀
- repeatable read 幻讀(預設的)
- seriaziable 都不行
建立執行緒的方式
- 實現Runnable介面,重寫run方法
- 繼承Thread,重寫run方法
- 實現Callable介面,重寫call方法,使用FutureTask封裝Callable的物件,然後用get方法獲取返回值
1、3方法啟動執行緒需要使用Thread進行啟動
Thread方法
- sleep方法
- yield方法,將執行緒放到就緒序列
- currentThread方法,獲取當前執行的執行緒
SpringBoot的特性
- 起步依賴
- 健康檢查
- 自動裝配
- 內嵌服務
Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?
啟動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了以下 3 個註解:
@SpringBootConfiguration:組合了 @Configuration 註解,實現配置檔案的功能。
@EnableAutoConfiguration:開啟自動配置的功能,也可以關閉某個自動配置的選項,如關閉資料來源自動配置功能:
@SpringBootApplication:
@ComponentScan
@SpringBootConfiguration == @Configuration
@EnableAutoConfiguration-->@Import(AutoConfigurationImportSelector.class) #掃描spring.factories檔案
自定義Starter
使用@Conditional,@ConditionalOnMissingBean,@ConditionalOnBean等等註解
然後建立一個META-INF資料夾,建立spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.guan.boot.AutoConfiguration
# springboot的自動配置類 #自定義starter的路徑
如何使用 Spring Boot 實現異常處理?
Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類丟擲的所有異常。@ExceptionHandler(指定異常型別)
SpringBoot開啟定時器功能
在主啟動類上加上@EnableScheduling註解
然後在定時方法上加上@Scheduled註解,然後使用裡面cron屬性使用cron表示式
git基本操作
git init
git clone url
git add .
git commit -m "文字"
git remote add origin(隨便起的) url
git remote rm origin
git push origin 分支名本地
git pull origin 遠端倉庫分支名
git branch -- 顯示所有分支
git branch 分支名
git checkout 分支名 --切換分支
git merge 分支名 --將本分支和該分支進行合併
git branch -d 分支名 --刪除分支
合併遠端倉庫的兩個分支( a 和 b---> ab )
git remote add origin 111
git branch a
git branch b
git branch ab
git checkout a
git pull origin a
git checkout b
git pull origin b
git checkout ab
git merge a
git merge b
git push origin ab
Redis的資料型別
String,List,Set,Zset,Hash
使用場景
計時器,頁面的快取資料,不同埠的Session共享
因為Redis的讀能力強,所有一般讀而不修改的資料都是放到redis裡面進行快取的
Redis兩種持久化方法
- RDB
預設開啟的方式,
save 10 1
10秒內1個key被修改就發生快照就行儲存
- AOF
開啟方法appendonly yes
,開始之後當redis關閉後會將所有使用的命令進行儲存,當redis啟動後,會重新執行這些命令
appendfsync always 每次語句都儲存
appendfsync everysec 每秒儲存一次(預設)
appendfsync no 30秒一次
區別:
-
RDB可能會導致在redis關閉前的一段資料未被持久化,但是恢復效率高
-
AOF基本可以保證每條資料都被儲存,但是產生的持久檔案大,恢復效率慢
Redis事務
Redis事務功能是通過MULTI、EXEC、DISCARD三個原語實現的
- 如果在一個事務中的命令出現錯誤,那麼所有的命令都不會執行;
- 如果在一個事務中出現執行錯誤,那麼正確的命令會被執行。
Redis叢集
哨兵模式,master和slave,如果master宕機,slave會自己選舉形成新的master
如果原來的master恢復後,他就沒有slave了
Bean的生命週期
- 在@Bean裡指定init-method和destroy-method
- 使該元件實現InitializingBean,DisposableBean,並重寫其方法
- 使用@PostConstruct和@PreDestroy註解
- 實現BeanPostProcessor,並將其新增到容器中 (重點)
如果實現BeanPostProcessor介面,那麼該Bean建立建立的時間會比普通Bean早
執行流程
1. 建立Bean,有介面使用jdk動態代理,無介面使用cglib動態代理(僅限於Component註解,而使用@Bean直接呼叫方法)
2. 執行一些Aware方法,例:ApplicationContextAware介面的實現類
3. 執行applyBeanPostProcessorsBeforeInitialization
4. 執行初始化方法,先執行InitializingBean的方法,在執行其他init-Method
5. 執行applyBeanPostProcessorsAfterInitialization
6. 初始化完成後,會註冊銷燬的方法,當容器正常關閉之前會執行這些方法
Bean的作用域
- singleton
- prototype
- request
- session
CAP 理論
- 一致性:分散式環境下,多個節點的資料是否強一致。
- 可用性:分散式服務能一直保證可用狀態。 當用戶發出一個請求後,服務能在有限時間內返回結果。
- 分割槽容忍性:特指對網路分割槽的容忍性。
Eureka是CP,Zookeeper和Consul是AP,nacos既可以支援AP也可以支援CP
#{}和${}的區別
-
#{}是佔位符,預編譯處理;${}是拼接符,字串替換,沒有預編譯處理。
-
Mybatis在處理#{}時,#{}傳入引數是以字串傳入,會將SQL中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值。
-
#{} 可以有效的防止SQL注入,提高系統安全性;${} 不能防止SQL 注入