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