主頁 >  其他 > 高頻面試題:Redis的使用場景

高頻面試題:Redis的使用場景

2021-02-25 11:21:12 其他

“據不完全統計,90%的程式員在作業中使用Redis的時候只會用到string的資料型別”

上面的話當然是一句玩笑話,大家不必當真哈! (。?ˇ?ˇ?)

Redis目前在我們的作業當中已經是一個必不可少的工具了,面試的時候也已經成為面試官們的必考題

接下來我會從Redis的資料型別出發,舉例講解每種資料型別在實際作業當中能具體都有哪些使用場景,也包含了一些騷操作,

觀前提醒:閱讀本文需要有一定的Redis基礎知識哦!

Redis的使用場景

  • String
  • Hash
  • List
  • Set
  • sorted set
  • bitmap
    • BitMap是什么?
    • 命令介紹
    • 使用場景
  • HyperLogLog
    • 介紹
    • 什么是基數?
    • 使用場景:網頁的UV(Unique Visitor:獨立訪客)
  • GEO
    • 介紹
    • 使用場景
  • 總結

String

  1. 商品編號、訂單號使用incr命令自增
> set key 1
OK
> incr key
(integer) 2
> incr key
(integer) 3
> get key
"3"
  1. 文章瀏覽量
    同上也可以使用incr命令
  2. 限流
    實作限流功能,主要需要使用set key value ex 200 nx這個命令,這里value需要設定為整數,每次介面請求時,對value進行校驗,只要沒有達到限流閾值,那就對key進行incr,然后執行具體的業務代碼,命令如下:
#假設200秒內,只允許5次請求

#首先每次請求過來,先去獲取key
> get ratelimit
(nil)
#發現key不存在,則進行設定,value設定為1,代表請求了一次,ttl設定為100秒,本次請求通過,
> set ratelimit 1 ex 200 nx
OK
#又來了一個請求,同樣是先獲取key
> get ratelimit
"1"
#發現key存在,且value等于1,未達到5次限流閾值,然后對key操作自增,本次請求通過,
> incr ratelimit
(integer) 2
#后續操作原理同上,,,,
> get ratelimit
"2"
> incr ratelimit
(integer) 3
> get ratelimit
"3"
> incr ratelimit
(integer) 4
> get ratelimit
"4"
> incr ratelimit
(integer) 5
#這個時候,在200秒時間范圍內又來了一個請求,獲取key,發現value已經等于5,達到了限流閾值,本次請求攔截,
> get ratelimit
"5"

Hash

  1. 首先需要明確Redis中的hash就相當于是Java中的Map,并且是 Map<String,Map<Object,Object>> 這種形式的,因此可以用來物件
  2. 簡單版購物車功能
    在這里插入圖片描述
    通過上圖,可以發現,通過幾個命令,就可以基本實作購物車的常用功能了,命令如下:
#給uid為9527的用戶添加商品1,數量為1件
> hset shopcar_uid9527 prodid_1 1
1
#給uid為9527的用戶添加商品2,數量為1件
> hset shopcar_uid9527 prodid_2 1
1
#用戶對商品2增加了購買數量
> hincrby shopcar_uid9527 prodid_2 3
(integer) 4
#用戶的購物車此時含有2種商品
> hlen shopcar_uid9527
2
#全選購物車中的所有商品,可以得到商品id及其對應的購買數量
> hgetall shopcar_uid9527
1) "prodid_1"
2) "1"
3) "prodid_2"
4) "4"

List

  1. 微信訂閱號文章
    在這里插入圖片描述
#給用戶推送一篇文章,id為789
> lpush uid_9527_likearticle 789
(integer) 1
#同上
> lpush uid_9527_likearticle 666
(integer) 2
#同上
> lpush uid_9527_likearticle 999
(integer) 3
#同上
> lpush uid_9527_likearticle 234234
(integer) 4
#同上
> lpush uid_9527_likearticle 888
(integer) 5
#展示用戶收到最新的3篇文章
> lrange uid_9527_likearticle 0 2
1) "888"
2) "234234"
3) "999"
  1. 限流
    list實作可以實作類似令牌桶模式的限流功能,主要需要以下幾個步驟:
    1) 定時任務:一直往list中push值,直到list的length達到設定的閾值
    2)每次處理請求時,先使用pop命令彈出,如果成功則處理請求,否則就是觸發了限流
    具體命令如下:
#統計一下目前桶中有多少令牌
> llen key
(integer) 0
#未達到桶的最大值,定時任務往桶中放入令牌
> lpush key 1
(integer) 1
> lpush key 1
(integer) 2
> lpush key 1
(integer) 3
#達到桶的最大值,定時任務停止放令牌
> llen key
(integer) 3
#每次請求,從桶中pop,成功則處理該請求
> rpop key
"1"
> rpop key
"1"
> rpop key
"1"
#pop失敗,達到限流閾值
> rpop key
(nil)

