
看到有 v 友分享面试经历,我想起来几年面试的时候遇到的一个问题,至今还没有解答:
面试官:如何保证内存里的数据永不丢失,包括断电的时候。
我:数据持久化、分布式,配合硬件上的灾备支持。
面试官:不对
我:那有什么好方法分享一下吗
面试官:我就不跟你多说了,你回去了解一下
我:一脸懵 b 的走了
至今还是没有明白这个问题到底是啥情况,真的有更优雅的解决方案吗。。。
1 ballshapesdsd May 2, 2018 ups |
2 windfarer May 2, 2018 刻在石头上 |
3 whatisnew OP @ballshapesdsd 硬件上的灾备支持就包括 ups 啊 |
4 Yanickkk May 2, 2018 我猜是想问 Redis 的 aof 和 rdb |
6 BOYPT May 2, 2018 只要保证电源永远不断就可以 |
7 SuperMild May 2, 2018 内存,一般是指断电就丢失数据的快速存储器,根据定义可见要使内存数据不丢失,只有防止断电才能做到。莫非这个面试官说的内存不是这种内存? |
8 realityone May 2, 2018 你和他讨论 ROM 算不算内存 |
9 lance7in May 2, 2018 只要断电的时间足够段,电源里电容存的电还是可以撑过去的 |
10 7654 May 2, 2018 我们机房的 UPS 可以保证所有服务器及空调满负荷工作 4 小时,楼顶还有 3 台 120KW 柴油发电机,还有地底的油库 而我们只是一个小公司 |
12 sbbeta May 2, 2018 via Android @realityone 哈哈!想起以前有人说手机有 64G 内存 |
14 WispZhan May 2, 2018 你要反问面试官,Flash 闪存分哪几类。 |
15 RHFS May 2, 2018 via iPhone 我猜面试官 想告诉你 用网盘 |
16 fffflyfish May 2, 2018 换那种非易失存储的内存,比如 MRAM 这种用磁性介质存储的内存条呗 |
17 jason19659 May 2, 2018 用硬盘当内存 |
18 MonoLogueChi May 2, 2018 via Android 感觉应该是保证不断电吧,内存数据要和硬盘同步的话,就失去了速度优势了。难道现在真的有这种技术了吗/div> |
19 Shura May 2, 2018 用相变内存啊,非易失 RAM。 |
20 otakustay May 2, 2018 我也想知道,这样我就弄个好主板插 256G 内存不买硬盘了 |
21 phpdever May 2, 2018 常见数据库有 wal 这种 log 保证先刷 log 顺序到磁盘,然后数据到内存,保证数据不会丢。 内存数据 dump 磁盘在删除 log。但是实际工作经验显示,wal 可能不一定有效,因为你刷 wal log 可能为了吞吐而让刷 log 做那种批量之类的刷,数据也会内存有,掉电的话还是会丢数据,除非你愿意牺牲吞吐(也有业务这么做)。 还有一种就是你拿钱去换数据可靠性,直接数据写 nvme 介质。 这种介质内部有一个自己的电源的东西保证数据不易失,但是这个没有用过,也就是论文里面看过,有学术界玩过。 仅供参考。 |
22 zn May 2, 2018 via iPhone 说不断电就可以的,死机了解一下? |
24 zst May 2, 2018 via Android UPS 还可以失火导致自动断电保护呢也不靠谱 |
26 ender049 May 2, 2018 液氮 |
27 mengyaoss77 May 2, 2018 via Android 面试官都好有趣啊。 |
28 logOo May 2, 2018 估计面试官刚被女朋友问过:你会永远爱我么。什么是永远,宇宙毁灭么? |
29 KgM4gLtF0shViDH3 May 2, 2018 以前遇到过好几个这种问了问题请教下都不回答的。。一般都是向 hr 和同事炫耀自己能问倒面试的人,好像很厉害的样子,呵呵。 |
30 l30n May 2, 2018 via Android 内存计算 |
32 YanSep May 2, 2018 via Android 存区块链上吧 |
33 odirus May 2, 2018 如果不钻牛角尖的话,所有内容都先写入磁盘(持久化),读取的时候刷新到内存中,即使断电了,重启的时候程序也能自动刷新最新内容到内存中。 不知道是不是想要的方案。 |
34 Navee May 2, 2018 先写入磁盘再加载到内存 |
35 jianzong May 2, 2018 mmap |
36 momo1999 May 2, 2018 傲腾内存? |
37 judeng May 2, 2018 mram 了解一下? |
38 qf19910623 May 2, 2018 @odirus 这样已经失去了内存的意义了,直接可以把内存去掉了 |
39 sgissb1 May 2, 2018 傲疼了解一下,热数据永不丢失,冷数据万年找不回(前提是硬盘上没回写)。 内存上数据还不想丢失的话也有一种办法,就是内存和硬盘一起写数据。貌似 n 年前有一些对数据可靠性要求高的在做,比如"事务"这个功能。 |
40 lixile May 2, 2018 硬件灾备喽 有自带电容和固态的那种内存 断电自动写入。。 |
41 sampeng May 2, 2018 除了硬件容灾,真想不到有什么着了。所以的一切都是建立在物理介质上备份的。压根和内存的本身定义就没有什么关系。不管是断电自动写入还是 log flush 到某个地方防止断电丢失。 难道面试官的 G 点是 mmap ?也不像啊。。。。只能说。很有趣的面试官 |
42 recordnow May 2, 2018 对面试官使用激将法 脸上略带嘲讽:哦,原来你也不知道。不错喔,你很因脆丝汀。 |
43 eurokingbai2 May 2, 2018 不就是 nvm 么。。 |
44 limbo0 May 2, 2018 这个面试官有点叼, 我去买橘子 |
45 chentydev May 2, 2018 这题目本身就有问题。 根本不存在“永不丢失”的数据。最极端的情况,宇宙炸了,数据还能不丢失吗?实际能做到的只能是尽可能减小数据丢失的可能性。 从这个角度来看,要么就承认 LZ “数据持久化、分布式,配合硬件上的灾备支持”的答案是合格的,要么就只能承认自己提的问题本身无解了。 |
46 sumu May 2, 2018 在一个不完美的基础上构建一个,比如 5 个 9,或者 6 个 9 系统,是可以的,但构建一个 100%可靠的?我估计他没学过概率 |
47 cabing May 2, 2018 哪有绝对的不丢失。。一般的都是磁盘持久化,分布式,多机房备份~~ |
50 360045 May 2, 2018 根据能量守恒定律,这些数据本身就不会消失啊,就算上面说的炸了也不会消失,只是换了另外一种形式存在,手动滑稽 |
52 leeg810312 May 2, 2018 via Android 遇到这种装 b 面试官,直接嘲讽怼,反正肯定不会要你了,不要让自己不爽 |
53 GjriFeu May 2, 2018 persistent memory 了解一下 |
54 zj299792458 May 2, 2018 via iPhone @7654 在美国? |
55 yufz May 2, 2018 nvram? |
56 iceheart May 2, 2018 via Android 他是想问 filemapping 吧? |
57 jetyang May 2, 2018 有时候就这样,面试官想要的点候选人总是 get 不到,只能说这个问题设计的不好。启发式的发问最好,有个背景有个一般的方案,候选人在面试官的引导下逐步优化,再考察一下边界情况。题主说的这个题,双方没想到一起就尴尬了,面试官也不好据此判断候选人的能力,只好换题 |
58 pkookp8 May 2, 2018 via Android 硬盘读写多了费硬盘费时间 硬盘读少了丢数据 看取舍吧,像 word 这种 1 分钟保存一次也没事 内存又叫易失性存储器,不易失请用 rom |
60 nov11 May 2, 2018 non-volatile memory? |
61 metrotiger May 2, 2018 Sir, PLS define internal memory. |
62 amai May 2, 2018 非易失内存, 铁电,还是有不少选择的 nvram,fram 注意咬字,内存和掉电,上面说 ups,后背什么的,异地什么的,都咬的不紧 ups 哪么还是没掉电,后背也是,异地 哪么内存数据还是丢了。 办法很多,选择也很多,问这问题的得看什么样的人和什么样的事,关乎底层和硬件的还说的过去 如果不是,几句话答回去就把天聊死了,面试聊天是门学问,答上来还得把台阶给上。 |
63 amai May 2, 2018 其实 x - p 也可以,这个在用法上天然有优势 还有面试问 coms 工艺的呢,这你怎么回答?不知道哪想出来的,回答完基本上都挺尴尬的 |
64 yangqi May 2, 2018 @qf19910623 #38 并没完全失去意义,这种情况内存相当于缓存 |
65 saybye May 2, 2018 ups 撑四个小时? |
66 lalala121 May 2, 2018 哈哈哈哈,你这么一说我想起来刚工作的时候面试,那人问我知道什么 http 方法,我说 get,post,head,然后就不知道了,那时候还不知道 put,delete 这些,然后面试官跟我说,你说的这些我们线上都没法用,安全性太差,后来我也是想了好久,应该用啥呢 |
67 yangqi May 2, 2018 这种面试官“我就不和你多说了”,一般潜台词要么是他也不知道,要么他这个问题问的不严谨,经不起推敲,所以含糊其辞。 |
68 wdlth May 2, 2018 接下来还有问: 包括内存坏的时候? 包括持久化存储坏的时候? 包括脑子不好使的时候? |
70 twl007 May 2, 2018 via iPhone 前几年 Google 机房断电 也丢了数据了,怎么可能不丢…… |
71 prolic May 2, 2018 via Android 怕不是脑筋急转弯 |
72 Marble May 2, 2018 via Android never say never |
73 roychan May 3, 2018 非易失存储器了解一下 |
74 SuperMild May 3, 2018 非易失存储器是方案之一,但面试官遮遮掩掩是什么意思,就一句话的事情装什么高深呢,很不尊重人啊。而且,非易失存储器只是方案之一,有很多缺点,并不见得就一定比 ups 好,凭什么搞得好像标准答案似的。 |
75 watzds May 3, 2018 via Android 只存 NULL 就可以做到,write NULLl , read NULL. |
76 zlhsvc May 3, 2018 面试官会告诉你保存在硬盘上 |
77 eric227 May 3, 2018 永不丢失?那就是在无穷多的地方备份呗 |
78 mydns May 3, 2018 你猜猜猜 |
79 ihjk May 3, 2018 区块链 无耻滑稽 |
80 fiht May 3, 2018 我觉得,遇到这种问题不要慌,具体到具体问题的话就好解决了,比如说: “如何保证内存里的数据永不丢失,包括断电的时候。” 我觉得这个用 Redis 最好表述了。 “呀,您这个问题问得好,我们之前考虑过,我们之前用的是 Redis 做的 xxxx,这个 Redis 就是完全 in-memory 的,也就是说掉电之后就会消失,Redis 官方的解决方案是定期把内存中的数据持久化到硬盘上去。但是这个还是有问题滴,比如讲来没来得及持久化就 Duang 机的话数据也存不下来,我们是搞了一个 Redis 集群,master 挂了 slave 变成 slave,单机 Duang 机我们的数据也是不丢失的,如果要再加强的话,可以在多个地方起 slave 做备份节点,保证数据安全。” |
81 xman99 May 3, 2018 把数据多写几份, 先保证把固态写入后再写入内存, 然后固态做几份备份。这种方式可以吗 |