其他互联网大厂面试题
使⽤lua脚本: https://segmentfault.com/a/1190000009811453
理解这篇: https://juejin.im/post/5a27c6946fb9a04509096248
B-tree:
B-tree 利⽤了磁盘块的特性进⾏构建的树。每个磁盘块⼀个节点,每个节点包含了很关键字。把树的节点关键字增多后树的 层级⽐原来的⼆叉树少了,减少数据查找的次数和复杂度。
B-tree巧妙利⽤了磁盘预读原理,将⼀个节点的⼤⼩设为等于⼀个⻚(每⻚为4K),这样每个节点只需要⼀次I/O就可以完 全载⼊。
B-tree 的数据可以存在任何节点中。
B+tree:
B+tree 是 B-tree 的变种, B+tree 数据只存储在叶⼦节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级 更少所以查询数据更快,所有指关键字指针都存在叶⼦节点,所以每次查找的次数都相同所以查询速度更稳定;
需要先理解B+tree 、红⿊树的实现原理。 B+tree带有顺序访问指针,是红⿊树不具备的。
特性 | ActiveMQ | RabbitMQ | RocketMQ | kafka |
---|---|---|---|---|
开发语言 | Java | erlang | Java | scala |
单击吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可⽤性 | ⾼(主从架构) | ⾼(主从架构) | ⾮常⾼(分布式架构) | ⾮常⾼(分布式架构) |
功能特性 | 成熟的产品,在很多公司 得到应⽤;有较多的⽂ 档;各种协议⽀持较好 | 基于erlang开发,所以并发能⼒很强,性能极其好,延时很低;管理界⾯较 丰富 | MQ功能⽐较完备,扩展 性佳 | 只⽀持主要的MQ功能, 像⼀些消息查询,消息回 溯等功能没有提供,毕竟 是为⼤数据准备的,在⼤ 数据领域应⽤⼴。 |
中⼩型公司⾸选RabbitMQ:管理界⾯简单,⾼并发。
⼤型公司可以选择RocketMQ:更⾼并发,可对rocketmq进⾏定制化开发。
⽇志采集功能,⾸选kafka,专为⼤数据准备。
1、保证消息不丢失(三步) 1.1、开启事务(不推荐) 1.2、开启confirm(推荐) 1.3、开启RabbitMQ持久化(交换机、队列、消息) 1.4、关闭RabbitMQ自动ack(改成手动)
2、保证消息不重复消费 2.1、幂等性(每个消息用一个唯一标识来区分,消费前先判断标识有没有被消费过,若已消费过,则直接ACK)
3、RabbitMQ如何保证消息的顺序性 将消息放入同一个交换机,交给同一个队列,这个队列只有一个消费者,消费者只允许同时开启一个线程
4、RabbitMQ消息重试机制 消费者在消费消息的时候,如果消费者业务逻辑出现程序异常,这时候应该如何处理? 答案:使用消息重试机制(SpringBoot默认3次消息重试机制)
如何合适选择重试机制 消费者取到消息后,调用第三方接口,接口无法访问,需要使用重试机制 消费者取到消息后,抛出数据转换异常,不需要重试机制,需要发布者进行解决。
5、SpringBoot消息重试机制 @EnableRetry注解:表示启用重试机制(value表示哪些异常需要触发重试,maxAttempts设置最大重试次数,delay表示重试的延迟时间,multiplier表示上一次延时时间是这一次的倍数) eg、@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 1.5))
@Recover注解:当重试次数达到设置的最大次数的时候,程序还是执行异常,调用的回调函数。
a. 每30s发送⼼跳检测重新进⾏租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中⼼移除。
a. 注册信息和更新会被复制到其他Eureka节点,来⾃任何区域的客户端可以查找到注册中⼼信息, 每30s发⽣⼀次复制来定位他 们的服务,并进⾏远程调⽤。
b. 客户端还可以缓存⼀些服务实例信息,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的。
springcloud由以下⼏个核⼼组件构成:
Eureka:各个服务启动时, Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉 取注册表,从⽽知道其他服务在哪⾥
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩 的问题
Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务 注册中⼼还可以⽤zookeeper。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。