hibernate面试题大全
面试八大恶心刁钻的问题

⾯试⼋⼤恶⼼刁钻的问题1.为什么等待和通知是在 Object 类⽽不是 Thread 中声明的?⼀个棘⼿的 Java 问题,如果 Java编程语⾔不是你设计的,你怎么能回答这个问题呢。
Java编程的常识和深⼊了解有助于回答这种棘⼿的Java 核⼼⽅⾯的⾯试问题。
为什么 wait,notify 和 notifyAll 是在 Object 类中定义的⽽不是在 Thread 类中定义这是有名的 Java ⾯试问题,招2~4年经验的到⾼级 Java 开发⼈员⾯试都可能碰到。
这个问题的好在它能反映了⾯试者对等待通知机制的了解, 以及他对此主题的理解是否明确。
就像为什么 Java 中不⽀持多继承或者为什么String 在 Java 中是 final 的问题⼀样,这个问题也可能有多个答案。
为什么在 Object 类中定义 wait 和 notify ⽅法,每个⼈都能说出⼀些理由。
从我的⾯试经验来看, wait 和 nofity 仍然是⼤多数Java 程序员最困惑的,特别是2到3年的开发⼈员,如果他们要求使⽤ wait 和 notify, 他们会很困惑。
因此,如果你去参加 Java ⾯试,请确保对 wait 和notify 机制有充分的了解,并且可以轻松地使⽤ wait 来编写代码,并通过⽣产者-消费者问题或实现阻塞队列等了解通知的机制。
为什么等待和通知需要从同步块或⽅法中调⽤, 以及 Java 中的 wait,sleep 和 yield ⽅法之间的差异,如果你还没有读过,你会觉得有趣。
为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中? 以下是我认为有意义的⼀些想法:1) wait 和 notify 不仅仅是普通⽅法或同步⼯具,更重要的是它们是 Java 中两个线程之间的通信机制。
对语⾔设计者⽽⾔, 如果不能通过Java 关键字(例如 synchronized)实现通信此机制,同时⼜要确保这个机制对每个对象可⽤, 那么 Object 类则是的正确声明位置。
后端开发工程师常见面试题

后端开发工程师常见面试题在当今科技飞速发展的时代,后端开发工程师成为了众多企业争相抢夺的热门人才。
当你准备应聘后端开发工程师这一职位时,了解常见的面试题无疑是成功的关键之一。
以下是一些后端开发工程师常见的面试题,希望能对你有所帮助。
一、数据库相关1、请简要介绍一下数据库的事务以及其特性(ACID)。
事务是一组逻辑操作单元,被视为一个不可分割的工作序列。
ACID 分别代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
原子性确保事务中的所有操作要么全部成功,要么全部失败;一致性保证事务执行前后数据库的完整性约束没有被破坏;隔离性使得多个并发事务之间相互隔离,互不干扰;持久性则保证事务一旦提交,其对数据库的更改就会永久保存。
2、解释一下数据库的索引以及它的作用和缺点。
索引是一种用于加速数据库查询的数据结构。
它的作用在于能够快速定位和检索数据,大大提高查询的效率。
然而,索引也有缺点,比如会增加数据插入、更新和删除的开销,因为这些操作不仅要修改数据,还要维护索引;此外,过多的索引会占用大量的存储空间。
3、讲述一下数据库的连接方式(内连接、外连接等)以及它们之间的区别。
内连接(INNER JOIN)返回两个表中满足连接条件的行。
左外连接(LEFT JOIN)返回左表中的所有行以及右表中与连接条件匹配的行,如果右表中没有匹配的行,则相应的列值为 NULL。
右外连接(RIGHT JOIN)与左外连接相反,返回右表中的所有行以及左表中与连接条件匹配的行。
全外连接(FULL JOIN)返回两个表中的所有行,如果某一行在另一个表中没有匹配的行,则相应的列值为 NULL。
二、编程语言相关1、以您熟悉的编程语言(如 Java、Python 等)为例,谈谈面向对象编程的三大特性(封装、继承、多态)。
封装是将数据和操作数据的方法封装在一个类中,隐藏内部实现细节,只提供公共的访问接口。
2023年最新:BAT大厂 java经典必考面试题

