三面美团终拿offer,分享面试题:Spring+Dubbo+Redis+微服务

本文详细介绍了Spring中的事务管理,包括隔离级别和传播特性,Dubbo的容错策略,Redis的数据结构和持久化,以及Zookeeper的节点类型和集群功能。同时强调了并发编程在互联网大厂面试中的重要性,提供了学习资源链接。
摘要由CSDN通过智能技术生成
  • Controller执行完成后,将返回的数据信息封装到ModelAndView对象中,最后通过ViewResolver视图解析器选择一个合适的View 渲染视图返回界面。

7、spring事务隔离级别(五种面试最好全部说出来)

  • DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.

  • 未提交读(read uncommited) : 脏读,不可重复读,虚读都有可能发生 。是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。

  • 已提交读 (read commited): 避免脏读。但是不可重复读、虚读有可能发生 。保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。Oracle 默认

  • 可重复读 (repeatable read): 这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。Mysql 默认

  • 串行化的 (serializable) : 这是花费最高代价、效率差但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读(避免三种)。

8、Spring事务特性(四种面试最好全部说出来)

  • 原子性 (atomicity): 一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做。

  • 一致性 (consistency): 事务的执行的前后数据的完整性保持一致.

  • 隔离性 (isolation): 一个事务执行的过程中,不应该受到其他事务的干扰

  • 持久性(durability) : 一个事物一旦提交,它对数据库的改变就是永久的

9、Spring事务七个传播特性(七种面试说一两个即可)

  • Propagation.REQUIRED (默认) 面试必须说出来这个。调用方已经存在事务,则加入到同一个事务中运行,否则,自启一个事务

  • Propagation.REQUIRES_NEW。无论何时自身都会开启新事务

  • Propagation.SUPPORTS。调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行

  • Propagation.NOT_SUPPORTED。调用方存在事务,则会被挂起,直到被调用方运行完毕后,事务恢复。

  • Propagation.MANDATORY。调用方存在事务,则加入到同一个事务中运行,若不存在,则抛出异常

  • Propagation.NEVER。调用方存在事务,则抛出异常

  • Propagation.NESTED。若调用方存在事务,则运行一个嵌套事务,若调用方不存在事务,则以Propagation.REQUIRED的方式运行,即开启一个新的事务

10、简述Spring Bean的生命周期

实例化、初始化、使用、销毁。

关键词:BeanFactoryPostProcessor 、BeanPostProcessor 、init-method/destroy-method

[图片上传失败…(image-b401f-1611732924344)]

第二部分. Dubbo面试专题

======================================================================================

1、Dubbo的容错机制有哪些?

Dubbo官网提出总共有六种容错策略

  • Failover Cluster模式:失败自动切换,当出现失败,重试其它服务器。(默认)

  • Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

  • Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

  • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

  • Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过forks=”2”来设置最大并行数。

  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)通常用于通知所有提供者更新缓存或日志等本地资源信息。

总结:在实际应用中查询语句容错策略建议使用默认Failover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries=”0”)策略防止出现数据重复添加等等其它问题。建议在设计接口时候把查询接口方法单独做一个接口提供查询。

2、使用dubbo遇到过哪些问题?

增加提供服务版本号和消费服务版本号

这个具体来说不算是一个问题,而是一种问题的解决方案,在我们的实际工作中会面临各种环境资源短缺的问题,也是很实际的问题,刚开始我们还可以提供一个服务进行相关的开发和测试,但是当有多个环境多个版本,多个任务的时候就不满足我们的需求,这时候我们可以通过给提供方增加版本的方式来区分.这样能够剩下很多的物理资源,同时为今后更换接口定义发布在线时,可不停机发布,使用版本号.引用只会找相应版本的服务,例如:

 

image.png

第三部分. Redis专题

====================================================================================

1.什么是Redis?

答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2.Redis的特点什么是?

  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)

  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。

  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。

  • 单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

3.Redis数据类型有哪些?

答:

  • String(字符串)

  • Hash(hash表)

  • List(链表)

  • Set(集合)

  • SortedSet(有序集合zset)

4. Redis的配置以及持久化方案有几种?

答:以下两种

  • RDB方式

  • AOF方式

第四部分. Zookeeper专题

========================================================================================

1. Zookeeper是什么框架

分布式的、开源的分布式应用程序协调服务,原本是Hadoop、HBase的一个重要组件。

应用场景:Zookeeper的功能很强大,应用场景很多,结合我实际工作中使用Dubbo框架的情况,Zookeeper主要是做注册中心用。

基于Dubbo框架开发的提供者、消费者都向Zookeeper注册自己的URL,消费者还能拿到并订阅提供者的注册URL,以便在后续程序的执行中去调用提供者。而提供者发生了变动,也会通过Zookeeper向订阅的消费者发送通知。

2. Zookeeper有哪几种节点类型

  • 持久:创建之后一直存在,除非有删除操作,创建节点的客户端会话失效也不影响此节点。

  • 持久顺序:跟持久一样,就是父节点在创建下一级子节点的时候,记录每个子节点创建的先后顺序,会给每个子节点名加上一个数字后缀。

  • 临时:创建客户端会话失效(注意是会话失效,不是连接断了),节点也就没了。不能建子节点。

  • 临时顺序:不用解释了吧。

3. Zookeeper对节点的watch监听通知是永久的吗?

不是。

官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。

一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。

在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

4. Zookeeper集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?

记住一个原则:过半存活即可用。

集群支持动态添加机器吗

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
zoom: 33%;" />

最后

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值