快捷搜索: 长连接 前端 源码 pan

# Java基础复习,2022Java高频精选面试题讲解

一、Spring Cloud微服务概念定义

提起微服务,不得不提 Spring Cloud 全家桶系列,Spring Cloud 是一个服务治理平台,是若干个框架的集合,提供了全套的分布式系统解决方案。包含了:服务注册与发现、配置中心、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列等等。

Spring Cloud 通过 Spring Boot 风格的封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、容易部署的分布式系统开发工具包。开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud 就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud 做为大管家需要管理好这些微服务,自然需要很多小弟来帮忙。

  1. 接口自身可以去继承其他接口(继承就有了接口的所有属性和方法)
  2. 虽然在接口中不可以包含变量,但可以包含静态常量,而且一定是public static修饰的常量(可以不主动加final,默认为public status final常量,可以写成public final,省略static,因为接口的实现一般都由实现类去提供的,不可以被实例化,所以非静态的常量和变量都对接口本身没有意义),虽然可以包含静态常量,所以可以认为实现类是不会拥有接口的属性的
  3. 每个类只有一个父类,但却可以实现多个接口

[](()接口与抽象类

为什么有了抽象类还要有接口?直接将抽象方法都写进抽象类不就好了吗?

很重要的一点就是:使用抽象类表示通用属性或方法存在一个很严重的问题,那就是每个类只能扩展一个抽象类(只能有一个父类,设计者不支持多重继承主要是因为多重继承让语言变得十分复杂和低效),但一个类却可以去实现多个接口,既可以有多重继承的好处,又可以避免多重继承的复杂性和低效

[](()接口的静态和私有方法

在java8中,允许接口中增加静态方法(只能是public static),这种设计有违于将接口作为抽象规范的初衷

但在java9之后,接口中的方法可以是private,private方法可以是静态方法或者是接口的实例方法,由于是私有方法,所以只能在接口内部调用【静态private只能在public static调用】,是很有限的

[](()接口的默认方法

java8开始给接口提供简单的默认方法

要注意的是,默认方法是可以被实现类所拥有的,而且默认方法也是可以被实现类给重写的

重写之后

从上面的栗子可以看到无论是接口变量引用实现类,或者直接单纯new一个实现类,结果都是一样的,那为什么要开创接口引用实现类呢?

我个人觉得,因该还是跟规范有关,其实使用接口变量去引用一个实现类,是符合多态的,使用接口变量去引用一个实现类,可以限制使用的方法都是接口里面有的,不可以调用实现类中自己的方法

默认方法还有一个重要的用法就是接口演化,假如给接口新增了一个抽象方法,那么没有默认实现的话,所有实现类都必须要去重写这个方法,不重写就会报错,不利于后面的迭代演化,有了默认方法,只需要给这个方法加个默认实现,实现类不必去实现也不会报错,保证了源代码兼容

[](()接口默认方法冲突

接口中有默认方法,实现类中也有与之一样的方法(返回值、方法名、参数都一样,并不是重载),java怎么解决?如果发生的是接口冲突又会怎么解决(两个接口提供同种方法)

    实现类中的方法如果与接口的默认方法不构成重载的话,就必须要进行重写,否则会报错 超类优先,即实现类优先,会优先执行实现类的方法,即优先执行重写的方法 接口冲突其实就是一个二义的问题,实现类不知道要选择哪个默认实现,所以解决的方法还是重写

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-lSkiY96N-1649745987306)]

经验分享 程序员 微信小程序 职场和发展