2023年最新《BAT Java必考面试题集》1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A 系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。
方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。
java中高级面试题整理及参考答案

java中⾼级⾯试题整理及参考答案⾯试问题:⼀、Java基础⽅⾯:1、Java⾯相对象的思想的理解(主要是多态):2、集合:ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap,HashTable,HashSet的底层源码实现原理3、Java虚拟机(1)组成以及各部分作⽤:(2)类加载器——ClassLoader:(3)类加载器的⽗亲委托机制深度详解:(4)JVM调优:(5)垃圾回收:4、异常5、String,StringBuffer,StringBuilder区别6、值传递与引⽤传递:7、Java中的equals和hashCode⽅法详解8、TCP的三次握⼿和四次挥⼿9、多线程(1)实现线程同步:(2)⽣产者消费者问题:(3)线程安全(4)线程死锁(5)Synchronize实现原理(7)happen-before规则:(8)线程池(9)DCL失效原因以及解决办法:(10)线程实现⽅式:Thread,Runable,Callable的区别10、IO11、NIO12、⽹络编程13、Java内存模型⼆、数据库(MySql)1、⾯试题:2、sql优化:3、搜索引擎三、设计模式单例模式,⼯⼚模式,建造者模式,观察者模式,适配器模式,代理模式等等四、数据结构与算法:1、链表,栈,队列,⼆叉树:2、⼋⼤排序算法:3、查找算法五、⾼并发与海量数据1、⼤型⽹站应⽤之海量数据解决⽅案2、⼤型⽹站应⽤之⾼并发情况下的解决⽅案3、在⼀个千万级的数据库查寻中,如何提⾼查询效率?六,Struts,Spring,Hibernate,Mybatis,Springmvc 七、前端:javascript,Jquery⼋、Jsp+Servlet九、linux操作命令(重点服务器⽅⾯操作)⼗、tomcat调优⼗⼀、Redis/MongoDB等NoSql⼗⼆、Nginx的配置与使⽤。
java必背面试题

.011# 面试题11.为什么要使用static?使用方式: 通过类名调用创建多个对象时,共享一个静态属性和方法,当有一个对象修改了,其他对象使用时,也会改变一个类只能有一个同名的静态属性和静态方法,这样每个对象创建时,就不会再分配额外空间了,存储在方法区(静态区)节省空间。
2. jvm 内存模型有哪些,分别介绍一下?包括: 堆虚拟机栈本地方法栈程序计数器方法区堆:存储对象数组集合存储new出来的东西方法区: 存储类的信息常量(常量池中)静态变量编译器编译后的数据程序计数器: 相当于当前程序制定的字节码行号,指向下一行代码(因为多线程并发,如何实现轮流切换的,是因为每一个线程都会独立有一个程序计数器,可以保证每个线程切换之后,可以回到原来的位置)虚拟机栈: 存放的是每一个栈帧,每一个栈帧对应的一个被调用的方法栈帧包括: 局部变量表操作数栈常量池引用返回地址 .....局部变量表 : 存储局部变量操作数栈 : 程序中所有的计算过程都是它来完成常量池引用: 在方法运行时,用于引用类中的常量返回地址: 当方法被调用时,方法执行结束,还要回到调用的位置所以要保存一个方法返回地址。
本地方法栈:类似于虚拟机栈,只不过虚拟机栈运行是 java 方法,而它是运行native修饰的方法(本地方法)本地方法是操作系统帮你实现的,java只负责调用即可。
3.创建对象的方式有哪些?1.new2. 克隆3.反射4.反序列化调用构造的: 1. new 2. 反射 newInstance() 调用底层无参构造不用构造: 1. 克隆 : 在堆内存直接将已经存在的对象拷贝一份。
2.反序列化: 表示将本地文件生成一个java对象。
克隆:实现一个接口Cloneable 重写clone()User u = new User();User u2 = u.clone();深克隆:如果对象属性中也有引用类型,这些引用类型也需要实现Cloneable接口,重写clone(), 如果不重写克隆出来的对象基本类型可以克隆,引用类型不会克隆,是指向同一个对象4.什么是自动装箱和拆箱?装箱:就是自动将基本类型转换成封装类型拆箱:就是自动将封装类型转成基本类型。
java_web开发人员面试题及答案

