ssh面试题总结

题目1:Hibernate工作原理及为什么要用?

原理:

hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发

 

1.读取并解析配置文件

2.读取并解析映射信息,创建SessionFactory

3.打开Sesssion

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭Session

8.关闭SesstionFactory

 

为什么要用:

1.    对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

 

2.    Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

 

3.    hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

 

题目2: 什么是Hibernate延迟加载?

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。

 

题目3:Hibernate中类之间的关联关系有几种?(如:一对多、多对多的关系)

  many-to-one、one-to-many、many-to-many、 one-to-one

 

题目4: 说下Hibernate的缓存机制

一、hibernate一级缓存

(1)hibernate支持两个级别的缓存,默认只支持一级缓存;

(2)每个Session内部自带一个一级缓存;

(3)某个Session被关闭时,其对应的一级缓存自动清除;

二、hibernate二级缓存

(1) 二级缓存独立于session,默认不开启;

题目5: Hibernate的查询方式

本地SQL查询、Criteria、Hql

 

题目6: 如何优化Hibernate?

1.使用双向一对多关联,不使用单向一对多

2.不用一对一,用多对一取代

3.配置对象缓存,不使用集合缓存

 

题目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组件生成动态网页,返回给客户;

 

为什么要用:

1. JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱。

2. 基于Struts开发的应用:

不用再考虑公共问题

专心在业务实现上

结构统一,易于学习、维护

新手也可写出好程序

 

 

题目10:为什么要用spring?

Spring是一个轻量级的IOC和AOP框架。

  IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转

  AOP(面向切面),它将那些影响多个类的行为封装到可重用的模块中,面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来。

 

1. hibernateget()与load()区别

 请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。 如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的行,会返回null。

 

17.  [Hibernate题目]判断题:使用save/persist一个对象时,便立即向数据库发送执行insert sql语句?

1) persist把一个瞬态的实例持久化,但是并"不保证"标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间。

2) persist"保证"当它在一个transaction外部被调用的时候并不触发一个Sql Insert,这个功能是很有用的。

3) save会立即执行Sql insert,不管是不是在transaction内部还是外部.

 

18.[Hibernate题目]:指出一下代码哪里错误使用了Hibernate。 
背景简介:Board是一个实体类,id是它的主键,namedescription是他的两个属性。BoardDaoBoard实体的数据访问对象,BoardBo是业务对象,用户提交变更Board对象的请求,由StrutsBoardAction接收,调用BoardBo处理。HibernateUtil.currentSession()用于返回当前请求的Session对象。

1. //数据访问层代码:BoardDao.java   

2.     public Board loadBoard(Long id) {   

3.         Session session = HibernateUtil.currentSession();    

4.         return session.load(Board.class, id);   

5.     }   

6.     public void updateBoard(Board board) {   

7.         Session session = HibernateUtil.currentSession();    

8.         session.update(board);   

9.     }   

10.   

11.     //业务对象层代码:BoardBo.java    

12.     private BoardDao boardDao;   

13.     public void updateBoard(Long id, String name, String description) {   

14.         Board board = boardDao.loadBoard(id);   

15.         board.setName(name);   

16.         board.setDescription(description);   

17.         boardDao.updateBoard(board);   

18.     }   

19.   

20.     //Web控制器代码:BoardAction.java   

21.     private BoardBo BoardBo;   

22.     public ActionForward execute(   

23. ActionMapping mapping,    

24. ActionForm form,   

25. HttpServletRequest request,    

26. HttpServletResponse response) throws Exception {   

27.         String id = request.getParameter("id");   

28.         String name = request.getParameter("name");   

29.         String description = request.getParameter("description");   

30.         boardBo.updateBoard(id, name, description);   

31.         return mapping.findForward("update-success");   

32.     }  

6.    public void updateBoard(Board board) {   

7.        Session session = HibernateUtil.currentSession();    

Transaction t=session.beginTransaction();

8.        session.update(board);   

t.commit();

9.    }   

 

