面试题Struts_Hibernate_Spring_Css

来源:互联网 发布:navicat 执行sql语句 编辑:程序博客网 时间:2024/06/05 11:34

1:) JAVA是怎么实现跨平台功能的?答:java程序(.java文件)通过编译器生成JAVA类文件(.class文件),.class字节码文件再通过JVM(JAVA虚拟机)解释成可执行的机器操作指令。只要在不同平台的不同操作系统上实现JVM规范就可以,操作系统上用不同的java虚拟机运行,就可以执行JAVA字节码文件,也就是.class文件,JAVA的移植性就是这样实现的.java是跨平台的不同的操作系统有不同的虚拟机所以虚拟机不是跨平台的。 2 :)struts的几种登录验证方法?答:struts的常用登录验证方法有filter过滤验证和 tag标签验证. 3:)Struts中有哪几种验证方法吗?Struts支持JavaScript吗?如果支持,则JavaScript应写在哪? 答:struts2中对指定方法进行validation验证. Struts2中的Action类一般都继承ActionSupport类,类中都有execute()方法, 这时默认的调用业务逻辑的方法,验证方法有validate()方法。一个Action类中通常有很多属性,也有很多方法,我只要验证我要执行的方法中用到的属性值就行了。所以validate()又分为两种情况,一种是对整个Action中的属性进行验证,一种是对某个方法中用到的属性进行验证。第二种是写xml配置文件-进行验证。 4:) Struts中的Formbean有何用途? 答:保存表单数据,以及对表单数据进行验证. Formbean的属性名应和表单字段名保持一致. 当然,用validator框架也能对表单输入项进行验证 5:) Struts中的Action有几种?每种Action有什么用? 答:常用的Action:6种 1.DispatchAction: 能同时完成多个Action 功能的Action 。 2. ForwardActon: 该类用来整合Struts 和其他业务逻辑组件,通常只对请求作有效性检查。 3.IncludeAction: 用于引入其他的资源和页面。 4. LookupDispatchAction: DispatchAction 的子类,根据按钮的key ,控制转发给action的方法。 5. MappingDispatchAction: DispatchAction 的子类,一个action 可映射出多个Action地址。 6.SwitchAction:用于从一个模块转换至另一个模块,如果应用分成多个模块时,就可以使用SwitchAction 完成模块之间的切换。 6:)Struts中支持哪几种插件,每种插件有何用途? 答:1:JSON插件允许我们在JavaScript中异步调用Action,而且Action不再需要使用视图资源来显示 Action里的状态信息,而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式就可以完成Ajax交互。2:REST的架构设计REST(Representational State Transfer)是一种轻量级的Web Service架构风格. 7: )Struts1与Struts2的特点与比较? 答:Struts1的特点: 以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。有3个重要组成部分:Action、ActionForm和ActionForward对象. ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO. ActionForward就是一个逻辑视图,通过在配置文件中定义ActionFoward的映射,完成逻辑视图名和实际视图资源之间的映射. 但最大的区别在于Struts1 Action的execute方法与Servlet API耦合(ActionServlet继承自HttpServlet),但Struts2 Action类的execute方法无需与Servlet API耦合。struts1的缺陷:: (1).只支持JSP作为表现层技术,不能与Velocity,FreeMarker等技术整合, (2).与Servlet API严重耦合,难于测试. (3).侵入式设计,严重依赖于Struts1API. Struts2的特点: struts2核心控制器:FilterDispatcher. 框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式. Struts2 Action有以下特点: Action类完全是一个POJO,因此具有很好的代码复用性。Action类无需与Servlet API耦合,因此进行单元测试非常简单。Action类的execute方法仅返回一个字符串作为处理结果,该处理结果可映射到任何的视图,甚至是另一个Action。Struts 2的配置文件有两份:1配置Action的struts.xml文件。2配置Struts2全局属性的struts.properties文件。两者不同:第一:Struts1的一个具体问题是使用抽象类编程而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。第二:线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。Action资源必须是线程安全的或同步的,Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题. 第三: Servlet依赖方面的对比:Struts1 Action依赖于Servlet API,Struts2 Action不再依赖于Servlet API,第四:Action执行控制的对比:Struts1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。 8:)Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗?答:SessionFactory线程安全指的是即使多个线程同时调用其中的方法,它都能保证不会出现数据丢失,session是轻量级的,线程不安全。当同时有多个线程使用时,可能会造成其中一部分的操作丢失,这就是线程不安全。 Session的使用原则就是一个线程一个session,session一次一个事务,因为session在多线程下不安全,所以才尽量保证一个session只被一个线程使用. 通过Threadlocal类可以把session绑定在当前线程上,也可以直接通过hbm配置文件设定current_session_context_class-thread, 然后通过SessionFactory.getCurrentSession()获得就可以了。 9:)Session是非线程安全的,那么在项目中会发生什么问题,以及应该怎么解决?答案在第8题中: 10:)Hibernate中一级缓存用来干什么的?二级缓存用来干什么的?答:Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。一级缓存只存实体对象的。主要用来存储公用的数据,经常使用的数据。二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享,二级缓存的生命周 。Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。二级缓存需要另外导入所需要的支持sessionFactory级别的JAR包。为此Hibernate提供了针对条件查询的Query缓存,用于在缓存中存储已经查询过的所有session中的对象。 11:)Hibernate中batch和fetch用来干什么的?答:batch做批处理,可以一次查询出一个对象的指定条记录. fetch 和 lazy 主要是用来级联查询的. 12:)Hibernate中实体关联有哪几种?答:一对一单向,一对一双向,多对多单向,多对多双向,一对多单向,一对多双向,多以一单向多对一双向和一对多双向是一样的。 13:)Hibernate框架在项目中起什么样的作用?每个项目都适合使用Hibernate吗?如果不是,则为什么?答:Hibernate为持久化层,注意完成O/R Mapping.映射,以面向对象的方式操作数据的存取,hibernate对JDBC提供了一个很好的封装,从而减轻了jbdc的编程!但是因为Hibernate的效率比JDBC低,所以对于要求效率优化的项目就不一定适合了。 可以考虑用ibatis框架,效率要比hibernate高! ibatis一词来源于“internet”和“abatis”的组合. 14:)您对Spring的认识有哪些?答:spring 也是架构,用来处理business逻辑层,处理企业逻辑。利用依赖注入(DI) :把对象之间的相互关系交给容器去处理,容器在初始化的时候读取配置文件动态的生成。面向切面(AOP):把一部分共有的业务拿出来,封装成切面,利用AOP(advice、pointcut、Advisor)的思想加入到核心业务中,从而让团队能把主要能力放在核心业务上。对JDBC、Hibernate、struts等其他内容的整合,最常用的就是SSH框架了。 15:)Spring的AOP概念,以及Spring中事务代理机制是AOP概念的具体体现吗?答:AOP将应用系统分为两部分,核心业务逻辑及横向的通用逻辑,也就是所谓的方面,例如:涉及到的持久化管理,事务管理,安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。2:利用了spring的AOP,将业务逻辑与方面逻辑分开,执行的时候又连续。AOP运用了java中的动态代理和反射机制。 16:)你对设计模式熟悉么?在项目中使用过哪些设计模式吗?在项目中为什么使用设计模式,有什么好处?答:1.策略模式!:策略模式的好处在于你可以动态的改变对象的行为。(1)环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。(2)抽象策略对象:它可由接口或抽象类来实现。(3)具体策略对象:它封装了实现同不功能的不同算法。利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。 2.工厂模式!:工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,但会给你系统带来更大的可扩展性和尽量少的修改量。3.单例模式:单例模式一次只有同一个对象产生,使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。4.java迭代子模式!:简化了聚集的界面,每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。由于遍历算法被封装在迭代子角色里面,因此迭代的算法可以独立于聚集角色变化.5.proxy代理模式:为其他对象提供一种代理以控制对这个对象的访问。 17:)假设数据库中有一张表,表中有100万条数据,然后有很多用户并发访问这些数据,您应该怎么解决?答:1.多准备几个DB服务器做负载均衡。2.并发访问的主要问题就是锁的力度,可以用行级锁.3. 还可以为它弄分布式数据库,当然100万条数据属于小数据量,4. 解决的办法有.提高数据库缓冲区命中率、添加适当索引、如有必要应用层加缓存!5. 如果有大并发量写的操作,则考虑写操作的sql语句合并。 19:)您参与过项目的设计么?如果有,则主要设计了哪些方面?答:界面原型设计、数据库设计(hibernate中实体设计)、分层设计、模块设计…… 20:)XML文档定义有几种形式?Java解析XML的方法有几种?每种方法的特征?答: 两种 dtd ,schema,本质区别schema 本身是xml 的。可以xml被解析器解析. 分别是:SAX和DOM。DOM是基于XML文档树结构的解析。DOM处理大型文件时性能下降的非常厉害。这个问题是有DOM的树结构造成的!!这种结构占用的内存较大。DOM在解析文档前必须把整个文档装入内存,适合对xml 随即访问。 SAX是基于事件流的解析,它顺序读取xml文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问。 21:)XML在项目中有何用途?答:XML是被设计为存储、传输以及交换数据的。XML不是被设计为用来显示数据的。 22.Oracle是如何解析XML文件的?答:对于解析XML,Oracle PLSQL本身即封装了DOM API. 相对PL/SQL来说,无论是通用性/可用性都是非常优秀。 23:)你使用过的样式表有哪几种?每种样式表的优势在哪?答:CSS是Cascading Style Sheet 的缩写。译作「层叠样式表单」。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。优点:1,简化了网页的格式代码,外部的样式表还会被浏览器保存在缓存里,加快了下载显示的速度,也减少了需要上传的代码数量。2,只要修改保存着网站格式的CSS样式表文件就可以改变整个站点的风格特色,在修改页面数量庞大的站点时,显得格外有用。避免了一个一个网页的修改,大大减少了重复劳动的工作量

2010-07-20

原创粉丝点击