系统设计面经 如何设计一个推特Twitter系统

当前很多大厂的面试中,除了会被问到类似leetcode上的算法题目之外,系统设计也是常被考到的一类题型。本篇文章我们来分享一下关于大规模系统设计的问题,比较典型的例子就是设计一个类似于推特的社交服务。

继续阅读
发表在 系统设计 | 标签为 , , | 留下评论

育儿记 回顾宝宝出生的全过程,在日本进行无痛分娩是什么感受

宝宝已经出生十二天了,才终于有一点时间来回顾一下宝宝出生的全过程。作为一名新手爸爸,在经历了老婆生产的全过程之后,才真正体会到了生娃的不易。

时间退回到半个多月前,老婆进入孕期第41周,也就是过预产期后第一周。当天孕检结果显示子宫口仍处于闭合状态,医生表示尚未达到住院标准。这一点和国内的情况可能有些不同,在日本生产,如果孕妇没有出现破水,出血或者规律阵痛的情况下,医生是不建议入院的。实际上预产期只是一个估算出来的日期,理论上42周之前出生都属于正常现象。不过唯一需要注意的是,在过了预产期之后的日子里,要比之前更加的谨慎,因为羊水的质与量都有可能出现不同程度的下降,如果下降到某个特定范围之下,对宝宝的健康会产生严重的威胁,因此实时观察胎动以及及时发现异常现象是十分必要的。另外,为了促进宝宝尽快出生,运动也是必须的,比如散步,爬楼梯或者做蹲起。那段日子里,我们几乎每天都要走上1万米外加攀登几百阶台阶。对于我这样的技术宅而言简直苦不堪言,运动量几乎赶上我前几年的总和。

等待本身并不痛苦,但折磨人的是你不知道等待的终点在哪里。老婆从38周开始就陆续出现了一些腹痛的症状,当时在网上各种谷歌之后得出的结论是假性宫缩。先抛开假性宫缩不提,首先你应该明白宫缩与阵痛之间的关系,所谓宫缩实际上子宫收缩的简称,用白话来讲,宫缩的目的在于让子宫本身处于生产的临战状态,更简单点说,没有宫缩便无法自然分娩。而阵痛则是由于宫缩而产生的腹痛感(确切讲应该是子宫痛)。而假性宫缩则是宫缩前的热身,不论强度还是频率都远远低于真宫缩。很多人没有经历过阵痛的人都会问,阵痛到底是什么感觉?关于这个问题我也查阅了多篇文章,但最终也没得到一个满意的答案。毕竟每个人对疼痛的感觉都存在着的差异,并且在使用语言描述一种感觉时,或多或少都会产生一定的偏差。再者作为一名男性,我也没有实际经历过这种感觉。实际上,我关注这个问题的本身并非出于好奇,而是在这个痛苦的等待过程中,想尽早的发觉老婆身体的异常,从而看到最终的曙光。在这里我也没有办法为大家精确的描述出阵痛的感觉,但阵痛一定会出现以下2个特征:

  1. 非常疼,并且疼痛的范围是整个子宫,而非某一个部分。如果你感觉疼痛的程度在你可忍受的范围之内,那么这很大可能不是真正的阵痛。
  2. 上文提到过,阵痛是真性宫缩的产物,而宫缩存在规律性,在日本,对真性宫缩的定义是每次宫锁的间隔保持在7分钟以内。

我老婆在孕41周时就出现过一次乌龙事件,当天老婆肚子出现腹胀感,并伴有疼痛(疼到出汗的那种)。在2个小时内大概“阵痛”了5-6次左右。当时我们都以为生产在即,并立刻拨通了医院的急诊电话,而医院那边在听了我们的描述之后,显得十分镇静,告知我们无需慌张,并重申入院的条件:

  1. 阵痛间隔小于等于10分钟。
  2. 大量出血。
  3. 破水。

在出现上述某一种现象后再联系医院即可。

第二次乌龙事件是发生在实际住院的前一天,当天早上孕检发现子宫口已开一指,并回家后发现出血现象(量不大),随即惊慌失措,立刻联系院方,而这一次,医院的护士小姐姐在确认了出血量之后依旧不慌不忙,并再次告知,出血量不大不必担心。所谓大量出血要达到例假期血量最多那天的级别才可以。

第三次联系医院,是发生出血后的转一天。当天中午老婆发现了非常粘稠的分泌物,这是密封子宫口的物质,日语称之为おしるし,他的脱落,代表子宫口已经开始大门敞开。接下来当天下午5点多开始,假性宫缩变得频繁并具有规律性,间隔大概在10-15分钟左右,但疼痛感仍没有达到无法忍受的程度(最多只是疼到出汗的级别)。记得当时老婆还在开玩笑说,阵痛也不过如此呀!一小时后,阵痛间隔缩短至10分钟以内,大概7-8分钟左右,但出血量并没有发生改变,并无破水现象。于是我们再次拨通医院电话,对方曰:过来吧。

