主頁 > 軟體設計 > Redis常見問題

Redis常見問題

2021-01-31 14:22:07 軟體設計

Redis常見問題

1.什么是Redis

Redis 是完全開源免費的,遵守 BSD 協議,是一個高性能的 key-value 資料庫,
Redis 與其他 key - value 快取產品有以下三個特點:
(1)Redis 支持資料的持久化,可以將記憶體中的資料保存在磁盤中,重啟的時候可以再次加載進行使用,
(2)Redis 不僅僅支持簡單的 key-value 型別的資料,同時還提供 list,set,zset,hash 等資料結構的存盤,
(3)Redis 支持資料的備份,即 master-slave 模式的資料備份,
Redis 優勢
(1)性能極高 – Redis 能讀的速度是 110000 次/s,寫的速度是 81000 次/s ,
(2)豐富的資料型別 – Redis 支持二進制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 資料型別操作,
(3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行,單個操作是原子性的,多個操作也支持事務,即原子性,通過 MULTI 和 EXEC指令包起來,
(4)豐富的特性 – Redis 還支持 publish/subscribe, 通知, key 過期等等特性
Redis 與其他 key-value 存盤有什么不同?
(1)Redis 有著更為復雜的資料結構并且提供對他們的原子性操作,這是一個不同于其他資料庫的進化路徑,Redis 的資料型別都是基于基本資料結構的同時對程式員透明,無需進行額外的抽象,
(2)Redis 運行在記憶體中但是可以持久化到磁盤,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大于硬體記憶體,在記憶體資料庫方面的另一個優點是,相比在磁盤上相同的復雜的資料結構,在記憶體中操作起來非常簡單,這樣 Redis可以做很多內部復雜性很強的事情,同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們并不需要進行隨機訪問,

2.Redis的資料型別

Redis 支持五種資料型別:string(字串),hash(哈希),list(串列),set(集合)及 zsetsorted set:有序集合),Redis 中高級用戶,還需要加上資料結構 HyperLogLog、Geo、Pub/Sub,
還有Redis Module,像 BloomFilter,RedisSearch,Redis-ML,

3.使用Redis優勢

(1)速度快,因為資料存在記憶體中,類似于 HashMap,HashMap 的優勢就是查找和操作的時間復雜度都是 O1)
(2)支持豐富資料型別,支持 string,list,set,hash 等
(3)支持事務,操作都是原子性,所謂的原子性就是對資料的更改要么全部執行,要么全部不執行
(4)豐富的特性:可用于快取,訊息,按 key 設定過期時間,過期后將會自動洗掉

4.Redis與Memcached相比的優勢

(1)Memcached 所有的值均是簡單的字串,Redis 作為其替代者,支持更為豐富的資料類
(2)Redis 的速度比 Memcached 快很多
(3)Redis 可以持久化其資料

5. Memcached與Redis的區別

(1)存盤方式 Memcached 把資料全部存在記憶體之中,斷電后會掛掉,資料不能超過記憶體大小, Redis 有備份存在硬碟上,這樣能保證資料的持久性,
(2)資料支持型別 Memcached 對資料型別支持相對簡單, Redis 有復雜的資料型別,
(3)使用底層模型不同 它們之間底層實作方式 以及與客戶端之間通信的應用協議不一樣, Redis 直接自己構建了 VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求,

6. Redis是單執行緒單行程

Redis 是單行程單執行緒的,Redis 利用佇列技術將并發訪問變為串行訪問,消除了傳統資料庫串行控制的開銷,

7. 一個字串型別的值能存盤最大容量是多少

512M

8. Redis的持久化機制以及優缺點