简单叙述一下SpringBeanFactoryApplicationContext的差别

使用BeanFactory从xml配置文件加载bean:

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;

public class XmlConfigWithBeanFactory {

    public static void main(String[] args) {
        XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
                "build/beans.xml"));

    }
}

    使用ApplicationConText从xml配置文件加载bean:

public class XmlConfigWithApplication{

    public static void main(String[] args){
        ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));
         application.getBean("BeanName");
    }
}

简而言之,BeanFactory提供了配置框架和基本的功能, 而 ApplicationContext为它增加了更强的功能,这些功能中的一些或许更加接近J2EE并且围绕企业级应用。一般来说,ApplicationContext是 BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext

  相对于BeanFactory而言,ApplicationContext 提供了以下扩展功能.

  (a) 国际化支持  (b) 资源访问

  (c) 事件传播  (d) 多实例加载

2. 写一段程序,使用springAPI读取classpath下的一个xml文件,并解析

(1)Resource resource=new ClassPathResource("appcontext.xml");

   BeanFactory factory=new XmlBeanFactory(resource);

 

   (2)ClassPathXmlApplicationContext appcontext=new ClassPathXmlApplicationContext("appcontext.xml");

  BeanFactory factory=(BeanFactory)appcontext;

 

4. 说说在hibernate中使用Integer做映射和使用int做映射之间有什么差别 

Integer   codeint   code;的区别:
Integer是对象.     code   =   null;   对象可以为空.  
int   是普通类型,     不可能   =   null.      
根据你的数据库code是可以空的,   故应该映射成Integer.    
你没理由hbm.xml里写Integer,   类里却写int

 

(1)使用Spring如何简化了Hibernate编码?

通过org.springframework.orm.hibernate3.support.HibernateDaoSupport类支持数据库操作,且封装了事务.

public class AccountDAO extends HibernateDaoSupport   implements IAccountDAO{

 

(2)Spring如何与Struts集成?

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

 

<struts-config>

  <data-sources />

  <form-beans >

    <form-bean name="regForm" type="demo.form.RegForm" />

 

  </form-beans>

 

  <global-exceptions />

  <global-forwards />

  <action-mappings >

    <action

      attribute="regForm"

      name="regForm"

      path="/reg"

      scope="request"

      type="org.springframework.web.struts.DelegatingActionProxy">

      <forward name="ok" path="/ok.jsp" />

    </action>

  </action-mappings>

 

  <message-resources parameter="demo.ApplicationResources" />

  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

      <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />

  </plug-in>    

</struts-config>

 

(3)如何使用Spring2.0实现声明式事务?

<!--通用事务管理器-->

<bean id="TransactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

 

<!--声明一个通知,用以指出要管理哪些事务方法及如何管理-->

<tx:advice id="txAdvice" transaction-manager="TransactionManager">

<tx:attributes>

<!-- get/load/search开头的方法要求只读事务 -->

<tx:method name="get*" propagation="SUPPORTS"

read-only="true" />

<tx:method name="load*" propagation="SUPPORTS"

read-only="true" />

<tx:method name="search*" propagation="SUPPORTS"

read-only="true" />

<!-- 对其它方法要求事务 -->

<tx:method name="*" propagation="REQUIRED" />

</tx:attributes>

</tx:advice>

 

<!--声明一个config,用以将通知和目标业务类关联起来-->

<aop:config>

<!-- 添加事务支持,因为前面配置的transactionManager是专对Hibernate的事务管理器-->

<aop:pointcut id="bizMethods" expression="execution(* demo.*.*(..))" />

<!-- 织入 -->

<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />

</aop:config>

 

(4)依赖注入的好处是?

程序可扩展性更强;

利于并行开发;

 

(5)Spring怎么实现依赖注入?

<?xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

 

    <bean id="userdao" class="demo.dao.UserDAO"/>

    

    <bean id="usermanager" class="demo.biz.UserManager">