从家打车到医院最多也就5-6分钟的样子,记得老婆上车前疼了一次,下车后又疼了一次,而这两次的疼痛感明显有所增加,阵痛时几乎是无法行走的,而阵痛的时长也到达了半分钟左右。到达医院是晚上7点,这也是宝宝出生前17个小时。与前几次的孕检一样,护士依旧先查看宫缩的情况。检查宫缩是使用一种仪器,通过绑在肚子上的腰带,来检测当前孕妇腹部的紧缩状态,该状态会通过客观的数字显示在仪器的屏幕上,通常情况下该数字在10左右(根据腰带的松紧程度,数字会存在差异),当阵痛来时,数字会飙升至30-50。如下图:

阵痛检测仪器

上图中左边的数字145是宝宝的心跳数,而右边12则代表孕妇的宫缩程度,也可以理解为当前的阵痛感。通过一个小时的观察后,护士判定真正的阵痛已经开始,可以入院并且宣布进入临产状态。另外此时子宫口的张开程度为三指。

进入产房大约在晚间8点30分。产房面积比我想象中要大很多,并且没有医院里那种纯白色系的装扮。反而整个房间都充满了昏暗的灯光,掀开落地窗上的窗帘,可以看到楼下马路上偶尔开过的汽车。这时护士打开了音响,随即耳边传来了古典轻音乐声。产房与之前的那间观察室相比,设备并没有太多的变化,除了上文介绍过的阵痛检测仪,还多了一台观测孕妇血压与心跳的仪器。一名助产师再次检查了子宫,发现子宫口仍是3指状态,接下来我们需要等待阵痛间隔的缩短,并且等待子宫口10指全开。

随后的几个小时里,老婆的阵痛感逐渐加强,间隔也随之缩短至5分钟,仪器上的阵痛数字首次突破了100以上。从晚间9点半开始,阵痛间隔稳定在了3-4分钟,阵痛感升至100以上已是家常便饭。这是一种常人难以忍受痛感。记得母亲曾和我说过,当年她躺在产房里,看到产床四周的铁质栏杆,早已被无数产妇钻捏的七扭八歪。我一时间显得有些无助,看到妻子一次又一次的痛苦吼叫,我却无能为力,只能无意识的握紧她的手或是按摩她的后背与腰部。22点39分,助产师发现羊水破水。

实际上我们这次是计划进行无痛分娩的,理论上麻醉师会在这时过来注射麻药减轻痛感。但由于医生发现,每当阵痛感到达峰值时,胎儿的心跳数会随之下降,这代表宝宝当前的状态并不适合进行无痛注射。直到凌晨1点钟,胎儿情况才有所稳定,终于在煎熬了近4个小时后,老婆的疼痛感在麻药的点滴中逐渐缓解下来。

接下来的几个小时相对轻松许多,此时阵痛的间隔在2-3分钟,由于麻药的原因,只有当阵痛感到达100以上时,老婆才会稍微感到不适。气氛变得缓和,我的内心不自觉地产生了一些激动感,第一次感觉到距离宝宝如此的接近。当时间来到3点30分,检查发现子宫口已开到9指,此时距离10指只剩一步之遥。而这一步让我们又足足等待了近3个小时之后,终于在凌晨6点18分时许,助产师宣布10指全开。子宫口开到10指代表,在无数次宫缩的作用下,子宫口终于打开到最大程度(相当于10个手指的宽度),这也是宝宝头部可以通过的宽度。接下来需要等待宝宝进入产道直至头部完全探出妈妈的身体,不过在我看来,这最后的一步才是生产全过程中最为痛苦的一步。

由于无痛分娩的麻药主要作用于子宫,对子宫产生的阵痛产生明显的减痛效果。但是当宝宝从子宫移动到产道之后,除非加大麻药的计量,否则孕妇同样需要承受产道巨大的疼痛感。而增加麻药计量也会增加宝宝出现意外的风险,老婆毅然决定保持当前药剂,忍痛挺过最后一关。

我不禁回忆起过去几个月宝宝在妈妈肚子里逐渐长大的过程。每一次孕检时,除了胎儿的健康之外,宝宝的体重也是我们最为关心的问题。虽然老婆怀孕以来一直在控制饮食,另外每天也坚持大量户外活动,但无奈宝宝的体重却一增再增。到孕40周时,体重已接近4公斤,虽算不上巨婴,但在正常范围内绝对已经触及上限标准了。到了孕41周,医生或许是为了减轻孕妇压力,已经不再报告婴儿体重,只是一再安慰说没关系,顺产一定没问题。

