1、java笔试面试题及答案资料仅供参考一选择题(30分)1.下列哪些情况能够终止当前线程的运行? a. 抛出一个异常时。 b. 当该线程调用sleep()方法时。 c. 当创立一个新线程时。(与当前进程无关) d. 当一个优先级高的线程进入就绪状态时。2. 下面哪些为构造函数的特性定义a. 在类中声明构造函数时,名称应该与类名相同 b. 具有重载特性,能够建立多个相同的名称 c. 使用类建立新对象时,会自动执行构造函数,因此在构造函数内设定变量的初值或进行内存分配d. 以上都是3. 关于异常处理机制的叙述哪些正确 a. catch部分捕捉到异常情况时,才会执行finally部分(无论是否有毛病,
2、都执行) b. 当try区段的程序发生异常时,才会执行catch区段的程序 c. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分d. 以上都是4. 下列关于接口的叙述中哪些是正确的 a. 接口中的数据必须设定初值(就是接口中的常量) b. 接口中的方法都是抽象方法 c. 接口能够声明引用d. 以上都正确5. Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是正确?A 重写是父类与子类之间多态性的一种表现。B 重写是一个类中多态性的一种表现。C 重载是一个类中多态性的一种表现。D 重载是父类与子类之间多态性的一种
3、表现。6.在Struts应用的视图中包含哪些组件?A. JSPB. ServletC. ActionServletD. ActionE. 代表业务逻辑或业务数据的JavaBeanF. EJBG. 客户化标签7. struts框架中,关于FormBean,下列哪些说法是正确的:A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action B 在FormBean中能够对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证C 用户每次提交表单,都会产生一个新的FormBean实例 D 动态FormBean不能进行验证操作8哪些方法能够进行ser
4、vlet的调试?()A、使用打印语句; 在桌面计算机上运行服务器B、使用Apache Log4JC、使用IDE集成的调试器D、直接查看HTML源码 ?E、返回错误页面给客户9、下面关于servlet的功用说法正确的有哪些?()A、读取客户程序发送来的显式数据B、读取客户程序发送来的隐式数据C、生成相应的结果D、发送显式的数据给客户程序E、发送隐式的数据给客户程序10、下面关于session的用法哪些是错误的?(A、HttpSession session = new HttpSession(); request.getSession();B、String haha =(String) sessi
5、on.getParameter(Attribute)(“haha”);C、session.removeAttribute(“haha”);D、session. setAttribute(“haha”,值);11、关于说法正确的有哪些?()A、URL的输出在请求时被插入到JSP页面中B、不能含有影响整个页面的JSP内容C、被包含文件改变后不需更改使用它的页面D、被包含文件更改后,需要手动地更新使用它的页面(不需要手动更新)12、关于bean的说法正确的有哪些?()A、具备一个零参数(空)的构造函数(不是必须的)B、不应该有公开的实例变量(字段)C、所有的属性都必须经过getXxx和setXxx方
6、法来访问D、布尔型的属性使用isXxx,而非getXxx13、下面关于MVC说法错误的有哪些?()A、必须使用复杂的框架B、使用内建的RequestDispatcher能够很好地实现MVCC、当其中一个组件发生变化的时候,MVC影响整个系统的设计D、我们能够用MVC来处理单个请求14、下面的标签中哪些是JSTL标签?()A、B、C、D、15、struts框架,错误的是,下面那些说法正确? A Struts中无法完成上传功能 B Struts框架基于MVC模式 C Struts框架容易引起流程复杂、结构不清晰等问题(清晰) D Struts能够有效地降低项目的类文件数目二、填空题( 5分)1、调
7、用函数MOD(123,10)返回值为_。2、select round (123.67,1) from dual;这语句输出值为_。3、创立一个临时替代变量使用的字符是_。4、若v_comm = 2800, X := NVL (V_comm,0) ,则X的值为_。5、调用函数INSTR(Here you are,er)返回值为_。三、判断题(10分)1、WHERE子句限制行记录,也能够指定限制分组结果的条件。 ()2、具有UNIQUE约束的列不能包含多个空值。 ()3、DATE型数据中包含着时间值。 ()4、具有外键约束的列能够包含空值。 ()5、如果在类型为char(4)的列中输入“hello
8、”,则只能存储hell。 ()6、含有Group by子句的查询,其结果是排好序的。 ()7、定义游标时,其中的select语句不能使用order by子句。(子查询不能用) ()8、过程能够有返回值。 ()9、触发器一定会被激发。 ()10、instead of触发器只是基于视图的。 ()四、写出相应的SQL语句(括号内为列名)(10分)1、查询从事各工作(JOB)的员工人数。2、查询与员工SMITH在同一部门(DEPTNO)的员工的姓名(ENAME),工资(SAL)和部门。3、查询所有员工的姓名(ENAME),工资(SAL)和工资等级(GRADE)。4、查询获得工资(SAL)最高的3个员工
9、信息。5、查询所有员工的姓名(ENAME)及其主管姓名(ENAME)。五、简答题(15分)1. 在PL/SQL程序中,进行用户自定义异常处理的3个步骤是什么?2. 面向对象的特征有哪些方面?并简要介绍3. List、Map、Set三个接口,存取元素时,各有什么特点?List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。4 .struts1.0和struts2.0的区别?如何控制两种框架中的单例模式?5. 描述一下如何在struts1.0实现国际化,以两国语言(中文,英文)为例:6. struts中怎么配置form-
10、bean、action7. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?8. hibernate中一对多配置文件返回的是什么?9什么样的数据适合存放到第二级缓存中?10你一般用spring做什么?11项目中如何体现Spring中的切面编程,具体说明。12 触发触发器的数据操作有哪些?13 解释视图的含义以及使用视图的好处。14 简述ORACLE中5种约束及其作用。15 ORACLE中过程和函数的异同点。六、编程题(30分)1、创立一个PL/SQL块,根据用户输入的编号,在emp表中查询出该编号的员工姓名、部门号及其主管编号,要有异常处理。
11、2、创立一个PL/SQL块,根据用户输入的工作,从emp表中逐条输出从事这一工作的每位员工的编号、姓名和受雇如期,每条信息格式如下:(用游标实现)编号 姓名 受雇日期7751 JOHN 95-12-313、编写一个函数,用于判断EMP表中某一工作(JOB)是否存在,若EMP表存在此工作名称,则返回TRUE,否则返回FALSE。4、编写一触发器,在EMP表执行插入或修改前被激发,此触发器将对员工的工资(SAL)超过5000进行报错,不能插入或修改,不超过5000的才将员工编号、工作及当时的日期(SYSDATE)插入UP_EMP表(注:此表已建好,表结构为UP_EMP(EMPNO NUMBER(4
12、),SAL NUMBER(7,2),UDETE DATE)5下面程序的输出结果是多少?import java.util.Date;public class Test extends Datepublic static void main(String args) new Test().test();public void test()System.out.println(super.getClass().getName();6下面的程序代码输出的结果是多少?public class smallTpublic static void main(String args)smallT t = new
13、 smallT();int b = t.get();System.out.println(b);public int get()tryreturn 1 ;finallyreturn 2 ;7子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 8去掉一个Vector集合中重复的元素 9有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数10. xxx公司的sql面试Table EMPLOYEES Structure:EMPLOYEE_ID NUMBER Primary Key,FIRST_NA
14、ME VARCHAR2(25),LAST_NAME VARCHAR2(25),Salary number(8,2),HiredDate DATE,Departmentid number(2)Table Departments Structure:Departmentid number(2) Primary Key,DepartmentName VARCHAR2(25). (1)基于上述EMPLOYEES表写出查询:写出雇用日期在今年的,或者工资在1000, 之间的,或者员工姓名(last_name)以Obama打头的所有员工,列出这些员工的全部个人信息。(2) 基于上述EMPLOYEES表写出
15、查询:查出部门平均工资大于1800元的部门的所有员工,列出这些员工的全部个人信息。()(3) 基于上述EMPLOYEES表写出查询:查出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。答案:1答案:ABD2答案: D3答案:BC4答案:AB 5答案AC 6答案:A,G 7答案:A8A B C D E9A B C D E10A B D11A B C12B D13A C14A B C15A B C16答案:C二 填空3 123.7 & 2800 2三判断 四写出相应的SQL语句1Select job,count(*) from emp group
16、 by job;2Select ename,sal,deptno from emp where deptno=(select deptno from emp where ename=SMITH);3Select ename,sal,grade from emp,salgrade where sal between losal and hisal;4Select * from (select * from emp order by sal desc) where rownum=3;5Select e1.ename empname,e2.ename mgrname from emp e1,emp
17、e2 where e1.mgr=e2.empno;五简答1能够经过声明和发布来截获自定义异常。一、在声明部分为声明自定义异常名。二、在执行部分使用 RAISE 语句显式地发布异常。三、在相应的异常处理例程中引用已声明的异常。2(1).抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 (2).继承:继承是一种联结类的层次模型,而且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类能够从现有的类中派生,这个过程称为类继承。新类
18、继承了原始类的特性, 新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类能够从它的基类那里继承方法和实例变量,而且类能够修改或增加新的方法使之更适合特殊的需要。 (3).封装:封装是把过程和数据包围起来,对数据的访问只能经过已定义的界面。面向对象计算始于这个基本概念,即现实世界能够被描绘成一系列完全自治、封装的对象,这些对象经过一个受保护的接口访问其它对象。 (4). 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。List 以特定次序来持有元素,
19、可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。3List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值4a、Action类:struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类b、线程模式struts1.2 Action是单例模式的而且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。单例策略限制了Struts1.2 Action能做的事情,而且开发时特别小心。Action资源必
20、须是线程安全的或同步的。struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。c、Servlet依赖struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action依然能够访问初始的Request和Response。可是,其它的元素减少或者消除了直接访问HttpServletRequest和HttpServletRespon
21、se的必要性。d、可测性测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase提供了一套struts1.2的模拟对象来进行测试。Struts2.0 Action能够经过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。51. 在工程中加入Struts支持2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: lable.welcome.china=Welcome!3. 创立英文资源文件Applicatio
22、nResource_en.properites4. 创立临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!5. 对临时中文资源文件进行编码转换。能够使用myeclipse的插件,也能够在dos下执行:native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties6. 在jsp中加入struts的bean标记库 显示信息:能够在struts-config.xml文
23、件中定义多个资源包,而每个资源包可使用key属性指定包的名称6. 6form-bean配置:(在配置文件struts-config.xml中):name: 指定form的名字; type指定form的类型:包名+类名;action配置:(在配置文件struts-config.xml中)path=”?”attribute=?input=? name=?parameter=?scope=?type=?71、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据,Query.setMax
24、Results():设置要显示的最后一行数据。2、不使用hibernate自带的分页,可采用sql语句分页,如:5:为每页显示的记录,2为当前页: select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table);8hibernate中一对多配置文件会相应的映射为两张表,而且它们之间的关系是一对多的。例如:一个student和classes表的关系 。一个学生只能是一个班的,一个班能够有多个学生。9 1 很少被修改的数据 2 不是很重要的数据,允许出现偶然并发的数据 3 不会被并发访问10控制反
25、转IOC AOP11面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。在切面上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。经过声明一个org.aspectj.lang.JoinPoint类型的参数能够使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定义了要插入的方法。切入点:切入点的内容是一个表示式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。项目中用到的Spring中的切面编程最多的地方:声明式事务管理。a、定义一个事务管理器b、配置事务特性(相当于声明通知。一般在业务层
26、的类的一些方法上定义事务)c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)12Insert 条件谓词 inserting;Update条件谓词 updating;Delete 条件谓词 deleting。13视图是一种Oracle对象,是来自一张或多张表或视图中数据的子集的逻辑表示。特点:限制对数据库的访问;容易实现数据的复杂的查询;维护数据的独立性;对于相同的数据能够产生不同的视图。14Primary key 确保非空且唯一;Foreign key 确保引用完整性;Unique 确保列或者列的组合中的每个值都是唯一的;Check 限制每条记录都要满足的条件;Not
27、null 确保该列不能保存空值。15两者都带有0个或多个参数,参数能够具有模式。两者都是PL/SQL语句块的不同形式,都有声明段、可执行段以及异常段。两者都能够存储在数据库中或在语句块中声明两者不同的是,过程调用本身是一个PL/SQL语句,而函数总是向调用块返回一个值。16 使用%rowtype属性声明记录变量的优点是什么?能够不必知道数据库中列的数量和类型。在运行期间,数据库中列的数量和类型可能发生变化。在SELECT语句中使用该属性能够有效地检索表中的行。六编程1SET serveroutput ON;Declarev_empno emp.empno%type:=&员工编号;v_ename
28、 emp.ename%type;v_deptno emp.deptno%type;v_mgr emp.mgr%type;BeginSELECT ename,deptno,mgr INTO v_ename,v_deptno,v_mgr from emp WHERE empno=v_empno;DBMS_OUTPUT.PUT_LINE(员工|v_ename|在部门|v_deptno|主管|v_mgr);EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(没有此员工);END;2DeclareCursor emp_cur(v_job emp.jo
29、b%TYPE) isSelect empno,ename,hiredate from emp where job=v_job;v_empno emp.empno%TYPE;v_ename emp.ename%TYPE;v_hiredate emp.hiredate%TYPE;BEGINOPEN emp_cur(upper(&job);LOOPFetch emp_cur INTO v_empno,v_ename,v_hiredate;Exit when emp_cur%NOTFOUND;DBMS_OUTPUT.PUT_LINE(编号 姓名 工资);DBMS_OUTPUT.PUT_LINE(v_e
30、mpno|v_ename|v_hiredate);END LOOP;CLOSE emp_cur;END;DeclareCursor emp_cur(v_job emp.job%TYPE) isSelect empno,ename,hiredate from emp where job=v_job;v_empno emp.empno%TYPE;v_ename emp.ename%TYPE;v_hiredate emp.hiredate%TYPE;BEGINFOR i IN emp_cur(upper(&job) LOOPv_empno:=i.empno;v_ename:=i. ename;v_h
31、iredate:=i. hiredate;DBMS_OUTPUT.PUT_LINE(编号 姓名 工资);DBMS_OUTPUT.PUT_LINE(v_empno|v_ename|v_hiredate);END LOOP;END;3CREATE OR REPLACE FUNCTION f_emp(f_job emp.job%TYPE)RETURN BOOLEANIsv_job emp.job%TYPE;BEGINSELECT DISTINCT job INTO v_job FROM emp WHERE job=f_job;RETURN TRUE;EXCEPTIONWHEN NO_DATA_FOU
32、ND THENRETURN FALSE;END f_emp;BeginIf f_emp(upper(&job) THENDBMS_OUTPUT.PUT_LINE(日);ELSEDBMS_OUTPUT.PUT_LINE(插);END IF;END;4CREATE OR REPLACE TRIGGER t_emp_salBEFORE INSERT OR UPDATE ON empBeginIF :new.sal5000 THENRAISE_APPLICATIONG_ERROR(ERROR!);ELSEINSERT int up_emp VALUES(empno,sal,sysdate);END I
33、F;END;5很奇怪,结果是Test这属于脑筋急转弯的题目,在一个qq群有个网友正好问过这个问题,我觉得挺有趣,就研究了一下,没想到今天还被你面到了,哈哈。在test方法中,直接调用getClass().getName()方法,返回的是Test类名由于getClass()在Object类中定义成了final,子类不能覆盖该方法,因此,在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,因此,super.getClass().getName()方法返回的也应该是T
34、est。如果想得到父类的名称,应该用如下代码:getClass().getSuperClass().getName();6返回的结果是2。我能够经过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中能够发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,因此,返回的结果是2。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。7最终的程序代码如下:public class ThreadTest /
35、* * param args */public static void main(String args) / TODO Auto-generated method stubnew ThreadTest().init();public void init()final Business business = new Business();new Thread(new Runnable()public void run() for(int i=0;i50;i+)business.SubThread(i);).start();for(int i=0;i50;i+)business.MainThre
36、ad(i);private class Businessboolean bShouldSub = true;/这里相当于定义了控制该谁执行的一个信号灯public synchronized void MainThread(int i)if(bShouldSub)try this.wait(); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();for(int j=0;j5;j+)System.out.println(Thread.currentThread().getName(
37、) + :i= + i +,j= + j);bShouldSub = true;this.notify();public synchronized void SubThread(int i)if(!bShouldSub)try this.wait(); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();for(int j=0;j10;j+)System.out.println(Thread.currentThread().getName() + :i= + i +,j= + j
38、);bShouldSub = false;this.notify();8。Vector newVector = new Vector();For (int i=0;ivector.size();i+)Object obj = vector.get(i);if(!newVector.contains(obj);newVector.add(obj);9int engishCount;int chineseCount;int digitCount;for(int i=0;i=0 & ch=a & ch=A & ch select id,name,salary,deptid did from empl
39、oyee1 where (select avg(salary) from employee1 where deptid = did) 1800;(3)select employee1.*,(employee1.salary-t.avgSalary)*100/employee1.salary from employee1,(select deptid,avg(salary) avgSalary from employee1 group by deptid) as twhere employee1.deptid = t.deptid and employee1.salaryt.avgSalary;