获得徽章 1
#青训营笔记创作活动#
2023/2/3 打卡day4
学习 DHCP 协议

插上网线之后,获得IP的方式主要有两种。
第一种是,自己手动在电脑里配。在选择手动配置之后,除了IP地址还需要配上子网掩码和路由器的地址。

第二种获取IP的方式,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。通过DHCP,在联网之后可以自动获取到本机需要的IP地址,子网掩码还有路由器地址。

DHCP的工作原理就是向某个管IP分配的服务器,也就是DHCP服务器,申请IP地址。整个操作流程分为 4 个阶段。

step1-DHCP Discover:在联网时,本机由于没有IP,也不知道DHCP服务器的IP地址是多少,所以根本不知道该向谁发起请求,于是索性选择广播,向本地网段内所有人发出消息,询问"谁能给个IP用用"。

step2-DHCP Offer:不是DHCP服务器的机子会忽略你的广播消息,而DHCP服务器收到消息后,会在自己维护的一个IP池里拿出一个空闲IP,通过广播的形式给回你的电脑。

step3-DHCP Request:你的电脑在拿到IP后,再次发起广播,就说"这个IP我要了"。

step4-DHCP ACK:DHCP服务器此时再回复你一个ACK,意思是"ok的"。你就正式获得这个IP在一段时间(比如24小时)里的使用权了。后续只要IP租约不过期,就可以一直用这个IP进行通信了。


电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。

如果曾经连过这个网,机器会记录你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。

DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。

DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。

DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
展开
评论
#青训营笔记创作活动#
2023/2/2 打卡 day3

juejin.cn

最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。

最左匹配原则顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。最左缀匹配原则的最重要的就是联合索引的第一个字段。

select * 不是造成索引失效的直接原因 大部分原因是 where 后边条件的问题 但是还是尽量少去使用select * 多少还是会有影响的。

范围查找有概率索引失效但是在特定的情况下会生效 范围小就会使用 也可以理解为 返回结果集小就会使用索引

只要是影响到索引列的值,索引就会失效(函数/计算)

索引的时候和查询范围关系也很大,范围过大造成索引没有意义从而失效

在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。从执行计划的结果看,是走了全表扫描。优化方式就是在 Or 两边的字段都加上索引。

使用 in 不是一定会造成全表扫描的,in 肯定会走索引,但是当 in 的取值范围较大时会导致索引失效,走全表扫描(not in 同理)。

在 Order By 的情况下 走全表扫描反而是更好的选择。
展开
评论
#青训营笔记创作活动#
2023/2/1 打卡 day2
今日学习-如何计算出 MySQL 每张表适合的数据量?

很多人说,MySQL每张表最好不要超过2,000万条数据,否则就会导致性能下降。阿里的Java开发手册上也提出:单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。但实际上这个2,000万或者500万都只是一个大概的数字,并不适用于所有场景,如果盲目的以为表数据只要不超过2,000万条就没问题了,很可能会导致系统的性能大幅下降,实际情况下,每张表由于自身的字段不同字段所占用的空间不同的原因,他们在最佳性能下可以存放的数据量也就不同。

根据不同情况下的计算,可以看出InnoDB 三层 B+树情况下的数据存储量范围为120多万条到将近5亿条这个跨度还是非常大的同时,我们也计算了一张博客信息表,可以存储约1,000万条数据。

最终的结论是我们在做项目考虑分表的时候,是需要多关注一下表的实际情况,而不是盲目的认为2,000万调数据就是那个临界点,如果面试谈到这个问题,面试官也并不是想知道这个数字具体是多少,而是想看你如何分析这个问题,看你如何得出这个数字的过程。
展开
评论
#青训营笔记创作活动#
2023/1/31 打卡 day1
今日学习并发编程系列-限流

限流定义:限流是限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制的流量,则通过拒绝服务的方式保证整体系统的可用性。
限流作用范围:可以分为单机限流和分布式限流;
限流方式:计数器、滑动窗口、漏桶限流、令牌桶限流。

上面的限流方式,主要是针对服务器进行限流,我们也可以对容器进行限流,比如 Tomcat、Nginx 等限流手段。
Tomcat 可以设置最大线程数(maxThreads),当并发超过最大线程数会排队等待执行;而 Nginx 提供了两种限流手段:一是控制速率,二是控制并发连接数。
在实际的限流场景中,我们也可以控制单个 IP、城市、渠道、设备 id、用户 id 等在一定时间内发送的请求数;如果是开放平台,需要为每个 appkey 设置独立的访问速率规则。

计数器:
优点:固定时间段计数,实现简单,适用不太精准的场景;
缺点:对边界没有很好处理,导致限流不能精准控制。

滑动窗口:
优点:将固定时间段分块,时间比“计数器”复杂,适用于稍微精准的场景;
缺点:实现稍微复杂,还是不能彻底解决“计数器”存在的边界问题。

漏桶限流:
优点:可以很好的控制消费频率;
缺点:实现稍微复杂,单位时间内,不能多消费,感觉不太灵活。

令牌桶限流:
优点:可以解决“漏桶”不能灵活消费的问题,又能避免过渡消费,强烈推荐;
缺点:实现稍微复杂,其它缺点没有想到。

Redis + Lua 分布式限流:
优点:支持分布式限流,有效保护下游依赖的服务资源;
缺点:依赖 Redis,对边界没有很好处理,导致限流不能精准控制
展开
评论
下一页
个人成就
文章被点赞 2
文章被阅读 1,348
掘力值 189
收藏集
2
关注标签
10
加入于