而如今,面对4公斤以上的宝宝,产妇产道的压力可想而知。另外如果婴儿在产道滞留时间过久也会产生窒息的风险。医生告知说,如果在7点半之前,宝宝不能顺利进入产道,他们将会采用催产针加快生产过程。催产针实际上是一种加速宫缩的药物,目的是增加宫缩的频率以及强度,从而加快将宝宝送出子宫的速度。而副作用也是明显的,加强孕妇的疼痛感!催产针(点滴方式)的计量将由少到多逐渐增加,直到能将宝宝完全推出母体为止。

7点43分,点滴中开始加入催产液。随后宫缩程度与频率明显加强,阵痛感剧增,间隔缩短至1分钟左右。当阵痛峰值来临时,阵痛仪器上显示的数字会瞬间飙升至127(127貌似是仪器显示范围的最大值)。此时助产师与护士开始做接生准备,并教导老婆如何配合生产。当阵痛感来临时,深呼吸一口气,然后憋气并用力于小腹部,直到感觉到窒息的极限时缓缓呼气。重复此过程直到本次阵痛结束。大家可以自行脑补下这种感觉,当强烈的阵痛来临时,你还要憋气并用力于腹部,这使得原本就疼痛万分的腹部更加雪上加霜,痛感会在瞬间呈指数形态高速增长。接下来每当老婆用力时,我都在幻想下一秒宝宝呱呱坠地的场景。此时老婆已经浑身大汗。在经历了几十次阵痛后,助产师告诉我们她已经摸到宝宝的头部啦!我兴奋的认为宝宝会在窗外大多白领走进他们办公室之前,迎着上午9点钟的阳光来到我的世界。

而我的想法还是太过天真了。护士说,每次宫缩加上产妇的用力,只能将宝宝向外推送不到1厘米的距离,因此乐观的估计,宝宝会在正午之前出生!接下来的一个小时,老婆的体力开始下降,由于注射无痛针的缘故,孕妇在注射前6小时开始是不能进食的,算到现在已经将近17个小时没有休息并没有吃过东西了。我和护士不断的给老婆打气加油,并告知她宝宝已经距离我们非常接近,她只需要再坚持一会就可以看到我们可爱的儿子啦。然而我的内心也是万分的纠结,我十分想向护士去确认当前真实的进度,询问下老婆到底还要再坚持多久,但是我的理智制止了我的发问,因为我十分害怕护士说出真实情况后老婆的心态会崩塌。所以我也只能自欺欺人,索性相信护士的安慰,即再坚持一下就好。记得后来老婆和我回忆这一段经历时,她告诉我,实际上当时她的内心无数次泛起过放弃的念头,打算直接告诉医生剖腹算了。但是每次听到我和助产师的鼓励,并想到已经经历过的痛苦,咬着牙还是一次次坚持下来,直到最后。每一次她在用尽力气憋气时,即使憋到再也无法呼气,也还会再努力坚持更长的时间,使出更大的力气,直到意识模糊才会被动的呼气。记得有一段时间,不知道是因为痛感难忍还是体力不支,她已感觉头在发抖。

痛苦的时间过的总是缓慢无比。感觉经历了很长时间的煎熬,但实际上时钟仅仅过去了一个多小时。2020年6月5日周五的上午10点30分,没有任何的特别,它与每一天的上午一样在静悄悄的流逝。此时,产房中的护士逐渐多起来,他们从一侧的储物间中推出一个婴儿床,该床上同样连接着许多仪器,这显然是为出生后的宝宝准备的。另外几个医生与助产师会诊后告知我们,宝宝一定会在正午12点之前出生。

老婆的阵痛还是每间隔1分钟来一次,每当阵痛来临时,我都会不自觉地帮助护士一起按住老婆的腿部,在阵痛结束后再给老婆按摩腰部。如此循环,我逐渐变得麻木,而老婆还在一次次的坚持着,努力着。在某一刻,我的眼角突然流出了泪水,完全止不住的留。我都记不得我上一次哭到流泪是什么时候了。但这一次,最为一名八尺男儿,我哭的有些失态。为了不让别人发现,我只好躲进房间的一个角落,面朝窗外,任凭眼泪飞溅。实际上我当时也没搞清楚流泪的原因,或许是体会到老婆的付出,或许是心疼正在努力的宝宝,亦或许是即将升格为父亲的喜悦。总而言之,原因并不重要,我只想马上对着老婆和宝宝说句中午好。

