1. 程式人生 > 電腦技巧 >Excel MODE 眾數函數:尋找出現次數最多的數字教學

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事務

四種特性:

原子性:即不可分割性,事務要麼全部被執行,要麼就全部不被執行。

一致性:事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態

永續性:事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到儲存。

隔離性:在事務正確提交之前,不允許把該事務對資料的任何改變提供給任何其他事務,

四種隔離界別:

  1. read uncommitted 髒讀,可重複讀,幻讀
  2. read committed:可重複讀,幻讀
  3. repeatable read 幻讀(預設的)
  4. seriaziable 都不行

建立執行緒的方式

  1. 實現Runnable介面,重寫run方法
  2. 繼承Thread,重寫run方法
  3. 實現Callable介面,重寫call方法,使用FutureTask封裝Callable的物件,然後用get方法獲取返回值

1、3方法啟動執行緒需要使用Thread進行啟動

Thread方法

  1. sleep方法
  2. yield方法,將執行緒放到就緒序列
  3. currentThread方法,獲取當前執行的執行緒

SpringBoot的特性

  1. 起步依賴
  2. 健康檢查
  3. 自動裝配
  4. 內嵌服務

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兩種持久化方法

  1. RDB

預設開啟的方式,

save 10 1
10秒內1個key被修改就發生快照就行儲存
  1. AOF

開啟方法appendonly yes,開始之後當redis關閉後會將所有使用的命令進行儲存,當redis啟動後,會重新執行這些命令

appendfsync always 每次語句都儲存
appendfsync everysec 每秒儲存一次(預設)
appendfsync no 30秒一次

區別:

  1. RDB可能會導致在redis關閉前的一段資料未被持久化,但是恢復效率高

  2. AOF基本可以保證每條資料都被儲存,但是產生的持久檔案大,恢復效率慢

Redis事務

Redis事務功能是通過MULTI、EXEC、DISCARD三個原語實現的

  1. 如果在一個事務中的命令出現錯誤,那麼所有的命令都不會執行
  2. 如果在一個事務中出現執行錯誤,那麼正確的命令會被執行

Redis叢集

哨兵模式,master和slave,如果master宕機,slave會自己選舉形成新的master

如果原來的master恢復後,他就沒有slave了

Bean的生命週期

  1. 在@Bean裡指定init-method和destroy-method
  2. 使該元件實現InitializingBean,DisposableBean,並重寫其方法
  3. 使用@PostConstruct和@PreDestroy註解
  4. 實現BeanPostProcessor,並將其新增到容器中 (重點)

如果實現BeanPostProcessor介面,那麼該Bean建立建立的時間會比普通Bean早

執行流程

1. 建立Bean,有介面使用jdk動態代理,無介面使用cglib動態代理(僅限於Component註解,而使用@Bean直接呼叫方法)
2. 執行一些Aware方法,例:ApplicationContextAware介面的實現類
3. 執行applyBeanPostProcessorsBeforeInitialization
4. 執行初始化方法,先執行InitializingBean的方法,在執行其他init-Method
5. 執行applyBeanPostProcessorsAfterInitialization
6. 初始化完成後,會註冊銷燬的方法,當容器正常關閉之前會執行這些方法

Bean的作用域

  1. singleton
  2. prototype
  3. request
  4. session

CAP 理論

  • 一致性:分散式環境下,多個節點的資料是否強一致。
  • 可用性:分散式服務能一直保證可用狀態。 當用戶發出一個請求後,服務能在有限時間內返回結果。
  • 分割槽容忍性:特指對網路分割槽的容忍性。

Eureka是CP,Zookeeper和Consul是AP,nacos既可以支援AP也可以支援CP

#{}和${}的區別

  • #{}是佔位符,預編譯處理;${}是拼接符,字串替換,沒有預編譯處理。

  • Mybatis在處理#{}時,#{}傳入引數是以字串傳入,會將SQL中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值。

  • #{} 可以有效的防止SQL注入,提高系統安全性;${} 不能防止SQL 注入