1、SpringBoot有哪几种配置方式?有什么区别?
SpringBoot有两种配置方式,properties和yml,两种配置方式只是格式上不同,功能是一致的,比如
properties:
server.port=8080
对应的yml:
server: port:8080
就实际开发而言,yml更简洁一些,但是properties出错率更低一些。
2、SpringBoot怎么修改启动时的端口号?
(1)、在配置文件中修改端口号:
server.port=8888
(2)、.可以通过实现EmbeddedServletContainerCustomizer接口来实现
public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(8081); } }
3、mysql有几种锁?怎么创建一个带锁的sql语句?
从数据库的角度来看,锁可以分为共享锁、独占锁和更新锁。
共享锁:共享锁锁住的资源可以被其它资源读取,但不能被修改。
独占锁:独占锁锁住的资源只允许进行锁定操作的程序使用。
更新锁:是为了防止死锁设立的。
从程序员的角度来看,锁可以分为乐观锁、悲观锁。
参考【6】讲的不错。
4、JVM加载class文件的原理机制是什么?
JVM装载class文件都是由ClassLoader(类加载器)实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
类加载器中,BootstrapClassloader是Java无关的,是由C/C++编写的类加载器,其它的类加载器都直接或间接继承自它。
5、分布式锁应当具备哪些条件?
为了防止分布式系统之间的多个进程相互干扰,需要一种分布式协调技术来对这些进程进行调度,而这个分布协调技术的核心就是分布式锁。
分布式锁需要具备的条件:
.在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行
.高可用的获取锁与释放锁
.高性能的获取锁与释放锁
.具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误)
.具备锁失效机制,防止死锁
.具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败
6、SpringCloud和Dubbo有什么区别?
SpringCloud | Dubbo | |
底层实现 | 底层是使用Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC通信。 | 基于Http协议+rest接口调用远程过程的通信 |
背景 | 来源于Spring团队,可以保证稳定的更新和维护 | Dubbo是来源于阿里团队,曾被阿里弃用,后来又低调重启 |
定位 | Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。定位是服务治理。 | SpirngCloud诞生于微服务架构时代,考虑的微服务治理的方方面面。依托于Spring和SpringBoot,SpringCloud定位的是生态 |
模块 | 完整的一站式分布式框架,模块包括服务注册中心,服务提供者,服务消费者,管控台,断路器,分布式配置服务,消息总线,以及服务追踪等 | 主要是四个模块:服务注册中心,服务提供者,服务消费者,还有管控中心 |
7、SpringMVC是单例模式吗?如果是,存在什么问题?该怎么解决?
SpringMVC是单例模式。
在多线程访问时存在安全问题。
解决办法:不需要同步,在控制器中不能写字段。如果在特殊情况需要定义属性的时候,那么就在类上面加上注解@Scope(“prototype”)改为多例的模式
7、List、Map、Set是否继承Collection?
List和Set继承Collection,Map是基本映射表接口,没有继承Collection。
8、线程有几种实现方式?
三种:
(1)、继承Thread类
(2)、实现Runnable接口,Thread类其实也是一个实现了Runable接口的类。
(3)、实现Callable接口,可以创建一个带返回值的线程,可以看作是对Runnable接口的补充。
面试
面试比较快,随便问问,了解一下个人情况,技术上问的不多,有几个很基础的问题,就不写了。
1、讲讲Spring中的事务?
事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性。
事务就是一系列的动作,它们被当作一个单独的工作单元。这些动作要么全部完成,要么全部不起作用。
在Spring在不同的事务管理API之上定义了一个抽象层,而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。
Spring既支持编程式事务管理(也称编码式事务),也支持声明式的事务管理。
编程式事务管理:将事务代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码。
声明式事务管理:大多数情况下比编程是事务管理好用。它将事务管理代码从业务方法中分离出来,以声明的方式以声明的方式来实现事务管理。事务管理作为一种横切事务点,可以通过AOP方式模块化。Spring通过Spring AOP框架支持声明式事务管理。
Spring并不直接管理事务,而是提供了多种事务管理器,它们将事务管理的职责委托给JTA或其他持久化机制所提供的平台相关的事务实现。每个事务管理器都会充当某一特定平台的事务实现的门面,这使得用户在Spring中使用事务时,几乎不用关注实际的事务实现是什么。
比如针对Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理器DataSourceTransactionManager,
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
2、你眼中的高并发?
看参考四,一些概念没有接触过,不是太能理解。
3、Spring AOP原理是什么?
Spring AOP的底层都是通过代理来实现的
.一种是基于JDK的动态代理
.一种是基于CgLIB的动态代理
参考:
【1】、https://www.cnblogs.com/Javacxf/p/7100995.html
【2】、https://www.cnblogs.com/longshiyVip/p/5061637.html
【3】、https://www.cnblogs.com/longshiyVip/p/5061637.html
【4】、https://zhuanlan.zhihu.com/p/38636111
【5】、https://www.cnblogs.com/javazhiyin/p/10101044.html
【6】、https://www.cnblogs.com/zhouqianhua/archive/2011/04/15/2017049.html