文档章节

SSH面试题精选

J
 JackMo2015
发布于 2015/10/10 15:46
字数 1957
阅读 29
收藏 1

1.谈谈你对MVC的理解

MVC是一种设计模式,它强制的将应用程序的输入、处理、和输出分开。

使用了MVC的应用程序被分为3个核心部件:试图(View)、模型(Model)、控制器(Controller)。它们各司其职,既分工明确又相互合作。

首先视图接受用户输入请求,然后将请求传递给控制器,控制器再调用某个模型来处理用户的请求,在控制器的控制下,再将处理后的结果交给某个视图进行格式化输出给用户.这是经典的MVC设计执行的基本流程。MVC不仅实现了功能模块和显示模块的分离,同时它还提高了系统的可维护性、可扩展性和组件的可复用性,是一个优秀的创建软件的途径。

J2EE把MVC引入了web领域,并在此基础上架构出了一套称为Model2的体系。Model2体系及jsp作为视图显示输出和接受用户输入数据,Servlet作为控制器处理用户请求并根据用户请求选择相应的jsp返回给用户,javaBean作为模型组件用作业务逻辑处理、管理数据的存储和一致性。

2.Struts1.0 和 Struts2.0 哪个是单实例,哪个是多实例

单例多例需要搞明白两个问题:

1. 什么是单例多例;

2. 如何产生单例多例;

3. 为什么要用单例多例

4. 什么时候用单例,什么时候用多例;

1. 什么是单例多例:

所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 

2. 如何产生单例多例:

    在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype"; 

3. 为什么用单例多例:

    之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存;

   之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;

    用单例和多例的标准只有一个:

    当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例;

4. 何时用单例?何时用多例?

    对于struts2来说,action必须用多例,因为action本身含有请求参数的值,即可改变的状态;

  而

3.update()和saveOrUpdate()区别?

Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。

update和saveOrUpdate是用来对跨Session的PO进行状态管理的。 

你的User user传过来的时候不是在session中管辖的PO 执行update方法是没用的 

saveOrUpdate会先判断user是否在session中管理 如果不在会先save到session然后执行update 所以就更新了 

User u是session的 直接set这个PO就可以更新了 无需调用update。

4.Hibernate的三种状态之间如何转换

在Hibernate中总共有3中对象的状态,分别为瞬时态、持久态、脱管态(游离态)。下面分别介绍下对象在何时处于什么样的状态

瞬时态:

在对象通过new关键在实例化后,所属的状态就是瞬时态。

持久态:

当对象通过session插入或更新到DB的时候,而session并没有关闭时候的状态即为持久态。

脱管态:

当session关闭后,而DB中又有该对象对应的一条数据,及称这种状态为脱管态。

处于不同状态下的特点

瞬时态的特点为并没有被hibernate所监控而且数据库中还没有与该对应的数据。

持久态的特点为被session所监控,也就是说当该对象的某一条属性或者多条属性被更改的时候,在DB中对应的数据也会随之做出更新操作。

脱管态的特点就是无论该对象如何更新,在数据库中对应的数据都不会因该对象的变化而产生更新。

这三种状态之间是可以通过方法进行转换的。

瞬时态转换到持久态     save()    saveOrUpdate()

持久态转换到瞬时态     delete()

持久态转换到脱管态     evict()    close()  clear()

脱管态转换到持久态     update()   saveOrUpdate()    lock()

5.Hibernate实体之间的关联关系的三种形式

一对一,一对多,多对多

6.spring中<bean>的depends-on属性是什么

depend-on用来表示一个Bean的实例化依靠另一个Bean先实例化。如果在一个bean A上定义了depend-on B那么就表示:A 实例化前先实例化 B。

7.Hibernate中get方法和load方法的区别

一、get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回null

  而使用load方法的话,hibernate会认定该id对应的数据一定存在,它也会先去session缓存中去查找,如果没有找到,hibernate会根据lazy属性值来确定是否使用延迟加载。如果lazy=‘true’ ,就使用延迟加载,返回该代理对象,等到真正访问到该对象的属性时才会去二级缓存中查询,如果没有,再去数据库中查询,如果还没有,就抛出org.hibernate.ObjectNotFoundException异常。如果lazy='false' 则不使用延迟加载,这是load的访问机制就和get一样了。

二、对于load和get方法返回类型:虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在 session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是 原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是 返回的还是代理对象,只不过已经加载了实体数据。

  总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

8. 什么是IoC?

IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。




© 著作权归作者所有

J
粉丝 3
博文 180
码字总数 50445
作品 0
广州
高级程序员
私信 提问
Git SSH连接方式配置

如果使用ssh的方式管理,需要配置ssh key. 1、打开git bash命令窗口 2、生成ssh key 为github上你注册的email地址。 如下面完整创建过程: 上面默认生成在用户主目录的目录下,可以自己输入自...

架构之路
2017/11/27
0
0
视频教程:Java七大外企经典面试套路之基础篇

Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。 本教程主要给大家讲解了Java七大外企经典面试套路,精...

一定听你
2017/06/14
0
0
Git提交记住用户名和密码

每次提交代码都要输入用户名密码,十分麻烦,教大家怎么让Git记住密码。 Https记住密码 永久记住密码 会在用户主目录的文件中生成下面的配置。 如果没有,则在当前项目下的文件中添加。 当然...

架构之路
2017/11/27
0
0
2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴、京东、美团、滴滴),面试回来之后会发给我一些面试题。有些朋友轻松过关,拿到offer,但是有一些是来询问我答案的。 我特意整理了...

youanyyou
2017/11/08
0
0
分享AI有道干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)

一年多来,公众号【AI有道】已经发布了 140+ 的原创文章了。内容涉及林轩田机器学习课程笔记、吴恩达 deeplearning.ai 课程笔记、机器学习、深度学习、笔试面试题、资源教程等等。值得一提的...

ApacheCN_飞龙
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
13分钟前
2
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
14分钟前
2
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
16分钟前
3
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
26分钟前
1
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部