Set

  1. 抽獎
#往獎池中添加參與活動的用戶id
> sadd users1 111 222 333 444 555 666 777 888 999 12312 234 9527
(integer) 12
#抽取5名幸運用戶
> srandmember users1 5
1) "444"
2) "999"
3) "333"
4) "234"
5) "666"

srandmember命令用于回傳集合中的一個或多個隨機元素,但是不會移除其中的元素,如果要實作那種階梯式抽獎,已中獎的用戶不再參與抽獎的功能,可以使用spop命令

#往獎池中添加參與活動的用戶id,一共12名用戶
> sadd users2 111 222 333 444 555 666 777 888 999 12312 234 9527
(integer) 12
#抽取三等獎3名
> spop users2 3
1) "555"
2) "999"
3) "888"
#獎池里還剩9名用戶
> scard users2
9
#抽取二等獎2名
> spop users2 2
1) "12312"
2) "444"
#獎池里還剩7名用戶
> scard users2
7
#抽取一等獎1名
> spop users2 1
1) "111"
#獎池里還剩6名用戶
> scard users2
6
  1. 朋友圈點贊
#用戶22、33點贊了朋友圈
> sadd WechatMoments 22 33
(integer) 2
#用戶666點贊了朋友圈
> sadd WechatMoments 666
(integer) 1
#用戶33取消了點贊
> srem WechatMoments 33
1
#展示所有點贊的用戶
> smembers WechatMoments
1) "22"
2) "666"
#統計朋友圈點贊的數量
> scard WechatMoments
2
#判斷用戶22是否點贊了該朋友圈
> sismember WechatMoments 22
(integer) 1
#判斷用戶33是否點贊了該朋友圈
> sismember WechatMoments 33
(integer) 0
  1. 共同關注的人
#用戶u1關注了這些大V
> sadd u1 1 2 3 4 5 6
(integer) 6
#用戶u2關注了這些大V
> sadd u2 5 6 7 8 9
(integer) 5
#用戶u1、u2共同關注了如下大V
> sinter u1 u2
1) "5"
2) "6"
  1. 可能認識的人
#用戶u1有如下好友
> sadd u1 1 2 3 4 5 6
(integer) 6
#用戶u2有如下好友
> sadd u2 1 4 5 6 9 11
(integer) 6
#用戶u1、u2存在共同的好友
> sinter u1 u2
1) "1"
2) "4"
3) "5"
4) "6"
#那么用戶u1、u2可能有認識對方的一些好友
> sdiff u1 u2
1) "2"
2) "3"
> sdiff u2 u1
1) "9"
2) "11"

sorted set

  1. 排行榜(熱搜、VIP充值)
#用戶A、B、C等用戶分別充值了如下的金額
> zadd ranklist 100 A 200 B 300 C 444 D 234 E 35 F 534 G
(integer) 7
#此時充值排行榜的前三名分別是如下幾個用戶
> zrevrange ranklist 0 2 withscores
1) "G"
2) 534.0
3) "D"
4) 444.0
5) "C"
6) 300.0
#用戶B又充值了999.99元
> zincrby ranklist 999.99 B
1199.99
#充值排行榜的前三名就發生了變化
> zrevrange ranklist 0 2 withscores
1) "B"
2) 1199.99
3) "G"
4) 534.0
5) "D"
6) 444.0
#查看用戶C在排行榜中排名,注意下標從0開始,因此就是排在第四名
> zrank ranklist C
3
  1. 限流
    zset要實作限流的功能,score可以設定成時間戳,然后通過統計一定時間范圍內的數量,來判斷是否達到了限流的閾值,程序比較復雜,我直接用代碼來展示:
 	/**
     * @param redisKey   redis限流功能的key
     * @param timeLimit  時間限制范圍(毫秒)
     * @param countLimit 數量限制
     * @return
     */
    public boolean tryAcquire(String redisKey, long timeLimit, int countLimit) {
        Jedis jedis = new Jedis();

        // 獲取當前時間
        long nowTime = System.currentTimeMillis();
        // 獲取時間限制范圍內的起始時間
        long startTime = nowTime - timeLimit;

        // 獲取該時間范圍內已經存在的成員數量
        Long alreadyExistsCount = jedis.zcount(redisKey, startTime, nowTime);

        if (alreadyExistsCount > countLimit) {
            // 時間范圍內已經存在了超過限制的成員數量了,說明已經達到限流閾值了,
            return false;
        }

        // 以UUID作為redis的value
        String uuid = UUID.randomUUID().toString();

        // 向zset中添加新成員
        Long zadd = jedis.zadd(redisKey, nowTime, uuid);
        if (zadd != 1) {
            // 添加失敗
            return false;
        }

        // 移除zset中除了本次時間范圍之外的所有成員資料
        Long oldExistsCount = jedis.zcount(redisKey, 0, startTime);
        if (oldExistsCount > 0) {
            jedis.zremrangeByScore(redisKey, 0, startTime);
        }

        // 查詢剛才添加的成員在zset中的排名,此時因為已經移除了本次時間范圍之外的所有資料,因此rank不應超過限流數量
        Long zrank = jedis.zrank(redisKey, uuid);
        if (zrank > countLimit) {
            // 排名超過了限流數量,則說明達到限流閾值了
            // 主動移除剛才添加的成員
            jedis.zrem(redisKey, uuid);
            return false;
        }

        // 未達到限流閾值,回傳成功
        return true;
    }

