雨露均沾访问量算法验证

一、概述

CSDN博客自动阅读器-服务端推送技术SSE之简单应用 一文中,我们实现了服务端主动推送访问链接到浏览器端功能。

演示页面可点击链接http://124.71.129.204:8081 访问,我们想对访问量较少的链接重点推送。

二、模拟测试

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
import java.util.stream.LongStream;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;
import org.junit.jupiter.api.Test;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * 模拟测试访问量算法具有补偿功能
 */
@Slf4j
public class AlgorithmTest
{
    @Test
    public void test()
    {
        List<Visit> list = new ArrayList<>(50);
        IntStream.range(0, 50).forEach(n -> list.add(new Visit(RandomStringUtils.randomAlphanumeric(10), RandomUtils.nextLong(0, 1000))));
        AtomicInteger count1 = new AtomicInteger(0);
        list.stream().sorted(Comparator.comparing(Visit::getCount)).forEach(v -> log.info("{}. {}", count1.incrementAndGet(), v));
        long sum1 = list.stream().mapToLong(Visit::getCount).sum();
        
        log.info("******随机选择2条,对count较小的执行追加******");
        LongStream.range(0, 30000).forEach(n -> {
            Visit visit001 = list.get(RandomUtils.nextInt(0, 50));
            Visit visit002 = list.get(RandomUtils.nextInt(0, 50));
            Visit visit = (visit001.getCount() > visit002.getCount() ? visit002 : visit001);
            visit.setCount(visit.getCount() + 1);
        });
        AtomicInteger count2 = new AtomicInteger(0);
        list.stream().forEach(v -> log.info("{}. {}", count2.incrementAndGet(), v));
        long sum2 = list.stream().mapToLong(Visit::getCount).sum();
        log.info("SUM: {} ---> {}", sum1, sum2);
    }
}

@Data
@AllArgsConstructor
class Visit
{
    /**
     * 链接地址
     */
    private String url;
    
    /**
     * 访问量
     */
    private Long count;
}

三、运行结果

