Contents

ARST打卡第268周

lc520_检测大写字母 当你集中注意力的时候大脑会发生什么?【TED演讲】 数据库圈应告别"唯性能论" master高可用为何链式监控

Algorithm

lc520_检测大写字母

思路: 模拟判断:

  • 全小写: 根据第一个字母小写确定后面全是小写;
  • 首字母大写: 第一个字母大写,第二个字母小写,后面全小写;
  • 全大写: 前面两个字母大写,后面必须全大写;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
    bool detectCapitalUse(string word) {
        int sz = word.length();
        if (sz == 1) {
            return true;
        }

        // state: 0-init, 1 little, 2 big
        int state = 0;
        // 判断前两个字母并初始化后续状态.
        if ('a' <= word[0] && word[0] <= 'z') {
            state = 1;
            if ('A' <= word[1] && word[1] <= 'Z') {
                return false;
            }
        } else {
            if ('a' <= word[1] && word[1] <= 'z') {
                state = 1;
            } else {
                state = 2;
            }
        }
        
        for (int i = 2; i < sz; i++) {
            if ((state == 1 && 'A' <= word[i] && word[i] <= 'Z') ||
                (state == 2 && 'a' <= word[i] && word[i] <= 'z')) {
                return false;
            }
        }

        return true;
    }
};

这么简单的题目写了15分钟…还是要多练,然后学习一下题解的更进一步的抽象:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class Solution {
public:
    bool detectCapitalUse(string word) {
        // 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写
        if (word.size() >= 2 && islower(word[0]) && isupper(word[1])) {
            return false;
        }
        
        // 无论第 1 个字母是否大写,其他字母必须与第 2 个字母的大小写相同
        for (int i = 2; i < word.size(); ++i) {
            if (islower(word[i]) ^ islower(word[1])) {
                return false;
            }
        }
        return true;
    }
};
// 链接:https://leetcode.cn/problems/detect-capital/solutions/1097378/jian-ce-da-xie-zi-mu-by-leetcode-solutio-449z/

Review

当你集中注意力的时候大脑会发生什么?【TED演讲】

大脑有当前专注的物体脑电波,也有扫视周围物体状态的内隐脑电波。

通过脑电波对物体的一一映射,能够帮助失语者说话,也能帮助盲人感受世界。

比如《庆余年》里面五竹就是通过"脑电波"传感器感受周围世界

Tips

数据库圈应告别"唯性能论"

做数据服务很容易陷入到性能迷思,实际上的产品是需要端到端的思考。 端到端地解决耗时瓶颈点,才能更高效优化用户体验。

一般而言,性能特别是通用基准测试,不是选择数据库的好方法。你最好根据易用性、生态、更新速度或与现有工作流的集成完整度来做出决策。 充其量,性能只是完成某些特定任务所需时间的即时观察指标;往坏了说,太关注性能反而导致我们会在错误的事情上做优化。

Share

master高可用为何链式监控

分布式系统中,3个master节点利用zookeeper的临时顺序分布式锁来实现master高可用,为什么使用链式监控(即A抢到最小列号成为master,B第二小监控master的A,C第三小监控次小的B), 而不使所有其他节点都监控master(比如前面提到的B,C都监控成为master的A)

在分布式系统中,使用Zookeeper的临时顺序分布式锁来实现master高可用是一个常见的方案。在这个方案中,节点通过创建带有顺序号的临时节点来竞争成为master。链式监控和直接监控是两种常见的监控策略,其中链式监控通常更为推荐。

链式监控的优点:

  1. 减少Zookeeper负载

    • 如果所有节点都监控master节点,那么一旦master节点发生变化(如宕机或断开),Zookeeper需要通知所有监控master的节点。这将导致大量的通知开销和网络流量,增加Zookeeper的负载。
    • 链式监控只需要通知下一个节点,极大地减少了通知的数量和频率,从而减轻了Zookeeper的压力。
  2. 降低惊群效应

    • 所有节点都监控master节点时,一旦master宕机,所有节点都会同时收到通知并尝试创建新节点以成为新的master。这会导致短时间内大量节点同时竞争资源,可能引发惊群效应。
    • 链式监控仅使下一个节点尝试成为新的master,其他节点则继续等待和监控,这样可以有效避免惊群效应,提升系统的稳定性和性能。
  3. 更好的容错性和延迟优化

    • 在链式监控中,如果当前master节点A宕机,只有监控它的次小节点B会尝试接替成为新的master。如果B也宕机,则只有监控B的节点C会继续接替。这种逐级处理方式使得故障处理过程更为渐进和可控,减少了系统在处理故障时的复杂度。
    • 直接监控可能导致多个节点同时进行master切换操作,从而增加切换延迟,而链式监控通过有序接替来优化切换延迟。

总结:

使用链式监控而不是所有节点直接监控master节点,可以有效地减少Zookeeper的负载,避免惊群效应,并优化故障处理过程和切换延迟。因此,链式监控通常被认为是实现master高可用性的更优策略。