淘宝面试常见问题的答案来了,你看了吗?(一面及答案)
生活随笔
收集整理的這篇文章主要介紹了
淘宝面试常见问题的答案来了,你看了吗?(一面及答案)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、redis sds優缺點、擴容收縮、擴容因子
SDS (簡單動態字符串)是什么
其實,SDS 是 Redis 中實現的一種數據結構,主要用來存儲字符串。
1、那 SDS 與 C 字符串相比有什么優勢呢?
1.1、常數復雜度獲取字符串長度
常規 C 字符串并不記錄自身的長度信息,所以為了獲取一個 C 字符串的長度,程序必須遍歷整個字符串,對遇到的每個字符進行計數,直到遇到代表字符串結尾的空字符為止,這個操作的復雜度為 O(N)。
而 SDS 使用結構體實現,結構體中的 len 屬性直接記錄了該 SDS 結構體中 buf 數組中已使用的長度,因此獲取字符串長度時,只需要獲取 len 屬性的值,這個操作的復雜度為 O(1)。SDS 結構體的實現確保了獲取字符串長度的工作不會成為 Redis 的性能瓶頸。
1.2、杜絕緩沖區溢出
因為,C 字符串不記錄自身的長度,所以當進行字符串復制的時候,如果分配內存不夠,就有可能產生緩沖區溢出。
而在 Redis 中,當 SDS API 需要對 SDS 進行修改時,API 會先檢查 SDS 的空間是否滿足修改所需的要求,如果不滿足的話,API 會自動將 SDS 的空間擴展至執行修改所需的大小,然后才執行實際的修改操作。所以,使用 SDS 既不需要手動修改 SDS 的空間大小,也不會出現前面所說的緩沖區溢出問題。
Redis 中 strcat 的實現代碼:
sds sdscat(sds s, const char *t) {r總結
以上是生活随笔為你收集整理的淘宝面试常见问题的答案来了,你看了吗?(一面及答案)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击邮箱名跳转到相对应的邮箱登陆页面
- 下一篇: 景观指数分析 - 初识FragStats