上海华腾软件系统有限公司
公司行业:计算机软件 互联网/电子商务
公司规模:1000+人
公司地址:西安市雁塔区天谷八路与云水一路中软国际新基地 笔试题: 面试总结: 1: 事务四大属性: 数据库事务的属性包括四大类,即ACID。ACID分别是四个英文单词的首写字母,这四个英文单词是Atomicity(原子性)、 Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。
1、原子性 Atomicity
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
2、一致性 Consistency
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
3、隔离性 Isolation
隔离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
4、持久性 Durability
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何数据库系统故障。持久性通过数据库备份和恢复来保证。
严格来说数据库事务属性(ACID)都是由数据库管理系统来进行保证的,在整个应用程序运行过程中应用无需去考虑数据库的ACID实现。
2: 数据库三范式是什么? 第一范式(1NF): 字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作 为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。 第三范式(3NF): 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 所以第三范式具有如下特征: 1,每一列只有一个值 2,每一行都能区分。 3,每一个表都不包含其他表已经包含的非主关键字信息。 例如,帖子表中只能出现发帖人的id,而不能出现发帖人的id,还同时出现发帖人姓名,否则,只要出现同一发帖人id 的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。 3: 函数和过程的区别? 存储过程: 1) 一般用于在数据库中完成特定的业务 任务的 2) 可以定义返回类型,也可以不定义返回类型 3) SQL 语句中不可以调用 存储函数: 1) 一般用于特定的数据查询或数据转换处理 2) 申请时必须要定义返回类型,且程序体中必须定义return 语句。 3) 不能独立执行,必须作为表达式的一部分调用 4) SQL 语句中可以调用。 4: Oracle 中有哪几种索引? 1.单列索引与复合索引 一个索引可以由一个或多个列组成,用来创建索引的列被称为“索引列”。单列索引是基于单列所创建的索引,复合索引是基于两列或者多列所创建的索引。 2.唯一索引与非唯一索引 唯一索引是索引列值不能重复的索引,非唯一索引是索引列可以重复的索引。无论是唯一索引还是非唯一索引,索引列都允许取NULL 值。默认情况下,Oracle 创建的 索引是不唯一索引。 3.B 树索引 B 树索引是按B 树算法组织并存放索引数据的,所以B 树索引主要依赖其组织并存放索引数据的算法来实现快速检索功能。 4.位图索引 位图索引在多列查询时,可以对两个列上的位图进行AND 和OR 操作,达到更好的查询效果。 5.函数索引 Oracle 中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创建索引,这种索引称为“位图索引 5: 数据库索引的优点和缺点 ? 优点: 1、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 3、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 4、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 5、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 3、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速。 6:forward 和redirect 的区别? forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 7: jsp 有哪些内置对象?作用分别是什么? JSP 共有以下9 种基本内置组件(可与ASP 的6 种内部组件相对应): request:用户端请求,此请求会包含来自GET/POST 请求的参数; response:网页传回用户端的回应; pageContext:网页的属性是在这里管理; session:与请求有关的会话期; application:servlet 正在执行的内容; out:用来传送回应的输出; config:servlet 的构架部件; page:JSP 网页本身; exception:针对错误网页,未捕捉的例外。 8: 代理模式与装饰者模式的区别:? (1)相同点: ①都要与基础对象实现相同的接口; ②都要在自身对象中引入被代理对象或被装饰对象的引用。 (2)不同点: ①装饰者模式定义:动态的将责任附加到被装饰者对象上,用于扩展对象的功能。比继承的 灵活性大,典型的如IO的设计,就是典型的装饰者模式; ②代理模式的定义:对其他对象进行代理,以控制对被代理对象的访问。Spring的为业务层方法生成的 代理类,主要是进行一些事物控制等; ③由定义,我们可以看出:装饰的责任是扩展功能;而代理主要是控制访问。 9: HashMap和Hashtable有什么区别? 1. HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点: 2. HashMap允许键和值是null,而Hashtable不允许键或者值是null。 3. Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。 4. HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。 10: Comparable和Comparator接口是干什么的?列出它们的区别 ? Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。 Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。 11: mybatis与Hibernate区别? 二者都是orm映射框架,mybatis映射体现在sql上,Hibernate体现在实体类设计上。 mybatis学习难度小,Hibernate难度大,但是一旦掌握Hibernate开发周期短,基本不用写sql。 适合场景:Hibernate适合数据量小的项目,如果百万级别的表,用Hibernate查询缓存在session里,占用内存较大,可能导致服务器内存溢出。mybatis适合数据量大的项目。 Hibernate普通查询效率也要低于mybatis,涉及到实体类和hql到sql的转换问题。 如果项目功能都是增删改查常用模式,适合Hibernate,开发容易,但是如果表关系关联复杂,经常关联查询,适合mybatis。 12: spring是什么?谈谈你对Spring的理解. spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程) 1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于创建实例对象的类名和实例对象的属性。 2.Spring提供了对IOC(控制反转)良好支持,IOC是一种编程思想,是一种 架构艺术,利用这种思想可以很好地实现模块之间的解耦。 3. Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能
|