每日最新頭條.有趣資訊

Java面試總結

小小又去面試啦,對面試題再次的總結。

redis 相關

redis 有幾種數據結構

redis有五種數據結構,分別是String(字元串),Hash(字典),List(列表),Set(集合),Sorted Set(有序集合) 這五種數據結構是redis的五種數據結構

Redis持久化方式

redis持久化方式有兩種,分別是快照和追加式文件,

1.對於快照而言,持久化會在特定的時間間隔,保存時間點的數據快照。2.追加式文件持久化方式伺服器在收到寫操作的時候,在伺服器啟動的時候,會逐條的執行,從而重建裡面的數據,寫操作記錄的格式和redis協議一樣,以追加的方式保存。3.兩種持久化方式會長久的存在,當redis重啟的時候,追加式文件則會優先用於重建數據。

Java數據結構

Java 有以下幾種數據結構,

List

List 存放的是有序的可重複的。List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。

Set

Set 存放的是無序的不能重複的,集合中的對象,只是簡單的把對象加入到集合中。

Map

Map 存放的是鍵值對,鍵可以重複,值可以重複,根據鍵得到值,對map集合遍歷的時候,先得到set的鍵的集合,對set集合進行遍歷,得到相應的值。

redis 鎖

鎖一共有三種鎖,分別是線程鎖,進程鎖,分布式鎖。

線程鎖

對於線程鎖而言,主要用來給代碼塊,方法加鎖,當某個方法或者代碼使用鎖的時候,在同一時刻,只有一個線程執行該方法或者代碼塊,線程鎖只在同一JVM中有效果,因為線程鎖的實現在根本上是依靠線程之間共享記憶體實現,例如synchronized是共享對象頭,顯示鎖Lock是共享某個變量。

進程鎖

為了控制同一作業系統中,多個進程訪問共享資源,因為進程具有獨立性,各個進程無法訪問其他進程資源,因此無法通過synchronized等線程實現進程鎖

分布式鎖

當多個進程不在同一作業系統中,用分布式鎖控制多個進程對資源的訪問。

鎖的自旋

鎖的自旋使用的是CAS算法算法,當一個線程在獲取鎖的時候,如果鎖已經被其他線程獲取,那麽該線程將會循環等待,然後不斷的判斷鎖能否成功的獲取,直到獲取鎖才能夠退出循環。

redis 鎖基本命令

在redis裡添加key作為redis鎖,跑完自動進行delete。

redis 死鎖解決辦法

這裡對redis進行死鎖,通過時間控制,把redis超時作為控制,或者redis的value作為時間控制。

ArrayList 擴容

初始陣列容量為10,獲取到擴容的容量,複製到當前的陣列。每次擴容1.5 倍。

LinkList擴容

底層維護的是雙向列表,有前後的指針進行維護。

Java 數據類型各佔幾個字節

byte 1個字節。short 2字節。int 4個字節。long 8字節。float 4個字節。double 8字節 char 2字節 boolean 1字節。

如何計算

用MAX_獲得 例如

Integer.MAX_

編程題

public class C1 { public int stuId; // 學生學號 public int courseId; // 課程編號 public int score; // 分數

/** 將學生成績列表轉換成兩級的Map,用於查詢任意學生的任意課程成績

參數 list : 一個學年學生一學期全部課程成績 返回值Map的key是學生學號,value 的map key是學生的課程編號, value 該學生這門課的成績 **/ public static Map toMap(List list) {

}}

答案

Map map = new HashMap();for(C1 tmp:list){ if(map.get(tmp.stuId) == null){ Map grade = new HashMap(); grade.put(tmp.coureseId,tmp.score); map.put(tmp.stuId, grade); } else map.get(tmp.studId).put(tmp.coureseId,tmp.score);}return map;

小明菜市場

獲得更多的PTT最新消息
按讚加入粉絲團