后端开发面试每日一题

1 热数据和冷数据

热数据:是需要被计算节点频繁访问的在线类数据。

冷数据:是对于离线类不经常访问的数据,比如企业备份数据、业务与操作日志数据、话单与统计数据。

热数据因为访问频次需求大,效率要求高,所以就近计算和部署;冷数据访问频次低,效率要求慢,可以做集中化部署,而基于大规模存储池里,可以对数据进行压缩、去重等降低成本的方法。

目前常见的冷热分离方案是将冷热数据分离到两套不同的系统,这两套系统拥有不同的存储特性、访问方式等,从而在保证热数据访问性能的同时,将冷数据的成本降低下来。在系统选型上,对于热数据系统,需要重点考虑读写的性能问题,诸如MySQL、Elasticsearch等会成为首选;而对于冷数据系统,则需要重点关注低成本存储问题,通常会选择存储在HDFS或云对象存储中,再选择一个相应的查询系统。

2 埋点

用代码去记录用户行为信息的打点动作,我们称之为“埋点”。常见的埋点开发实现分为客户端埋点和服务端埋点。要埋点的信息与业务的分析诉求直接相关的。

3 进程间通信方式(IPC)

每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。通信需要媒介,两个进程间通信的媒介就是内存。通信的原理就是让两个或多个进程能够看到同一块共同的资源,这种资源一般都是由内存提供。

3.1 匿名管道(pipe)

管道是IPC最基本的一种实现机制。我们都知道linux下“一切皆文件”,其实这里的管道就是一个文件,管道实现进程通信就是让两个进程都能访问该文件。

匿名管道的特征:

  • 只提供单向通信,假设进程1往文件内写东西,那么进程2就只能读取文件的内容。如果要进行双工通信,需要建立两个管道。

  • 只能用于具有血缘关系的进程间通信,通常用语父子进程间通信。

  • 管道是基于字节流来通信的。

  • 依赖于文件系统,它的生命周期随进程的结束而结束。

  • 其本身自带同步互斥效果。

3.2 命名管道(FIFO)

命名管道的特征:

  • 依然只支持单向的数据流。

  • 命名管道以FIFO的形式存储于文件系统中,FIFO是一个设备文件,在文件系统中以文件名的形式存在,能够实现任何两个进程之间通信。而匿名管道对于文件系统是不可见的,它仅限于在父子进程之间的通信。

  • FIFO(first input first output)总是遵循先进先出的原则,即第一个进来的数据会第一个被读走。

3.3 消息队列(Message Queue)

对于MQ来说,其实不管是RocketMQ、Kafka还是其他消息队列,它们的本质都是:一发一存一消费。

生产者先将消息投递给一个叫做队列的容器中,然而再从这个容器中取出消息,最后再转发给消费者。其中消息就是要传输的数据。

MQ的优点:系统解耦,异步通信,流量削峰,延迟通知,最终一致性保证,顺序消息,流式处理等等。

MQ和RPC的差异:

  • 引入MQ后,由之前的一次RPC变成了现在的两次RPC,而且生产者只跟队列耦合,它根本无需知道消费者的存在。(MQ可以理解成两次RPC+消息转储)

  • 多了一个中间节点队列进行消息转储,相当于将同步变成了异步。

消息队列(mq)是什么?​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值