日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漏斗算法详解

發(fā)布時間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漏斗算法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? 漏斗是生活中一個非常常見的容器,他自身的形狀決定了其擁有的性質(zhì),上面寬、下邊窄,上面進水快,而窄的那頭出水較慢。比如生活中,我們需要向開水瓶里灌水,用一個漏斗會非常的方便。

? ? ? ? 我們用熱水壺通過漏斗往開水瓶里倒水,水會沿著漏斗順流到開水瓶里,如果這個時候你不小心手抖了,一下倒入很多,你會發(fā)現(xiàn)漏斗里的水不能一下子進到開水瓶里而是滿了出來。

? ? ? ? 這是一個簡單的數(shù)學(xué)問題,可以用以下表達式說明:

? ? ? ?if? ?單位時間內(nèi)的進水速率> 單位時間內(nèi)出水速率 :

? ? ? ? ? ? print("漏斗里的水會一直增加!... 直到溢出")

? ? ? else?

? ? ? ? ? ?print("漏斗永遠裝不滿...水一直會順著流出。")

? ? ? ? 如果我們能控制進水和出水的速率,那么可以借助漏斗實現(xiàn)單位時間內(nèi)流量的限制,即限流。

? ? ? ? 實現(xiàn)思路:

? ? ? ? 1.? 定義一個Funnel 靜態(tài)內(nèi)部類,相當于漏斗,可以初始化容量和漏斗大口的出水速率。

? ? ? ? 2.? 定義進水方法watering(int capacity),參數(shù)為每次出水的量,默認為1。

? ? ? ? 3.? 定義出水方法runningWater(), 由于每次流出水需要統(tǒng)計量,那么就需要記錄每次入水的時間戳,以供計算容量,出水的同時剩余容量leftCapcity需要加上出水量 this.leftCapacity += deltaCapacity。

? ? ? ? ? 單位時間內(nèi)的出水量(deltaCapacity)?=? 速率(waterRate) * (當前出水的時間戳ts- 上一次出水的時間戳ts)

? ? ? ? 4. 如果出水的量超過了漏斗的最大容量,那么直接將leftCapacity置為最大容量,也就是說此刻漏斗里相當于沒有水。

? ? ? ? 如果漏斗的剩余容量> 一次性進水量,那么表示水可以從漏斗中通行,否則不能通行直接return。

