目录
1:LinkedList不用ArrayList?
ArrayList: 可以看作是能够自动增长容量的数组
ArrayList的toArray方法返回一个数组
ArrayList的asList方法返回一个列表
ArrayList底层的实现是Array, 数组扩容实现
ArrayList线程不安全
ArrayList必须是连续的
ArrayList只能在数组末尾添加数据
ArrayList查询快,增删慢
LinkedList可以看做为一个双向链表(内部每个元素都指向下一个元素)
LinkedList实现了Deque接口和List接口
LinkedList也是线程不安全
LinkedList可以不连续
LinkedList查询慢,增删快
LinkList可以很方便在链表头或者链表尾插入数据,或者在指定结点前后插入数据,add()方法默认在链表尾部插入数据
2:Sql调优?如果有一条SQL语句你怎么做优化
使用group by分组查询,默认分组后,还会排序,可能会降低速度
可以使用连接来替代子查询,因为使用join,mysql不需要在内存中创建临时
- 适当的价索引
- 不要去使用*号查询全表扫描
- 尽量少使用子查询和连接查询
- 尽量避免使用 != <> 和or这样会导致索引失效
3:Java的集合有哪些
List:List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。
set:Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,关于API方面。Set的API和Collection完全一样。
Map:Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。
4:SpringMVC常用注解
@service
@Controller
注解一个类表示控制器,Spring MVC 会自动扫描标注了这个注解的类。
@RequestMapping
请求路径映射,可以标注类,也可以标注方法,可以指定请求类型(post、get、put、delete、patch...)默认不指定为全部接收。
@RequestParam
用于数据绑定,接收url中的参数(即 Content-Type : application/x-www-form-urlencoded类型的内容),并且前后端参数名称必须相同。
@RequestBody
用于数据绑定,接收body体中的参数,而不是url。所以请求一定是post(即不是 Content-Type : application/x-www-form-urlencoded 类型的内容)
@ResponseBody
放在方法上,表示此方法返回的数据放在body体中,而不是跳转页面。一般用于ajax请求,返回json数据。
@RestController
这个是@Controller和@ResponseBody的注解组合。
5:SpringMVC的工作流程
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户
6:Spring的IOC和AOP的理解
AOP:一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。
IOC:就是控制反转,是指创建对象的控制权的转移,这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源。
Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。