Java面试题(99%会问)

本文深入探讨了Java面试中常见的技术点,包括Spring框架的IOC、AOP、SpringBoot、SpringCloud组件如Eureka、Hystrix和路由网关。此外,详细讲解了Redis的持久化、缓存问题解决方案以及Zookeeper、Solr、Elasticsearch在全文检索中的应用。还涵盖了Mybatis的优缺点、SSM框架的使用,以及JVM内存调优和SQL优化策略。最后讨论了StringBuffer与StringBuilder的区别,以及设计模式在Java中的应用。
摘要由CSDN通过智能技术生成

spring的IOC和AOP

Spring:

Spring:框架是个轻量级的Java EE框架。所谓轻量级,是指不依赖于容器就能运行的。

spring提供了AOP技术,支持将一些通用任务,如安全,事物,日志,权限等进行集中

式管理,从而提供了跟那个好的复用

springAOP

一般为面向切面,作为面向对象的一种补充。他减少了系统中的重复代码,降低了

模块间的耦合度,同时提高了系统的可维护性。可用于权限认证,日志,事务处理

spring的五种通知类型:前置通知,正常返回通知 ,异常返回通知,返回通知,环绕通知

springAOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每

次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,

并且在特定的切点做了增强处理,并回调对象的方法。

Spring AOP中的动态代理主要有两种模式,JDK动态代理和CGLIB动态代理:

spring IOC

ioc是一个容器,在spring中,他会认为一切Java资源都是JavaBean。容器的目标

就是管理这些bean和他们之间的关系;spring ioc容器能够对其管理,只是springioc

管理。对象和其依赖关系,采取的不是为的主动创建。

SpringMVC

Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

spring boot

为什么使用springboot(或者说有点)!

独立于运行,简单配置,自动配置,无代码生成和XML配置,应用监控,上手容易

什么是spring boot

是spring开源组织下的子项目,是spring组成一站式解决方案,主要简化了使用spring

的难度,简省了繁重的配置,提供了各种启动器

如何理解springboot中的starters

Starters可以理解成启动器,它包含了一系列可以集成到应用里面看你的依赖包,

你可以一站式集成spring及其其他技术,而不需要到处找示例代码和依赖包,

如果你想使用springJPA访问数据库,只要加入spring-boot-starter-data-jpa启动器,依赖

就能使用了

springboot支持那些日志框架,推荐和默认那个

支持:java util logging,log4j,logback,如果使用starters启动器,springboot将使用

log back作为默认日志框架

springcloud

什么是Eureka的自我保护机制?

Eureka如果收到的微服务心跳相对于应该收到的微服务心跳来说,如果低于了85%,那么就会触发Eureka的自我保护机制。一旦自我保护机制启动,Eureka会保护所有的微服务,不被移除,哪怕当前微服务已经下线,仍然会保留到Eureka微服务列表中。

自我保护机制的作用

为什么Eureka要一种看起来如此傻逼的设计?- 自我保护机制是为了保证微服务间的高可用性,避免脑裂的影响

为什么Zookeeper要设计一个过半数存活原则?感觉特别浪费资源? - 为了让整个集群一定只有一个Leader

CAP原则:任何一个分布式系统,都只能满足CAP中的2个原则,因为分区问题不可避免,所以P是必选的,一般的系统,都是从C和A中做选择。Zookeeper是CP设计,而Eureka是AP设计。

C(一致性)

A(可用性)

P(分区容错性)

什么是Ribbon?

Ribbon是一个客户端的负载均衡器,用来进行SpringCloud间的微服务负载均衡调用

为什么有了Ribbon还有用Feign?

Feign底层也调用了Ribbon,Feign其实本质上是Ribbon + Hystrix(豪猪)的集合体,因为Ribbon本身的写法不够面向对象,很多Java程序员对这种写法会很不习惯。

Hystrix-断路器

1、 什么是断路器

断路器 - 就是微服务架构的保险丝

2、为什么需要Hystrix(保险丝)?

在微服务架构中,根据业务会拆分成一个一个为微服务,服务于服务之间可以互相调用。为了保证高可用性,单个服务通常会集群部署,但是由于网络等原因,不能保证服务100%可用。如果单个服务出现问题,调用这个服务的服务就有可能出现线程阻塞,刚好这个时候大量的请求在访问当前服务,就会导致当前服务的线程资源不足,从而导致服务瘫痪,形成故障转移,导致**“服务雪崩”**

3、Hystrix是如何解决服务间调用问题的

资源隔离:鸡蛋不要放在一个篮子里(线程池隔离、信号量隔离)

服务降级:当调用目标服务出问题(超时、报错…)时,会自动的调用一个本地的方法,返回一个默认值

请求熔断:一旦确定目标服务出问题(失败比例),Hystrix的熔断器会自动打开,拦截后续的所有请求,立刻判定失败,进行服务降级。过了单位时间之后,熔断器变成半开状态,放行一个请求,如果还是失败,继续全开,拦截请求,否则熔断器关闭。

Hystrix是如何解决服务间调用问题的?

资源的隔离:线程池、信号量隔离

服务的降级(自动降级):当调用目标服务出问题后,会自动降级调用一个默认的方法返回一个默认值

调用的熔断:一旦目标服务出现问题,熔断器就会触发,后续的服务就不会再尝试调用目标服务,而是直接走降级流程

路由网关

1、什么是路由网关?

简单来说,路由网关往往是微服务架构的入口组件,外来的所有的请求,都需要通过路由网

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值