1
Ison 2015-07-08 17:18:19 +08:00
其实有时候俺也怀疑
到底面试的想要什么人 是要问什么都能达得上的呢 还是要问什么都能提供思路的呢 显然应该是后者 但为毛有时候面试官会给人是着重前者的感觉呢 就像lz遇到的情况。。。 |
2
jones 2015-07-08 17:23:13 +08:00 via Android
第一个问题一般做法订单提交然后把订单ID写队列,然后推送处理程序从队列中拿出来处理,队列用Redis的发布订阅功能实现延迟应该在接收的时间范围内,
我猜测面试官想让你这么回答,, |
3
mhycy 2015-07-08 17:55:14 +08:00
怎么从这个答案上看提问者有点傻逼的感觉。。。
第一题 对于用户的信息推送,客户端必定会存在一个延迟,这个延迟不是内部产生的,而是由于网络产生必定会存在的一个延迟。因为不可能现在与客户端有一个即时可用的长连接用于推送。所以无延迟是不可能的。 第二题 100亿的页面分析,具体需求如果有说清楚的话时间还是可以估算的,但是这个与机器的配置,数目,网络带宽有极大的关系,随便问一个时间是不可能准确回复的,当然你可以说说时间是怎么算的。。 第三题 缓存,延迟,丢数据。。。 越看越觉得面试者是个傻逼,因为缓存总会有容量限制,那么缓存必定会有一个失效期。 如果要处理延迟尽可能的低,可以另开一个缓存进程,由应用通知进程进行数据缓存操作。 那么每次读取去取就行了,但这并不能保证数据的一致性。 (后台更新了,缓存依旧没更新,但只读缓存,这样其实和数据库从库的表现是一致的) |
4
glasslion 2015-07-08 18:57:59 +08:00
以前面试时遇到过推送的问题,为了用户体验, 创业公司一般会选第三方推送的SDK, 所以既不能让推送的延迟过大, 又要让尽可能多的信息一起推送
|
5
FrankFang128 2015-07-08 19:01:56 +08:00 via Android
就题论题有啥意思,面试官抓不住重点。
|
6
lincanbin 2015-07-08 19:49:49 +08:00 1
1. 要保证无延时,开socket或者Long Poll,订单处理完成后回调推送程序。
只有异步回调可以做到无延时,但是并不常见。 2.这跟网络、CPU、硬盘I/O性能关系都很大的,没给足条件自然没有答案。 3.memcached的数据持久化也是可以自己轻易实现的。 |
9
gamexg 2015-07-08 21:07:39 +08:00
第一个推送很好搞啊,收到订单后把订单数据存数据库,然后推到推送队列里面去。推送服务取出来通过推送系统推到客户端即可。
推送系统现在有很多了,可以使用第三方的,也可以自己建,做好长连接心跳不拼单机带客户量的话很容易搭建。实测一般2秒内可收到推送。 |
10
sivacohan 2015-07-08 23:17:42 +08:00 via Android
抛开问题。其实就是你和面试官不在一个频道上。
对你来说,这样的公司还是不要去的好。 因为如果不能流畅沟通,那以后一起工作会非常的麻烦。 |
11
sophie2805 2015-07-08 23:20:18 +08:00
哪个公司的??
以后绕道~ |
12
szopen OP |
13
szopen OP |
14
wy315700 2015-07-08 23:50:00 +08:00
@szopen
则个属于概率论里一个悖论,就是概率再低,也会发生,概率再高,也有不会发生的。 因为如果样本足够大,即使概率再低都会发生。 所以这个时候要考虑的是后验概率,已知平均故障率的情况下,发生一次故障的概率,发生两次故障的概率,今天发生故障的概率,这周发生故障的概率。 10和100倍的差距就在这里体现了。 |
16
akira 2015-07-09 01:11:34 +08:00
1. 实时的意思应该是在数秒之内。客户端和服务器端保持长连应该可以做到。另外应该会用到消息队列。
2. 这种题目自己做条件假设。假设服务器系统内存带宽等必要参数,然后根据这些参数计算个结果出来。 3. 写缓存确实有这个问题。读缓存的话,丢了重新读就是了呗。 |
17
helloworld00 2015-07-09 07:22:37 +08:00
我在想99.99%与99.999%这两个概率有啥区别
举个简单的例子,如果1-99.99%=0.0001是一台服务器A一个礼拜至少crash一次的概率; 1-99.999%=1.0e-5是一台服务器B一个礼拜crash至少一次的概率。 一个50,000台服务器A的clusters,平均每个礼拜就有5台服务器至少会crash一次,每个月就有20台机子至少会crash一次,每年就会有240台服务器至少会crash一次。 另外一个50,000台服务器B的clusters,稍微好点,平均每个礼拜会有0.5台服务器至少会crash一次,每个月2台,每年24台至少会crash一次。 |
18
helloworld00 2015-07-09 07:31:31 +08:00
UPDATE 楼上
不是一个50,000台服务器的clusters,是包含50,000 台服务器的clusters 一般一个大cluster可能10,000左右的服务器. (参考 google borg) http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43438.pdf |
19
morethansean 2015-07-09 09:17:09 +08:00
一个网站,你们的 API 设定全年可用性为 99.99%:
365*24*60*(1-.9999) = 52.556 就是说一年之中只能挂最多53分钟 可用性 99.999%: 365*24*60*(1-.99999) = 5.25599999997608 一年中只能挂5分钟 这10倍的差距,后者你可能连问题都来不及修复吧。 |
20
morethansean 2015-07-09 09:18:07 +08:00
楼上精神恍惚打成 A 了……
|
21
wesley 2015-07-09 09:37:25 +08:00 4
一般面试时动辄百万uv, 多少T数据要处理的都是唬人的,
又一次面试一小公司, 对方问我, 2个服务器之间网络很差, 有几百G数据要同步,怎么样最快 我回答:"发顺丰" |
22
szopen OP @helloworld00 我倒是没考虑多台机器的情况, 只考虑单台机器的故障率
|
25
wikimore 2015-07-09 10:58:33 +08:00 1
第一题:
订单肯定要直接写库,至于性能,只能靠分库分表,提升硬件来解决(常说的scale out和scale up),写库之后,发送订单消息给消息中间件,如RabbitMQ,ActiveMQ,Kafka等,后面再挂很多的推送服务器,接收订单消息,推送给用户,整个系统应该都可以做到无单点。 第二题: 就是设计一个爬虫系统,可以参考apache的nutch,存储系统可以考虑hdfs做离线分析,或者直接用spark做实事分析(这取决分析的业务),问时间,我觉得没有准确的答案,因为和集群大小,硬件,网络有关,你只需要给出一个计算的思路就可以了 第三题: 楼主没有描述清楚,不过我觉得楼主可能没有理解面试官的意思,缓存会失效,不丢只有落盘,redis倒是有一个store模式,不过当内存不够用时,性能就会急剧下降。 楼主第一题和第三题写数据的时候都考虑缓存,这个应该不太合理,缓存只在读时才有,写时应该是缓冲区,一般应用层面不需要考虑,目的是减少系统调用。 有些分析可能不够到位,不对的地方希望大家指出 |
28
axb 2015-07-09 13:22:17 +08:00
楼主应该没做过负载比较高、规模比较大系统,或者是从传统企业转型、缓存用的比较少,导致你和面试官不在一个层面上思考问题。
第一个问题问的是消息如何快速推送,不知道为什么会被理解成数据库延迟,这里也表现出楼主缓存用的不深,不清楚“缓存的延迟”到底是多少。 第二个问题属于架构设计,一个新系统上线之前需要对系统做数据计算和评估,评估集群的规模和可能的风险点。楼主随便拍了个数说明之前应该没有主导过量级达到一定程度的系统设计,毕竟集群里多一台机器就意味着每年几万的支出。 第三个问题是缓存的使用,缓存会不会丢数据和有没有延迟是两件事,如果是memcached这种缓存,数据重启就没了,需要有一个可以落地的存储来保证数据不丢,而如果用redis这种自带落地功能的缓存,对于非核心数据来说是基本可以保证数据不丢的。 最后那句我也没看懂楼主想表达什么。 |
29
lucky2touch 2015-07-09 15:35:00 +08:00
说说我的理解吧
1.我认为就是考察多线程和一些基本常识。 2.不清楚题目核心是在抓取还是在分析,都有一些多线程,并行计算,数据汇总之类的。 3.题目不清楚,不好回答,一般缓存相关的问题有命中率,活跃数据的存留机制,数据持久化以及与缓存相关的雪崩问题。 最后4个9,5个9的问题 @morethansean 说得比较清楚,假如是淘宝这样的系统,一年5分钟的宕机损失和50分钟的宕机损失可不一定是线性的。 |
30
tina90 2015-07-22 11:28:16 +08:00
楼主,最近看机会吗?我这边有美图秀秀。滴滴打车。美团。互联网金融等等公司的PHP机会,不知道你考不考虑,我的邮箱是[email protected]
|