面试题:
1.你对SpringMVC的了解
2.面向对象的特征有哪些
3.抽象类和接口的区别
4.在java里面有反射,反射的用途
5.实现线程的方法
6.get和post的区别
7.SpringBoot相对于SpringMVC优势
8.在java里面常用的集合类都有哪些
1.你对SpringMVC的了解
答:采用三层框架,降低代码之间的耦合,提高代码质量。SpringMVC的重要核心组件有:前端控制器(dispatcherServlet), 处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)
工作流程
1.客户端发送请求到前端控制器(中央处理器),前端控制器判断请求是否符合格式,
如果符合格式到请求到达处理映射器,处理器映射器查找对应的处理器,将查找到的结果(处理器路径)返回给前端控制器,前端控制器到处理器适配器,处理器适配器进行处理业务,将业务执行的结果返回给前端控制器,前端控制器到视图解析器,进行视图解析,视图解析后返回一个view(数据)到前端控制器,前端控制器到视图渲染,将渲染后的结果返回给客户端
2.面向对象的特征有哪些
封装、继承、多态、重载、重写
(1)继承:就是保留父类的属性,开扩新的东西。通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为。
(2)封装:就是类的私有化。将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。
(3)多态:是允许将父对象设置成为和一个和多个它的子对象相等的技术。包括重载和重写。重载为编译时多态,重写是运行时多态。
(4)重载:在同一个类中,方法名一样。参数列表、方法体、返回值类型、访问修饰符可以不一样
(5)重写:存在于子父类关系中,子类重写父类方法,方法名一样访问权限修饰符大于等于父类,抛出异常范围小于等于父类,参数列表一样,方法体不一样
3.抽象类和接口的区别
(1)抽象类中有抽象方法有构造方法,构造方法不能直接创建对象,可以有静态代码块和静态方法;子类继承抽象类必须重写所有抽象方法,否则把自己变成抽象类
(2)接口中只能有抽象方法,jdk1.8之后允许有普通方法,不能含有静态代码块以及静态方法
一个类只能继承一个抽象类,而一个类却可以实现多个接口
4.在java里面有反射,反射的用途
反射:动态地发现和绑定类、方法、字段,以及所有其他的由于有所产生的的元素。通过反射,能够在需要时完成创建实例、调用方法和访问字段的工作。
在程序运行中通过类名,可以调用这个类中的所有方法以及属性
优点: 可以在程序运行的过程中,操作这些对象。
可以解耦,提高程序的可扩展性。
缺点:因为是JVM操作,所以对于性能来说会有所下降。
容易对程序源码造成一定的混乱。
用途:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法
3.在运行时调用任意一个对象的方法,通过反射甚至可以调用到private修饰的方法
4.生成动态代理
5.实现线程的方法
1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
线程的物种状态:创建、就绪、运行、阻塞、死亡
6.get和post的区别
(1)get:地址栏传输数据,携带数据数量小,地址栏可见,速度快,不安全
(2)post:Tcp包传输数据,携带数据量大,地址栏不可见,速度相对慢,安全
7.SpringBoot相对于SpringMVC优势
(1)SpringBoot减少了大量的配置文件,约定优于配置 ,可以极大地简化了 spring 的配置流程,Spring Boot实现了自动配置,降低了项目搭建的复杂度。
(2)Spring 是一个“引擎”;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。
8.在java里面常用的集合类都有哪些
(1)单集合:set不能重复(HashSet,LinkedHashSet,TreeSet)
List有序、可重复(ArrayList,LinkedList)
(2)双列集合:Map(HashMap,TreeMap)
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所以插入删除数据速度慢。
ArrayList:基于数组实现,查找、更新效率高,自动扩容1.5倍,初始容量10
LinkedList:基于双向链表实现,删除插入效率高,链表是由节点组成的节点中分两部分一部分存储节点元素,另一部分存储指针,指向下一个节点,删除一个元素,只要改变他前一个节点的指针指向就可以了
2、Set(不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
HashSet,基于Hash表去重,重写equals和hashcode
LinkedHashSet,通过比较器,实现Comparable重写comporTo()方法,底层是红黑树
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
HashMap,初始大小11,加载因子0.75,扩容2倍+1
TreeMap,有序(自然升序)基于红黑树叶
集合的优点
(1)使用核心集合类降低开发成本,而非实现我们自己的集合类。
(2)随着使用经过严格测试的集合框架类,代码质量会得到提高。
(3)通过使用JDK附带的集合类,可以降低代码维护成本。
(4)复用性和可操作性。