第一篇:Java面試問題
1、引用CSS樣式有哪兩種方式?
Link,@import2、js怎么控制兩個文本框,當(dāng)選中的時候邊框變空,沒選中的變會原來的顏色。onFocus=“document.getElementById('text1').style.backgroundColor='#eee'”
onblur=“document.getElementById('text1').style.backgroundColor='#fff'”
3、查詢數(shù)據(jù)庫表顯示在頁面需要新建多少個class文件和xml文件?
4、spring有多少種注入方式?
注入方法1:構(gòu)造方法方式 2:屬性注入 3:靜態(tài)工廠方法參數(shù)注入 4: 接口注入
第二篇:JAVA面試
馬老師:
您好,昨天下午面試的中軟資源。因為筆試時間很短(她之前并沒說多長時間,我估計就只有30多分鐘就要收卷),而且題量很大,所以沒有記下題目,不過前面的題目都很簡單,主要是咱們做的那些基礎(chǔ)題。后面的主觀題是:
1、詳細敘述5種以上種的設(shè)計模式
2、詳細說明類的設(shè)計原則
3、sql語句的調(diào)優(yōu)
還有一個忘記了!
完了之后人事的會做初步面試,首先自我介紹,然后問離職原因,以前的一些工作情況。再就是簡單介紹他們目前要做的項目情況,會說工作很幸苦之類的話,最后會問薪水要求!
再就是技術(shù)人員面,感覺他們對基礎(chǔ)知識很看重,當(dāng)然首先是自我介紹。會問到一些詳細的知識點,比如說怎么配置DWR,sql語句的調(diào)優(yōu),當(dāng)然項目也是得問的,主要介紹最近的項目,做過什么東西!
最后是技術(shù)總監(jiān),開始也是自我介紹。技術(shù)方面問的少,就問我jbpm和我做過什么以及用到的一些開源框架和工具。然后問3到5年的職業(yè)規(guī)劃,再給我一份英文的文檔讓我翻譯(他不會告訴你是關(guān)于什么方面,我傻到居然去問他)。后面有人遇到這種情況要先看文檔大標(biāo)題,完了告訴他這文檔大概是關(guān)于什么的(給我的是分需求文檔),不要一上來就往細里看,那位總監(jiān)就批評過我,完了再看細節(jié)。最后問我有什么問題!
如果問到的一些知識沒聽過,就說這些不會是以后項目開發(fā)中的問題,因為我們以前也是好多技術(shù)都是在項目中邊學(xué)習(xí)邊開發(fā)的,不可能我們什么技術(shù)都會了都準(zhǔn)備好了再去做開發(fā)。面試中也問道過倆,我不知道是什么,按照上面的回答,感覺對方還是比較滿意,也沒有為難我!
這些都跟面得職位有關(guān),職位不同情況可能不同。我面得是中軟內(nèi)部的職位,不是外包。
中科軟筆試
1.集合類
2.servlet生命周期
3.string,stringbuffer,區(qū)別,int integer 區(qū)別
4.常見的運行時異常
5.寫出幾個常見的類,包,接口
6.寫一個單例
7.抽象類和接口的區(qū)別
8.還有兩頁的SQL選擇題,我不太記得了
9.怎么配置tomcat的內(nèi)存大小
10.數(shù)據(jù)庫連接池的原理
11.觸發(fā)器有哪幾種,并說說每一種
12.還有JSP中靜態(tài)include和動態(tài)include區(qū)別
13.jsp的9種內(nèi)置對象
14.選擇題好幾個都是關(guān)于主鍵的,記不清了
還有一個是寫幾種常用的數(shù)據(jù)結(jié)構(gòu),并寫出實現(xiàn)原理
還有一個也是數(shù)據(jù) 結(jié)構(gòu)上的,我不記得了,我連見都沒見過 還有一個是程序改錯題,挺簡單的
第三篇:Java程序員面試中的多線程問題
Java程序員面試中的多線程問題
摘要:很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經(jīng)驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經(jīng)常被高級工程師所問到。
很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經(jīng)驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經(jīng)常被高級工程師所問到。
0.Java 中多線程同步是什么?
在多線程程序下,同步能控制對共享資源的訪問。如果沒有同步,當(dāng)一個 Java 線程在修改一個共享變量時,另外一個線程正在使用或者更新同一個變量,這樣容易導(dǎo)致程序出現(xiàn)錯誤的結(jié)果。
1.解釋實現(xiàn)多線程的幾種方法?
一 Java 線程可以實現(xiàn) Runnable 接口或者繼承 Thread 類來實現(xiàn),當(dāng)你打算多重繼承時,優(yōu)先選擇實現(xiàn) Runnable。
2.Thread.start()與 Thread.run()有什么區(qū)別?
Thread.start()方法(native)啟動線程,使之進入就緒狀態(tài),當(dāng) cpu 分配時間該線程時,由 JVM 調(diào)度執(zhí)行 run()方法。
3.為什么需要 run()和 start()方法,我們可以只用 run()方法來完成任務(wù)嗎?
我們需要 run()&start()這兩個方法是因為 JVM 創(chuàng)建一個單獨的線程不同于普通方法的調(diào)用,所以這項工作由線程的 start 方法來完成,start 由本地方法實現(xiàn),需要顯示地被調(diào)用,使用這倆個方法的另外一個好處是任何一個對象都可以作為線程運行,只要實現(xiàn)了 Runnable 接口,這就避免因繼承了 Thread 類而造成的 Java 的多繼承問題。
4.什么是 ThreadLocal 類,怎么使用它?
ThreadLocal 是一個線程級別的局部變量,并非“本地線程”。ThreadLocal 為每個使用該變量的線程提供了一個獨立的變量副本,每個線程修改副本時不影響其它線程對象的副本(譯者注)。
下面是線程局部變量(ThreadLocal variables)的關(guān)鍵點:
一個線程局部變量(ThreadLocal variables)為每個線程方便地提供了一個單獨的變量。
ThreadLocal 實例通常作為靜態(tài)的私有的(private static)字段出現(xiàn)在一個類中,這個類用來關(guān)聯(lián)一個線程。
當(dāng)多個線程訪問 ThreadLocal 實例時,每個線程維護 ThreadLocal 提供的獨立的變量副本。
常用的使用可在 DAO 模式中見到,當(dāng) DAO 類作為一個單例類時,數(shù)據(jù)庫鏈接(connection)被每一個線程獨立的維護,互不影響。(基于線程的單例)
ThreadLocal 難于理解,下面這些引用連接有助于你更好的理解它。
《Good article on ThreadLocal on IBM DeveloperWorks 》、《理解 ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》
5.什么時候拋出 InvalidMonitorStateException 異常,為什么?
調(diào)用 wait()/notify()/notifyAll()中的任何一個方法時,如果當(dāng)前線程沒有獲得該對象的鎖,那么就會拋出 IllegalMonitorStateException 的異常(也就是說程序在沒有執(zhí)行對象的任何同步塊或者同步方法時,仍然嘗試調(diào)用 wait()/notify()/notifyAll()時)。由于該異常是 RuntimeExcpetion 的子類,所以該異常不一定要捕獲(盡管你可以捕獲只要你愿意).作為 RuntimeException,此類異常不會在 wait(),notify(),notifyAll()的方法簽名提及。
6.Sleep()、suspend()和 wait()之間有什么區(qū)別?
Thread.sleep()使當(dāng)前線程在指定的時間處于“非運行”(Not Runnable)狀態(tài)。線程一直持有對象的監(jiān)視器。比如一個線程當(dāng)前在一個同步塊或同步方法中,其它線程不能進入該塊或方法中。如果另一線程調(diào)用了 interrupt()方法,它將喚醒那個“睡眠的”線程。
注意:sleep()是一個靜態(tài)方法。這意味著只對當(dāng)前線程有效,一個常見的錯誤是調(diào)用t.sleep
(),(這里的t是一個不同于當(dāng)前線程的線程)。即便是執(zhí)行t.sleep(),也是當(dāng)前線程進入睡眠,而不是t線程。t.suspend()是過時的方法,使用 suspend()導(dǎo)致線程進入停滯狀態(tài),該線程會一直持有對象的監(jiān)視器,suspend()容易引起死鎖問題。
object.wait()使當(dāng)前線程出于“不可運行”狀態(tài),和 sleep()不同的是 wait 是 object 的方法而不是 thread。調(diào)用 object.wait()時,線程先要獲取這個對象的對象鎖,當(dāng)前線程必須在鎖對象保持同步,把當(dāng)前線程添加到等待隊列中,隨后另一線程可以同步同一個對象鎖來調(diào)用 object.notify(),這樣將喚醒原來等待中的線程,然后釋放該鎖?;旧?wait()/notify()與 sleep()/interrupt()類似,只是前者需要獲取對象鎖。
7.在靜態(tài)方法上使用同步時會發(fā)生什么事?
同步靜態(tài)方法時會獲取該類的“Class”對象,所以當(dāng)一個線程進入同步的靜態(tài)方法中時,線程監(jiān)視器獲取類本身的對象鎖,其它線程不能進入這個類的任何靜態(tài)同步方法。它不像實例方法,因為多個線程可以同時訪問不同實例同步實例方法。
8.當(dāng)一個同步方法已經(jīng)執(zhí)行,線程能夠調(diào)用對象上的非同步實例方法嗎?
可以,一個非同步方法總是可以被調(diào)用而不會有任何問題。實際上,Java 沒有為非同步方法做任何檢查,鎖對象僅僅在同步方法或者同步代碼塊中檢查。如果一個方法沒有聲明為同步,即使你在使用共享數(shù)據(jù) Java 照樣會調(diào)用,而不會做檢查是否安全,所以在這種情況下要特別小心。一個方法是否聲明為同步取決于臨界區(qū)訪問(critial section access),如果方法不訪問臨界區(qū)(共享資源或者數(shù)據(jù)結(jié)構(gòu))就沒必要聲明為同步的。
下面有一個示例說明:Common 類有兩個方法 synchronizedMethod1()和 method1(),MyThread 類在獨立的線程中調(diào)用這兩個方法。
public class Common {
public synchronized void synchronizedMethod1(){
System.out.println(“synchronizedMethod1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“synchronizedMethod1 done”);
}
public void method1(){
System.out.println(“Method 1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“Method 1 done”);
}
}
public class MyThread extends Thread {
private int id = 0;
private Common common;
public MyThread(String name, int no, Common object){
super(name);
common = object;
id = no;
}
public void run(){
System.out.println(“Running Thread” + this.getName());
if(id == 0){
common.synchronizedMethod1();
} else {
common.method1();
}
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
Common c = new Common();
MyThread t1 = new MyThread(“MyThread-1”, 0, c);
MyThread t2 = new MyThread(“MyThread-2”, 1, c);
t1.start();
t2.start();
}
}
這里是程序的輸出:
Running ThreadMyThread-1
synchronizedMethod1 called
Running ThreadMyThread-2
Method 1 called
synchronizedMethod1 done
Method 1 done
結(jié)果表明即使 synchronizedMethod1()方法執(zhí)行了,method1()也會被調(diào)用。
9.在一個對象上兩個線程可以調(diào)用兩個不同的同步實例方法嗎?
不能,因為一個對象已經(jīng)同步了實例方法,線程獲取了對象的對象鎖。所以只有執(zhí)行完該方法釋放對象鎖后才能執(zhí)行其它同步方法??聪旅娲a示例非常清晰:Common 類有 synchronizedMethod1()和 synchronizedMethod2()方法,MyThread 調(diào)用這兩個方法。
public class Common {
public synchronized void synchronizedMethod1(){
System.out.println(“synchronizedMethod1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
System.out.println(“synchronizedMethod1 done”);
}
public synchronized void synchronizedMethod2(){
System.out.println(“synchronizedMethod2 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“synchronizedMethod2 done”);
}
}
public class MyThread extends Thread {
private int id = 0;
private Common common;
public MyThread(String name, int no, Common object){
super(name);
common = object;
id = no;
}
public void run(){
System.out.println(“Running Thread” + this.getName());
try {
if(id == 0){
common.synchronizedMethod1();
} else {
common.synchronizedMethod2();
}
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
Common c = new Common();
MyThread t1 = new MyThread(“MyThread-1”, 0, c);
MyThread t2 = new MyThread(“MyThread-2”, 1, c);
t1.start();
t2.start();
}
10.什么是死鎖
死鎖就是兩個或兩個以上的線程被無限的阻塞,線程之間相互等待所需資源。這種情況可能發(fā)生在當(dāng)兩個線程嘗試獲取其它資源的鎖,而每個線程又陷入無限等待其它資源鎖的釋放,除非一個用戶進程被終止。就 JavaAPI 而言,線程死鎖可能發(fā)生在一下情況。
當(dāng)兩個線程相互調(diào)用 Thread.join()
當(dāng)兩個線程使用嵌套的同步塊,一個線程占用了另外一個線程必需的鎖,互相等待時被阻塞就有可能出現(xiàn)死鎖。
11.什么是線程餓死,什么是活鎖?
線程餓死和活鎖雖然不想是死鎖一樣的常見問題,但是對于并發(fā)編程的設(shè)計者來說就像一次邂逅一樣。
當(dāng)所有線程阻塞,或者由于需要的資源無效而不能處理,不存在非阻塞線程使資源可用。JavaAPI 中線程活鎖可能發(fā)生在以下情形:
當(dāng)所有線程在程序中執(zhí)行 Object.wait(0),參數(shù)為 0 的 wait 方法。程序?qū)l(fā)生活鎖直到在相應(yīng)的對象上有線程調(diào)用 Object.notify()或者 Object.notifyAll()。
當(dāng)所有線程卡在無限循環(huán)中。
這里的問題并不詳盡,我相信還有很多重要的問題并未提及,您認(rèn)為還有哪些問題應(yīng)該包括在上面呢?歡迎在評論中分享任何形式的問題與建議。
第四篇:Java程序員面試中的多線程問題
很多核心Java面試題來源于多線程(Multi-Threading)和集合框架
(Collections Framework),理解核心線程概念時,嫻熟的實際經(jīng)驗是必需的。這篇文章收集了Java線程方面一些典型的問題,這些問題經(jīng)常被高級工程師所問到。
0、Java中多線程同步是什么?
在多線程程序下,同步能控制對共享資源的訪問。如果沒有同步,當(dāng)一個Java線程在修改一個共享變量時,另外一個線程正在使用或者更新同一個變量,這樣容易導(dǎo)致程序出現(xiàn)錯誤的結(jié)果。
1、解釋實現(xiàn)多線程的幾種方法?
一Java線程可以實現(xiàn)Runnable接口或者繼承Thread類來實現(xiàn),當(dāng)你打算多重繼承時,優(yōu)先選擇實現(xiàn)Runnable。
2、Thread.start()與Thread.run()有什么區(qū)別?
Thread.start()方法(native)啟動線程,使之進入就緒狀態(tài),當(dāng)cpu分配時間該線程時,由JVM調(diào)度執(zhí)行run()方法。
3、為什么需要run()和start()方法,我們可以只用run()方法來完成任務(wù)嗎? 我們需要run()&start()這兩個方法是因為JVM創(chuàng)建一個單獨的線程不同于普通方法的調(diào)用,所以這項工作由線程的start方法來完成,start由本地方法實現(xiàn),需要顯示地被調(diào)用,使用這倆個方法的另外一個好處是任何一個對象都可以作為線程運行,只要實現(xiàn)了Runnable接口,這就避免因繼承了Thread類而造成的Java的多繼承問題。
4、什么是ThreadLocal類,怎么使用它?
ThreadLocal是一個線程級別的局部變量,并非“本地線程”。ThreadLocal為每個使用該變量的線程提供了一個獨立的變量副本,每個線程修改副本時不影響其它線程對象的副本(譯者注)。
下面是線程局部變量(ThreadLocal variables)的關(guān)鍵點:
一個線程局部變量(ThreadLocal variables)為每個線程方便地提供了一個單獨的變量。
ThreadLocal實例通常作為靜態(tài)的私有的(private static)字段出現(xiàn)在一個類中,這個類用來關(guān)聯(lián)一個線程。
當(dāng)多個線程訪問ThreadLocal實例時,每個線程維護ThreadLocal提供的獨立的變量副本。
常用的使用可在DAO模式中見到,當(dāng)DAO類作為一個單例類時,數(shù)據(jù)庫鏈接(connection)被每一個線程獨立的維護,互不影響。(基于線程的單例)ThreadLocal難于理解,下面這些引用連接有助于你更好的理解它?!禛ood article on ThreadLocal on IBM DeveloperWorks 》、《理解
ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》
6、Sleep()、suspend()和wait()之間有什么區(qū)別?
Thread.sleep()使當(dāng)前線程在指定的時間處于“非運行”(Not Runnable)狀態(tài)。線程一直持有對象的監(jiān)視器。比如一個線程當(dāng)前在一個同步塊或同步方法中,其它線程不能進入該塊或方法中。如果另一線程調(diào)用了interrupt()方法,它將喚醒那個“睡眠的”線程。
注意:sleep()是一個靜態(tài)方法。這意味著只對當(dāng)前線程有效,一個常見的錯誤是調(diào)用t.sleep(),(這里的t是一個不同于當(dāng)前線程的線程)。即便是執(zhí)行t.sleep(),也是當(dāng)前線程進入睡眠,而不是t線程。t.suspend()是過時的方法,使用suspend()導(dǎo)致線程進入停滯狀態(tài),該線程會一直持有對象的監(jiān)視器,suspend()容易引起死鎖問題。
object.wait()使當(dāng)前線程出于“不可運行”狀態(tài),和sleep()不同的是wait是object的方法而不是thread。調(diào)用object.wait()時,線程先要獲取這個對象的對象鎖,當(dāng)前線程必須在鎖對象保持同步,把當(dāng)前線程添加到等待隊列中,隨后另一線程可以同步同一個對象鎖來調(diào)用object.notify(),這樣將喚醒原來等待中的線程,然后釋放該鎖。基本上wait()/notify()與sleep()/interrupt()類似,只是前者需要獲取對象鎖。
7、在靜態(tài)方法上使用同步時會發(fā)生什么事?
同步靜態(tài)方法時會獲取該類的“Class”對象,所以當(dāng)一個線程進入同步的靜態(tài)方法中時,線程監(jiān)視器獲取類本身的對象鎖,其它線程不能進入這個類的任何靜態(tài)同步方法。它不像實例方法,因為多個線程可以同時訪問不同實例同步實例方法。
8、當(dāng)一個同步方法已經(jīng)執(zhí)行,線程能夠調(diào)用對象上的非同步實例方法嗎? 可以,一個非同步方法總是可以被調(diào)用而不會有任何問題。實際上,Java沒有為非同步方法做任何檢查,鎖對象僅僅在同步方法或者同步代碼塊中檢查。如果一個方法沒有聲明為同步,即使你在使用共享數(shù)據(jù)Java照樣會調(diào)用,而不會做檢查是否安全,所以在這種情況下要特別小心。一個方法是否聲明為同步取決于臨界區(qū)訪問(critial section access),如果方法不訪問臨界區(qū)(共享資源或者數(shù)據(jù)結(jié)構(gòu))就沒必要聲明為同步的。
9、在一個對象上兩個線程可以調(diào)用兩個不同的同步實例方法嗎?
不能,因為一個對象已經(jīng)同步了實例方法,線程獲取了對象的對象鎖。所以只有執(zhí)行完該方法釋放對象鎖后才能執(zhí)行其它同步方法。
看下面代碼示例非常清晰:Common 類 有synchronizedMethod1()和synchronizedMethod2()方法,MyThread調(diào)用這兩個方法。
10、什么是死鎖
死鎖就是兩個或兩個以上的線程被無限的阻塞,線程之間相互等待所需資源。這種情況可能發(fā)生在當(dāng)兩個線程嘗試獲取其它資源的鎖,而每個線程又陷入無限等待其它資源鎖的釋放,除非一個用戶進程被終止。就JavaAPI而言,線程死鎖可能發(fā)生在一下情況。
● 當(dāng)兩個線程相互調(diào)用Thread.join()
● 當(dāng)兩個線程使用嵌套的同步塊,一個線程占用了另外一個線程必需的鎖,互相等待時被阻塞就有可能出現(xiàn)死鎖。
11、什么是線程餓死,什么是活鎖?
線程餓死和活鎖雖然不想是死鎖一樣的常見問題,但是對于并發(fā)編程的設(shè)計者來說就像一次邂逅一樣。
當(dāng)所有線程阻塞,或者由于需要的資源無效而不能處理,不存在非阻塞線程使資源可用。JavaAPI中線程活鎖可能發(fā)生在以下情形:
● 當(dāng)所有線程在程序中執(zhí)行Object.wait(0),參數(shù)為0的wait方法。程序?qū)l(fā)生活鎖直到在相應(yīng)的對象上有線程調(diào)用Object.notify()或者
Object.notifyAll()。
● 當(dāng)所有線程卡在無限循環(huán)中。
這里的問題并不詳盡,我相信還有很多重要的問題并未提及,您認(rèn)為還有哪些問題應(yīng)該包括在上面呢?歡迎在評論中分享任何形式的問題與建議。
第五篇:java工程師面試
精通java語言及面向?qū)ο笏枷?具有扎實的java編程基礎(chǔ)和良好的編程規(guī)范
精通 jsp語言 html語言 javascript腳本以及css 樣式
熟練掌握sqlserver oracle 數(shù)據(jù)庫
熟練使用Spring+Hibernate+Struts 以及 Spring+JDBC+Struts開發(fā)
精通Struts+jdbc開發(fā) 精通MVC框架開發(fā)
精通tomcat運用服務(wù)器 熟悉weblogic運用服務(wù)器 并可配合eclipse進行開發(fā) 熟練使用ant log4j junit 等輔助開發(fā)工具
熟練使用CVS/VSS項目同步工具
對factory DAO singleton 等軟件設(shè)計模式有很好的理解
對oracle數(shù)據(jù)庫性能及oracle代碼的規(guī)范性和java代碼執(zhí)行效率以及java缺陷有很好的理解與掌握
熟悉大型項目的開發(fā)流程 對業(yè)務(wù)需求能很好的細致理解,熟練書寫概要設(shè)計 需求分析 詳細設(shè)計等文檔
2年多累積java代碼30000行 數(shù)據(jù)庫代碼10000行 具有實際大型項目(江蘇電信)開發(fā)經(jīng)驗和個人獨自完成小項目的能力
具備強烈的學(xué)習(xí)欲望,工作認(rèn)真負(fù)責(zé),且具有很強的責(zé)任心和進取心,與人為善善于溝通,有很好的團隊合作精有神。
江蘇移動秘書 12580 負(fù)責(zé)個人電話本和呼叫信息增刪查改的開發(fā)
負(fù)責(zé)江蘇移動秘書兩個版本IVR接口csp3.0以及csp6.0的切換開發(fā),錄音放音的控件的使用,使用rational rose繪制UML用例圖,類圖,時序圖等在項目中熟練使用cvs和vss開發(fā)同步工具,靈活運用ajax特效,buffalo特效,熟練書寫存儲過程,函數(shù),等ORACLE代碼以及基于定時器的函數(shù)。