记录一次Cloudflare无法访问的排查过程
问题起因🌲最近在做一个web项目,前两周打开前端调试突然发现网站渲染失败,F12查看发现部分CSS和JS的CDN资源加载不出来,均来自于cdnjs.cloudflare.com这个域名,当时刚好碰上Cloudflare出现了重大事故(详见Cloudflare 刚刚这波挂得挺惨的和Cloudflare outage on June 21, 2022),于是当时想着可能是Cloudflare的问题,过几天应该就好了吧?😄
结果昨天晚上去看还是加载失败,就开始自己定位问题。😓
问题定位🔍Ping首先看看域名能不能ping通
1234567891011$ ping cdnjs.cloudflare.comPING cdnjs.cloudflare.com (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.048 ms64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.063 ms64 bytes from 127.0.0.1: icmp_ ...
并查集算法初步梳理
背景🎣上周六晚参加的LeetCode双周赛81场第二题2316. Count Unreachable Pairs of Nodes in an Undirected Graph提交了三次才过😓,主要手写查找函数的时候没有使用路径压缩(或者合并函数里面按秩合并也可以过的),看来自己对并查集还不熟悉,用得极少,特地写一篇博客梳理一下此算法。
原理📖数学上的并查集(Disjoint sets)可以简单理解为若干个不相交的集合。而数据结构上的并查集(Disjoint-set data structure)一般是用森林来表示集合关系,每棵树是一个独立的集合,每个集合的标志就是树的root。底层存储可以用数组,其中每个元素的值指向其parent所在的位置,特别地,root的parent就是它自己。
并查集主要实现了查找Find(找出某个元素属于哪个集合,即返回所在树的root)和合并Union(合并两个集合,即两棵树合并成一棵树)这两个基础操作,在此之上可以实现很多功能,如:
判断两个元素e1,e2是否属于一个集合
Find(e1) == Find(e2)
计算所有不相交集合的个数, ...