Java面试总结(集合、spring)
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的功能
Java面试总结(集合、spring)的更多相关文章
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
[JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...
- Java面试专题-集合篇(2)
- Java面试中的Spring方面问题
1.一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? VersionFeatureSpring 2.5发布于 2007 年.这是第一个支持注解的版本.Spring 3 ...
- 《Java 面试问题 一 Spring 、SpringMVC 、Mybatis》
自己理解SSM框架可能问到的面试问题 一.需要知道的SSM基础知识 1.什么是Spring? Spring 是一款轻量级的 IOC (依赖反转) 和 APO (面向切面) 容器框架.(个人理解: 就 ...
- JAVA面试之集合框架(三)
21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...
- Java面试之集合框架篇(3)
21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...
- 【java面试】- 集合篇
Java 集合概览 从下图可以看出,在Java中除了以Map结尾的类之外, 其他类都实现了Collection接口.并且,以Map结尾的类都实现了Map接口 List.Set.Map三者的区别 Lis ...
- Java面试集合(七)
前言: Java面试集合(六) 的回顾,对于final可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final来修饰方法,方法不可重载,继承,重写,final用来修饰类,该类不能被继 ...
- Java面试集合(三)
前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...
- Java面试集合(二)
前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...
随机推荐
- JVM--关于MinGC,FullGC
一.Minor GC 发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快,通过幸存区交换来处理 1.触发条件: 当创建对象时Eden区空间不够时触 ...
- .NET Core微服务之路:利用DotNetty实现一个简单的通信过程
上一篇我们已经全面的介绍过<基于gRPC服务发现与服务治理的方案>,我们先复习一下RPC的调用过程(笔者会在这一节的几篇文章中反复的强调这个过程调用方案),看下图
- 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影)
[源码下载] 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影) 作者:webabcd 介 ...
- Java SE核心之一:常用类,包装类,其他基本数据类型包装类。
在Java继承体系中,java.lang.Object类位于顶端(是所有对象的直接或间接父类).如果一个类没有写extends关键字声明其父类,则该类默认继承java.lang.Object类.Obj ...
- javascript 小方块平移
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ubuntu解压rar文件
一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简 单的,只需要两个步骤就可以迅速搞定. ubuntu 下 ...
- win10 + gtx1060 + cuda8.0 + caffe + vs2013 + Tensorflow + PyTorch
一. 安装cuda8.0 1)先去官网下载cuda8.0 https://developer.nvidia.com/cuda-toolkit 2)下载完之后进行安装,安装时间有点长,请耐心等待,默认 ...
- OC学习3——C语言特性之指针
1.指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量.自定义类的变量等都是指针.定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量.注意: ...
- spring boot 集成 Listener 的两种方式
1)@ServletComponentScan注解+@WebListener注解 2)@Bean注解+ServletListenerRegistrationBean类
- 深入理解css3中 nth-child 和 nth-of-type 的区别
在css3中有两个新的选择器可以选择父元素下对应的子元素,一个是:nth-child 另一个是:nth-of-type. 但是它们到底有什么区别呢? 其实区别很简单::nth-of-type为什么要叫 ...