Redis提供兩種持久化機制 RDB 和 AOF 機制:
1、RDB (Redis DataBase)持久化方式:
是指用資料集快照的方式半持久化模式記錄 Redis 資料庫的所有鍵值對,在某個時間點將資料寫入一個臨時檔案,持久化結束后,用這個臨時檔案替換上次持久化的檔案,達到資料恢復,
優點:
(1)只有一個檔案 dump.rdb,方便持久化,
(2)容災性好,一個檔案可以保存到安全的磁盤,
(3)性能最大化,fork 子行程來完成寫操作,讓主行程繼續處理命令,所以是 IO最大化,使用單獨子行程來進行持久化,主行程不會進行任何 IO 操作,保證了 redis的高性能)
(4)相對于資料集大時,比 AOF 的啟動效率更高,
缺點:
資料安全性低,RDB 是間隔一段時間進行持久化,如果持久化之間 Redis 發生故障,會發生資料丟失,所以這種方式更適合資料要求不嚴謹的時候,
2、AOF (Append-only file) 持久化方式:
是指所有的命令列記錄以 Redis 命令請求協議的格式完全持久化存盤,保存為 aof 檔案,
優點:
(1)資料安全,aof 持久化可以配置 appendfsync 屬性,有 always,每進行一次命令操作就記錄到 aof 檔案中一次,
(2)通過 append 模式寫檔案,即使中途服務器宕機,可以通過 redis-check-aof 工具解決資料一致性問題,
(3)AOF 機制的 rewrite 模式,AOF 檔案沒被 rewrite 之前(檔案過大時會對命令進行合并重寫),可以洗掉其中的某些命令(比如誤操作的 flushall)
缺點:
(1)AOF 檔案比 RDB 檔案大,且恢復速度慢,
(2)資料集大的時候,比 RDB 啟動效率低,

9. Redis 常見性能問題和解決方案

(1)Master 最好不要寫記憶體快照,如果 Master 寫記憶體快照,save 命令調度 rdbSave函式,會阻塞主執行緒的作業,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,
(2)如果資料比較重要,某個 Slave 開啟 AOF 備份資料,策略設定為每秒同步一次,
(3)為了主從復制的速度和連接的穩定性,Master 和 Slave 最好在同一個局域網,
(4)盡量避免在壓力很大的主庫上增加從,
(5)主從復制不要用圖狀結構,用單向鏈表結構更為穩定,即:Master <- Slave1<- Slave2 <- Slave3…這樣的結構方便解決單點故障問題,實作 Slave 對 Master的替換,如果 Master 掛了,可以立刻啟用 Slave1 做 Master,其他不變,

10. Redis 過期鍵的洗掉策略

(1)定時洗掉:在設定鍵的過期時間的同時,創建一個定時器 timer,讓定時器在鍵的過期時間來定時,立即執行對鍵的洗掉操作,
(2)惰性洗掉:放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就洗掉該鍵;如果沒有過期,就回傳該鍵,
(3)定期洗掉:每隔一段時間程式就對資料庫進行一次檢查,洗掉里面的過期鍵,至于要洗掉多少過期鍵,以及要檢查多少個資料庫,則由演算法決定,

11. Redis 的回收策略(淘汰策略)

volatile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰,
volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰,
volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰,
allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰,
allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰,
no-enviction(驅逐):禁止驅逐資料,
注意這里的 6 種機制,volatile 和 allkeys 規定了是對已設定過期時間的資料集淘汰資料還是從全部資料集淘汰資料,后面的 lru、ttl 以及 random 是三種不同的淘汰策略,再加上一種 no-enviction 永不回收的策略,
使用策略規則:
(1)如果資料呈現冪律分布,也就是一部分資料訪問頻率高,一部分資料訪問頻率低,則使用 allkeys-lru,
(2)如果資料呈現平等分布,也就是所有的資料訪問頻率都相同,則使用allkeys-random,

12. 為什么 Redis 需要把所有資料放到記憶體中?

Redis 為了達到最快的讀寫速度將資料都讀到記憶體中,并通過異步的方式將資料寫入磁盤,所以 redis 具有快速和資料持久化的特征,如果不將資料放在記憶體中,磁盤 I/O 速度會嚴重影響 redis 的性能,在記憶體越來越便宜的今天,redis 將會越來越受歡迎,如果設定了最大使用的記憶體,則資料已有記錄數達到記憶體限值后不能繼續插入新值,

13. Redis 的同步機制

Redis 可以使用主從同步,從從同步,第一次同步時,主節點做一次 bgsave,并同時將后續修改操作記錄到記憶體 buffer,待完成后將 rdb 檔案全量同步到復制節點,復制節點接受完成后將 rdb 鏡像加載到記憶體,加載完成后,再通知主節點將期間修改的操作記錄同步到復制節點進行重放就完成了同步程序,

14. Pipeline 有什么好處,為什么要用 pipeline

可以將多次 IO 往返的時間縮減為一次,前提是 pipeline 執行的指令之間沒有因果相關性,使用 redis-benchmark 進行壓測的時候可以發現影響 redis 的 QPS峰值的一個重要因素是 pipeline 批次指令的數目,

15. Redis 集群,集群的原理

(1)Redis Sentinal 著眼于高可用,在 master 宕機時會自動將 slave 提升為master,繼續提供服務,
(2)Redis Cluster 著眼于擴展性,在單個 redis 記憶體不足時,使用 Cluster 進行分片存盤,

