2017java筆試面試題及參考答案(2)
2017java筆試面試題及參考答案
1. 在工程中加入Struts支持
2. 編輯ApplicationResource.properties文件,在其中加入要使用國(guó)際化的信息, 例如: lable.welcome.china=Welcome!!!
3. 創(chuàng)建英文資源文件ApplicationResource_en.properites
4. 創(chuàng)建臨時(shí)中文資源文件ApplicationResource_temp.properites 例如:
lable.welcom.china=中國(guó)歡迎您!
5. 對(duì)臨時(shí)中文資源文件進(jìn)行編碼轉(zhuǎn)換。可以使用myeclipse的插件,也可以在dos下執(zhí)行: native2ascii -encoding gb2312 ApplicationResource_temp.properties
ApplicationResource_zh_CN.properties
6. 在jsp中加入struts的bean標(biāo)記庫(kù)
顯示信息:
可以在struts-config.xml文件中定義多個(gè)資源包,而每個(gè)資源包可使用key屬性指定包的名稱
6.6form-bean配置:(在配置文件struts-config.xml中):
name: 指定form的名字; type指定form的類型:包名+類名;
action配置:(在配置文件struts-config.xml中)
path=”?”
attribute="?"
input="?"
name="?"
parameter="?"
scope="?"
type="?"
71、hibernate自帶的分頁(yè)機(jī)制:獲得Session對(duì)象后,從Session中獲得Query對(duì)象。用Query.setFirstResult():設(shè)置要顯示的第一行數(shù)據(jù),
Query.setMaxResults():設(shè)置要顯示的最后一行數(shù)據(jù)。
2、不使用hibernate自帶的分頁(yè),可采用sql語(yǔ)句分頁(yè),
如:5:為每頁(yè)顯示的記錄,2為當(dāng)前頁(yè): select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table);
8hibernate中一對(duì)多配置文件會(huì)相應(yīng)的映射為兩張表,并且它們之間的關(guān)系是一對(duì)多的。
例如:一個(gè)student和classes表的關(guān)系 。一個(gè)學(xué)生只能是一個(gè)班的,一個(gè)班可以有多個(gè)學(xué)生。
9 1 很少被修改的數(shù)據(jù) 2 不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù) 3 不會(huì)被并發(fā)訪問(wèn)
10控制反轉(zhuǎn)IOC AOP
11面向切面編程:主要是橫切一個(gè)關(guān)注點(diǎn),將一個(gè)關(guān)注點(diǎn)模塊化成一個(gè)切面。在切面上聲明一個(gè)通知(Advice)和切入點(diǎn)(Pointcut); 通知: 是指在切面的某個(gè)特定的連接點(diǎn)(代表一個(gè)方法的執(zhí)行。通過(guò)聲明一個(gè)org.aspectj.lang.JoinPoint類型的參數(shù)可以使通知(Advice)的主體部分獲得連接點(diǎn)信息。)上執(zhí)行的動(dòng)作。通知中定義了要插入的方法。切入點(diǎn):切入點(diǎn)的內(nèi)容是一個(gè)表達(dá)式,以描述需要在哪些對(duì)象的哪些方法上插入通知中定義的方法。 項(xiàng)目中用到的Spring中的切面編程最多的地方:聲明式事務(wù)管理。
a、定義一個(gè)事務(wù)管理器
b、配置事務(wù)特性(相當(dāng)于聲明通知。一般在業(yè)務(wù)層的類的一些方法上定義事務(wù))
c、配置哪些類的哪些方法需要配置事務(wù)(相當(dāng)于切入點(diǎn)。一般是業(yè)務(wù)類的方法上)
12Insert 條件謂詞 inserting;
Update條件謂詞 updating;
Delete 條件謂詞 deleting。
13視圖是一種Oracle對(duì)象,是來(lái)自一張或多張表或視圖中數(shù)據(jù)的子集的邏輯表示。
特點(diǎn):限制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn);容易實(shí)現(xiàn)數(shù)據(jù)的復(fù)雜的查詢;維護(hù)數(shù)據(jù)的獨(dú)立性;對(duì)于相同的數(shù)據(jù)可以產(chǎn)生不同的視圖。
14Primary key 確保非空且唯一;
Foreign key 確保引用完整性;
Unique 確保列或者列的組合中的每個(gè)值都是唯一的;
Check 限制每條記錄都要滿足的條件;
Not null 確保該列不能保存空值。
15兩者都帶有0個(gè)或多個(gè)參數(shù),參數(shù)可以具有模式。
兩者都是PL/SQL語(yǔ)句塊的不同形式,都有聲明段、可執(zhí)行段以及異常段。
兩者都可以存儲(chǔ)在數(shù)據(jù)庫(kù)中或在語(yǔ)句塊中聲明
兩者不同的是,過(guò)程調(diào)用本身是一個(gè)PL/SQL語(yǔ)句,而函數(shù)總是向調(diào)用塊返回一個(gè)值。
16 使用%rowtype屬性聲明記錄變量的優(yōu)點(diǎn)是什么?
可以不必知道數(shù)據(jù)庫(kù)中列的數(shù)量和類型。
在運(yùn)行期間,數(shù)據(jù)庫(kù)中列的數(shù)量和類型可能發(fā)生變化。
在SELECT語(yǔ)句中使用該屬性可以有效地檢索表中的行。
六編程
1SET serveroutput ON;
Declare
v_empno emp.empno%type:=’&員工編號(hào)’;
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(‘沒(méi)有此員工’);
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(‘編號(hào) 姓名 工資’);
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(‘編號(hào) 姓名 工資’);
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很奇怪,結(jié)果是Test
這屬于腦筋急轉(zhuǎn)彎的題目,在一個(gè)qq群有個(gè)網(wǎng)友正好問(wèn)過(guò)這個(gè)問(wèn)題,我覺得挺有趣,就研究了一下,沒(méi)想到今天還被你面到了,哈哈。
在test方法中,直接調(diào)用getClass().getName()方法,返回的是Test類名
由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,所以,在
test方法中調(diào)用getClass().getName()方法,其實(shí)就是在調(diào)用從父類繼承的getClass()方法,等效于調(diào)用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也應(yīng)該是Test。
如果想得到父類的名稱,應(yīng)該用如下代碼:
getClass().getSuperClass().getName();
6返回的結(jié)果是2。
我可以通過(guò)下面一個(gè)例子程序來(lái)幫助我解釋這個(gè)答案,從下面例子的運(yùn)行結(jié)果中可以發(fā)現(xiàn),try中的return語(yǔ)句調(diào)用的函數(shù)先于finally中調(diào)用的函數(shù)執(zhí)行,也就是說(shuō)return語(yǔ)句先執(zhí)行,finally語(yǔ)句后執(zhí)行,所以,返回的結(jié)果是2。Return并不是讓函數(shù)馬上返回,而是return語(yǔ)句執(zhí)行后,將把返回結(jié)果放置進(jìn)函數(shù)棧中,此時(shí)函數(shù)并不是馬上返回,它要執(zhí)行finally語(yǔ)句后才真正開始返回。
7最終的程序代碼如下:
public class ThreadTest {} private class Business { boolean bShouldSub = true;//這里相當(dāng)于定義了控制該誰(shuí)執(zhí)行的一個(gè)信號(hào)燈 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;
看過(guò)“2017 java筆試面試題”的人還看了: