to:themaster (独孤行) 
把你去面试的那些试题贴出来看看。

解决方案 »

  1.   

    怎么回事啊,都要我先贴,好,那我就先贴了
    我面试的深圳慧通,觉得比较好的有以下几题:
    (1)一个单向链表,如果判断链表中是否有环存在。
    (2)一个学生成绩表,如何查出成绩排名第3的学生?
    (3)谈谈为什么要用factory模式
    (4)比较一下String和StringBuffer有什么不同
    (5)谈谈为什么要用hibernate
    ......
    其中(2)我想了半天,后来他告诉我是用rownum,oracle当中的用法,而oracle的PL/SQL我不会啊,汗啊,所以回来以后打算恶补一下,下次就难不倒我了嘛,呵呵
    可别笑我菜
      

  2.   

    汗,居然告诉你用rownum??应该不可以吧,用row_number() over 。。才可以把
      

  3.   

    请教楼上row_number() over 怎么用,没有用过,多谢!!
      

  4.   

    (2)一个学生成绩表,如何查出成绩排名第3的学生?
    解答:
      
    //select * from student where rownum<4  order by  score desc score /*此句得出前3名的学生记录*/
      
    select a.* from (select * from student where rownum<4  order by desc score) a 
      
    where rownum<2 asc a.score  /*得出第3名*/  试问:
      (1)一个单向链表,如果判断链表中是否有环存在。
    如何做答呢?
      

  5.   

    (1)一个单向链表,如果判断链表中是否有环存在。
    我是这样答的,首先java不支持指针,所以必须用数组来模拟链表,可以用一个二维数组,第一个单元是id,第二个单元是下一个元素的id,判断链表中是否存在环,必须对链表进行遍历,将每次遍历的接点保存在一个历史数组中,每次访问下一接点时,看它的第二个单元保存的值是否在历史数组中出现过,如出现过,则表示有环。不过他说这样效率不高。我想了半天没想出来,后来我回去的时候想,他是不是这个意思,说id的值都是有序的,这样的话,只要某个节点的第二个单元的值比它本身的id小,就表示存在环
      

  6.   

    vipxch(雨天)的SQL写得是不对的select * from (select rownum n,t.* from (select * from student where order by score desc)) where n=3;
      

  7.   

    感觉使用游标来解决这个问题正好
    下例在没有重复记录的情况下好用如果存在重复记录还要再复杂一些。
    SQL> list
      1  DECLARE
      2     CURSOR cur_count IS     /*声明游标*/
      3             SELECT name,numeric FROM tb_tmp
      4                     ORDER BY numeric;
      5     countNum INTEGER:=0;
      6     nam     CHAR(8);
      7     num     INTEGER;
      8  BEGIN
      9     OPEN cur_count; /*打开游标*/
     10
     11     FETCH cur_count INTO nam,num;   /*从游标中检索数据行*/
     12     countNum:=countNum+1;
     13     WHILE (cur_count%FOUND AND countNum<4) LOOP /* 查找倒数第3名*/
     14     /*当前面的FETCH语句至少对应于数据库中的一条记录时,%FOUND属性为TRUE*/
     15             IF (countNum=3) THEN
     16                     DBMS_OUTPUT.PUT_LINE(nam || '   ' || num);
     17             END IF;
     18             FETCH cur_count INTO nam,num;
     19             countNum:=countNum+1;
     20     END LOOP;
     21     CLOSE cur_count;        /*关闭游标*/
     22* END;
    SQL> /
    Wangerma        67PL/SQL procedure successfully completed.SQL> desc tb_tmp;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     NAME                                      NOT NULL VARCHAR2(8)
     NUMERIC                                   NOT NULL NUMBER(38)SQL> select * from tb_tmp order by numeric;NAME        NUMERIC
    -------- ----------
    Zhaoliu          34
    Lisi             58
    Wangerma         67
    Fengba           72
    Mapi             84
    Fengma           89
    Zhangqi          89
    Wangxr           91
    Zhangsan         99
    Wangwu          10010 rows selected.
      

  8.   

    使用伪列ROWNUM时请一定注意:对于select * from tb_name where ROWNUM<4;
    的确可以列出存储在最前面的3条记录对应的SQL Server命令:select top 3 * from tb_name;但是对于select * from tb_name where ROWNUM<4 order by tb_id;
    则数据库首先列出存储在最前面的3条记录,然后再对这3条记录排序而不是先排序,再列出排在前面的3条记录!!!
      

  9.   

    我同学的答案:
    SQL> select rownum,b.* from student b;    ROWNUM NAME                     RESULT
    ---------- -------------------- ----------
             1 jake                         50
             2 henry                        60
             3 merry                        90
             4 gggg                         30SQL> select * from (select rownum a,name,result from (select * from student order by result desc)) w
    here a=3;         A NAME                     RESULT
    ---------- -------------------- ----------
             3 jake                         50
      

  10.   

    select top 3 from xxx order by grad desc
    最简单的T/SQL实现
      

  11.   

    嗯,最近正在学习Oracle,进来吸收营养。