19年3月份面试题集合【Spring、设计模式】

重点 看看【设计模式】和【算法】的java基础
【设计模式】
创建型模式
    1、单例模式 2、工厂模式(抽象工厂模式) 3、建造者模式
结构型模式
      适配模式
行为型模式
      观察者模式
【算法】
冒泡排序,快速排序

SpringBoot
Spring Boot使用了约定大于配置(PS:很多博客写的是默认大于配置,严格来说,约定更精确)的理念,1、集成了快速开发的spring多个插件,同时自动过滤不需要配置的多余的插件,2、简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;

SpringCloud
Spring Cloud大部分的功能插件都是基于Spring Boot去实现的,Spring Cloud关注于全局的微服务整合和管理,将多个Spring Boot单体微服务进行整合以及管理; Spring Cloud依赖于Spring Boot开发,而Spring Boot可以独立开发;

HashMap的原理
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
“当两个对象的hashcode相同会发生什么?”
“如果两个键的hashcode相同,你如何获取值对象?”

float和double的区别
小数默认是double类型
单精度浮点数有效数字8位 双精度浮点数有效数字16位
float a=1.3; 会编译报错,正确的写法 float a = (float)1.3;或者float a = 1.3f;(f或F都可以不区分大小写)

下面Integer类型的数值比较输出的结果为

public class Test{
	public static void main(){
		Integer f1 = 100,f2 = 100,f3 = 150, f4 = 150 
		System.out.println(f1 == f2);
		System.out.println(f3 ==f4);
	}
}

简单的说,如果整型字面量的值在-128 到 127 之间,那么不会 new 新的 Integer 对象,而是直接引用常量池
中的 Integer 对象,所以上面的面试题中 f1== f2 的结果是 true,而 f3== f4 的结果是 false。

数据类型之间的转换
字符串如何转基本数据类型?
调用基本数据类型对应的包装类中的方法parseXXX(String)或valueOf(String)即可返回相应基本类型。

final修饰类、方法、成员变量的特点
//编译错误,final的类不能被继承
//编译错误,final的方法不能被重写
//编译错误,final的变量不能被改变

MySQL内连接和左外连接有什么区别?
内链接取交集 外连接肯定查出一张完整的表内容,没有的取null

事务的隔离级别 传播行为
四种,传播应该是其中,mysql默认隔离级别第三级,杜绝不可重复读,幻读,传播用的最多的support和requered

Jsp和Servlet的区别
JSP在本质上就是SERVLET,但是两者的创建方式不一样.
Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.

Lock和Synchronized的区别,公平锁和非公平锁

mybatis的动态sql

<if>单条件分支判断
<choose>(when、otherwise)多条件分支判断
<foreach item="item" index="index" collection="list">  循环

springboot 监视器–actuator

mybatis接口绑定

springboot相对于SpringMVC有什么优点?
因为 Spring 的配置非常复杂,各种XML 、JavaConfig处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。

什么是springboot,springboot的特点?
1用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
2 创建独立的spring引用程序 main方法运行
3 嵌入的Tomcat 无需部署war文件
4 简化maven配置
5 自动配置spring添加对应功能starter自动化配置

什么是微服务
以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源
微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用
Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)

springboot常用的starter有哪些

    spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持

    spring-boot-starter-data-jpa 数据库支持

    spring-boot-starter-data-redis redis数据库支持

    spring-boot-starter-data-solr solr支持

    mybatis-spring-boot-starter 第三方的mybatis集成starter

springboot如何添加修改代码【自动重启】功能,热加载

添加开发者工具集=====spring-boot-devtools

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

springboot自动配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

springcloud如何实现服务的注册和发现
服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)
这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例
调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

ribbon和feign区别

    Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法

    feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient("指定服务名")

Ribbon和Feign的区别:

    Ribbon和Feign都是用于调用其他服务的,不过方式不同。

    1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

    2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

    3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

    Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,

    不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

springcloud断路器的作用

    当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 调用者就会等待被调用者的响应 当更多的服务请求到这些资源时

            导致更多的请求等待 这样就会发生连锁效应(雪崩效应) 断路器就是解决这一问题

            断路器有完全打开状态

                    一定时间内 达到一定的次数无法调用 并且多次检测没有恢复的迹象 断路器完全打开,那么下次请求就不会请求到该服务

            半开

                    短时间内 有恢复迹象 断路器会将部分请求发给该服务 当能正常调用时 断路器关闭

            关闭

                    当服务一直处于正常状态 能正常调用 断路器关闭

eureka和zookeeper的区别
1.Eureka和Zookepper都可以作为注册中心
2.Eureka取CAP中的AP,注重可用性。Zookepper取CAP理论中的CP强调高的一致性
4.Eureka常用于SpringCloud下产物的注册中心,如:微服务的注册中心
Zookepper是分布式下的注册中心,如:Dubbo、Hadoop类似的集群的服务注册中心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章