    <property name="userdao" ref="userdao"/>

    </bean>

</beans>

 

(6)“面向方面编程”的好处是?

将程序中涉及的公共问题集中解决

 

(7)SQL相比,HQL有哪些特点?

HQL是面向对象的查询语言。select Fw表示查询Fw对象

 

(8)如何配置单向多对一关联?

<class name="Jd" table="TBL_JD">

        <id name="jdid" column="jdid" type="long">

            <generator class="identity" />

        </id>

        <property name="jdname" column="jd" type="string" />

        <many-to-one name="qx" class="Qx" column="qxid" />

</class>

 

(9)如何配置单向一对多关联?

<class name="Qx" table="TBL_QX">

        <id name="qxid" column="qxid" type="long">

            <generator class="native" />

        </id>

        <property name="qxname" column="qx" type="string" />

        <set name="jds" >

<key column="qxid" />

<one-to-many class="Jd" />

        </set>        

</class>

 

 

(10)如何配置双向一对多关联?

<class name="Jd" table="TBL_JD">

        <id name="jdid" column="jdid" type="long">

            <generator class="identity" />

        </id>

        <property name="jdname" column="jd" type="string" />

        <many-to-one name="qx" class="Qx" column="qxid" />

</class>

<class name="Qx" table="TBL_QX">

        <id name="qxid" column="qxid" type="long">

            <generator class="native" />

        </id>

        <property name="qxname" column="qx" type="string" />

        <set name="jds" >

<key column="qxid" />

<one-to-many class="Jd" />

