- 什么是Spring Boot ?
Spring Boot其实就是一个整合很多可插拔的组件(框架),内嵌了使用工具(比如内嵌了Tomcat、Jetty等),方便开发人员快速搭建和开发的一个框架。 - Spring Boot 自动配置的原理是什么?
Spring jar包的META-INF下的spring.factories这个文件找到配置所有EnableAutoConfiguration的值加入到Spring容器中。 - Spring Boot 核心注解有哪些?由哪些注解组成?
@SpringBootApplication、@EnableAutoConfiguration、@EnableConfigurationProperties、@ConditionalOnXxx - 什么是Java Config?
Spring JavaConfig是Spring社区的产品,它提供了一种纯Java方法来配置Spring IoC容器。因此,它有助于避免使用XML配置。 - 什么是Yaml?
YAML ain’t a markup language.Yaml是一个可读性高,用来表达数据序列化的格式。 - Yaml有什么优势?
可读性高 - MySQL查询过慢,应该怎么优化?
- 选择合适的字段属性
- 尽量把字段设置为not null
- 利用连接来代替子查询
- 使用索引
- 查询时,声明明确的列,只返回需要的列
- nginx应该怎样配置(负载均衡)?
配置upstream,在这个节点下配置server,可以设置ip和端口及权重 - 在MyBatis中,#{}和${}有什么区别?
#{}是经过预编译的,是安全的。${}是取值后,再去编译,是非安全的,存在SQL注入 - 接口和抽象类有什么区别?
- 都不能被实例化
- 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
- 接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
- 实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
- 接口强调特定功能的实现,而抽象类强调所属关系。
- 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
- 什么是Spring Cloud?
Spring Cloud 是在 Spring Boot 的基础上构建的,用于简化分布式系统构建的工具集。 - 什么是Redis?
Remote Dictionary Server (远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。 - Oracle有什么特点?
- 支持多用户,大事务量的事务处理。
- 在保持数据安全性和完整性方面性能优越。
- 支持分布式数据处理,将分布在不同物理位置的数据用通信网络连接起来,在分布式数据库管理系统的控制下,组成一个逻辑上统一的数据库,完成数据处理任务。
- 具有可移植性。Oracle可以在Windows,Linux等多个操作系统平台上使用,可以在不同操作系统间移植数据库。而SQL Server只能在Windows 平台上运行。
- 线程有哪些状态?
新建状态、就绪状态、运行状态、阻塞状态、死亡状态 - 实现线程的方式有哪几种?
实现Runnable接口,继承Thread类,实现Callable接口。 - 线程池有哪些?
FixedThreadPool、CachedThreadPool、SingleThreadPool、newScheduledThreadPool。 - ConcurrentHashMap和HashTable有什么区别?
HashTable是基于同步实现的,ConcurrentHashMap是基于分段锁实现的 - HashMap和HashTable有什么区别?
HashMap线程不安全,HashTable线程安全 - HashMap是如何实现的?
数组、链表、红黑树。有待进一步研究 - 使用CallAble接口的线程,如何获取返回值?
Callabel是一种具有类型参数的泛型,应该使用ExecutorService.submit()方法调用它。
它会返回Future类型的对象,如果想要得到其返回值,应该使用get方法,该方法会一直阻塞,isDone方法用来检查该线程的活动是否终止。 - MySQL的事务隔离级别有哪些?
- 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
- 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
- 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
- 持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
- String、StringBuilder、StringBuffer有什么区别?
String的值是不可变的,这就导致每次对String对象的操作都会生成新的String对象。不仅效率低下,而且浪费内存空间。
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuilder是线程不安全的字符串操作类 - Spring与Spring MVC的区别
Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。 - 谈一谈你对微服务的理解
微服务是一种架构模式,叫微服务架构更合理,就是把一个系统中的各个功能点都拆开为一个个的小应用然后单独部署,同时因为这些小应用多,所以需要一些办法来管理这些小应用。所以就有了Spring Cloud。 - MVC是指什么?
MVC(Model-View-Controller,模型-视图-控制器)指把页面、后台的交付分成3层来组成,是一种解决页面代码(视图代码)和后台代码分离的设计思想。 - Spring MVC的流程
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。