学习啦>创业指南>职场>面试题>

2017java笔试面试题及参考答案(2)

如英分享

  1. 在工程中加入Struts支持

  2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: lable.welcome.china=Welcome!!!

  3. 创建英文资源文件ApplicationResource_en.properites

  4. 创建临时中文资源文件ApplicationResource_temp.properites 例如:

  lable.welcom.china=中国欢迎您!

  5. 对临时中文资源文件进行编码转换。可以使用myeclipse的插件,也可以在dos下执行: native2ascii -encoding gb2312 ApplicationResource_temp.properties

  ApplicationResource_zh_CN.properties

  6. 在jsp中加入struts的bean标记库

  显示信息:

  可以在struts-config.xml文件中定义多个资源包,而每个资源包可使用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.setMaxResults():设置要显示的最后一行数据。

  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控制反转IOC AOP

  11面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。在切面上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定义了要插入的方法。切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。 项目中用到的Spring中的切面编程最多的地方:声明式事务管理。

  a、定义一个事务管理器

  b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务)

  c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

  12Insert 条件谓词 inserting;

  Update条件谓词 updating;

  Delete 条件谓词 deleting。

  13视图是一种Oracle对象,是来自一张或多张表或视图中数据的子集的逻辑表示。

  特点:限制对数据库的访问;容易实现数据的复杂的查询;维护数据的独立性;对于相同的数据可以产生不同的视图。

  14Primary key 确保非空且唯一;

  Foreign key 确保引用完整性;

  Unique 确保列或者列的组合中的每个值都是唯一的;

  Check 限制每条记录都要满足的条件;

  Not null 确保该列不能保存空值。

  15两者都带有0个或多个参数,参数可以具有模式。

  两者都是PL/SQL语句块的不同形式,都有声明段、可执行段以及异常段。

  两者都可以存储在数据库中或在语句块中声明

  两者不同的是,过程调用本身是一个PL/SQL语句,而函数总是向调用块返回一个值。

  16 使用%rowtype属性声明记录变量的优点是什么?

  可以不必知道数据库中列的数量和类型。

  在运行期间,数据库中列的数量和类型可能发生变化。

  在SELECT语句中使用该属性可以有效地检索表中的行。

  六编程

  1SET serveroutput ON;

  Declare

  v_empno emp.empno%type:=’&员工编号’;

  v_ename emp.ename%type;

  v_deptno emp.deptno%type;

  v_mgr emp.mgr%type;

  Begin

  SELECT 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);

  EXCEPTION

  WHEN NO_DATA_FOUND THEN

  DBMS_OUTPUT.PUT_LINE(‘没有此员工’);

  END;

  2Declare

  Cursor emp_cur(v_job emp.job%TYPE) is

  Select empno,ename,hiredate from emp where job=v_job;

  v_empno emp.empno%TYPE;

  v_ename emp.ename%TYPE;

  v_hiredate emp.hiredate%TYPE;

  BEGIN

  OPEN emp_cur(upper(‘&job’));

  LOOP

  Fetch emp_cur INTO v_empno,v_ename,v_hiredate;

  Exit when emp_cur%NOTFOUND;

  DBMS_OUTPUT.PUT_LINE(‘编号 姓名 工资’);

  DBMS_OUTPUT.PUT_LINE(v_empno||v_ename||v_hiredate);

  END LOOP;

  CLOSE emp_cur;

  END;

  Declare

  Cursor emp_cur(v_job emp.job%TYPE) is

  Select empno,ename,hiredate from emp where job=v_job;

  v_empno emp.empno%TYPE;

  v_ename emp.ename%TYPE;

  v_hiredate emp.hiredate%TYPE;

  BEGIN

  FOR i IN emp_cur(upper(‘&job’)) LOOP

  v_empno:=i.empno;

  v_ename:=i. ename;

  v_hiredate:=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 BOOLEAN

  Is

  v_job emp.job%TYPE;

  BEGIN

  SELECT DISTINCT job INTO v_job FROM emp WHERE job=f_job;

  RETURN TRUE;

  EXCEPTION

  WHEN NO_DATA_FOUND THEN

  RETURN FALSE;

  END f_emp;

  Begin

  If f_emp(upper(‘&job’)) THEN

  DBMS_OUTPUT.PUT_LINE(‘日’);

  ELSE

  DBMS_OUTPUT.PUT_LINE(‘插’);

  END IF;

  END;

  4CREATE OR REPLACE TRIGGER t_emp_sal

  BEFORE INSERT OR UPDATE ON emp

  Begin

  IF :new.sal>5000 THEN

  RAISE_APPLICATIONG_ERROR(‘ERROR!!’);

  ELSE

  INSERT int up_emp VALUES(empno,sal,sysdate);

  END IF;

  END;

  5很奇怪,结果是Test

  这属于脑筋急转弯的题目,在一个qq群有个网友正好问过这个问题,我觉得挺有趣,就研究了一下,没想到今天还被你面到了,哈哈。

  在test方法中,直接调用getClass().getName()方法,返回的是Test类名

  由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在

  test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。

  如果想得到父类的名称,应该用如下代码:

  getClass().getSuperClass().getName();

  6返回的结果是2。

  我可以通过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。

  7最终的程序代码如下:

  public class ThreadTest {} private class Business { boolean bShouldSub = true;//这里相当于定义了控制该谁执行的一个信号灯 public synchronized void MainThread(int i) { if(bShouldSub) try { this.wait(); // TODO Auto-generated catch block } catch (InterruptedException e) { ).start(); for(int i=0;i<50;i++) { business.MainThread(i); } } public void run() { } for(int i=0;i<50;i++) { business.SubThread(i); } public void init() { final Business business = new Business(); new Thread( new Runnable() { } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new ThreadTest().init();

  } } } { } } for(int j=0;j<5;j++) System.out.println(Thread.currentThread().getName() + ":i=" + i +",j=" + j); bShouldSub = true; this.notify(); public synchronized void SubThread(int i) { } if(!bShouldSub) { } bShouldSub = false; this.notify(); System.out.println(Thread.currentThread().getName() + try { this.wait(); // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { } for(int j=0;j<10;j++) ":i=" + i +",j=" + j);

  8。

  Vector newVector = new Vector();

  For (int i=0;i

  {

  Object obj = vector.get(i);

  if(!newVector.contains(obj);

  newVector.add(obj);

  }9

  int engishCount;

  int chineseCount;

  int digitCount;

  for(int i=0;i

  {char ch = str.charAt(i);

  if(ch>=’0’ && ch<=’9’)

  {digitCount++}

  else if((ch>=’a’ && ch<=’z’) || (ch>=’A’ && ch<=’Z’))

  {engishCount++;}

  else

  {chineseCount++;}}

  System.out.println(……………);

  (1)select * from employees

  where Year(hiredDate) = Year(date())

  or (salary between 1000 and 200)

  or left(last_name,3)='abc';

  (2)mysql> select id,name,salary,deptid did from employee1 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 t where employee1.deptid = t.deptid and employee1.salary>t.avgSalary;


看过“2017 java笔试面试题”的人还看了:

1.2017java面试题大全带答案

2.2017 java笔试面试题

3.2017最新java面试题

4.2017中软java面试题及参考答案

5.2017中软java面试题及答案

6.2017java web面试题

1081914