Java互联网科技Java成长之路

三面美团终拿offer,分享面试题:Spring+Dubbo+R

2019-10-29  本文已影响0人  程序员北游

前言:

一线大厂一直是互联网人包括程序员梦寐以求的公司,苦于BAT大厂的进入门槛太高,无奈只能望门兴叹,所以只能苦练技能才能有机会去敲开BAT的大门。下面是一位Java程序员的亲身经历三面美团拿下了offer,特献上面试真题,以供参考学习。

欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。


第一部分. Spring专题

1、Spring怎样定义类的作用域

通过bean 定义中的scope属性来定义。

2、Spring支持的几种bean的作用域

支持以下五种bean的作用域:

3、Spring支持的事务管理类型

4、什么是控制反转(IOC)?什么是依赖注入?

5、Spring由几大核心组件?

6、Spring MVC核心工作流程 ?

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

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

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

10、简述Spring Bean的生命周期

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

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

第二部分. Dubbo面试专题

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

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

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

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

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

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

<dubbo:serviceinterface="com.xxx.XxxService" ref="xxxService" version="1.0"/>
<dubbo:referenceid="xxxService" interface="com.xxx.XxxService" version="1.0"/>

3、dubbo reference注解问题?

@Reference只能在SpringBean实例对应的当前类中使用,暂时无法在父类使用;如果确实要在父类声明一个引用,可通过配置文件配置dubbo:reference,然后在需要引用的地方跟引用SpringBean一样就可以了.

4、出现RpcException:No provider available for remote service异常怎么办?

5、服务提供者没挂,但在注册中心里看不到?

首先,确认服务提供者是否连接了正确的注册中心,不只是检查配置中的注册中心地址,而且要检查实际的网络连接。

其次,看服务提供者是否非常繁忙,比如压力测试,以至于没有CPU片段向注册中心发送心跳,这种情况减小压力将自动恢复。

6、Dubbo的连接方式有哪些?

Dubbo的客户端和服务端有三种连接方式,分别是:广播,直连和使用zookeeper注册中心。

7、Dubbo广播

这种方式是dubbo官方入门程序所使用的连接方式,但是这种方式有很多问题。在企业开发中,不使用广播的方式。taotao-manager服务端配置:

!-- applicationContext-service.xml 文件中 -->
<!-- 提供方应用信息,用于计算机依赖关系 -->
<dubbo:application name="taotao-manager-service” />
<!-- 使用 multicast 广播暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 使用 dubbo 协议在 20880 协议暴露服务 -->
<dubboprotocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.taotao.manager.service.TestService" ref="testServiceImpl" />

第三部分. Redis专题

1.什么是Redis?

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

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

2.Redis的特点什么是?

3.Redis数据类型有哪些?

答:

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

答:以下两种

第四部分. 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台机器,挂掉一台集群还能工作吗?挂掉两台呢?

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

集群支持动态添加机器吗

其实就是水平扩容了,Zookeeper在这方面不太好。两种方式:

第五部分. 微服务专题

1. 为什么要使用微服务跟踪?它解决了什么问题?

1. 微服务调用的现状?

2. 微服务跟踪解决了什么问题?

微服务跟踪其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集、数据传输、数据存储、数据分析、数据可视化) ,捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。

Spring Cloud S1euth有4个特点:

写在最后:

限于篇幅,文中只展示了部分的面试题,完整的面试题笔者已经整理成了一份PDF文件需要这份面试题的朋友请点击下方传送门;即可免费领取完整的面试专题文件

传送门

以下是部分面试题截图

上一篇 下一篇

猜你喜欢

热点阅读