2019java中⾼级⾯试题汇总
答题的要点  1. 概念  2. 原理  3. 优点
Spring
⼀、说说你对spring的理解
⾸先spring是⼀个开源框架,为了解决企业应⽤程序开发复杂性⽽创建的,它完成了⼤量开发中的通⽤步骤,留给开发者的仅仅是与特定应⽤相关的部分,从⽽⼤⼤提⾼了企业应⽤的开发效率。
其次spring架构是⼀个分层架构,由7⼤模块组成
1.spring IOC
2.spring AOP
3.spring 上下⽂
4.springDaogrape是什么意思
5.springMVC
6.springWeb
7.springORM
然后spring⾃⼰也有⼏⼤框架
spring MVC、spring Boot⼂spring cloud⼂spring data⼂spring security
⼆⼂说⼀下springIOC
IOC控制反转也叫依赖注⼊,我理解的是它就是⼀个⽣产和管理bean的⼀个容器,你⾃⼰不需要通过new去⽣成对象⽽是通过spring bean的⼯⼚来⽣成所需要的对象。
原理
将对象交给容器管理,你只需要在spring配置⽂件中配置对应的bean以及设置相关的属性,让spring容器来⽣成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置⽂件中配置的bean都初始化好,然后在你需要调⽤的时候,就把它已经初始化好的那些bean分配给你需要调⽤这些bean的类(假设这个类名是A),分配的⽅法就是调⽤A的setter⽅法来注⼊,⽽不需要你在A⾥⾯new这些bean了。
三⼂说⼀下springIOC的⼏种注⼊⽅式
1.通过注解注⼊
戳戳乐新手教程视频猫咪2.调⽤set⽅法注⼊
3.通过构造⽅法注⼊
四⼂说⼀下springAOP
简单来说,就是将那些与业务⽆关,却为业务模块共同调⽤的逻辑封装起来,减少重复代码降低了代码的耦合度。并有利于未来对代码的可操作性和可维护性。
原理财务共享服务职业技能等级证书
实现AOP的技术,主要分为两⼤类:⼀是采⽤动态代理技术,利⽤截取消息的⽅式,对该消息进⾏装饰,以取代原有对象⾏为的执⾏;⼆是采⽤静态织⼊的⽅式,引⼊特定的语法创建“⽅⾯”,从⽽使得编译器可以在编译期间织⼊有关“⽅⾯”的代码
五⼂说⼀下springMVC
M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)
V-View 视图(做界⾯的展⽰  jsp,html……)
C-Controller 控制器(接收请求—>调⽤模型—>根据结果派发页⾯)
六⼂spring常⽤接⼝
1.ApplicationListener:当需要监听⾃定义事件时,可以新建⼀个实现ApplicationListener接⼝的类,并将该类配置到Spring容器中。
2.FactoryBean:⽤于创建特定的对象,对象的类型由getObject⽅法的返回值决定。
3.ApplicationContextAware:当⼀个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接⼝。
4.ApplicationEvent:当需要创建⾃定义事件时,可以新建⼀个继承⾃ApplicationEvent抽象类的类。
七⼂spring cloud有哪些组件
spring cloud常见⾯试题
JVM
集合
⼀⼂HashMap底层原理
⼆⼂List⾯试题
MQ
⼀⼂为什么使⽤MQ
⾯试官问这个问题的期望之⼀的回答是,你们公司有什么业务场景,这个业务场景有什么技术挑战,如果不⽤MQ可能会很⿇烦,但是再⽤了之后带来了很多好处。
消息队列的常见使⽤场景有很多但是核⼼的有三个:解耦、异步、削峰
⼆⼂消息队列的优点和缺点?
优点:特殊场景下解耦、异步、削峰。
缺点:
系统可⽤性降低:系统引⼊的外部依赖越多,越容易挂掉,本来你就是A系统调⽤BCD三个系统的接⼝就好了,⼈ABCD四个系统好好的没什么问题,你偏加个MQ进来,万⼀
MQ挂了怎么办,整套系统崩溃了,就完蛋了
系统复杂性提⾼:硬⽣⽣加个MQ进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?
⼀致性问题:系统A处理完了直接返回成功了,⼈家都认为你这个请求成功了;但问题是,要是BCD三个系统哪⾥BD系统成功了,结果C系统写库失败了,咋整?数据就不⼀致
了。
三⼂如何保证消息不被重复消费(如何保证消息消费时的幂等性)?
在消息⽣产时,MQ内部针对每条⽣产者发送的消息⽣成⼀个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进⼊队列;
在消息消费时,要求消息体中必须要有⼀个bizId(对于同⼀业务全局唯⼀,如⽀付ID、订单ID、帖⼦ID等)作为去重的依据,避免同⼀条消息被重复消费。
四⼂如何处理消息丢失的问题 (如何保证消息的可靠传输)?
这个丢数据,mq⼀般分为两种,要么是mq⾃⼰弄丢了,要么是我们消费的时候弄丢了。
⽤rabbit举例
(1)消息持久化
(2)ACK确认机制
(3)消息补偿机制
(4)设置集镜像模式
五⼂消息如何分发?
若该队列⾄少有⼀个消费者订阅,消息将以循环(round-robin)的⽅式发送给消费者。每条消息只会分发给⼀个订阅的消费者(前提是消费者能够正常处理消息并进⾏确认)。
六⼂消息队列有哪些配置
<beans  xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"    xmlns:rabbit="/schema/rabbit" xsi:schemaLocation="/schema/beans  /schema/be /schema/rabbit  /schema/rabbit/spring-rabbit-1.0.xsd">
<!-- 定义RabbitMQ的连接⼯⼚ -->
<rabbit:connection-factory id="connectionFactory" class="org.springframework.tion.CachingConnectionFactory">
<constructor-arg value="10.130.202.12"><!--服务器ip地址-->
<property name="username" value="tele-onlineYa">
<property name="password" value="tele-onlineYa">
<property name="port" value="5678">
<property name="channelCacheSize" value="50"> <!--通道缓存⼤⼩-->mysql索引越多越好吗
<property name="virtualHost" value="tele-onlineYa"> </bean> <!--通过指定admin信息,当前producer中的exchange和queue会在rabbitmq服务器上⾃动⽣成。 -->
<rabbit:admin connection-factory="connectionFactory" /> <!-- 队列queue,⾃动声明 -->
<rabbit:queue name="ZL.SALETRACE" exclusive="false" auto-declare="false" durable="true" /> <!--⾃定义消息接受者-->
<bean id="messageReceiver" class="com.zlf.api.RabbitMqConsumerListener"> <!-- queue,观察监听模式。当有消息到达本应⽤时会通知监听在对应队列queue上的监听对象 -->
<rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener queues="ZL.SALETRACE" ref="messageReceiver" />
</rabbit:listener-container>
</beans>
dubbo
⼀⼂简单说⼀下dubbo
Dubbo是⼀个分布式服务框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。简单的说,就是个远程服务调⽤的分布式框架(告别Web Service模式中的WSdl,以服务
者与消费者的⽅式在dubbo上注册)
其核⼼部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换⽅式。
2. 集容错: 提供基于接⼝⽅法的透明远程过程调⽤,包括多协议⽀持,以及软负载均衡,失败容错,地址路由,动态配置等集⽀持。
3. ⾃动发现: 基于注册中⼼⽬录服务,使服务消费⽅能动态的查服务提供⽅,使地址透明,使服务提供⽅可以平滑增加或减少机器。
⼆⼂dubbo调⽤关系说明
(1)服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务。
(2)服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务。
(3)注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于长连接推送变更数据给消费者。
(4)服务消费者,从提供者地址列表中,基于软负载均衡算法,选⼀台提供者进⾏调⽤,如果调⽤失败,再选另⼀台调⽤。
(5)服务消费者和提供者,在内存中累计调⽤次数和调⽤时间,定时每分钟发送⼀次统计数据到监控中⼼。
三⼂你配置过dubbo哪些东西
# 应⽤名
dubbo.application.name = dubbodemo-consumer
# 注册中⼼地址
dubbo.protocol.name = dubbo
mysql面试题大全
dubbo.protocol.port = 28080
# 设置服务端和消费端连接超时时间
sumer.timeout=30000
busybox下载spring.dubbo.provider.timeout=30000
服务端要声明暴露的服务接⼝
消费端要配置调⽤哪些服务
MySQL⼀⼂MYSQL有哪些索引?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。