从0到1重新认识Java(面试复习用)(二)

215 阅读3分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

前言

又到了巩固自身知识(复习面试题)的时候了,之前有过几次被问到的问题,刚好借助这次机会填补一下,顺便对自己温故而知新一下。

历练

Get和Post请求的区别

答:本质上没有区别,Get、Post请求本质都是HTTP的请求,而Http的请求底层都是TCP/IP ;要说明面上的区别就是,常规的获取请求用Get,Get请求在url上传参,Post请求在requestBody传参;但其实get在请求体,post在url传参技术上也是行得通的。

Get请求有传输大小限制 (2KB) ,Post理论上没有,但其实也有

zxb320190627068.jpg

SpringMVC 的流程

关于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渲染并响应用户

5220087-3c0f59d3c39a12dd.webp

List 详解

List在Java里边是一个接口,常见的实现类又ArrayList和LinkedList,在开发中用得比较多的是ArrayList

ArrayList的底层是数组;

  • 与原生数组对比,为什么还要用ArrayList

    • 原生数组有一个特点,需要为它指定大小,而ArrayList不需要;
    • 在 new ArrayList() 的时候,默认会有一个object数组,大小为0.当我们第一次 add 添加数据时,会给这个数组初始化一个大小,这个大小默认值为 10。
    • 原生数组的大小是固定的,而ArrayList的大小是可变的;是因为ArrayList实现了动态扩容:
      1. 在每一次add 的时候,都会先去计算数组够不够空间,如果空间足够,则直接添加进去。如果不够,那就得扩容;
      2. 在ArrayList的源码中,有一个grow方法,每一次的扩容原来1.5倍。比如说初始值是10,现在插入第11个元素,发现数组的空间不够,所以会扩容到15;
      3. 在空间扩容后,会调用arraycopy 对数组进行拷贝。
  • 为什么说日常生活中使用较多的是ArrayList

    有底层的数据结构来决定,在日常的开发中,遍历的需求比增删要多,即使是增删往往只需要add(尾部)进去就可以了,在尾部添加元素,ArrayList的时间复杂度也就O(1);

    另外,ArrayList的增删底层调用的copyOf()被优化过,现代CPU对内存可以块操作,ArrayList的增删一点也不会比LinkedList慢。

  • Vector 是否有了解

    Vector的底层结构是数组,一般我们现在已经很少使用了。相比较ArrayList,它是线程安全的,在扩容的时候它是直接扩容两倍。

继承 Collection 接口的集合有哪些?

  • List 是继承自Collection: public interface Listextends Collection

  • Set 是继承自Collection: public interface Setextends Collection

  • Map 不是

  • Iterator接口未实现Collection接口

  • Vector定义为 public class Vectorextends AbstractList implements List, RandomAccess, Cloneable, Serializable
    Vector实现了List接口自然实现了Collection接口

20161031225835099

总结

今天的总结,算是小小杂谈,在上班的途中,脑海里不断演练常见的面试题,自己会怎么回答,答不出来的便记录在案,算是为今天巩固一番