        </set>        

</class>

转载于:https://www.cnblogs.com/hunrry/p/9414997.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xbox可以录视频声音吗_什么是Xbox Live Gold,它值得吗?

xbox可以录视频声音吗If you have an Xbox One or Xbox 360, Microsoft’s Xbox Live Gold service is required to play multiplayer games online. A subscription costs $10 per month or $60 per year. Xbox Live Gold also includes additional benefits, like free games…

显示器选三星还是飞利浦_如何为飞利浦色相灯设置计时器

显示器选三星还是飞利浦Maybe you want to turn off your Philips Hue lights after a certain amount of time has passed, or have them blink as a reminder. Whatever your needs, here’s how to set a timer for your Philips Hue lights to have them automatically tur…

PIE SDK与OpenCV结合说明文档

1.功能简介 OpenCV是基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的接口&…

js的栈堆与浅拷贝、深拷贝的理解

一&#xff1a;什么是堆栈&#xff1f; 我们都知道&#xff1a;在计算机领域中&#xff0c;堆栈是两种数据结构&#xff0c;它们只能在一端(称为栈顶(top))对数据项进行插入和删除。 堆&#xff1a;队列优先,先进先出&#xff1b;由操作系统自动分配释放 &#xff0c;存放函数的…

ea 备份码是什么_EA的原始访问是什么,值得吗?

ea 备份码是什么EA’s Origin Access gives you access to more than 70 games, discounts, and new EA games before they’re released for a monthly (or yearly) subscription fee. But is it really worth it? EA的Origin Access可让您访问70多种游戏&#xff0c;打折游戏…

JS框架_(JQuery.js)纯css3进度条动画

百度云盘  传送门  密码&#xff1a;wirc 进度条动画效果&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1">…

如何在Android主屏幕上添加热点快捷方式

Portable Wi-Fi hotspots on your Android phone are great, because hotel Wi-Fi usually isn’t, but toggling that hotspot on and off is a pain. Here are several easy ways to add a hotspot widget to your home screen. 您的Android手机上的便携式Wi-Fi热点很棒&…

SQLI DUMB SERIES-16

&#xff08;1&#xff09;无论怎么输入&#xff0c;都没有回显&#xff0c;但当输入 admin")#时&#xff0c;显示登录成功。若通过其他方法获取数据库的用户名&#xff0c;可通过这个方法登录成功。 &#xff08;2&#xff09;获取其他信息可用考虑时间延迟注入。方法同1…

如何在YouTube视频上禁用注释

YouTube has that betcha-can’t-watch-just-one appeal to it, which is why YouTube’s annoyances become so pronounced the more you use it. Many of these features, such as annotations can be permanently disabled, making for a more enjoyable viewing experience…

快速实现一个Http回调组件

2019独角兽企业重金招聘Python工程师标准>>> 快速实现一个Http回调组件 一、前情回顾 ​ 我们平时在使用一些库的时候&#xff0c;会遇到一些看起来很舒服的写法&#xff0c;用起来感觉很简单&#xff0c;而且写法也很优雅&#xff0c;比如OkHttp&#xff0c;或者是…

MyBatis缓存通俗易懂

1.1 mybatis缓存介绍 如下图&#xff0c;是mybatis一级缓存和二级缓存的区别图解&#xff1a; Mybatis一级缓存的作用域是同一个SqlSession&#xff0c;在同一个sqlSession中两次执行相同的sql语句&#xff0c;第一次执行完毕会将数据库中查询的数据写到缓存&#xff08;内…

Python基础教程:Python pass语句详解

2019独角兽企业重金招聘Python工程师标准>>> Python pass 语句 Python pass是空语句&#xff0c;是为了保持程序结构的完整性。 pass 不做任何事情&#xff0c;一般用做占位语句。 Python 语言 pass 语句语法格式如下&#xff1a; 实例&#xff1a; 学习从来不是一个…

网络串流_串流NFL足球的最便宜方式(无需电缆)

网络串流Football season is almost upon us. That means one thing: expensive cable or satellite TV packages. Okay, it also means beer commercials and overpriced stadium tickets and quarterbacks trying to sell you car insurance. But in terms of immediate cost…

【高清】网络安全思维导图

本文转自 是阿杰啊 51CTO博客&#xff0c;原文链接:http://blog.51cto.com/jschinamobile/1969018

Pixel相机是怎么做到自动补抓最不错的自拍照

网络大厂 AI研究团队近日在最新的Pixel相机中&#xff0c;于无快门模式Photobooth新增亲吻侦测功能&#xff0c;当用户亲吻自己的爱人时&#xff0c;相机会自动捕捉这一瞬间。网络大厂过去是藉由Photobooth模式&#xff0c;让用户更简单地成功自拍&#xff0c;不管是一个人、情…

os x 启动引导_什么是OS X的启动板以及它如何工作?

os x 启动引导If you’re new to OS X, or even if you’re not and you’re simply used to pinning everything to the Dock, you might have wondered what Launchpad is, what it does, and how to use it. 如果您不熟悉OS X&#xff0c;或者即使您不熟悉OS X&#xff0c;而…

freeradius的proxy功能

要配置freeRADIUS的proxy功能&#xff0c;就需要熟悉它的两个配置文件&#xff1a;proxy.conf 和client.conf。 1. proxy.conf主要是用来配置被代理的radius server&#xff08;也叫home server&#xff09; 和 realm&#xff0c; 以及他们之间的映射关系&#xff0c;也就是req…

小程序 iphone和安卓_如何阻止iPhone和iPad应用程序要求评级

小程序 iphone和安卓Lots of iPhone and iPad apps ask for ratings, and they often don’t stop. Even if you do leave a review just to stop seeing the review requests, new apps you install will pester you for reviews, too. iOS 11 fixes this problem, limiting h…

一篇年薪60万的JVM性能调优文章

2019独角兽企业重金招聘Python工程师标准>>> JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗&#xff0c;垃圾收集器能支撑应用达到的最高性能指标。延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿…

手机主题随手机壳改变_无线充电可以与手机壳一起使用吗?

手机主题随手机壳改变With wireless charging making its way into the new iPhones, there are undoubtedly a lot of questions floating around about how this technology works in practical application. The biggest question I’ve heard so far is: will it work with…