Java工程師常見面試題集錦(六)網際網路人必看!(附答案及視訊教程,持續更新)

CSDN學院發表於2019-01-25

年節放假進入6天倒數計時,我們的Java工程師面試題也更新至第六期了,仍舊10道題,分享給大家,感謝小夥伴們的持續支援!

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565

Java工程師常見面試題集錦(五)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86591005

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

51.簡述Redis持久化的形式

Redis 提供了2個不同形式的持久化方式。

1)RDB (Redis DataBase):在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,也就是行話講的Snapshot快照,它恢復時是將快照檔案直接讀到記憶體裡。

2)AOF (Append Of File):以日誌的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加檔案但不可以改寫檔案,Redis啟動之初會讀取該檔案重新構建資料,換言之,Redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。

52.Redis的RDB形式下如何執行備份?

Redis會單獨建立(fork)一個子程式來進行持久化,會先將資料寫入到一個臨時檔案中,待持久化過程都結束了,再用這個臨時檔案替換上次持久化好的檔案。整個過程中,主程式是不進行任何IO操作的,這就確保了極高的效能如果需要進行大規模資料的恢復,且對於資料恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最後一次持久化後的資料可能丟失。

在Linux程式中,fork()會產生一個和父程式完全相同的子程式,但子程式在此後多會exec系統呼叫,出於效率考慮,Linux中引入了“寫時複製技術”,一般情況父程式和子程式會共用同一段實體記憶體,只有程式空間的各段的內容要發生變化時,才會將父程式的內容複製一份給子程式。

53.RDB如何儲存檔案?

1)在redis.conf中配置檔名稱,預設為dump.rdb

2)RDB檔案的儲存路徑,也可以修改。預設為Redis啟動時命令列所在的目錄下

3)RDB的儲存策略

4)手動儲存快照

命令save: 只管儲存,其它不管,全部阻塞

save vs bgsave

stop-writes-on-bgsave-error yes

當Redis無法寫入磁碟的話,直接關掉Redis的寫操作

rdbcompression yes

進行rdb儲存時,將檔案壓縮

rdbchecksum yes

在儲存快照後,還可以讓Redis使用CRC64演算法來進行資料校驗,但是這樣做會增加大約10%的效能消耗,如果希望獲取到最大的效能提升,可以關閉此功能

5)RDB的備份

先通過config get dir  查詢rdb檔案的目錄 ,將*.rdb的檔案拷貝到別的地方。

6)RDB的恢復

關閉Redis;先把備份的檔案拷貝到工作目錄下;啟動Redis, 備份資料會直接載入。

54.RDB的優缺點

優點:節省磁碟空間;恢復速度快

缺點:雖然Redis在fork時使用了寫時拷貝技術,但是如果資料龐大時還是比較消耗效能。在備份週期在一定間隔時間做一次備份,所以如果Redis意外down掉的話,就會丟失最後一次快照後的所有修改。

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565

Java工程師常見面試題集錦(五)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86591005

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

 55.AOF檔案備份及恢復

1)AOF檔案故障備份:

AOF的備份機制和效能雖然和RDB不同, 但是備份和恢復的操作同RDB一樣,都是拷貝備份檔案,需要恢復時再拷貝到Redis工作目錄下,啟動系統即載入

(AOF和RDB同時開啟,系統預設取AOF的資料)

2)AOF檔案故障恢復:

AOF檔案的儲存路徑,同RDB的路徑一致。

如遇到AOF檔案損壞,可通過 redis-check-aof  --fix  appendonly.aof   進行恢復

3)如何實現重寫?

AOF檔案持續增長而過大時,會fork出一條新程式來將檔案重寫(也是先寫臨時檔案最後再rename),遍歷新程式的記憶體中資料,每條記錄有一條的Set語句。重寫aof檔案的操作,並沒有讀取舊的aof檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了一個新的aof檔案,這點和快照有點類似。

4)何時重寫

重寫雖然可以節約大量磁碟空間,減少恢復時間。但是每次重寫還是有一定的負擔的,因此設定Redis要滿足一定條件才會進行重寫。

 系統載入時或者上次重寫完畢時,Redis會記錄此時AOF大小,設為base_size,如果Redis的AOF當前大小>= base_size +base_size*100% (預設)且當前大小>=64mb(預設)的情況下,Redis會對AOF進行重寫。

56.AOF的優缺點

優點:備份機制更穩健,丟失資料概率更低。可讀的日誌文字,通過操作AOF穩健,可以處理誤操作。

缺點:比起RDB佔用更多的磁碟空間。恢復備份速度要慢,每次讀寫都同步的話,有一定的效能壓力。存在個別Bug,造成恢復不能。

 57.Redis在專案中的使用場景

資料型別

使用場景

String

比如說 ,我想知道什麼時候封鎖一個IP地址。Incrby命令

Hash

儲存使用者資訊【id,name,age】

Hset(key,field,value)

Hset(userKey,id,101)

Hset(userKey,name,admin)

Hset(userKey,age,23)

----修改案例----

Hget(userKey,id)

Hset(userKey,id,102)

為什麼不使用String 型別來儲存

Set(userKey,用資訊的字串)

Get(userKey)

取出來的值會將(userKey)取出來的值,全部進行反序列化,增加了IO次數,降低了程式的效能。

不建議使用String 型別

List

實現最新訊息的排行,還可以利用List的push命令,將任務存在list集合中,同時使用另一個命令,將任務從集合中取出[pop]。

Redis—list資料型別來模擬訊息佇列。【電商中的秒殺就可以採用這種方式來完成一個秒殺活動】

Set

特殊之處:可以自動排重。比如說微博中將每個人的好友存在集合(Set)中,

這樣求兩個人的共通好友的操作,我們只需要求交集即可。

Zset

以某一個條件為權重,進行排序。

京東:商品詳情的時候,都會有一個綜合排名,還可以按照價格進行排名。

58. 什麼是反射機制?哪裡用到反射機制?反射機制的優缺點

1)反射就是動態載入物件,並對物件進行剖析。在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法,這種動態獲取資訊以及動態呼叫物件方法的功能成為Java反射機制。

2)jdbc中,獲取資料庫驅動物件例項的程式碼,很多框架都用到反射機制,如hibernatestrutsspring

3)優點:可以動態的建立物件和編譯,最大限度發揮了java的靈活性。缺點:對效能有影響。使用反射基本上一種解釋操作,告訴JVM我們要做什麼並且滿足我們的要求,這類操作總是慢於直接執行java程式碼。

59. Java中的23種設計模式

Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),

Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),

Adapter(介面卡模式), Bridge(橋樑模式), Composite(合成模式),

Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),

Command(命令模式), Interpreter(直譯器模式), Visitor(訪問者模式),

Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),

Observer(觀察者模式), State(狀態模式), Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)

60.工廠模式

工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類例項。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。 

Java工程師常見面試題集錦(一)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/85602533

Java工程師常見面試題集錦(二)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86138938

Java工程師常見面試題集錦(三)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86471513

Java工程師常見面試題集錦(四)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86525565

Java工程師常見面試題集錦(五)網際網路人必看!https://blog.csdn.net/CSDNedu/article/details/86591005

如果覺得文字學習較慢,也可以跟著老師一起視訊學習:

Java面試題視訊學習連結:https://edu.csdn.net/course/detail/10533

相關文章