一、数据库基础
1、平均值用什么,分组用什么
统计平均值:avg , 分组:group by,通常与聚合函数一起使用,例如 COUNT()
、SUM()
、AVG()
、MAX()
和 MIN()
。
2、两个相同列的结果集求并集用什么
union 并集(自动去重) , union all(允许重复并集)
3、完整查询SQL中的关键字的定义顺序?
SELECT 列名 FROM 表1 JOIN 表2 ON 条件 WHERE 条件 GROUP BY 列名 HAVING 条件 ORDER BY 列名 LIMIT
4、完整的多表JOIN查询,SQL中关键字的执行顺序?
FROM --> ON --> JOIN --> WHERE --> GROUP BY --> HAVING --> SELECT ---> DISTINCT ---> ORDER BY --> LIMIT
二、Spring
1、介绍一下Spring?
Spring是一个开源的轻量级控制反转和面向切面编程的容器框架。轻量级是说它开发使用简单,功能强大。控制反转是指将对象的创建,初始化,销毁等工作,以及依赖关系维护交给ioc容器,方便解耦合,降低维护难度。面向切面编程是指将相同的逻辑横向抽取出来,可以对一些通用业务如事务,日志进行集中管理。
2、说下Spring框架的组成?
-
CoreContain核心容器模块:
-
Spring Core:提供了框架的基本功能,包括依赖注入(DI)和控制反转(IOC)容器
-
spring-beans:提供 BeanFactory,负责Bean工厂中Bean的装配,所谓Bean工厂即是创建对象的工厂,Bean的装配也就是对象的创建工作;
-
context:Spring的IOC容器,负责管理Spring应用中的所有bean的生命周期和配置,提供国际化,事件传播,资源加载等功能
-
spring-ExpressionLanguage(SpEl ):提供表达式语言
-
-
Web模块
-
Web:提供面向web的基本功能和面向web的应用上下文
-
Spring Web-MVC:也称为Web-Servlet,为web应用提供模型视图控制(MVC)
-
Spring Web-Socket:提供Socket通信, 在 web 应用程序中提供客户端和服务器端之间通信的方式
-
Spring Web-Portlet:模块提供了用于Portlet环境的MVC实现
-
-
数据/集成模块
-
spring JDBC:对JDBC的数据访问进行了封装和简化
-
ORM:为对象-关系映射提供交互层,支持数据集成框架的封装
-
OXM:提供对Object/XML映射实现的抽象层,它的作用是在Java对象和XML文档之间来回转换;
-
JMS:提供了Java消息服务(JMS)的支持
-
Transaction:事务模块,支持用于实现特殊接口类以及所有 POJO 类(简单的Java对象)的编程和声明式的事务管理
-
-
其他模块
-
Spring AOP:提供了面向切面编程的实现,让你可以在你的应用程序中使用切面编程
-
Aspects:模块提供了与AspectJ的集成,是一个功能强大的AOP框架
-
Instrumentation:提供了class instrumentation 的支持和类加载器classloader的实现
-
Messaging:为 STOMP 提供支持
-
Test:支持使用JUnit和TestNG对Spring组件进行测试
-
3、什么是Spirng的IOC?
1)IOC控制反转,把对象的创建,属性设置,初始化,销毁等工作交给Spirng的IOC容器去管理,解放程序员的劳动力。
2)对象被注册到Spring的IOC容器中,使用的时候从容器中获取即可,非常方便。
3)它通过依赖注入,将需要的外部资源注入到组件中,使用IOC使得对象之间的耦合度降低,资源变得容易管理,从而使得代码更加优雅
谁控制谁?控制什么?
传统的面向对象思想对于构造对象最简单的方法无非就是在对象内部通过new对对象进行创建,是程序主动去创建依赖对象。
但IOC不同,IOC是专门有一个容器来创建、初始化这些对象,这些对象被称为Bean。谁控制谁? 是IOC容器控制住了对象,控制了什么? 控制了bean的生命周期。
4、你对AOP的理解?
AOP,Aspect Oriented Programming 英文首字母缩写,意为面向切面编程,是Spring的核心思想之一。AOP是对OOP(面向对象编程)的一种补充,能够做到很多面向对象无法做到的事情,比如需要在所有方法执行前开启事务,打印日志,如果使用面向对象来编程,将会产生大量重复代码,而使用AOP,可以将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,一次解决这些问题。而这些重复的代码,一般统称为横切逻辑代码
使用AOP,在不改变原有业务逻辑的情况下,实现解耦合,避免横切逻辑代码重复
AOP的使用场景包括日志记录,性能统计,安全控制,事务处理,异常处理等等
它是基于动态代理实现的,分为JDK动态代理和CGLIB动态代理。JDK动态代理只支持实现了接口的类 ,CGLIB支持没有实现接口的类。Spring默认使用JDK动态代理,如果被代理类没有实现接口,会选择CGLIB动态代理
5、Spring的Bean懒加载和非懒加载有什么区别?
懒加载:需要使用对象的时候才创建,节省资源,但不利于提前发现错误
非懒加载,也叫迫切加载,容器启动时就创建对象,消耗资源,但有利于提前发现错误
spring中默认是迫切加载,即在项目启动时,spring会扫描符合条件的所有bean并将其初始化,如果需要懒加载,可以使用@Lazy注释或者xml中配置属性default-lazy-init="true"
6、Spring的依赖注入方式有哪些?
方式一:setter方式注入,通过反射调用无参构造方法生成对象,再通过对应的setter方法注入配置的值,支持注解和xml两种实现方式
方式二:构造器方式注入,通过反射调用有参构造方法生成对象,支持注解和xml两种实现方式,注解实现方式:@Autowired,它是默认按类型匹配的、@Resource,它是默认按名字匹配的(如果同时指定了name和type属性,容器会按照匹配规则来查找依赖对象