这些都是我当时面试整理的一些面试题希望对你们有用
----1>什么是Spring框架:
*Spring 是一个开源的应用框架,其作用是为了降低应用程序开发的复杂度
*它是轻量级,低耦合的
*具有分层体系结构,允许用户选择组件同时还为j2ee程序开发提供了良好
的一个有凝聚力的框架
*它可以集成其他一些主流框架,例如:Struts.Hibernate.Mybatis所以
又称为框架的框架
----2>什么是SpringMVC框架:
*SpringMVC框架是Spring的一个模块,基于MVC架构思想的一个框架主要
解决了V-C的交互问题在传统的Java EE技术中使用Servlet作为项目中的控
制器用于接受用户的请求这种做法的弊端在于会导致Servlet的数量太多不
便于管理且对象太多进而占用大量的内存空间所以SpringMVC解决了这种
问题使得代码更加简洁增加了开发效率。在SpringMVC框架当中有5大组件
他们分别是DispatcherServlet、HandlerMapping、Controller、ModelAnd
View、ViewResolver.
----3>Spring MVC 的流程:
*用户发送请求到前端控制器DispatcherServlet
*DServlet收到请求调用HandlerMapping返回给一个具体的Controller
*DServlet根据返回的Controller找到对应的Controller
*Controller处理请求给予响应结果返回ModelAndView到DServlet
*DServlet再根据ViewResolver找到准确的视图组件
*最终DServlet可以得到一个完整的响应发送给客户端
----4>列举Spring的优点:
*由于Spring的分层架构用户可以自己选择所需要的组件
*Spring支持POJO编程,从而具备持续集成和可测试性
*由于依赖注入和控制反转JDBC得以简化
*它是开源免费的框架
----5>Spring应用程序有哪些不同的组件:
*Spring应用程序一般有以下组件:
*接口-定义功能
*Bean类-它包含属性,setter和getter方法,函数
*Spring面向切面编程(AOP)-提供面向切面编程的功能
*Bean配置文件-包含类的信息以及如何配置他们
*用户程序-它使用接口
----4>什么是Spring IOC容器:
*Spring ioc 负责创建对象,管理对象,装配对象,配置对象并且
管理这些对象的整个生命周期
----5>Spring的IOC有三种注入方式
*根据属性注入也叫set方法注入
*第二种是根据构造方法注入
*第三种是根据接口进行注入
----6>BeanFactory和ApplicationContext有什么区别:
*BeanFactory和ApplicationContext是Spring的两大
核心接口而其中ApplicationContext是BeanFactory的子
接口他们共同的特点是都可以当作Spring容器生成Bean的
实例并管理容器中的Bean
*不同点在于BeanFactory是Spring里面最底层的接口
提供了最简单的容器的功能,负责读取Bean的配置文件
管理Bean的加载与实例化维护Bean之间的依赖关系负责Bean
的生命周期但是无法支持Spring的AOP功能和web应用,而
相反ApplicationContext作为BeanFactory的子集因而具有
BeanFactory的所以功能,而且还做了扩展其主要扩展功能有
**默认初始化所有的Singleton,也可以通过配置取消初始化
**事件机制
**同时加载多个配置文件
**以申明的方式启动并创建Spring容器
---->Spring框架中用到了哪些设计模式:
*代理模式
*单例模式
*工厂模式
*模板方法
---->Spring配置事务的5种方式:
*每个Bean都有一个代理
*所有Bean共享一个代理基类
*使用拦截器
*使用tx标签配置的拦截器
*使用注解@Transactional
---->介绍一下Spring的事务管理
*事务就是对一系列的操作进行统一的提交或者回滚操作,如果插入成功,那么一起成功
如果中间有一条出现异常,那么会滚到之前的操作。
*开发中为了避免这种情况都会进行事务管理,Spring也有自己的事务管理机制一般是使用
TransactionManager进行管理可以通过注解来完成这一功能。
---->Jsp的内置对象:
*request
*response
*out
*pageContext
*Session
*application
*page
*config
*exception
---->Cookie和Session的区别
*Cookie:主要保存在客户端,其值在客户端与服务端进行传递不安全,
存储的数据量有限
*Session保存在服务端每一个Session在服务端都有一个SessionId做为一个标
示存储的数据量大,安全性高占用服务器的内存
---->Jsp的指令:
*page指令:
import属性:导包
pageEncoding属性:设置jsp页面的编码
contentType属性:设置 response.setContentType的内容。
errorPage属性:指定一个异常处理页面。当jsp运行时发生了异常,容器会
调用异常处理页面。
isErrorPage属性:缺省值是false,如果为true, 就可以使用exception隐含
对象。
session属性: 缺省值是true,如果为false,则不能够使用session隐含对象了。
*include指令:
*taglib指令:导入jsp标签
---->什么是jstl:
apache开发的一套jsp标签后来捐献给sun,sun将其命名为jsp standard taglib
简称为jstl。
---->List、Set、Map是否继承自Collection接口
*List、Set是Map不是
---->List、Map、Set三个接口存取元素时,各有什么特点
*Set 集合里面不允许存放重复的元素;Set取元素时没法说取第几个只能已以
迭代器的方式取得所有元素再逐一进行遍历
*List集合表示有先后顺序的集合可以允许有重复的元素出现;List除了可以
通过迭代器取的所有元素还可以通过get(index i)来明确说明取第几个
*Map与List和Set不同它是双列集合每次存储时,要存储一对key/value不能
存储重复的key;取元素时可以取得所有的key,也可以取得所有的value
还可以取得key和value组成得Entry对象得集合
---->heap和stack有什么区别
*java的内存分为两类:
**栈类存:栈内存指的是程序进入一个方法时会为这个方法单独分配一块
私属的存储空间用于存储这个方法内部的局部变量当这个方法结束时栈就会自
动释放栈中的变量也将随之释放
**堆内存:堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的
那些数据例如使用new创建的对象都放在堆里所以它不会岁随方法的消失而消失
注:方法中的局部变量如果使用final修饰后是存放在堆里而不是在栈里
---->Tomact的优化经验
*去掉对web.xml的监视,把jsp提前编辑成Servlet;有富于物理内存的情况下
加大Tomact使用jvm的内存
---->forward与redirect的区别
*转发之后浏览器地址栏不变;重定向之后浏览器地址栏发生改变
*转发目的地有限制;重定向没有限制
*转发可以共享request和response对象;重定向则不能
*转发是一件事未做完让另外一个web组件继续做;而重定向则是一件事已经
做完再做另外一件事
---->Get请求与Post请求的特点
*Get:会将请求参数显示在地址栏不安全;大小有限制大约2k左右
*Post:不会将请求参数直接显示在地址栏当中相对来说更加安全;将请求
添加到实体文件里面没有大小的限制
---->Jsp与Servlet的区别
*Jsp是Servlet技术的扩展本质上就是Servlet的简易方式,更强调应用的外表
表达
*Servlet的应用逻辑是在java文件中并且完全从表达层的HTML分离出来;而
Jsp的情况是Java和Html可以组合成一个.jsp文件;jsp侧重于视图Servlet侧重
于逻辑部分
---->页面之间对象传递的方法
*request、session、application、cookie等
---->Servlet的作用域
*request:
*session:
*application:
使用作用域传递数据和存储数据
使用作用域传递数据四句话
---->数据库的三范式
1NF:字段具有原子性不可再分
2NF:一个列可以存储各个实例的唯一标示(主键字或者主键列)
3NF:每一个列只有一个值;每一行都能区分;每一个表都不包含其他表已经
存在的非主键关系信息
---->XML文档解析有哪几种方式
*DOM:处理大型文件时其性能下降的非常厉害这个问题是由于DOM的树结构
所造成的,这种结构占用的内存比较多,而且DOM必须在解析文件之前把整个
文档装入内存适合对xml的随机访问
*SAX:是事件驱动型的XML解析方法,它顺序读取XML文件,不需要一次
全部装入整个文件适合对XML文件的顺序访问
---->什么是类的反射机制
*通过类(Class对象)可以得到当前类的方法,构造方法,接口,父类等信息
同时可以通过反射实例化出一个类,设置属性,调用方法。Spring中的一切都
是反射,Struts2,hibernate都是通过类的反射进行开发的。
---->Sleep()和Wait()的区别
*Sleep是指休眠给定的时间,当这个时间结束线程会自动再次醒来
*Wait是等待转态多长时间不清楚由另一个线程将其唤醒
---->JDBC中Statement和PreparedStatement的区别
*PreparStatement继承自Statement
*Statement一般用于执行固定的没有参数的SQL
*PreparedStatement实现了预编译SQL语句可以防止SQL注入
*PreparedStatement更加的灵活
---->重写equals为什么要重写hashCode
*不被重写的hashCode值是根据内存地址换算出来的一个值
*不被重写的equals方法是严格判断两个对象是否是相等的方法(object1 ==
object2)
---->AOP是什么
面向切面的编程,或AOP是一种编程技术,允许程序模块化横向切割关注点或
横切典型的责任划分如:日志和事务管理
---->过滤器和拦截器分别是什么,他们有什么区别
*过滤器(filter):依赖于servlet容器,在实现上基于函数的回调,可以对几乎所有的请求进行
过滤但是缺点是一个过滤器只能在实例化时调用一次,使用过滤器的目的是用来做一些
过滤操作获取我们想要的数据,比如:在过滤器中修改字符编码
*拦截器():依赖于web框架在SpringMVC当中就是依赖于SpringMVC框架,在实现上基于JAV
A的反射机制,属于面向切面编程的一种应用,由于拦截器是基于web框架的调用因此可以使
用Spring依赖注入进行一些业务操作同时一个拦截器实例可以在一个controller生命周期
内可以多次调用但是缺点是只能对controller请求进行拦截
区别:拦截器是基于java反射机制的而过滤器是基于函数回调;拦截器不依赖于servlet
容器过滤器依赖于servlet容器;拦截器只能对action请求起作用而过滤器几乎对所有的
请求都起作用
---->Hibernate中对象的三种转态及相互转化
*瞬时状态 持久化状态 脱管状态
*瞬时对象转持久化对象:通过Session的save()和saveOrUpdate()方法把一个瞬时对象
与数据库相关联,这个瞬时对象就成为持久化对象
*持久化对象转托管对象:当执行close()或clear()之后,持久化对象转化为托管对象
瞬时对象转托管对象:通过Session的save()和saveOrUpdate()和lock()等方法,把瞬时
对象就成为持久化对象
---->为什么要使用struts2框架,它有什么优点
*它是建立在MVC这种公认的好的模式上的,Struts2在M,V和C上都有涉及,但他主要是提
供一个好的控制器和一套定制的标签库上。
优点:结构层次分明,高可重用性增加了程序的健壮性和可扩展性便与开发于设计分工,
它是开源项目功能强大
---->请简述HTTP协议
*超文本传输协议基于应用层的协议在上网来浏览网页的时候浏览器和web服务器之间通过
http在Internet上进行数据的发送和接收基于请求/响应模式的无状态协议。
*请求过程:客户发起连接--客户发送请求--服务器响应请求--服务器关闭连接
---->请简述TCP/UDP的区别
TCP和UDP是osi模型中运输层的协议,TCP提供可靠的通信传输,而UDP则常被用于让广播
和细节控制交给应用的通信传输
区别大致如下:TCP面向连接而UDP面向非连接即发送请求不需要建立连接;TCP提供可靠
的服务而UDP无法保证;TCP面向字节流,UDP面向报文;TCP数据传输慢而UDP数据传输快
---->请简述JVM加载class文件的原理机制
JVM中的类的正是由ClassLoader和他的子类来实现的,JavaClassLoder是一个重要的
java运行时系统组件。它负责在运行时查找和装入类文件的类
---->Java异常处理机制
*异常是指java程序运行的过程中所发生的非正常的错误,可以用一个对象来表示,java
使用面向对象的方式来处理异常,它把程序中发生的每个异常都封装到一个对象里面,该
对象中包含有异常的信息
*java异常的根类为Throwable,Error和Exception是它的两个子类。
*Error:表示程序本身无法克服的一种严重问题,程序只有死的份了。例如:内存溢出,
线程死所
Exception:表示程序还能够克服和恢复的问题其中又分为系统异常和普通异常
*Java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须使用try..
catch 处理或者使用throws声明继续抛出,而系统异常可以不做处理
---->线程的基本状态以及状态之间的联系
状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束
---->简述synchronize和lock的异同
*主要相同点:lock能完成synchroized的所有功能
*主要不同点:lock有比synchroized更精确的线程语义和更好的性能,synchroized会
自动释放锁而lock要求程序员手动释放并且必须在finally从句中释放
---->字符流与字节流的区别
*字符流是字节流的包装,字符流则是直接接受字符串
*字符向字节转换时要注意编码的问题
---->什么是java序列化,如何实现序列化
*把对象转换为字节序列的过程称为对象的序列化
*把字节序列恢复为对象的过程成为对象的反序列化
通过实现Serializable接口,生成序列化版本号
---->GC是什么,为什么要有GC
*GC是垃圾收集的意思
*java提供的GC功能可以自动检测回收不被引用的内存,释放其占用的内存
*垃圾收集器会自动进行管理
*如果要请求垃圾收集。可以调用System.gc()这些方法会通知GC尽快进行垃圾回收
*在对象使用以后要及时释放其引用有利于垃圾回收可以有效的防止内存泄露
---->java中会存在内存泄露吗
*所谓的内存泄露指的是一个不再被引用的对象或变量一直占据在内存中。
*长生命周期的对象持有短生命周期的对象的引用就是很可能发生泄露的。
---->局部变量不能添加访问修饰符也不能添加static
---->说一说Servlet的生命周期
*Servlet有良好的生存期的定义,包括加载和实例化,初始化,处理请求,以及服务结束
整个生存期由Servlet的init,service,destroy方法表达
Servlet被服务器实例化后容器运行其init方法请求到达时运行service方法,service方法
自动派遣运行doget,dopost方法当服务器决定将实例销毁的时候调用destory方法
---->什么时候调用doGet()和doPost()方法
*jsp页面中的FORM标签里的method属性为get时调用doGet方法为post时调用Post方法
---->什么是触发器
*触发器是数据库中由一个时间触发的特殊存储过程,触发器的执行可以由对一个表的
insert,delete,update等操作来触发,触发器经常用于加强数据的完整性约束和业务规则
网友评论