16. Redis 集群方案什么情況下會導致整個集群不可用

有 A,B,C 三個節點的集群,在沒有復制模型的情況下,如果節點 B 失敗了,那么整個集群就會以為缺少 5501-11000 這個范圍的槽而不可用,

17. Redis 設定密碼及驗證密碼

設定密碼:config set requirepass 123456
授權密碼:auth 123456

18. Redis 哈希槽

Redis 集群沒有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有16384 個哈希槽,每個 key 通過 CRC16 校驗后對 16384 取模來決定放置哪個槽,集群的每個節點負責一部分 hash 槽,

19. Redis 集群的主從復制模型

為了使在部分節點失敗或者大部分節點無法通信的情況下集群仍然可用,所以集群使用了主從復制模型,每個節點都會有 N-1 個復制品,

20. Redis 集群會有寫操作丟失嗎

Redis 并不能保證資料的強一致性,這意味這在實際中集群在特定的條件下可能會丟失寫操作,

21. Redis 集群之間是如何復制的

異步復制,

22. Redis 集群最大節點個數是多少

16384 個,

23. Redis 集群如何選擇資料庫

Redis 集群目前無法做資料庫選擇,默認在 0 資料庫,

24. 怎么測驗 Redis 的連通性

使用ping命令

25. 怎么理解 Redis 事務

(1)事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行,事務在執行的程序中,不會被其他客戶端發送來的命令請求所打斷,
(2)事務是一個原子操作:事務中的命令要么全部被執行,要么全部都不執行,

26. Redis 事務相關的命令

MULTI、EXEC、DISCARD、WATCH

27. Redis key 的過期時間和永久有效分別怎么設定

EXPIRE 和 PERSIST 命令,

28. Redis 如何做記憶體優化

盡可能使用散串列(hashes),散串列(是說散串列里面存盤的數少)使用的記憶體非常小,所以你應該盡可能的將你的資料模型抽象到一個散串列里面,比如你的 web 系統中有一個用戶物件,不要為這個用戶的名稱,姓氏,郵箱,密碼設定單獨的 key,而是應該把這個用戶的所有資訊存盤到一張散串列里面,

29. Redis 回收行程如何作業的

一個客戶端運行了新的命令,添加了新的資料,Redis 檢查記憶體使用情況,如果大于 maxmemory 的限制, 則根據設定好的策略進行回收,一個新的命令被執行,等等,所以我們不斷地穿越記憶體限制的邊界,通過不斷達到邊界然后不斷地回識訓到邊界以下,如果一個命令的結果導致大量記憶體被使用(例如很大的集合的交集保存到一個新的鍵),不用多久記憶體限制就會被這個記憶體使用量超越,

30. 降低 Redis 的記憶體使用情況的方法

以32 位的 Redis 實體,可以好好利用 Hash,list,sorted set,set等集合型別資料,因為通常情況下很多小的 Key-Value 可以用更緊湊的方式存放到一起,

31. Redis 的記憶體用完后會發生什么

如果達到設定的上限,Redis 的寫命令會回傳錯誤資訊(但是讀命令還可以正常回傳,)或者你可以將 Redis 當快取來使用配置淘汰機制,當 Redis 達到記憶體上限時會沖刷掉舊的內容,

32. 一個 Redis 實體最多能存放多少的 keys,List、Set、Sorted Set最多能存放多少元素

理論上 Redis 可以處理多達 2^32 的 keys,并且在實際中進行了測驗,每個實體至少存放了 2 億 5 千萬的 keys,我們正在測驗一些較大的值,任何 list、set、和 sorted set 都可以放 2 ^32 個元素,換句話說,Redis 的存盤極限是系統中的可用記憶體值,

33. MySQL 里有 2000w 資料,redis 中只存 20w 的資料,如何保證Redis 中的資料都是熱點資料

Redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰策略,
相關知識:Redis 提供 6 種資料淘汰策略:
volatile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰
volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰
volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰
allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰
allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
no-enviction(驅逐):禁止驅逐資料

34. Redis 最適合的場景

