2

项目介绍 

1. 请介绍一下你简历上最熟的项目。 

回答要点:(1) 所要介绍的项目一定要是你最近完成的项目,在简历上的位置是第 

一个 

                 (2) 要明确的说出项目名称,且项目名称要与简历上所写的要一致                  (3) 要明确的表述出项目的开发背景和功能模块组成。 

                 (4) 重点介绍自己所负责的那块内容,如果有业务流程请介绍出业务流

程。并且要介绍你所负责模块的具体功能。 

                 (5) 项目上的一些细节一定要了解清楚,包括项目开发周期、人数以及

开发工具的版本号等等。 

二:关于项目中所遇到的技术问题  

1. 数据库方面。 

1.1 你们这个项目有多少张表? 

1.2 你所负责的模块有多少张表?里面都有哪些字段?个字段间的关系 1.3 说下你的报销单最后会存放在数据库的哪张表中? 

1.4 注意到你的数据库用的是SQL为什么不用Oracle?两者有什么区别?

mysql事务默认隔离级别 不可重复读  小型项目。 主键自增

oracle  事务隔离级别 读已提交  2.可以执行存储过程, 游标, 分页不同。 大型项目 构建序列

1.自动增长的数据类型处理

MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

3.单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。

3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

 1.5 你的项目中用没用数据库连接池?请简单介绍一下数据库连接池。

1、并发问题

  为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为各个语言自身提供了对并发管理的支持像java,c#等等,使用synchronized(java)lock(C#)关键字即可确保线程是同步的。使用方法可以参考,相关文献。

2、事务处理

  我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。
  我们知道当2个线程共用一个连接Connection对象,而且各自都有自己的事务要处理时候,对于连接池是一个很头疼的问题,因为即使Connection类提供了相应的事务支持,可是我们仍然不能确定那个数据库操作是对应那个事务的,这是由于我们有2个线程都在进行事务操作而引起的。为此我们可以使用每一个事务独占一个连接来实现,虽然这种方法有点浪费连接池资源但是可以大大降低事务管理的复杂性。

3、连接池的分配与释放

  连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
  对于连接的管理可使用一个List。即把已经创建的连接都放入List中去统一管理。每当用户请求一个连接时,系统检查这个List中有没有可以分配的连接。如果有就把那个最合适的连接分配给他(如何能找到最合适的连接文章将在关键议题中指出);如果没有就抛出一个异常给用户,List中连接是否可以被分配由一个线程来专门管理捎后我会介绍这个线程的具体实现。

4、连接池的配置与维护

  连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConnection)和最大连接数(maxConnection)等参数来控制连接池中的连接。比方说,最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过软件需求上得到。
  如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。

引用计数

再分配、释放策略对于有效复用连接非常重要,我们采用的方法也是采用了一个很有名的设计模式:Reference Counting(引用记数)。该模式在复用资源方面用的非常广泛,我们把该方法运用到对于连接的分配释放上。每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。具体的实现上,我们对Connection类进行进一步包装来实现引用记数。被包装的Connection类我们提供2个方法来实现引用记数的操作,一个是Repeat(被分配出去)Remove(被释放回来);然后利用RepeatNow属性来确定当前被引用多少,具体是哪个用户引用了该连接将在连接池中登记;最后提供IsRepeat属性来确定该连接是否可以使用引用记数技术。一旦一个连接被分配出去,那么就会对该连接的申请者进行登记,并且增加引用记数,当被释放回来时候就删除他已经登记的信息,同时减少一次引用记数。

这样做有一个很大的好处,使得我们可以高效的使用连接,因为一旦所有连接都被分配出去,我们就可以根据相应的策略从使用池中挑选出一个已经正在使用的连接用来复用,而不是随意拿出一个连接去复用。

三、使用数据库连接池的优势和其工作原理

1、连接池的优势

连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。

连接池的主要优点有以下三个方面。

第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。

第二、简化的编程模式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。

第三、控制资源的使用。如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平之下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。

2、连接池的工作原理

下面,简单的阐述下连接池的工作原理。

连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。

连接池的工作原理主要由三部分组成,分别为连接池的建立、连接池中连接的使用管理、连接池的关闭。

第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。Java中提供了很多容器类可以方便的构建连接池,例如VectorStack等。

第二、连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:

  • 当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。

当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。

该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。

第三、连接池的关闭。当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。

 1.6  Oracle数据库有哪些约束.怎样破坏主外键约束

1.主键约束
2.外键约束
3.唯一约束
4.检查约束
5.非空约束

②级联删除—-使用关键字 cascade

简介:如果在定义外键约束时使用cascade关键字,那么当父表中被引用列的数据被删除时,子表中对应的数据也将被删除。

③置空删除—-使用关键字set null

简介:如果在定义外键约束时使用set null关键字,那么当主表中被引用列的数据被删除时,子表中对应的数据被设置为null。要使这个关键字起作用,子表中的对应列必须支持NULL值。

2.

 1.7 数据库的优化你们是怎么做的?

1 PreparedStatement 一般来说比 Statement 性能高

2有外键约束会影响插入和删除性能, 如果程序能够保证数据的完整性, 那在设计数据库时就
去掉外键。

3sql 语句全部大写, 特别是列名和表名都大写。 特别是 sql 命令的缓存功能, 更加需要统一
大小写

4还有索引对查询性能的改进

 1.8 查询时怎样避免出现相同的ID号?

id前加实体类名称

 2. 框架方面 

2.1 你这个项目有没有用到框架?用到了哪些框架? 

2.2 为什么不用H框架?它和I框架相比有什么样的有点和缺点?(反过来问也行) 2.3 你的项目中用到了什么事务?简单介绍一下 2.4 请简单谈一下struts1struts2的区别。 2.5 SSH 框架的配置流程是什么? 2.6 你有没有用过SpringMVC? 三:具体项目所遇到的问题 1. 通用问题 

1.1 如何导出文件、报表、数据?导出文件格式? 

1.2 哪些地方使用到了事务处理?是在业务层还是dao层?如何使用spring实现的

事务管理? 

1.3 系统管理员的职责是什么?(是只负责分配权限还是同时也可以管理每个栏

目?) 

1.4 权限验证是一个重复性很高的操作,你们项目中使用了什么方式来减少该部分的

开发量? 

1.5对于栏目权限,详细是怎么分配的?是分配到人还是分配到角色? 

1.6 这个项目为什么没有使用MyEcplise?使用eclipse开发web项目,应该怎么部

署运行? 

1.7 介绍一下这里提到的session核心操作和POJO 

1.8 有没有使用存储过程和触发器?为什么?如果需要使用,你认为哪些地方可以使

用?能带来什么好处? 

1.9 该项目使用了weblogic,能不能谈一下使用weblogic作为web容器的初衷? 

原文地址:https://www.cnblogs.com/shan1393/p/9240445.html