JAVA一些面試題及知識點

JAVA 分佈式項目常見面試題蒐集

1.Redis保證熱點數據

使用redis的數據淘汰策略
在線更新配置 /apps/svr/redis/bin/redis-cli -p 6921 config set maxmemory-policy volatile-lru
一共五種更新策略:
1.volatile-lru 利用lru策略對使用時間最早的,使用次數最少的key並且設置了過期時間的Key進行淘汰
2.allkeys-lru 利用lru策略對使用時間最早的,使用次數最少的Key進行淘汰
3.volatile-random 隨機淘汰設置過期時間的key
4.allkeys-random 隨機淘汰key
5.volatile-ttl 淘汰剩餘有效期最短的key

2.假設一個接口接收10個請求,判斷總完成的時間

可以使用completableFuture接口,每一個請求建立一次supplyAsync/runyAsync, 等待完成後調用complete回調函數計算每次請求的結束時間。

3.假設一個學生實體類中有姓名,年齡,性別幾個字段,在一個集合中有10個學生類,如何按年齡排序

使學生類實現comparator接口,重寫compare方法

4.如何保證接口的安全性

1.使用token驗證
2.使用第三方如spring security, shiro等安全框架

5.什麼是CAS算法,有什麼作用?

含義:比較並替換。實現CAS需要三個數,內存地址值、舊的預期值、新的替換值,在對變量進行操作前需要先用內存地址值和舊的期望值做出比較,如果相同纔會將值替換爲新的值。
作用:保證操作的原子性
缺點:
1.如果循環次數過多開銷很大
2.只能保證單個共享變量的原子性
3.ABA問題
ABA問題:意思就是當內存地址值A去對比舊的預期值A一樣時,認爲可以修改成新的替換值,但實際上地址值已經被改變過B然後又被改變成了A,而CAS操作會誤認爲他沒有被改變過,這就是ABA問題。
JAVA如何解決ABA問題:使用AtomicStampedReference加上版本戳。

6.重寫equals方法時爲什麼要重寫hashcode方法

在將對象存入例如hashset,hashmap等不允許重複的集合中時,爲了效率會先比較hashcode,然後比較equals,使用hashcode進行提前校驗,可以提高效率。
如果不重寫hashcode,也有可能會出現equals相等,hashcode不相等的情況。

7.spring如何控制事務

分爲編程式事務和聲明式事務,一般使用聲明式事務
聲明式事務分爲3中:
1.基於TransactionProxyFactoryBean代理的聲明式事務控制,爲目標類配置事務和代理對象,在使用中不再使用當前類的實力而是代理類的實例,比較麻煩
2.AOP聲明式事務:使用AOP將事務管理織入目標類
3.註解式事務,在目標類上添加@Transactional註解

8.Hystrix的開關狀態和工作原理簡單說明

Hystrix是通過比較當前服務健康狀態和設置的閾值比較後確定開關狀態的
服務健康狀態 = 請求失敗數 / 請求總數
當開關爲關時,請求被允許通過熔斷器,(服務器執行請求,如果執行失敗,請求數失敗數+1,請求總數+1,此時的健康狀態就是當前的請求失敗數/請求總數,相當於比值增加,有可能超過設定閾值,如果成功相當於比值減小,則必然不可能超過設置閾值)如果此時的健康狀態大於閾值,繼續保持關狀態。如果小於,則轉爲開狀態,拒絕一切請求。在一定時間後,將狀態改爲半開狀態,半開狀態時會允許一次請求通過,如果失敗,則繼續開啓開關,如果成功,則將開關關閉

9.hashMap的原理的簡述

hashmap是一個線程不安全的,由數組,鏈表和紅黑樹構成的容器。
初始容量爲16,默認加載因子爲0.75,每次擴容爲當前容量的2倍,(當插入的元素數量 > 容量 * 加載因子時,自動擴容)
元素會根據key的hashcode值再進行hash然後和數組長度取模進行均勻分佈
hashmap中存儲的key value鍵值對其實是以Entry數組形式存儲的,每一個Entry是一個列表,用來解決hash衝突,當鏈表中的元素大於閾值8時,轉爲紅黑樹存儲。

10. 紅黑樹,b+樹原理,數據庫爲什麼選擇b+

11.Redis爲什麼快

1.redis是存儲在內存中的,速度自然比硬盤快得多
2.redis是單線程的,不需要進行上下文切換,不需要加鎖,因爲不會有併發問題
3.redis數據結構簡單
4.採用了多路I/0複用模型,非阻塞I/O

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章