1、會話快取(Session Cache)
最常用的一種使用 Redis 的情景是會話快取(session cache),用 Redis 快取會話比其他存盤(如 Memcached)的優勢在于:Redis 提供持久化,當維護一個不是嚴格要求一致性的快取時,如果用戶的購物車資訊全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎? 幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當的使用 Redis 來快取會話的檔案,甚至廣為人知的商業平臺Magento 也提供 Redis 的插件,
2、全頁快取(FPC)
除基本的會話 token 之外,Redis 還提供很簡便的 FPC 平臺,回到一致性問題,即使重啟了 Redis 實體,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進,類似 PHP 本地 FPC, 再次以 Magento 為例,Magento提供一個插件來使用 Redis 作為全頁快取后端, 此外,對 WordPress 的用戶來說,Pantheon 有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面,
3、佇列
Reids 在記憶體存盤引擎領域的一大優點是提供 list 和 set 操作,這使得 Redis能作為一個很好的訊息佇列平臺來使用,Redis 作為佇列使用的操作,就類似于本地程式語言(如 Python)對 list 的 push/pop 操作, 如果你快速的在 Google中搜索“Redis queues”,你馬上就能找到大量的開源專案,這些專案的目的就是利用 Redis 創建非常好的后端工具,以滿足各種佇列需求,例如,Celery 有一個后臺就是使用 Redis 作為 broker,你可以從這里去查看,
4,排行榜/計數器
Redis 在記憶體中對數字進行遞增或遞減的操作實作的非常好,集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis 只是正好提供了這兩種資料結構,所以,我們要從排序集合中獲取到排名最靠前的 10個用戶–我們稱之為“user_scores”,我們只需要像下面一樣執行即可: 當然,這是假定你是根據你用戶的分數做遞增的排序,如果你想回傳用戶及用戶的分數,你需要這樣執行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一個很好的例子,用 Ruby 實作的,它的排行榜就是使用 Redis 來存盤資料的,你可以在這里看到,
5、發布/訂閱
最后(但肯定不是最不重要的)是 Redis 的發布/訂閱功能,發布/訂閱的使用場景確實非常多,我已看見人們在社交網路連接中使用,還可作為基于發布/訂閱的腳本觸發器,甚至用 Redis 的發布/訂閱功能來建立聊天系統!

35. Redis 里面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來

使用 keys 指令可以掃出指定模式的 key 串列,
追問:如果這個 Redis 正在給線上的業務提供服務,那使用 keys 指令會有什么問題?
Redis 的單執行緒的,keys 指令會導致執行緒阻塞一段時間,線上服務會停頓,直到指令執行完畢,服務才能恢復,這個時候可以使用 scan 指令,scan 指令可以無阻塞的提取出指定模式的 key 串列,但是會有一定的重復概率,在客戶端做一次去重就可以了,但是整體所花費的時間會比直接用 keys 指令長,

36. 如果有大量的 key 需要設定同一時間過期,需要注意什么

如果大量的 key 過期時間設定的過于集中,到過期的那個時間點,Redis 可能會出現短暫的卡頓現象,一般需要在時間上加一個隨機值,使得過期時間分散一些,

37. Redis 做異步佇列

一般使用 list 結構作為佇列,rpush 生產訊息,lpop 消費訊息,當 lpop 沒有訊息的時候,要適當 sleep 一會再重試,
追問:不用 sleep
list 還有個指令叫 blpop,在沒有訊息的時候,它會阻塞住直到訊息到來,
追問:生產一次消費多次
使用 pub/sub 主題訂閱者模式,可以實作1:N 的訊息佇列,
追問: pub/sub 有什么缺點
在消費者下線的情況下,生產的訊息會丟失,得使用專業的訊息佇列如 RabbitMQ等,
追問 :redis 如何實作延時佇列
我估計現在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎么問的這么詳細,但是你很克制,然后神態自若的回答道:使用 sortedset,拿時間戳作為score,訊息內容作為 key 呼叫 zadd 來生產訊息,消費者用 zrangebyscore 指令獲取 N 秒之前的資料輪詢進行處理,到這里,面試官暗地里已經對你豎起了大拇指,但是他不知道的是此刻你卻豎起了中指,在椅子背后,

38. Redis 分布式鎖

先拿 setnx 來爭搶鎖,搶到之后,再用 expire 給鎖加一個過期時間防止鎖忘記了釋放,
追問:如果在 setnx 之后執行 expire之前行程意外 crash 或者要重啟維護了,會怎么樣
set 指令有非常復雜的引數,可以同時把 setnx 和expire 合成一條指令來用

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/254912.html

標籤:其他

上一篇:【Soul原始碼閱讀】15.soul-admin 與 soul-bootstrap 同步機制之 nacos 決議(下)

下一篇:云計算學習路線

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more