2022全面JAVA面试经历总结

更新时间:2023-04-12 20:11:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2017JAVA面试经验问题

0、对SSH的理解:

SSH即:Struts(表示层)+Spring(业务层)+Hibernate(持久层)

Struts:

Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。

在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。

(View:沿用JSP,HTTP,Form,Tag,Resourse;Controller:ActionServlet,struts-config.xml,Action)Hibernate:

Hibernate是一个持久层框架,它只负责和关系数据库的操作。

Spring:

Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层和持久层。

1、对Spring的相关理解

Spring框架目的是为了让模块和模块(对象和对象)之间的关联不是通过代码来关联而是通过配置来关联。

Spring的核心是IOC和AOP。

IOC(Inversion of Control)控制反转是关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。控制反转可以理解为生产和管理Bean的容器,原来需要在调用类中New的东西,现在都有IOC容器产生。

IOC的三种注入方式:inject

1、根据属性注入也就是Set方法注入

2、根据构造方法注入

3、根据注解注入

IOC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。

DI依赖注入:Dependency injection

依赖注入是一个IOC的特殊实现,依赖注入是指一个对象使用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接以参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖。

AOP(Aspect Oriented Programming):针对一个切面来编程。 AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。面向切面编程通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.

AOP可以理解为实现调用某个方法之前或者之后,自动执行一系列自定义的语句(例如:每做一次数据库操作都要生成一句日志)。

实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类和目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在, JDK 中采用 Prox类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLB。

AOP的主要作用是:日志记录,性能统计,安全控制,事务处理,异常处理等等

AOP和OOP的区别:

OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。

举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD 的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。

同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。

换而言之,OOD/OOP面向名词领域,AOP面向动词领域。

1.1.Spring常用注解

1、@Controller

用于标注控制层组件(如struts中的action),负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写。

例如:

@Controller

public class UserAction extends BaseAction{}

? 或者

@Controller("userAction")

使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。

2、@Service

@Service对应的是业务层Bean,例如:

@Service("userService")

public class UserServiceImpl implements UserService { ……… }

3、@Repository

用于标注数据访问组件,即DAO组件。例如:

@Repository(value="userDao")

public class UserDaoImpl extends BaseDaoImpl {……… }

4、@RequestMapping

在类前面定义,则将url和类绑定。

在方法前面定义,则将url和类的方法绑定

5、@RequestParam

@Scope用于指定scope作用域的(用在类上)

@Resource默认按名称装配,当找不到和名称匹配的bean才会按类型装配。

@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier 注解一起使用。如下:

@Autowired @Qualifier("personDaoBean") 存在多个实例配合使用

@PostConstruct 初始化注解

@PreDestroy 摧毁注解默认单例启动就加载

1.4、Spring事务管理机制

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回

滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。开发中为了避免这种情况一般都会进行事务管理。

spring提供了几个关于事务处理的类:

TransactionDefinition //事务属性定义

TranscationStatus //代表了当前的事务,可以提交,回滚。

PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

一般事务定义步骤如下:

TransactionDefinition td = new TransactionDefinition();

TransactionStatusts = transactionManager.getTransaction(td);

try

{ //do sth

89454743a78da0116c175f0e7cd184254a351b55mit(ts);

}catch(Exception e){

transactionManager.rollback(ts);

}

spring提供的事务管理可以分为两类:编程式的和声明式的。

编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。

编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象

声明式:使用TransactionProxyFactoryBean:

围绕Poxy的动态代理能够自动的提交和回滚事务

org.springframework.transaction.interceptor.TransactionProxyFactoryBe an

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

1.5、spring中的核心类有那些,各有什么作用?

BeanFactory:产生一个新的实例,可以实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能。

2、Spring MVC

Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图分析器、视图组成。MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,C(控制器)将V(视图、用户客户端)和M(模块,业务)分开构成了MVC.

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 里面。Spring 框架提供了构建 Web 使用程序的全功能 MVC 模块。使用 Spring 可插入的MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

2.1.SpringMVC工作原理operating principle

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托使用系统的其他模块负责负责对请求进行真正的处理工作。

2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3.DispatcherServlet请请求提交到目标Controller

4.Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图分析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:

1、截获符合特定格式的URL请求。

2、初始化DispatcherServlet上下文对应的WebApplicationContext,并将其和业务层、持久化层的WebApplicationContext建立关联。

3、初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

2.2、SpringMVC接口解释

1、DispatcherServlet接口:

Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。

2、HandlerMapping接口:

能够完成客户请求到Controller映射。

3、Controller接口:

需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。

Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。

从宏观角度考虑,DispatcherServlet是整个Web使用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

4、ViewResolver接口:

Spring提供的视图分析器(ViewResolver)在Web使用中查找View对象,从而将相应结果渲染给客户。

2、Hibernate

Hibernate是JDBC的轻量级的对象封装(encapsulation),它是一个独立的对象持久persistence层框架。 hibernate要做的事,就是让对象投影到关系数据库中,然后实施化。它把数据层和业务层实现的解耦,这样能很好的转化想要的数据库,

2.1、hibernate核心接口:

session:负责被持久化对象CRUD操作

sessionFactory:负责初始化hibernate,创建session对象

configuration:负责配置并启动hibernate,创建SessionFactory

Transaction:负责事物相关的操作

Query和Criteria接口:负责执行各种数据库查询

2.2、hibernate工作原理:

1.通过Configuration config = new Configuration().configure();

//读取并分析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的读取并分析映射信息

3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory

本文来源:https://www.bwwdw.com/article/tf6l.html

Top