以上就是Redis5大基本資料型別的使用場景了,接下來我介紹一下幾個不常見的型別,

bitmap

BitMap是什么?

就是通過一個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身,我們知道8個bit可以組成一個Byte,所以bitmap本身會極大的節省儲存空間,

命令介紹

指令 SETBIT key offset value
設定或者清空key的value(字串)在offset處的bit值(只能只0或者1),

使用場景

  1. 上班打卡、活動簽到
#作業日打卡功能
#第一個數字代表是星期幾,第二個數字代表是否打卡,其中0-未打卡,1-已打卡
> setbit sign 1 1
0
> setbit sign 2 1
0
> setbit sign 3 0
0
> setbit sign 4 0
0
> setbit sign 5 1
0
#查看星期一是否打卡:已打卡
> getbit sign 1
1
#查看星期三是否打卡:未打卡
> getbit sign 3
0
#統計一周打卡天數
> bitcount sign
3
  1. 統計活躍用戶數
#每天當用戶登錄時就設定一下
> setbit 2021_02_01 22 1
0
> setbit 2021_02_01 33 1
0
> setbit 2021_02_01 9527 1
0
> setbit 2021_02_02 9527 1
0
> setbit 2021_02_02 22 1
0
> setbit 2021_02_03 33 1
0
> setbit 2021_02_03 9527 1
0
#將這3天用戶登錄的資料“整合”
> bitop and ActiveUsers 2021_02_01 2021_02_02 2021_02_03
1191
#統計連續3天都登錄的用戶數量
> bitcount ActiveUsers
1

HyperLogLog

介紹

Redis HyperLogLog 是用來做基數統計的演算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的,

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基 數,這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比,

但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,回傳輸入的各個元素,

什么是基數?

比如資料集 {1, 3, 5, 7, 5, 7, 8}, 那么這個資料集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5,

使用場景:網頁的UV(Unique Visitor:獨立訪客)

傳統的方式,可以使用set保存用戶的id,然后可以統計set中的元素數量作為判斷標準,
但是,這個方式如果保存了大量的用戶id,則會占用大量的記憶體空間,比較浪費,我們的目的就是為了計數,而不是保存用戶的id,

代碼示例:

#用戶每次訪問網頁,記錄一下
> pfadd visit1 a
(integer) true
> pfadd visit1 b
(integer) true
> pfadd visit1 c
(integer) true
> pfadd visit1 d
(integer) true
> pfadd visit1 b
(integer) false
#統計“visit1”網頁總共的UV
> pfcount visit1
(integer) 4
#記錄另一個網頁的訪問資訊
> pfadd visit2 c
(integer) true
> pfadd visit2 a
(integer) true
> pfadd visit2 x
(integer) true
> pfadd visit2 y
(integer) true
> pfadd visit2 z
(integer) true
> pfcount visit2
(integer) 5
#將多個HyperLogLog合并為一個HyperLogLog
> pfmerge total visit1 visit2
(integer) 1
#統計出整個網站的UV
> pfcount total
(integer) 7

注意:如果資料量比較大的話,HyperLogLog統計可能會存在一點誤差,大概是0.81%,但是針對UV統計這種場景的話,完全是可以忽略不計的,

GEO

介紹

GEO 主要用于存盤地理位置資訊,并對存盤的資訊進行操作,該功能在 Redis 3.2 版本新增,

GEO 操作方法有:

  • geoadd:添加地理位置的坐標,
  • geopos:獲取地理位置的坐標,
  • geodist:計算兩個位置之間的距離,
  • georadius:根據用戶給定的經緯度坐標來獲取指定范圍內的地理位置集合,
  • georadiusbymember:根據儲存在位置集合里面的某個地點獲取指定范圍內的地理位置集合,
  • geohash:回傳一個或多個位置物件的 geohash 值,

