2017java笔试面试题及参考答案(2)
学习啦在线学习网2017java笔试面试题及参考答案
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笔试面试题”的人还看了: