程序员老鬼

只因把https改成http:带宽减少了70%

刚看到个贴子,说有人把网站的 https 改成 http,结果带宽直接减少了70%,属实离谱。

Image

很多人眼里,“https就是多了个s,应该没啥差别”,但实际这就是安全和信任的分水岭。现在的浏览器、搜索引擎、甚至网络服务商,对 http 都会自动限流、拦截,用户端看到“不安全”提示也本能退出。等于你自己把门口招牌换成了“危险区域”,流量自然大幅缩水。

有人调侃“这操作堪比自断一臂”,也有人说“省下的证书钱,亏在流量上十倍百倍”。我挺认同后者,省小钱吃大亏,职场和技术里都不少见。

别嫌麻烦,安全和标准其实就是效率,长远看才是真省心。【备注:文末可领最新资料】

算法题:联赛信息统计

昨晚十一点多在公司楼下吹风,手机叮一声,群里小李问:东哥东哥,能不能把咱们部门「友谊赛」数据算个积分榜?我正困得要命…想了下,这种统计其实很常见:一堆比赛结果,算每队的胜平负、进失球、净胜球、积分,然后排个名,对吧。

就给你一串比赛记录,每条像 “Home,Away,2,1”。意思是主队Home进2个,客队Away进1个。要统计每支队的:胜/平/负、GF/GA、GD、Pts,然后按规则排:积分优先→净胜球→进球数→队名字典序。嗯就这四条,够用。

第一步,扫一遍原始记录,用一个 Map<String,Team> 累加。赢了+3,平了各+1,输了+0,进失球都要记; 第二步,把 Team 丢进列表里按排序规则排一下就完了。整体就是 O(M log N),M场比赛、N支队。

import java.util.*;
publicclassLeagueStats{
staticclassTeam{
        String name;
int wins, draws, losses, gf, ga;
        Team(String n){ this.name=n; }
intpts(){ return wins*3 + draws; }
intgd(){ return gf - ga; }
    }

// record 格式:Home,Away,homeGoals,awayGoals
publicstatic List<Team> compute(List<String> records){
        Map<String, Team> map = new HashMap<>();
for(String r : records){
if(r == null || r.isEmpty()) continue;
            String[] p = r.split("\\s*,\\s*");
if(p.length != 4) continue; // 脏数据略过
            String home = p[0], away = p[1];
int gh = Integer.parseInt(p[2]);
int ga = Integer.parseInt(p[3]);
            Team H = map.computeIfAbsent(home, Team::new);
            Team A = map.computeIfAbsent(away, Team::new);

            H.gf += gh; H.ga += ga;
            A.gf += ga; A.ga += gh;

if(gh > ga){ H.wins++; A.losses++; }
elseif(gh < ga){ A.wins++; H.losses++; }
else { H.draws++; A.draws++; }
        }
        List<Team> list = new ArrayList<>(map.values());
        list.sort((x,y)->{
if(y.pts()!=x.pts()) return y.pts()-x.pts();
if(y.gd()!=x.gd()) return y.gd()-x.gd();
if(y.gf!=x.gf) return y.gf - x.gf;
return x.name.compareToIgnoreCase(y.name);
        });
return list;
    }

// 小示例跑一下
publicstaticvoidmain(String[] args){
        List<String> input = Arrays.asList(
"A,B,2,1","C,A,0,0","B,C,3,3","A,B,1,1","B,C,0,2"
        );
        List<Team> table = compute(input);
int rank = 1;
for(Team t : table){
            System.out.printf(
"%d. %s  Pts=%d  W-D-L=%d-%d-%d  GF=%d GA=%d GD=%d%n",
                rank++, t.name, t.pts(), t.wins, t.draws, t.losses,
                t.gf, t.ga, t.gd()
            );
        }
    }
}

有人问并列名次要不要并列显示?上面用了稳定规则(积分→净胜→进球→名字),所以不会有并列显示的尴尬;真想并列,就把“队名”这条去掉,输出时同分同序号就行。还有,输入里可能有空格、大小写乱七八糟,我在 split("\\s*,\\s*") 做了容错,你们别手抖。

啊对,对了,如果某队在某轮没出场也要出现?那就赛程读完再把“应有队名集合”合并一次,保证零比赛也能在榜单。还有自弃权、判负 0:3 这种…业务定死就当成一条普通比分塞进去就好,别搞特殊分支,逻辑保持闭环最省心。

一遍累加 O(M),排序 O(N log N)。要按主客场拆开统计、或者加“近五场走势”,就在 Team 里多放点字段或者额外建个 Match 列表就够了。想做实时榜?Kafka/队列进来一条算一条,最后用有序结构维护前 K 名,没毛病。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404