使用場景

看了上面的介紹,相信很多同學都已經能夠想象出GEO能實作哪些功能了,比如常見的定位、附近的人、兩地之間的距離等等,這些功能都可以使用GEO來實作,
代碼如下:

  1. 錄入、獲取城市的地理位置資訊(緯度、經度、名稱)
    注意:
    該命令以采用標準格式的引數x,y,所以經度必須在緯度之前,這些坐標的限制是可以被編入索引的,區域面積可以很接近極點但是不能索引,具體的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 規定如下:
  • 有效的經度從-180度到180度,
  • 有效的緯度從-85.05112878度到85.05112878度,
    當坐標位置超出上述指定范圍時,該命令將會回傳一個錯誤,
#添加一些城市的地理位置資訊
127.0.0.1:6379> geoadd city 116.397128 39.916527 beijing
(integer) 1
127.0.0.1:6379> geoadd city 121.48941 31.40527  shanghai
(integer) 1
127.0.0.1:6379> geoadd city 106.54041 29.40268  chongqing
(integer) 1
127.0.0.1:6379> geoadd city 118.8921 31.32751  nanjing
(integer) 1
#獲取城市的地理位置資訊
127.0.0.1:6379> geopos city shanghai
1) 1) "121.48941010236740112"
   2) "31.40526993848380499"
  1. 查看兩地之間的距離
127.0.0.1:6379> geodist city shanghai beijing
"1052105.5643"
#查找上海和北京之間的直線距離,單位:KM,大家可以百度一下,差不多很接近了,
127.0.0.1:6379> geodist city shanghai beijing km
"1052.1056"
  1. 查看附近的人
#獲得附近人的地址,通過半徑倆查詢,這里就以城市為例了
# 121 31 是我目前大致的經緯度資訊,可以看到100km范圍內的城市只有上海
127.0.0.1:6379> georadius city 121 31  100 km
1) "shanghai"
#把半徑擴大到500km時,城市就包括了上海和南京
127.0.0.1:6379> georadius city 121 31  500 km
1) "nanjing"
2) "shanghai"
#再擴大范圍,查詢出來的城市就更多了
127.0.0.1:6379> georadius city 121 31  50000 km withcoord withdist
1) 1) "chongqing"
   2) "1400.2709"
   3) 1) "106.54040783643722534"
      2) "29.40268053517299762"
2) 1) "nanjing"
   2) "203.8973"
   3) 1) "118.89209836721420288"
      2) "31.32750976275760735"
3) 1) "shanghai"
   2) "64.8057"
   3) 1) "121.48941010236740112"
      2) "31.40526993848380499"
4) 1) "beijing"
   2) "1075.4316"
   3) 1) "116.39712899923324585"
      2) "39.91652647362980844"
#如果說附近的人很多時,可以使用“count”回傳指定數量的結果集
georadius city 121 31  50000 km withcoord withdist count 1
1) 1) "shanghai"
   2) "64.8057"
   3) 1) "121.48941010236740112"
      2) "31.40526993848380499"
  1. 找出位于指定元素周圍的其他元素
127.0.0.1:6379> georadiusbymember city shanghai 300 km
1) "nanjing"
2) "shanghai"
  1. 其他
    GEO底層其實是由zset實作的,所以也可以使用zset的相關命令
#查看地圖中全部元素
127.0.0.1:6379> zrange city 0 -1
1) "chongqing"
2) "nanjing"
3) "shanghai"
4) "beijing"
#移除某個地址資訊
127.0.0.1:6379> zrem city nanjing
(integer) 1
127.0.0.1:6379> zrange city 0 -1
1) "chongqing"
2) "shanghai"
3) "beijing"

總結

經過上面的講解,相信大家對Redis的使用場景都有了一個更深刻的理解了,回到文章開頭的那句玩笑話,為什么絕大多數人都只是使用string的set key value呢?其實還是了解的少了,光看Redis的那些命令,是蒼白空洞的,只有跟實際業務聯系起來,才能真正發揮Redis的優勢,

當然,你也完全沒有必要把上面的命令全部記住,包括在面試中,面試官并不會過于關心命令的準確性,還是看重你會用來做些什么事情,具體命令隨時查看檔案就可以了,

我列出的這些場景還是一小部分,大家受到啟發后可以擴展,也歡迎在評論區留言,謝謝大家啦!O(∩_∩)O哈哈~

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

標籤:其他

上一篇:Linux基本命令(2)—“查看檔案內容的六種方法”

下一篇:ElasticSearch基礎入門(二)基本查詢、結果過濾

標籤雲
其他(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)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more