DBA数据库管理员JAVA程序员架构师必看

2023-07-03   


一、 技术问题部分(数据库部分)
   1、 表空间的管理方式有哪几种?
   数据字典管理方式
   本地文件管理方式
   2、 谈谈你对索引的理解?
   索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据块的I/O次数,因此可以显著提高性能。
   3、 说说索引的组成?
   索引列、rowid
   4、 分区表用过么?谈谈分区表的应用?
   分区表在对表的DML的并行处理上有极大得优势,而且可以一部分设为只读,用在销售记录,医院处方等地方!!
   5、 你对分区表的理解?怎样截断分区表一个分区的记录?
   一个分区表有一个或多个分区,每个分区通过使用范围分区、散列分区、或组合分区分区的行
   分区表中的每一个分区为一个段,可各自位于不同的表空间中
   对于同时能够使用几个进程进行查询或操作的大型表分区非常有用
   alter table table_name truncate partition partition_name;
   6、 物理文件有哪几种?控制文件包含了什么信息?
   1) 数据文件 2)控制文件 3)日志文件
   包含维护和验证有选举权据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个有选举权据库至少需要一个控制文件
   7、 表空间用完了如何增加?
   三种种扩展方式:
   1 增加数据文件 alter tablespace name add datafile ‘路径’ size 4M;
   2 扩展数据文件大小alter database datafile ‘路径’ resize 4M;
   3 把数据文件设为自动增长
   alter database datafile ‘路径’ autoextend on next 1M maxsize 20M;
   8、 SGA包含几部分?
   Shared pool(共享池),DataBase Buffer Cache(数据缓冲区)
   Redo Log Buffer(重做日志缓冲区), Large Pool,大池,JAVA池。
  
   9、 DECODE函数的用法?
   DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。还可以转化表结构!
   10、 DELETE和TRUNCATE的区别?
  
   答:1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
     2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
     3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
     4、TRUNCATE不能触发任何DELETE触发器。
     5、不能授予任何人清空他人的表的权限。
     6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
     7、不能清空父表。
  
   11、 谈谈你对事务的理解?
   ORACLE事务从COMMIT、ROLLBACK、连接到数据库或开始第一
   条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出
   数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的
   前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。
   如果一个事务由于某些故障或者由于用户改变主意而必须在
   提交前取消它,则数据库被恢复到这些语句和过程执行之前的状
   态。
   利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个
   事务。可以回退整个事务,也可以会退部分事务,但是不能回退
   一个已经被提交的事务。回退部分事务的ROLLBACK命令为:
   ROLLBACK to savepoint 存储点名
   存储点是用户放入事务中的标记,用来表示一个可被回退的
   位置。存储点通过在事务中放入一个SAVEPOINT命令而被插入。该
   命令的语法是:
   SAVEPOINT 存储点名
   如果在ROLLBACK语句中没有给出存储点名,则整个事务被回
   退。
  
   12、 给表A加一列abc口述?
   数据库正在应用时应先使数据库处于静默状态再
   alter table a add abc varchar2(10),
   如果不是就直接用!!
   13、 客户端连接服务器需要修改什么文件?
   tnsname.ora,listener.ora
   14、 索引重建的概念?说说索引重建的意义?
   当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树中没有更新操作,只有删除和插入操作。
  
   例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中。
  
   如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引。来消除索引中这些删除标记。
  
   一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引。在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些。
   15、 你对游标的理解,游标的分类,使用方法?
   游标是结果集数据中的指针,作用是为遍历结果集时,存储每条记录的结果,
   1.声明游标,2.打开游标,3.提取游标,4.关闭游标
   游标for循环
   显式游标,隐式游标,游标变量!
  
   16、 存储过程的用法?在存储过程中异常的处理,分类?举两个预定义异常的例子?
   存储过程:是预编译数据库SQL的集合
   存储过程是预编译过的,执行时勿须编译,执行速度更快,存储过程封装了一批SQL语句,便于维护数据的完整性与一致性。并且可以多次调用。
   异常:自定义,预定义,非预定义
   No_Data_Found Too_Many_Rows CASE_NOT_FOUND
   17、 谈谈你对分区索引的理解,说说分类和区别?
   分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯
   一性时采用全局索引。
     1.3.1. 局部索引分区的建立:
   SQL> create index dinya_idx_t on dinya_test(item_id)
   2 local
   3 (
   4 partition idx_1 tablespace dinya_space01,
   5 partition idx_2 tablespace dinya_space02,
   6 partition idx_3 tablespace dinya_space03
   7 );
   Index created.
   SQL>
     看查询的执行计划,从下面的执行计划可以看出,系统已经使用了索引:
   SQL> select * from dinya_test partition(part_01) t where t.item_id=12;
   Execution Plan
   ———————————————————-
   0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=187)
   1 0 TABLE ACCESS (BY LOCAL INDEX ROWID) OF ’DINYA_TEST’ (Cost=
   2 Card=1 Bytes=187)
   2 1 INDEX (RANGE SCAN) OF ’DINYA_IDX_T’ (NON-UNIQUE) (Cost=1
   Card=1)
   Statistics
   ———————————————————-
   0 recursive calls
   0 db block gets
   4 consistent gets
   0 physical reads
   0 redo size
   334 bytes sent via SQL*Net to client
   309 bytes received via SQL*Net from client
   2 SQL*Net roundtrips to/from client
   1 sorts (memory)
   0 sorts (disk)
   2 rows processed
   SQL>
     1.3.2. 全局索引分区的建立
     全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:
   SQL> create index dinya_idx_t on dinya_test(item_id)
   2 global partition by range(item_id)
   3 (
   4 partition idx_1 values less than (1000) tablespace dinya_space01,
   5 partition idx_2 values less than (10000) tablespace dinya_space02,
   6 partition idx_3 values less than (maxvalue) tablespace dinya_space03
   7 );
   Index created.
   SQL>
     本例中对表的item_id字段建立索引分区,当然也可以不指定索引分区名直接对整个表建立索引,如:
   SQL> create index dinya_idx_t on dinya_test(item_id);
   Index created.
   SQL>
     同样的,对全局索引根据执行计划可以看出索引已经可以使用:
   SQL> select * from dinya_test t where t.item_id=12;
   Execution Plan
   ———————————————————-
   0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=561)
   1 0 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF ’DINYA_TEST’ (Cost
   =2 Card=3 Bytes=561)
   2 1 INDEX (RANGE SCAN) OF ’DINYA_IDX_T’ (NON-UNIQUE) (Cost=1
   Card=3)
   Statistics
   ———————————————————-
   5 recursive calls
   0 db block gets
   10 consistent gets
   0 physical reads
   0 redo size
   420 bytes sent via SQL*Net to client
   309 bytes received via SQL*Net from client
   2 SQL*Net roundtrips to/from client
   3 sorts (memory)
   0 sorts (disk)
   5 rows processed
   18、 创建用户的语句?
   Create user user_name identified by password
   default tablespace tablespacename;
   grant create session to username;
  
   19、 谈谈你对实例的理解?
   Oracle是用实例来进行数据库管理的,实例在用户和orale数据库之间充当中间层的角色。每当在服务器上启动数据库时,就在内存中创建一个oracle实例,即oracle为数据库分配内存和创建并启动一个或多个oracle进程,然后由实例加载并打开数据库,最后由这个实例来访问和控制硬盘中的数据文件。
   20、 触发器中能用COMMIT,为什么?
   在触发器中不能使用COMMIT;等事务控制语句。因为触发器是事务触发的如果有事务控制语句就会影响到触发它的事务。即连带触发它的语句之前的已经完成的没有提交的语句都要受到影响。这是会影响到数据的一致性的。
   21、 有几种表空间?
   数据表空间(永久表空间)、临时表空间、撤销表空间
   22、 归档模式与非归档模式?为什么归档模式可以恢复到任意时刻?
   归档是在重做日志文件被覆盖之前,将该重做日志文件通过复制操作系统文件的 方式,保存到指定的位置。保存下来的重做日志文件的集合被称为归档重做日志文件,复制的过程被称为归档。
   在归档日志(ARCHIVELOG)模式下,ORACLE对重做日志文件进行归档操作。非归档日志(NOARCHIVELOG)模式下,不会对重做日志文件进行归档操作。由于非归档模式不会在覆盖之前保存,这样就造成了数据库在一定时间之前的重做日志文件丢失,也就不能恢复到被覆盖之前。而归档模式在任意时间上都有重做日志文件,故可以恢复到任意时刻。
  
   二、技术问题(JAVA部分)
   1、 Struts和Hibernate分别属于持久层,用例层,表示层的那一层?
   Struts是表示层,Hibernate是持久层。
   2、 Struts里如何体现MVC模式?
   Html或jsp文件是MVC模式中的视图层
   ActionForm是MVC模式中的模式层
   Action是MVC模式中的控制层
   通过控制层可以对视图层和模式层进行业务逻辑的处理
   3、 用Struts做过那些项目?
   4、 谈谈对Struts的认识?
   Struts跟Tomcat诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。  
     除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
     关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。    
   但是我觉得它虽然还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,对项目的开发有很大的帮助。
   5、 String在JAVA里是固定长度的吗?为什么可以用”+”连接?
   String 在JAVA中是有固定长度的
  
   可以用”+”连接的原因是Java 语言提供对字符串串联符号(”+”)和其他对象到字符串的转换的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。再通过调用StingBuffer中的toString方法,将StringBuffer的对象转换String的对象。
   6、 String和StringBuffer的区别?
   STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
   7、 使用过什么集合类型?你一般用什么类?
   集合类型List,Set,Map
   一般用Arraylist,Vector,HashMap,HashTable,HashSet,TreeSet
  
   8、 ArrayList里如何取得对象的长度?
   通ArrayList中的size()可以取得对象长度。
   9、 事务的4个特性?
   原子性、一致性、持久性、隔离性。
   10、 Oracle用了多久?char与varchar2的区别?
   Char是固定长度字符串,varchar2是变长字符串。
   比如在char(10)和varchar2(10)中插入test字符串那么
   char(10)类型长度就是10,不足的用空格补齐,而
   varchar2(10)类型长度就是4。
   11、 Oracle用什么获得字符集?
   Userenv(‘’)函数
   SELECT userenv(‘language’) FROM DUAL;
   12、 查询需要COMMIT吗?插入呢?
   查询不需要,插入需要,因为做DML操作时需要commit命令确认事务更改。
   13、 在Oracle中你用什么工具执行SQL语句?
   PLSQL Developer,SQLPLUS等
  
   三、 非技术问题部分
   1、 自我介绍!
   2、 你对出差的看法?
   3、 你对加班的看法?
   4、 你认为你适合IT业吗?
   5、 你觉得你的优势在什么地方?
   6、 你有什么其他的爱好?
   7、 你能吃苦吗?


相关内容:

  1. Java程序员综合测试题
  2. 公司JAVA开发面试题
  3. 软件工程师求职的自我介绍
  4. java程序员的职业生涯规划
  5. java程序员面试笔试试题
  6. JAVA程序员面试题