zoukankan      html  css  js  c++  java
  • 感悟1

    想象这样一个场景:

    有一些资源要分配,比如ip代理地址。有一些人要用这些ip代理地址。地址被一个人用过之后,不能再分配给别人用。

    人可以用这个代理ip地址访问百度或是腾迅,同一个人同一个代理ip只能去一个网站访问一次,但可以访问不同的网站。

    当时最直接的思路是

    for(int i=0;i<ip.size();i++){
    for(int j=0;j<user.size();j++){
    for(int k=0;k<task.size();k++){
    user.get(j).do(task.get(k),ip.get(i));
    }
    i++;
    }
    }

    后来需求又加了,ip不定时改变,user不定时改变,task不定时改变。感觉有点招架不住了。

    后来换了一种思路。

    for(int i=0;i<task.size();i++){
    for(int j=0;j<user.size();j++){
    ip = list.getIP(user.get(j),user.get(i));
    if(ip!=null){
    user.get(j).do(task.get(i), ip);
    }
    }
    }

    list里面存放ip,并对ip统一管理。getIP()会根据用户和任务的情况,查找有没有适合的ip代理地址。
    没找到就返回null

    list里面我先用Map<user,ip_list> 不同的人创不同的list,比如如果是张三要ip,就到张三的那个list里面找ip。
    当然list里面还有一个叫new_list的变量,里面存放的地址是还没有分配给任何一个人的。

    然后有一个set<String>这样的变量来保存标记信息,标记哪些ip做了什么事。

    比如 key = user + ip + task;

    当然罗,list的设计还有一种思路,就是不要Map<user,ip_list>,

    直接是

    for(int i=0;i<ip.size();i++){
    key1 = ip
    if(set.contain(key1)){//被用过了
    key2 = ip + user;
    if(set.contain(key2)){
    //是当前用户使用过的
    key3 = ip + user + task;
    if(set.contain(key3){
    //这个任务做过一次了,不能再做了。
    }else{
    //这个任务没做过,可以做,返回。
    return ip;
    }
    }else{
    //别用用过的,不能用。
    }
    }else{//没被用

    }
    }

  • 相关阅读:
    smtplib.py
    淘宝链接中的spm参数
    with 上下文管理
    python RecursionError: maximum recursion depth exceeded while calling
    GraphQL两年实战
    Exception 异常处理
    Simple decorator that intercepts connection errors and ignores these if settings specify this.
    namedtuple
    服务治理在猫眼娱乐的演进之路
    路由、限流、熔断 微服务治理
  • 原文地址:https://www.cnblogs.com/angelshelter/p/4189179.html
Copyright © 2011-2022 走看看