Java面試題和解答(二)

一、字符流和字節流的區別,使用場景是什麼,相關類有哪些 javascript

http://blog.csdn.net/zj8692286/article/details/12650731
二、線程安全的概念,實現線程安全的幾種方法 html

基本概念:若是你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。若是每次運行結果和單線程運行的結果是同樣的,並且其餘的變量的值也和預期的是同樣的,就是線程安全的。java

實現方法:mysql

synchronized關鍵字:得到一個鎖來防止其餘線程在執行此操做的線程完成以前訪問同一個方法;web

volatile關鍵字:volatile只能保證多線程的內存可見性,不能保證多線程的執行有序性ajax

基本原子數據類型:在java.util.concurrent.atomic包中提供算法

三、抽象類和接口的區別,使用場景 spring

1.abstract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。可是,一個類卻能夠實現多個interface。
2.在abstract class 中能夠有本身的數據成員,也能夠有非abstarct的成員方法,而在interface中,只可以有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中通常不定義數據成員),全部的成員方法都是abstract的。
3.abstract class和interface所反映出的設計理念不一樣。其實abstract class表示的是"is-a"關係,即父類和派生類在概念本質上應該是相同的;interface表示的是"like-a"關係,並不要求interface的實現者和interface定義在概念本質上是一致的, 實現者僅僅是實現了interface定義的契約而已。
4.實現抽象類和接口的類必須實現其中的全部方法。抽象類中能夠有非抽象方法。接口中則不能有實現方法。
5.接口中定義的變量默認是public static final 型,且必須給其初值,因此實現類中不能從新定義,也不能改變其值。
6.抽象類中的變量默認是 friendly 型,其值能夠在子類中從新定義,也能夠從新賦值。
7.接口中的方法默認都是 public,abstract 類型的。sql

四、hash算法的實現原理,hashcode的實現原理數據庫

http://blog.csdn.net/zj8692286/article/details/12651497

五、error和exception的區別,RuntimeException和非RuntimeException的區別

http://blog.csdn.net/zdwzzu2006/article/details/6568600
六、繼承與組合的區別,使用場景

http://blog.csdn.net/iloveyin/article/details/8096428
七、使用靜態工廠方法的好處和壞處

http://blog.csdn.net/beidou321/article/details/6488646
八、列出幾種排序算法,他們是時間複雜度是多少

http://blog.sina.com.cn/s/blog_771849d301010ta0.html
九、數據庫設計原則、範式

1.第一範式是最基本的範式。若是數據庫表中的全部字段值都是不可分解的原子值
2.第二範式在第一範式的基礎之上更進一層。第二範式須要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不能夠把多種數據保存在同一張數據庫表中。
3.第三範式須要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。

十、數據庫經常使用的編碼方式有哪幾種

以mysql爲例,經常使用的編碼方式有utf8;gbk;gb2312;latin1,對應的Java中的編碼爲UTF-8;GBK;GB2312;ISO-8859-1;

十一、http和https的區別

http是超文本傳輸協議,明文傳輸信息,https 則是具備安全性的SSL加密傳輸協議,要比http協議安全
http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443

十二、序列化的做用和應用場景

做用:爲了保存在內存中的各類對象的狀態,而且能夠把保存的對象狀態再讀出來,Java提供這種「序列化」保存對象狀態的機制。

使用場景:內存中的對象狀態保存到一個文件中或者數據庫中時候;用套接字在網絡上傳送對象的時候;經過RMI傳輸對象的時候。

1三、spring的IOC、AOP的使用場景

http://blog.sina.com.cn/s/blog_624a352c0101fo9j.html
1四、ajax是否能跨域請求,解決的辦法

ajax不能跨域請求,因爲同源策略的限制,XmlHttpRequest只容許請求當前源(域名、協議、端口)的資源。解決方式有兩種:1 採用JSONP,它容許在服務器端集成Script tags返回至客戶端,經過javascript callback的形式實現跨域訪問;2 iframe的方式,經過設置document.domain來實現。
1五、解析xml的幾種方法,他們的原理

1.DOM(Document Object Model)它把整個XML文檔當成一個對象加載到內 存,無論文檔有多大。它通常處理小文件
2.SAX(Simple API for XML)它的處理過程像流媒體。它不會把整個文檔加載到內存,它是讀一點處理一點。通常用它處理比較大的文件
3.JDOM包含了前兩種方式
4.DOM4J也包含了前兩種方式
其中DOM和SAX都是java的標準,也就是java自己就提供標準的API,不須要下載其餘包,可是它的API都是一些底層的實現,不是很好用。因此有人在它們的基礎上封裝了一下,就有了DOM4j和JDOM。DOM4J性能最好,連SUN的JAXM也在用DOM4J.Hibernate也用DOM4J,DOM4J對Xpath也有很好的支持

1六、內部跳轉和外部跳轉的區別,底層實現原理

http://blog.csdn.net/hjjk123/article/details/5311227

1七、若是有和其餘系統有接口調用,但其餘系統還沒開發完成,怎麼進行單元測試

採用Mock測試,Mock對象也就是真實對象在調試期的替代品。何時須要Mock對象:

1.真實對象具備不可肯定的行爲(產生不可預測的結果,如股票的行情)
2.真實對象很難被建立(好比具體的web容器)
3.真實對象的某些行爲很難觸發(好比網絡錯誤)
4.真實狀況令程序的運行速度很慢
5.真實對象有用戶界面
6.測試須要詢問真實對象它是如何被調用的(好比測試可能須要驗證某個回調函數是否被調用了)
7.真實對象實際上並不存在(當須要和其餘開發小組,或者新的硬件系統打交道的時候,這是一個廣泛的問題)

http://blog.csdn.net/chjttony/article/details/14522771

1八、防止重複提交有哪幾種方式

1.禁掉提交按鈕。表單提交後使用Javascript使提交按鈕disable。這種方法防止心急的用戶屢次點擊按鈕。但有個問題,若是客戶端把Javascript給禁止掉,這種方法就無效了
2.在提交後執行頁面重定向
3. 在session中存放一個特殊標誌。當表單頁面被請求時,生成一個特殊的字符標誌串,存在session中,同時放在表單的隱藏域裏。接受處理表單數據時,檢查標識字串是否存在,並當即從session中刪除它,而後正常處理數據。
若是發現表單提交裏沒有有效的標誌串,這說明表單已經被提交過了,忽略此次提交。

1九、數據庫鏈接池的實現原理,請求怎麼樣去獲取鏈接,關閉鏈接時,鏈接池是銷燬鏈接仍是回收鏈接

鏈接池在初始化的時候,生成多個可用的Connection存放在List中,當DAO獲取鏈接時,關閉鏈接時,鏈接被回收

以上題目均收集自互聯網,部分答案也來自互聯網,版權均屬於原做者

相關文章
相關標籤/搜索