笔试题

本文总结了Oracle数据库操作技巧及Java编程中常见的问题,包括更新语句的正确写法、程序流程控制细节、内部类与反射的应用、垃圾回收机制的理解、类型转换的误区等,并探讨了索引和数据完整性的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  ————————————11月7号笔试题——————————————————

1、 数据库中使用update修改多个字段值的问题

       经我在PL/SQL环境下调试,得出如下结论(scott/tiger 下的dept表):

      update dept set dname='yao', loc='shaoyang' where deptno=10; --通过
     update dept set(dname, loc)=('yao','shaoyang') where deptno=10; --错误
     update dept set(dname, loc)=(select dname,loc from dept where deptno=20) where deptno=10;--通过
 

2、程序流程问题(题目略去, 如下为我的验证代码):

     public class TestCircle {
 
 public static void main(String[] args) {
  int i=2, j=9;
  do{
   if(i>j){
    break;
   }
   j--;
  }while(++i<5);
   System.out.println("i is: "+i+", j is: "+j);
  
   int k = new TestCircle().testCase(1);
   System.out.println("k is : "+k);
 }
 
 public  int testCase(int n){
  int j=1;
  switch (n) {
  case 1: j++;
  case 2: j++;
  case 3: j++;
  case 4: j++;
  case 5: j++;
   System.out.println("j is : "+j);
     default:  j++;
  
  }
  return n+j;
 }

}

testCase这个问题我做错了, 题目是要求最终打印出的k为8,请你给i与n赋值。

  我在考场上写的n=5, i=2; 运行得出结果却为9.  分析了一下得出原因在于: 如果n<5的话,那么它会从其自身起一直到5都会执行j++这条语句, 因为此代码片段中并没有使用 break。

   n与i有多种组合值, 如(1,1)、(4,1)和(5,1)等都可以。

 

3、 复习 JAVA的 “内部类”章节。

4、 复习 JAVA的 “反射”章节。

5、 温习 操作系统 部分的知识。

6、 数组问题:

        如我声明 int [] a = new int[1] , 那么a[0]的默认值就为0。 我起初理解错误了, 我认为如此声明只是为数组开辟了空间而已, 在其空间上默认值为NULL。

 

7、  关于启动 gc 的方法:

        System.gc() 和 RunTime()类的 gc() 方法, 但是即使调用了前面的方法也不保证一定会进行回收。

       拓展之:

      a.  GC并不是定期来回收你的垃圾内存,即是根据需要来回收。  

      b.  GC的回收是因为:它认为你的系统已经开始内存紧张(这个就是jvm的神奇)  

      c.  即使GC开始准备清理你的垃圾内存,但是如果该内存的引用还存在(不等于null),  这个时候GC仍然无能为力!

      d、 RunTime类的 public static Runtime getRuntime() 返回: 与当前 Java 应用程序相关的 Runtime 对象。 
 

8、 int i=10, double e = 10.0; 判断(i==e)、 (i==10.0)的真假。

         我认为一个是int类型,一个是double类型,它们分属不同的类型, 所以我认为其是错误的, 然而经运行测试发现是正确的。

9、 public static void main(String[] args){
         StringBuffer str1 = new StringBuffer("a");
         StringBuffer str2 = new StringBuffer("b");
         conver(str1, str2);        }

       public static void conver(StringBuffer str1, StringBuffer str2){
          str1.append(str2);
          str2 = str1;
          }

        测试结果为: str1 : ab       str2 : b

10、 唯一索引 与 唯一约束

      create unique index index_name on table_name(column)。

      建立唯一索引会自动生成一个唯一索引(唯一性约束是通过唯一性索引来实现的)。

      约束是为了保证数据满足约束条件的数据完整性, 而索引通常是为了提高查询的速度。

    ——————拓展:

   唯一索引, 在物理结构上是完全一样的, 而实际上, 非唯一索引其实也是索引的一种, 只是非唯一索引把rowId也编程了键值的一部分; 在用途上, 唯一索引与非唯一索引的区别在于优化器在优化查询时应用索引时做了取舍。

   如果是唯一索引则采取 index unique scan, 如果是非唯一性索引,则采取 index range scan.

   ——————拓展:   在线创建索引

    在线创建索引时会阻塞DML操作, 直到创建唯一索引成功, DML才正常操作; 所以为了减少性能,不阻塞DML操作最好在最后加上 online关键字。

 

11、 在oracle中如何确定重复的记录?

          a、 自关联查询方法:

           oracle系统中, 对于所有的表都存在一个唯一的列, 这就是rowid对该列使用max或者min

        b、 使用group by/having 子句

       c、 exception into  子句。

 

12、 关于使用DataSource连接数据库的方式:

      参考API内容如下:

该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。

DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

  1. 基本实现 - 生成标准的 Connection 对象
  2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
  3. 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。

DataSource 对象的属性在必要时可以修改。例如,如果将数据源移动到另一个服务器,则可更改与服务器相关的属性。其优点在于,由于可以更改数据源的属性,所以任何访问该数据源的代码都无需更改。

通过 DataSource 对象访问的驱动程序本身不会向 DriverManager 注册。通过查找操作获取 DataSource 对象,然后使用该对象创建 Connection 对象。使用基本的实现,通过 DataSource 对象获取的连接与通过 DriverManager 设施获取的连接相同。

     在程序中使用的方式:

     Context initCtx = new InitialContext();

   Context ctx = (Context) initCtx.lookup("java:comp/env");

   Object obj = (Object) ctx.lookup("jdbc/OraDB");

   javax.sql.DataSource ds = (javax.sql.DataSource)obj;

   Connection conn = ds.getConnection();

   Statement stmt = conn.createStatement();

   String strSql = "select * from offices";

   ResultSet rs = stmt.executeQuery(strSql);

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值