其他互联网大厂面试题
下载链接:全部大厂面试题及答案PDF
1. 从简历项⽬中选⼀个项⽬,说说你在其中遇到了什么重⼤挑战?以及你的解决问题的思路?
2. ⼀段代码要执⾏多个redis命令,不加锁的情况下如何保证原⼦性?
使⽤lua脚本: https://segmentfault.com/a/1190000009811453
3. 谈谈数据结构,⽐如⼆叉树、红⿊树?
理解这篇: https://juejin.im/post/5a27c6946fb9a04509096248
4. 说说B-tree 、 B+tree的区别和使⽤场景?
B-tree:
B-tree 利⽤了磁盘块的特性进⾏构建的树。每个磁盘块⼀个节点,每个节点包含了很关键字。把树的节点关键字增多后树的 层级⽐原来的⼆叉树少了,减少数据查找的次数和复杂度。
B-tree巧妙利⽤了磁盘预读原理,将⼀个节点的⼤⼩设为等于⼀个⻚(每⻚为4K),这样每个节点只需要⼀次I/O就可以完 全载⼊。
B-tree 的数据可以存在任何节点中。
B+tree:
B+tree 是 B-tree 的变种, B+tree 数据只存储在叶⼦节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级 更少所以查询数据更快,所有指关键字指针都存在叶⼦节点,所以每次查找的次数都相同所以查询速度更稳定;
5.mysql哪个版本哪个存储引擎的索引使⽤的B+tree,为什么不使⽤红⿊树?
需要先理解B+tree 、红⿊树的实现原理。 B+tree带有顺序访问指针,是红⿊树不具备的。
6. 说说⼏种常⻅的消息中间件的区别?
特性 | ActiveMQ | RabbitMQ | RocketMQ | kafka |
---|---|---|---|---|
开发语言 | Java | erlang | Java | scala |
单击吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可⽤性 | ⾼(主从架构) | ⾼(主从架构) | ⾮常⾼(分布式架构) | ⾮常⾼(分布式架构) |
功能特性 | 成熟的产品,在很多公司 得到应⽤;有较多的⽂ 档;各种协议⽀持较好 | 基于erlang开发,所以并发能⼒很强,性能极其好,延时很低;管理界⾯较 丰富 | MQ功能⽐较完备,扩展 性佳 | 只⽀持主要的MQ功能, 像⼀些消息查询,消息回 溯等功能没有提供,毕竟 是为⼤数据准备的,在⼤ 数据领域应⽤⼴。 |
-
中⼩型公司⾸选RabbitMQ:管理界⾯简单,⾼并发。
-
⼤型公司可以选择RocketMQ:更⾼并发,可对rocketmq进⾏定制化开发。
-
⽇志采集功能,⾸选kafka,专为⼤数据准备。
7. rabbitmq如何保证消息的可靠性?
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注解:当重试次数达到设置的最大次数的时候,程序还是执行异常,调用的回调函数。
8. springcloud服务发现原理?
a. 每30s发送⼼跳检测重新进⾏租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中⼼移除。
a. 注册信息和更新会被复制到其他Eureka节点,来⾃任何区域的客户端可以查找到注册中⼼信息, 每30s发⽣⼀次复制来定位他 们的服务,并进⾏远程调⽤。
b. 客户端还可以缓存⼀些服务实例信息,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的。
9. 介绍下springcloud各个组件? springcloud的注册中⼼除了eureka还可以⽤什么?
springcloud由以下⼏个核⼼组件构成:
Eureka:各个服务启动时, Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉 取注册表,从⽽知道其他服务在哪⾥
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩 的问题
Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务
注册中⼼还可以⽤zookeeper。