本文首發於cartoon的博客
轉載請註明出處:https://cartoonyu.github.io/c...java
java基礎
-
Iterator與ListIterator的區別mysql
- Iterator與ListIterator都是Collection的迭代器實現,ListIterator繼承於Iterator
-
遍歷集合分類git
- Iterator能夠遍歷Set,List,Queue的實現類
- ListIterator只能遍歷List接口下的實現類
-
修改被迭代集合github
- Iterator不能對元素進行修改或者添加元素
- ListIterator能夠在迭代中修改添加元素
-
刪除元素算法
- 兩個均可以在迭代過程當中刪除元素
-
遍歷方式spring
- Iterator只能向下遍歷
- ListIterator能夠向前向後遍歷,同時能夠獲取當前迭代元素的索引
-
synchronized和ReentrantLock的區別sql
-
共同點數據庫
- 都是協調線程間訪問互斥資源
- 可重入,同一線程能夠屢次得到同一鎖
- 都保證了可見性和互斥性
-
不一樣點設計模式
-
獲取鎖的方式緩存
- ReentrantLock須要顯式獲取鎖
- synchronized隱式獲取鎖
-
靈活性
- ReentrantLock能夠響應中斷,能夠切換鎖的公平性
- synchronized不能夠響應中斷,鎖的獲取只能依靠系統調度
-
存在位置
- ReentrantLock是API級別
- synchronized是JVM級別
-
底層實現
- synchronized是同步阻塞式的,採用悲觀併發策略
- ReentrantLock時同步非阻塞式的,採用樂觀併發策略
-
hasCode,equals的瞭解
- hasCode方法是JVM計算對象的哈希碼的方法,計算結果會放在對象頭的哈希碼字段中
- equals是經常使用的對象對比方法
- 重寫equals,須要重寫hashCode
- equals返回true,hashCode也返回相等的整數
- equasl返回false,hasCode返回不必定相等
- hashCode相等,equals對比不必定相等
- hashCode不相等,equals返回false
JVM
-
java對象在jvm的組成
-
對象頭
-
自身運行數據
- 哈希碼
- GC分代年齡
- 鎖狀態標誌
- 線程鎖
- 偏向線程ID
- 偏向時間戳
-
類型指針
- 對象指向元數據的指針
- 實例數據
- 對齊字節
-
雙親委派模型的概念
- 雙親委派模型發生在類加載的過程當中
- 當前類不直接負責加載,將類依次遞歸交給父加載器進行加載
- 若父加載器都不能加載,則當前類負責加載
-
若是我不想用這個雙親加載模型,怎麼操做
- 自定義類加載器,重載loadClass方法
數據庫
-
延遲加載是什麼?Mybatis 是否支持延遲加載?
-
延遲加載
- 符合查詢條件的結果只加載知足要求的部分
- 若信息須要更詳細則再查詢從關聯表
-
延遲加載配置
- 查詢語句中開啓fetchType
- 全局配置文件中
- 開啓lazyLoadingEnabled(開啓全局延遲加載)
- 關閉aggressiveLazyLoading
- 開啓lazyLoadTriggerMethods
-
select語句是怎麼執行的
-
鏈接器
- 客戶端經過帳戶密碼進入到mysql服務器層中
-
查詢緩存
-
查詢時候執行過此條select語句
- 若執行過,直接返回緩存結果
- 若未執行過,進入第三步
-
分析器
- 詞法分析
- 語法分析
-
優化器
- 經過選擇索引實現查詢速度的優化
-
執行器
- 操做引擎,進行查詢操做並返回結果
Spring
-
spring的做用域
- singleton(多用於無狀態)
- prototype(多用於有狀態)
- session
- request
- global session
-
spring的bean線程安全嗎
- prototype以及request再每次被調用會產生新對象,因此是線程安全的
- 無狀態的singleton線程安全,有狀態的singleton線程不安全
- session以及global session會形成線程競爭
設計模式
-
裝飾者模式的原理實現以及java中使用場景
-
原理以及實現
- 裝飾者與被裝飾者有一致的行爲流程
- 定義一個接口,接口方法爲一致的行爲流程
- 裝飾者與被裝飾者實現同一個接口,並重寫方法實現自身邏輯
- 當須要裝飾時,傳入被裝飾者到裝飾者的實現邏輯中,並返回裝飾者的對象
-
使用場景
- java的IO相關類
算法
-
字符串統計最後一個單詞的長度(leetcode58)
-
題目
- 給定一個僅包含大小寫字母和空格
' '
的字符串,返回其最後一個單詞的長度。若是不存在最後一個單詞,請返回 0 。
-
樣例
- 輸入:"Hello World"
- 輸出:5
-
解法
- 倒序遍歷去除字符串最後的全部空格
- 定義計數器緩存長度
- 循環直到遇到空格,計數器自增