【补充】小米电商的四面还有问到队列的问题,问我了解多少。我对队列的理解大体上是这样:1,对于无法通过扩展性解决的问题,通过队列进行缓冲是非常好的机制,由于队列产品的技术特性,队列产品往往会更倾向于优先使用内存,队列本身的业务逻辑也会比较简单,因此,队列高效的性能,可以缓解数据库并发写的压力,事务性的队列还可以在一定程度上能够帮助业务逻辑更加可靠。
我了解的队列有redis队列、Q4M,还有一种高级的AMQP协议,支持AMQP协议的有ZeroQ和RabbitQ。我用过有redis队列,及其简单、高效,但是有个特点:队列中的元素取出来后,如果处理失败,数据是不会自动回归队列的;Q4M有个高级的特性,如果取出队列的程序发生异常(如崩溃),Q4M会自动把取出的元素放回队列。Rabbit我了解过一些,用python封装过一个lib自己玩,不过,现实生活中我还没有找到特别合适的场景用它。
整场小米的面试两个部门加起来共计约7个小时,这是我经历过的最长时间的面试了……
参考:
Profiling: From single systems to data centers http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/ko//pubs/archive/36575.pdf
X-Trace: A Pervasive Network Tracing Framework
https://www.usenix.org/conference/nsdi-07/x-trace-pervasive-network-tracing-framework
http://blog.chunshengster.me/2013/05/smp_irq_affinity.html
http://weibo.com/1412805292/zvNrDsqtT
http://weibo.com/2173311714/zw40tv3D2
http://blog.chunshengster.me/2013/07/high_performance_rsyslogd.html
http://www.wandoujia.com/blog/from-qa-to-ep
http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-maxconn
相关文章: