1、1. J2EE(总分 20 分。每题 2 分)1. 简述 String 和 StringBuffer 的区别。String 对一串字符进行操作。不可变。一旦被创建,就不能修改它的值。StringBuffer 也是对一串字符进行操作,但是可变类。2. 运行时异常(RuntimeException )与一般异常有何不同?一般异常是可捕捉到的。运行时异常是不可预知的异常。3. Sleep()和 wait()有什么区别?sleep 是线程类(Thread )的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释放对象锁。wait().
2、会释放锁4. 实现多线程有几种方法?三种,1.继承 Thread 类,重写 run 函数2.实现 Runnable 接口,重写 run 函数3.实现 Callable 接口,重写 call 函数5. 简述线程的基本状态及状态之间的关系。Thread.ThreadState 属性提供一个位掩码,用它指示线程的当前状态。一个线程至少总是处于 ThreadState 枚举中一个可能状态,并且可以同时处于多个状态。一旦线程由于调用 Thread.Start 而离开 Unstarted 状态,则它将永远无法返回到 Unstarted 状态。同样,线程也永远无法离开 Stopped 状态。6. 什么是线程
3、同步,何如实现线程的同步?当两个或多个线程需要访问同一资源时,它们需要以某种顺序来确保该资源某一时刻只能被一个线程使用的方式称为同步。要想实现同步操作,必须要获得每一个线程对象的锁。获得它可以保证在同一时刻只有一个线程访问对象中的共享关键代码,并且在这个锁被释放之前,其他线程就不能再进入这个共享代码。此时,如果还有其他线程想要获得该对象的锁,只得进入等待队列等待。只有当拥有该对象锁的线程退出共享代码时,锁被释放,等待队列中第一个线程才能获得该锁,从而进入共享代码区。7. JSP 或 Servlet 中的 forward 和 redirect 有什么区别?forward 是服务器内部重定向,程序
4、收到请求后重新定向到另一个程序,客户机并不知道;redirect 则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。redirect 是送到客户端后再一次 request , 所以资料不被保留.8. 简述 JDBC 调用数据库的基本步骤。1,加载驱动2,创建连接3,获取语句对象4,执行 sql 语句5,如果是查询,还可以使用结果集6,关闭连接7,捕捉和处理异常9. 简述 Servlet 的生命周期。Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service方法,service 方法自动派遣运行与请求对应的 do 方法(d
5、oGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。1. 算法(总共 20 分)1. 请列举几种排序算法,并用 JAVA 实现快速排序算法。(6 分)冒泡排序,快速排序,shaker 排序,堆排序。public void quick(Integer str) if (str.length 0) /查看数组是否为空_quickSort(str, 0, str.length 1);public void _quickSort(Integer list, int low, int high) if (low tmp) high;listlow = listhigh;
6、 /比中轴小的记录移到低端while (low depth2)return depth1+1;elsereturn depth2+1;public static void main(String args) int input = 4, 2, 6, 1, 3, 5, 7,8,10 ;Tree tree = createTree(input);System.out.print(“前序遍历: “);preOrder(tree);System.out.print(“n 中序遍历:“);midOrder(tree);System.out.print(“n 后序遍历:“);posOrder(tree);
7、3. 阅读代码,并回答问题(6 分)Public String listToString( Vector strList) String str = new String();SortedSet set = new TreeSet();set.addAll(strList);for(Iterator iter=set.iterator(); iter.hasNext();String currStr = (String) iter.next();Str += currStr + “;”;return str;问题 1:这段代码完成什么功能?如果输入列表“To” , “SAIC” , “Welc
8、ome”,输入结果是什么?数组元素拼接。TreeSet 是按字母顺序存储的,结果是:SAIC;To;Welcome;问题 2 这段代码中有什么地方有错误或者可以改善的地方吗?错误:for(Iterator iter=set.iterator(); iter.hasNext();后面缺少“)”改善:拼接到最后时,最后一个分号应去掉。1. 设计模式(总分 10 分,每题 5 分)1. 编程实现设计模式:Singleton(单例模式)。class Singleton private static Singleton s;private Singleton()public static Singlet
9、on getSigleton()if(s=null)s=new Singleton();return s;2. 画出抽象工厂(Abstract Factory)的 UML 类图。1. 数据库(总分 20 分)1. SOL 查询语句的左外连接、右外连接、全外连接、内联接之间的区别。左外连接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是连接列所匹配的行右外连接是左向外连接的反向连接。将返回右表的所有行。全外连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。内连接使用比较运算符根
10、据每个表共有的列的值匹配两个表中的行。2. 举例说明 GROUP BY 和 HAVING 子句的意义和使用方法。每个部门有多少人就要用到 GROUP BYselect DepartmentID as 部门名称,COUNT(*) as 个数 from BasicDepartment group by DepartmentID2. 显示每个地区的总面积仅显示那些面积超过 1000000 的地区。3. SELECT region, SUM(area)4. FROM bbc5. GROUP BY region6. HAVING SUM(area)10000001. IN 和 EXISTS 的区别(4
11、分)比如 in(1,2) 就是 = 1 or = 2 的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用 exists 指定一个子查询。2. 编写 SQL 语句为管理岗位业务培训信息,建立 3 个表。S(S# ,SN,SD,SA )S# ,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄C(C#,CN)C#,CN 分别代表课程编号,课程名称。SC(S#,C# ,G)S#,C#,G 分别代表学号,课程编号、学习成绩问题 1:使用标准嵌套 SQL 语句查询选修课程名称为 “税收基础 “的学员学号和姓名。Selectssc s#, ssc.snfrom cleft join(
12、 select s.*,sc.c#From scLeft join son s.s#=sc.s#) as sscon ssc.c#=c.c#where =税收基础问题 2:查询选修课程为“C2的所有学员的学号、姓名、所属单位、成绩,并按照所属单位升序、成绩降序排列。select sc.c#,s.sn,s.sd,sc.gFrom scLeft join son s.s#=sc.s#where c. c#= C2order by s.sd asc,sc.g.desc问题 3:查询所有学员选修课程的数量,列出学号、姓名、所选课程数,并按照课程数降序排列。Select sc.s#,s.sn, sc.count(select count(s#) as count,s#from scgroup by sc.s#) scLeft join son s.s#=sc.s#order by sc.count desc