package leetcode100;import java.math.BigDecimal; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Function;/*** 漏斗算法* Funnel algorithm*/ public class FunnelProblem {/*** record a logic key and funnel*/private static Map<String, Funnel> funnelMap = new ConcurrentHashMap<>();static class Funnel {private ReentrantLock lock = new ReentrantLock();// 水流速度private BigDecimal waterRate;// 漏斗容量private Integer capacity;// 漏斗剩余容量private Integer leftCapacity;// 上一次訪問時間戳private Long lastAccess;public Funnel(BigDecimal waterRate, Integer capacity) {this.waterRate = waterRate;this.capacity = capacity;this.leftCapacity = capacity;this.lastAccess = System.currentTimeMillis();}/*** water out, space add*/public void runningWater() {long nowTime = System.currentTimeMillis();long deltaTime = nowTime - lastAccess;Integer deltaCapacity = waterRate.multiply(new BigDecimal(deltaTime)).intValue();// the deltaCapacity means how much water are in .// if the interval are too long, it will be over Max Integerif (deltaCapacity < 0) {this.leftCapacity = capacity;this.lastAccess = nowTime;return;}if (deltaCapacity < 1) {return;}this.leftCapacity += deltaCapacity;this.lastAccess = nowTime;if (this.leftCapacity > this.capacity) {this.leftCapacity = this.capacity;}}/*** watering.*/public boolean watering(Integer waterCapacity) {runningWater();if (leftCapacity > waterCapacity) {this.leftCapacity -= waterCapacity;return true;}return false;}}public boolean allow(String userId, String key, Integer initCapacity, BigDecimal leakRate) {String userKey = userId + key;Funnel funnel = funnelMap.computeIfAbsent(userKey, s -> new Funnel(leakRate, initCapacity));return funnel.watering(1);}private static AtomicInteger countAllow = new AtomicInteger(0);private static AtomicInteger countDisAllow = new AtomicInteger(0);public static void main(String[] args) {FunnelProblem funnelProblem = new FunnelProblem();for (int i = 0; i < 1000; i++) {new Thread(() -> {Boolean allow = funnelProblem.allow("zhangsan", "browser", 500, BigDecimal.valueOf(1));if (allow) {System.out.println("you can browser!");countAllow.addAndGet(1);} else {System.out.println("pls wait !");countDisAllow.addAndGet(1);}}).start();}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("可以瀏覽 " + countAllow.get() + " 人次," + "等待了 " + countDisAllow.get() + " 人次");}}

模擬1000流量同時進入到漏斗,查看打印結(jié)果:

? ? ? ? 1000人中,可以瀏覽 546 人次,等待了 454 人次,我們可以通過設(shè)置initCapacity 和 leakRate的值來初始化每個漏斗的大小和進水的速率。

總結(jié)

以上是生活随笔為你收集整理的漏斗算法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 韩国成人理伦片免费播放 | 国产午夜精品无码 | 最新成人在线 | 一区二区影院 | 成人四色 | 美国av大片 | 亚洲影视中文字幕 | 亚洲国产精品久久人人爱 | 女教师高潮黄又色视频 | 91av福利| 国产精品一二三区视频 | 国产精品久久久久久久久久久免费看 | 秋霞国产精品 | 金瓶狂野欧美性猛交xxxx | 成人在线日韩 | 国产一区二区三区四区在线观看 | 久久精品美女 | 国产一区日本 | 国产精品久久久久久久久久久久久久 | 日本中文字幕视频在线 | 91爱爱com| 韩国av毛片 | 成人羞羞国产免费 | 精品无码一区二区三区电影桃花 | 97伦伦午夜电影理伦片 | 免费看黄色大片 | 亚洲午夜福利一区二区三区 | 国产永久免费无遮挡 | 亚洲成人tv | 天天干,天天爽 | 国产免费一区二区三区视频 | 日韩成人在线观看 | 韩国三级视频在线观看 | 91视频直接看 | 瑟瑟视频在线免费观看 | 超碰av男人的天堂 | 秘密基地在线观看完整版免费 | 一卡二卡久久 | 操操操干干干 | 老女人毛片| 国产精品欧美精品 | 国产精品日韩欧美一区二区三区 | 俄罗斯乱妇 | 黑人性视频 | 日本老熟妇毛茸茸 | 日韩久久久久久久久 | 久热精品在线 | 999超碰| 草在线视频| 成年性生交大片免费看 | 国产内射合集颜射 | mm1313亚洲国产精品无码试看 | 久草新免费| 99re9| aaa黄色一级片 | 久久久久久影院 | 亚州一二区 | 国产成人手机在线 | 欧美狠狠干 | 伊人加勒比 | 日韩少妇裸体做爰视频 | 亚洲一二三四在线观看 | 非洲一级片 | 少妇4p| 高h喷水荡肉少妇爽多p视频 | 欧美成人精品欧美一级乱 | 少妇精品无码一区二区 | 日本黄色一区二区三区 | 99精品中文字幕 | 女人裸体无遮挡 | 亚洲欲 | 国产精品婷婷午夜在线观看 | 激情亚洲视频 | 国产第99页 | 五月婷综合 | 牛牛av在线 | 日韩黄色一区 | 一区二区三区天堂 | 名人明星三级videos | 在线天堂中文 | 神马国产| youjizz日韩 | 久久中文字幕人妻熟av女蜜柚m | 亚洲另类网站 | 美女被男生免费视频 | 狠狠躁夜夜躁人人爽天天高潮 | 精品人妻一区二区色欲产成人 | 手机看片日韩在线 | 午夜第一页 | 91av导航 | 国产三级做爰高清在线 | 亚洲狼人综合 | 国产91色 | 三级成人 | 国产黑人 | 亚洲综合五月天婷婷丁香 | 伊人tv | а√天堂资源在线 | 亚洲视频免费在线 |