java 面试题一.选择题(每题1分)1. jsp 有几个内置对象?()(单选)A 5个B 6个C 9个D 8个2。
在JAVA中,如何跳出当前的多重嵌套循环?()(多选)A breakB returnC forwardD finally3. 四种会话跟踪技术,哪个范围最大?()(单选)A pageB requestC sessionD application4。
java中有几种方法可以实现一个线程?()(单选)A 1种B 2种C 3种D 4种5. 同步有几种实现方法( )(单选)A 4种B 2种C 3种D 1种6. xml有哪些解析技术? () (多选)A DOMB SAXC STAXD JDOM7。
下列说法正确的是()(多选)A 构造器Constructor可被继承B String类不可以继承C 判断两个对象值相同用“==”D char型变量中能存贮一个中文汉字8。
下面说法错误的是( )(单选)A Vector是线程安全的B float f=3.4是正确的C StringBuffer的长度是可变的D StringBuffer的长度是不可变的9。
下列关于集合的说法正确的是()(多选)A List 的具体实现包括 ArrayList 和 VectorB Map 集合类用于存储元素对(称作”键"和"值"),其中每个键映射到一个值C Set的元素是有序的D Hashtable 是线程安全的.10. 下列关于线程说法正确的是( )(多选)A 调用sleep不会释放对象锁。
B 调用wait方法导致本线程放弃对象锁C 当一个线程进入一个对象的一个synchronized方法后,其它线程不可进入此对象的其它方法D notify():唤醒全部处于等待状态的线程.11。
给定JSP程序源码如下,该JSP运行后输出的结果是().(单选)〈html>〈%int Count=1;%〉Count:〈%=++Count%〉</html>A Count:1B Count:2 C1:2 D Count:12在J2EE中的一个JSP文件中,有表达式<%=2+3%〉,它将输出()(单选)a)2+3 b)5 c)23 d)不会输出,因为表达式是错误的13 在J2EE中,JSTL提供条件标签以支持JSP页面的各种条件,其中()类似于Java语言的switch语句.(单选)a) 〈c:if> b) 〈c:choose〉c)<c:when> d) 〈c:forEach〉14。
后端服务面试题目和答案(3篇)
第1篇1. 问题:请简要描述一下什么是RESTful API?答案:RESTful API是基于REST(Representational State Transfer)架构风格的API。
它使用HTTP协议进行通信,遵循一定的设计原则,如无状态、客户端-服务器模式、资源导向等。
RESTful API通过URI(统一资源标识符)来定位资源,通过HTTP方法(如GET、POST、PUT、DELETE等)来操作资源。
2. 问题:什么是Spring框架?请列举Spring框架的主要模块。
答案:Spring框架是一个开源的Java企业级应用开发框架,它简化了企业级应用的开发过程。
Spring框架的主要模块包括:(1)Spring Core Container:核心容器,包括BeanFactory和ApplicationContext,负责管理Bean的生命周期和依赖注入。
(2)Spring AOP:面向切面编程,提供声明式事务管理和日志记录等功能。
(3)Spring Data Access/Integration:数据访问和集成模块,提供ORM(对象关系映射)和JPA(Java持久化API)等功能。
(4)Spring Web:Web模块,提供Web应用程序开发所需的组件,如Spring MVC 和Spring WebFlux。
(5)Spring Test:测试模块,提供对Spring应用程序的测试支持。
3. 问题:请解释一下Spring框架中的依赖注入(DI)?答案:依赖注入(DI)是Spring框架的核心概念之一。
它通过将对象的依赖关系从代码中分离出来,使得对象可以在运行时动态地注入依赖。
依赖注入主要有以下几种方式:(1)构造器注入:通过在对象的构造函数中注入依赖。
(2)设值注入:通过setter方法注入依赖。
(3)字段注入:通过字段直接注入依赖。
4. 问题:请描述一下Spring MVC的工作流程。
答案:Spring MVC的工作流程如下:(1)用户发送请求到前端控制器(DispatcherServlet)。
ibatis 面试题
ibatis 面试题iBatis 是一个持久化框架,用于将 Java 对象映射到关系型数据库中的数据表。
它提供了一个简单、直观的方式来管理 SQL 语句与 Java 代码之间的映射关系,使得开发者能够更加便捷地进行数据库操作。
本文将介绍一些常见的 iBatis 面试题,帮助读者更好地了解和掌握这个框架。
1. 什么是 iBatis?iBatis 是一个开源的持久化框架,旨在提供一种简单、直观的方式来执行数据库操作。
它通过将 SQL 语句与 Java 对象之间进行映射,使得开发者能够使用纯粹的 SQL 进行数据库操作,而无需关注数据库底层的细节。
2. iBatis 与 Hibernate 有什么区别?iBatis 和 Hibernate 都是 Java 平台上的持久化框架,但它们有一些不同之处。
主要区别包括:- 对象关系映射方式:iBatis 使用基于 SQL 的映射方式,而Hibernate 使用基于对象的映射方式。
- SQL 控制权:iBatis 中,开发者需要手动编写和管理 SQL 语句;而 Hibernate 则自动生成 SQL 语句,并利用对象的映射信息进行操作。
- 学习曲线:iBatis 相对来说较为简单,易于上手;而 Hibernate 更为复杂,需要更多的学习和理解。
3. iBatis 的工作原理是什么?iBatis 的工作原理可以简单概括为以下几个步骤:- 创建一个与数据库连接的 SqlSessionFactory 对象。
- 使用 SqlSessionFactory 创建一个 SqlSession 对象。
- 在 SqlSession 中执行 SQL 语句,并将结果映射到 Java 对象。
- 关闭 SqlSession。
4. 请简述 iBatis 中的 SqlMapConfig.xml 文件的作用。
SqlMapConfig.xml 是 iBatis 的配置文件,它用于配置数据库连接和其他全局配置信息。
mybatis执行过程及经典面试题
mybatis执⾏过程及经典⾯试题Mybatis执⾏流程 mybatis中xml解析是通过SqlSessionFactoryBuilder.build()⽅法。
初始化mybatis(解析xml⽂件构建成Configuration对象)并初始化SqlSessionFactory对象 在解析xml时会同时根据其中节点做相应的初始化操作 关键节点: settings、typeAliases、mappers 通过SqlSesssionFactory.openSession()⽅法打开⼀个SqlSession对象 SqlSessionFactory对象的作⽤是⾥⾯存了全局的配置信息以及初始化环境和DataSource,DataSource对象可以⽤来开辟连接,SqlSessionFactory对象是⽤来保存全局信息并且打开数据库连接 在打开SqlSession对象的时候就会开辟⼀个连接对象并传给SqlSession对象,和数据库打交道的操作⼊⼝在于SqlSession 对象 通过SqlSession.getMapper()根据传⼊的Mapper对象类型动态代理并返回⼀个动态代理后的Mapper对象 由SqlSession.select()/update(),MapperProxy对象的invoke()⽅法执⾏后再执⾏execure⽅法,再根据情况选择执⾏select/update Executor执⾏Query/queryFromDatabase,在前⾯经过参数名封装和缓存查询之后(缓存为空),会调⽤queryFromDatabase⽅法去数据库当中查 SimpleExecurot执⾏doQuery()⽅法,初始化prepareStatement并且给#{}参数赋值 StatementHandler执⾏query()⽅法,执⾏sql语句 ResuletHandler.handleResultSets()⽅法封装结果集 具体执⾏流程如下图:mybatis⾯试题 1. spring和mybatis整合之后为什么⼀级缓存会失效? ⼀级缓存使⽤者可以随时使⽤或者销毁缓存,从SqlSession对象打开时缓存就已经存在。
MyBatis经典面试题及答案
MyBatis经典⾯试题及答案1、什么是MyBatis?答:MyBatis是⼀个可以⾃定义SQL、存储过程和⾼级映射的持久层框架。
2、讲下MyBatis的缓存答:MyBatis的缓存分为⼀级缓存和⼆级缓存,⼀级缓存放在session⾥⾯,默认就有,⼆级缓存放在它的命名空间⾥,默认是不打开的,使⽤⼆级缓存属性类需要实现Serializable序列化接⼝(可⽤来保存对象的状态),可在它的映射⽂件中配置<cache/>1、⼀级缓存的⽣命周期有多长?a、MyBatis在开启⼀个数据库会话时,会创建⼀个新的SqlSession对象,SqlSession对象中会有⼀个新的Executor对象。
Executor对象中持有⼀个新的PerpetualCache对象;当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也⼀并释放掉。
b、如果SqlSession调⽤了close()⽅法,会释放掉⼀级缓存PerpetualCache对象,⼀级缓存将不可⽤。
c、如果SqlSession调⽤了clearCache(),会清空PerpetualCache对象中的数据,但是该对象仍可使⽤。
d、SqlSession中执⾏了任何⼀个update操作(update()、delete()、insert()) ,都会清空PerpetualCache对象的数据,但是该对象可以继续使⽤2、怎么判断某两次查询是完全相同的查询?mybatis认为,对于两次查询,如果以下条件都完全⼀样,那么就认为它们是完全相同的两次查询。
2.1 传⼊的statementId2.2 查询时要求的结果集中的结果范围2.3. 这次查询所产⽣的最终要传递给JDBC java.sql.Preparedstatement的Sql语句字符串(boundSql.getSql() )2.4 传递给java.sql.Statement要设置的参数值如果我们配置了⼆级缓存就意味着:映射语句⽂件中的所有select语句将会被缓存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
* 比较Hibernate的三种检索策略优缺点 1立即检索; 优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象; 缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间; 2延迟检索: 优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间; 缺点:应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化; 3 迫切左外连接检索 优点:1对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。2使用了外连接,select语句数目少; 缺点:1 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;2复杂的数据库表连接也会影响检索性能;
* 如何查看hibernate生成并执行的sql 在定义数据库和数据库属性的文件applicationConfig.xml里面,把hibernate.show_sql 设置为true 这样生成的SQL就会在控制台出现了 注意:这样做会加重系统的负担,不利于性能调优
* hibernate都支持哪些缓存策略 Read-only: 这种策略适用于那些频繁读取却不会更新的数据,这是目前为止最简单和最有效的缓存策略 * Read/write:这种策略适用于需要被更新的数据,比read-only更耗费资源,在非JTA环境下,每个事务需要在session.close和session.disconnect()被调用 * Nonstrict read/write: 这种策略不保障两个同时进行的事务会修改同一块数据,这种策略适用于那些经常读取但是极少更新的数据 * Transactional: 这种策略是完全事务化得缓存策略,可以用在JTA环境下
* hibernate里面的sorted collection 和ordered collection有什么区别 sorted collection是在内存中通过java比较器进行排序的 ordered collection是在数据库中通过order by进行排序的
* spring hibernate struts 的笔试面试题(含答案) Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory
为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
4. 说下Hibernate的缓存机制 1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现
5. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数
6. 如何优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 7. Struts工作机制?为什么要使用Struts? 工作机制: Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 当ActionServlet接收到一个客户请求时,将执行如下流程. -(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
为什么要用: JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 8. Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。
9. 说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数 据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象, ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动 态的网页,返回给客户。
10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。
为什么用: {AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}
* hibernate 面试题小集 1. Hibernate有哪几种查询数据的方式 3种:hql、QBC——Query By Criteria API、原生sql (通过createSQLQuery建立) 2. 谈谈Hibernate中inverse的作用 inverse属性默认是false,就是说关系的两端都来维护关系。 比如Student和Teacher是多对多关系,用一个中间表TeacherStudent维护。Gp)i 如果Student这边inverse=”true”, 那么关系由另一端Teacher维护,就是说当插入Student时,不会操作TeacherStudent表(中间表)。只有Teacher插入或删除时才会触发对中间表的操作。所以两边都inverse=”true”是不对的,会导致任何操作都不触发对中间表的影响;当两边都inverse=”false” 或默认时,会导致在中间表中插入两次关系。