时间来到11点钟,考虑到胎儿不宜在产道停留时间过久,医生决定给催产剂加量。随即阵痛的间隔再次缩短,或者说阵痛已经变成常态化,完全没有必要用间隔来分辨出每一次阵痛的开始与结束。老婆依旧没有放弃,完全不顾身体的虚弱,本能的使出体内残存的力量,全力作用于腹部。11点30分,我看到房间上方的无影灯缓慢打开,有一名医生身穿防护服并站到了一个装满手术刀的台前准备起来,其助手在不停给产道涂抹类似于润滑剂的液体。其他的医生,护士,助产师以及麻醉师都陆续聚集到产房,原本很宽敞的空间内,瞬间拥挤了许多,大家都在各自忙碌着。我知道,距离最后的时刻应该很接近了。

11点45分,随着医生将产道侧切开3厘米,一个鲜活的生命一股脑的钻了出来。这个场面有些血腥,与电视中经常看到的场景并不相似,孩子的哭啼声并不明亮,有些沙哑并断续。身上的脐带比我想象的要粗并长很多。护士随即将宝宝抱到事先准备好的那台婴儿车上,并使用各种仪器对其进行检测。同时使用一台机器为宝宝进行口腔清理。随着清理的进行,宝宝的哭声逐渐明亮悦耳起来。我突然变得有些迟钝,呆呆地左右环顾着老婆与宝宝,以及走来走去的医生。直到我回过神来,才发觉我的眼角又湿润了。

“生了“,我马上在家族的微信群里发出了这两个字。看着早已疲惫不堪的老婆,以及稚嫩娇小的宝宝,我体会到了一种升华的感觉。(全文完)


后记:从宝宝出生的那一刻起,他会改变你生活的全部,尤其是你的作息时间,你原本已经习惯的东西都会被他的一声啼哭所打乱。本篇文章我断断续续写了将近一周才结束,对于我这个原本时间足够充裕的人来说是无法想象的。但是每每看到他的笑容,你会觉得一切都是值得的。本篇博文将作为我终身的回忆,或许有一天我会将此分享给我的孩子,让他与我一同回忆这难忘的时刻。同时,如果你有幸阅读到了这里,并且你是一名准爸爸或准妈妈,希望上面的内容能够对你有一些帮助。

发表在 育儿 | 标签为 , , , , | 留下评论

LEETCODE 1490. Clone N-ary Tree 解题思路分析

题目大意:

Given a root of an N-ary tree, return a deep copy (clone) of the tree.

Each node in the n-ary tree contains a val (int) and a list (List[Node]) of its children.

class Node {
    public int val;
    public List<Node> children;
}

Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).

Follow up: Can your solution work for the graph problem?

继续阅读
发表在 leetcode | 标签为 , , , , , | 留下评论

LEETCODE XOR Operation in an Array 解题思路分析

题目大意:

数组异或操作

给你两个整数,n 和 start 。

数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。

请返回 nums 中所有元素按位异或(XOR)后得到的结果。

继续阅读
发表在 leetcode | 标签为 , , , | 留下评论

LEETCODE 1487. Making File Names Unique 解题思路分析

题目大意:

给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。

由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。

返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。

继续阅读
发表在 leetcode | 标签为 , , , , | 留下评论

LEETCODE 1488 Avoid Flood in The City 解题思路分析

题目大意:

避免洪水泛滥

你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水。你的目标是避免任意一个湖泊发生洪水。

给你一个整数数组 rains ,其中:

  • rains[i] > 0 表示第 i 天时,第 rains[i] 个湖泊会下雨。
  • rains[i] == 0 表示第 i 天没有湖泊会下雨,你可以选择 一个 湖泊并 抽干 这个湖泊的水。

请返回一个数组ans ,满足:

  • ans.length == rains.length
  • 如果 rains[i] > 0 ,那么ans[i] == -1 。
  • 如果 rains[i] == 0 ,ans[i] 是你第 i 天选择抽干的湖泊。

如果有多种可行解,请返回它们中的 任意一个 。如果没办法阻止洪水,请返回一个 空的数组 。

请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但如果你选择抽干一个空的湖泊,那么将无事发生(详情请看示例 4)。

继续阅读
发表在 leetcode | 标签为 , , , | 留下评论

家有喜事,博客停更几日

这应该是我第一次长时间停更,毕竟刷题是为了找到好工作,好工作是为了家里人幸福,因此当家里有喜事时暂停刷题也讲道理的哈!忙忘这几天继续。

发表在 leetcode | 留下评论

LEETCODE 1029. Two City Scheduling 解题思路分析

题目大意:

两地调度

公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。

返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。

继续阅读
发表在 leetcode | 标签为 , , , , , | 留下评论

LEETCODE 237. Delete Node in a Linked List 解题思路分析

题目大意:

删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

现有一个链表 — head = [4,5,1,9],它可以表示为:

继续阅读
发表在 leetcode | 标签为 , , | 留下评论

LEETCODE 226. Invert Binary Tree 解题思路分析

题目大意:

翻转二叉树

翻转一棵二叉树。

继续阅读
发表在 leetcode | 留下评论