2024-05-21 12:16:40.447 [main] INFO  com.fly.AlgorithmTest - 1. Visit(url=QRR3tu9G2M, count=20)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 2. Visit(url=Y8FaKRuwTn, count=60)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 3. Visit(url=JV3jw6YS9y, count=75)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 4. Visit(url=UPLLIAZb8R, count=118)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 5. Visit(url=i0eQHksQOQ, count=135)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 6. Visit(url=Ols9mVY67J, count=137)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 7. Visit(url=E5zJiIYmb5, count=148)
2024-05-21 12:16:40.453 [main] INFO  com.fly.AlgorithmTest - 8. Visit(url=hD5cDQWf1E, count=150)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 9. Visit(url=amofJ80mvg, count=199)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 10. Visit(url=OkqProZKWY, count=243)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 11. Visit(url=Wr0RpbTMY3, count=293)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 12. Visit(url=wvYAEG4Ym3, count=317)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 13. Visit(url=hQnYK6XXgh, count=329)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 14. Visit(url=3KrUjxX0Cs, count=333)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 15. Visit(url=gCKKXDn1bB, count=338)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 16. Visit(url=2zgA3iMM6Z, count=355)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 17. Visit(url=37pIUyyNSv, count=385)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 18. Visit(url=ZEEpr5ECne, count=428)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 19. Visit(url=MEiUdq4ORo, count=458)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 20. Visit(url=DQFJKqRSVX, count=464)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 21. Visit(url=o7NYLkg86a, count=490)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 22. Visit(url=M3AFderGrZ, count=515)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 23. Visit(url=VSnGGhxrzk, count=518)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 24. Visit(url=mVG297DGcB, count=540)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 25. Visit(url=zldcEEiS7P, count=541)
2024-05-21 12:16:40.454 [main] INFO  com.fly.AlgorithmTest - 26. Visit(url=hbgcZ1VkjD, count=550)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 27. Visit(url=k4gaezt85m, count=564)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 28. Visit(url=yGuPog2KNi, count=596)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 29. Visit(url=vvgHCXw2PI, count=596)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 30. Visit(url=LIJ6Xc6xlP, count=609)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 31. Visit(url=bMEGsQMKkT, count=673)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 32. Visit(url=C6svpIKzZd, count=687)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 33. Visit(url=cNMYXqBemP, count=694)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 34. Visit(url=S9wXHfJvQS, count=706)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 35. Visit(url=AFj6hbI0Q5, count=722)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 36. Visit(url=6gTJ9QGWMV, count=739)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 37. Visit(url=Dr2lV825hX, count=745)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 38. Visit(url=nqiYrqjIBb, count=749)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 39. Visit(url=efCRaoufrZ, count=758)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 40. Visit(url=8ykhk0eLBg, count=798)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 41. Visit(url=4wjIUQxvQR, count=799)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 42. Visit(url=ifYZ0X5N7X, count=838)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 43. Visit(url=TROPW3TN21, count=855)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 44. Visit(url=AIqc60aD9L, count=864)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 45. Visit(url=WLf8k3lpCQ, count=874)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 46. Visit(url=N2SCPFWZZu, count=874)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 47. Visit(url=GEboVuggD3, count=877)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 48. Visit(url=T9kh2mlbiU, count=918)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 49. Visit(url=uvhv2Lblzy, count=961)
2024-05-21 12:16:40.455 [main] INFO  com.fly.AlgorithmTest - 50. Visit(url=GDGKmYOzf8, count=976)
2024-05-21 12:16:40.457 [main] INFO  com.fly.AlgorithmTest - ******随机选择2条,对count较小的执行追加******
2024-05-21 12:16:40.465 [main] INFO  com.fly.AlgorithmTest - 1. Visit(url=QRR3tu9G2M, count=1133)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 2. Visit(url=Y8FaKRuwTn, count=1133)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 3. Visit(url=JV3jw6YS9y, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 4. Visit(url=UPLLIAZb8R, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 5. Visit(url=i0eQHksQOQ, count=1131)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 6. Visit(url=Ols9mVY67J, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 7. Visit(url=E5zJiIYmb5, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 8. Visit(url=hD5cDQWf1E, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 9. Visit(url=amofJ80mvg, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 10. Visit(url=OkqProZKWY, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 11. Visit(url=Wr0RpbTMY3, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 12. Visit(url=wvYAEG4Ym3, count=1133)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 13. Visit(url=hQnYK6XXgh, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 14. Visit(url=3KrUjxX0Cs, count=1133)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 15. Visit(url=gCKKXDn1bB, count=1133)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 16. Visit(url=2zgA3iMM6Z, count=1132)
2024-05-21 12:16:40.466 [main] INFO  com.fly.AlgorithmTest - 17. Visit(url=37pIUyyNSv, count=1131)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 18. Visit(url=ZEEpr5ECne, count=1133)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 19. Visit(url=MEiUdq4ORo, count=1133)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 20. Visit(url=DQFJKqRSVX, count=1133)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 21. Visit(url=o7NYLkg86a, count=1133)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 22. Visit(url=M3AFderGrZ, count=1132)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 23. Visit(url=VSnGGhxrzk, count=1132)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 24. Visit(url=mVG297DGcB, count=1132)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 25. Visit(url=zldcEEiS7P, count=1133)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 26. Visit(url=hbgcZ1VkjD, count=1132)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 27. Visit(url=k4gaezt85m, count=1131)
2024-05-21 12:16:40.467 [main] INFO  com.fly.AlgorithmTest - 28. Visit(url=yGuPog2KNi, count=1133)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 29. Visit(url=vvgHCXw2PI, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 30. Visit(url=LIJ6Xc6xlP, count=1133)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 31. Visit(url=bMEGsQMKkT, count=1133)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 32. Visit(url=C6svpIKzZd, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 33. Visit(url=cNMYXqBemP, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 34. Visit(url=S9wXHfJvQS, count=1133)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 35. Visit(url=AFj6hbI0Q5, count=1133)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 36. Visit(url=6gTJ9QGWMV, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 37. Visit(url=Dr2lV825hX, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 38. Visit(url=nqiYrqjIBb, count=1132)
2024-05-21 12:16:40.468 [main] INFO  com.fly.AlgorithmTest - 39. Visit(url=efCRaoufrZ, count=1133)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 40. Visit(url=8ykhk0eLBg, count=1133)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 41. Visit(url=4wjIUQxvQR, count=1131)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 42. Visit(url=ifYZ0X5N7X, count=1130)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 43. Visit(url=TROPW3TN21, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 44. Visit(url=AIqc60aD9L, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 45. Visit(url=WLf8k3lpCQ, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 46. Visit(url=N2SCPFWZZu, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 47. Visit(url=GEboVuggD3, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 48. Visit(url=T9kh2mlbiU, count=1132)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 49. Visit(url=uvhv2Lblzy, count=1133)
2024-05-21 12:16:40.469 [main] INFO  com.fly.AlgorithmTest - 50. Visit(url=GDGKmYOzf8, count=1131)

四、源码传送

https://gitcode.com/00fly/csdn-reader/blob/main/src/test/java/com/fly/AlgorithmTest.java

git clone https://gitcode.com/00fly/csdn-reader.git

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值