Java面试总结(集合、spring)

时间:2022-09-03 07:47:05

Java 集合框架简介


Java Collections Framework,最开始也是一个开源框架,后来被收录到JDK中


所谓的集合,就是能存放多个数据元素的容器,在Java中原生的容器是数组
  数组有如下的优缺点:
  优点:
    1、访问速度在所有的语言中,容器的访问速度最快的,没有之一
  缺点:
    1、一旦创建,容量/长度是固定的
    2、只能存放声明的类型的数据(一种存放一种类型的数据)

Collection(能存放多个元素)
-List(排列有序,按照插入的顺序排列的)
  -ArrayList
    基于数组来进行操作的,在添加元素的时候可以动态扩容,随机访问速度快,随机插入速度慢(索引越靠前,速度越慢,越靠后,越快)

    这集合是如何创建的,添加方法是大致步骤(建议看源码)
  -LinkedList
    是基于双向链表的一种容器结构,随机访问速度慢,随机插入速度快
  -CopyOnWriteArrayList 线程安全的ArrayList

-Set
  HashSet
  就是HashMap的key的特点,不允许重复元素
  TreeSet 大小排序
  LinkedHashSet 插入顺序有序

实用技巧
  老版本JDK去重复(必须声明封装类型的数组)
  Integer[] arr = new Integer[] { 1, 1, 2, -9, 1, 0 };
  List<Integer> list = Arrays.asList(arr);
  Set<Integer> set = new HashSet<>(list);

  新版JDK去重复
  int[] arr = new int[] { 1, 1, 2, -9, 1, 0 };
  Set<Integer> set = Arrays.stream(arr).boxed().collect(Collectors.toSet());
  set.forEach(s -> {
    System.out.println(s);
  });

Map(基于键值对的结构,key是不允许重复的)
  -HashMap
    依据key的hashCode对其分类存储的一个容器,包含查找(key)速度快
    在添加新的key-value时,首先根据key计算出应该存放在哪一个桶,然后把元素放在该桶的最后一个位置

    key不能重复依据的是:
    key不能==,不能equals,
    key.hashCode不能相等

  -Hashtable(过时)
  -TreeMap key大小排序
  -LinkedHashMap 插入顺序有序
  -ConcurrentHashMap 线程安全的Map集合

 

MVC设计思想

这是一个对代码进行分层管理的设计思想,在早期我们使用的是JSP+JavaBean的方式编写组织代码的,这个时代也就是JSP Model I,在这个阶段,业务逻辑、控制逻辑和展示数据用的Html代码混杂在一起,两种以上类型的语言在维护的时候非常麻烦。Servlet出现以后,逐步演变成了JSP+Servlet+JavaBean(JSP Model II),前面的业务、控制逻辑就全部移植到了Servlet中。

Model 模型的意思,主要由JavaBean、Service、Dao组成,它们的主要作用是封装和处理数据。
View 视图的意思,主要由Html、Css、Javascript、少量动态语言标签组成,它们是用来展示数据和决定程序外观的。
Controller 控制器,主要由后台Java类组成,它的主要作用是搜集和分发请求的。

代码分层后,能更好的进行代码的维护和升级工作。

拓展话题,谈论对struts2和SpringMVC的理解,然后再比较两者的主要区别(https://www.cnblogs.com/dapengsoso/p/6592894.html)

 

AOP必问啊!!!!!(当初就飘了

 

MyBatis

是一个基于JDBC技术的ORM持久化框架。
在常规的JDBC程式中,Java代码和SQL代码混杂在一起,同时传统的CRUD方法有很多类似的写法以及大量的getter和setter,这样造成JDBC代码极不优雅。

而Mybatis框架因为使用了ORM技术很好的解决了以上问题。
Object-Relational Mapping是一种把面向关系的数据转换成面向对象的数据的一种技术,mybatis主要是使用反射机制、xml解析和原注解来实现ORM的

与JDBC比较:mybatis本身就是jdbc的轻量级封装,在查询的性能上略低,但是mybatis提供了自动批处理、缓存、数据库连接池技术等等,以及一些开源的代码生成工具MGB、PageHelper分页工具。

与Hibernate比较:SQL需要自己编写

 

Spring Framework

Spring是一个管理bean的生命周期的容器框架(applicationContext),它包含bean、content、web、aop等多个module(模块)组成。它也是spring家族最底层的技术架构。

Spring包含以下核心技术:

IoC(Inverse of Control)和DI(Dependency Injection)

IoC 控制反转,把原先自己创建对象转变成由spring容器来创建和销毁
DI 依赖注入,把一个类的实例通过反射、注解set到另一个类的实例中,形成后者依赖前者的关系。使用DI能做到灵活的切换下游技术的实现方式,这是Java多态带来的好处。(其实你可以说得更形象)

AOP
Aspect-Oriented Programming,面向切面编程。它主要是使用动态代理模式实现的,它能以低耦合(非侵入式)的方式给目标逻辑增加额外的功能。
凡是代码中与业务逻辑没有直接关系,但是其他模块都需要使用的代码,都可以封装为切面逻辑,大家共用。

JDK的Proxy和CGLIB是具体实现AOP的两种技术

restful
项目中,类似于事务的管理、权限和监控、数据的特殊处理都可以使用aop

Spring的优点
1、众多的Spring家族其它成员能极大的丰富程序功能
2、能以低耦合的方式治理bean及其之间的关系,同时还能增强bean的功能