Java面試題和解答(一)

一、說說JVM原理?內存泄露與溢出區別,什麼時候產生內存泄露?

JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.htmlhtml

內存泄露與溢出區別:http://blog.csdn.net/buutterfly/article/details/6617375mysql

二、mysql上億記錄數據量的數據庫如何設計?

mysql單表存儲控制在百萬條最好,根據業務的增加量適時分表分庫,使用數據庫中間件進行數據集組合查詢web

三、mysql支持事務嗎?DB存儲引擎有哪些?sql

MySQL經常使用的存儲引擎爲MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事務安全表,其餘存儲引擎都是非事務安全表。Innodb是MySQL的默認存儲引擎。MyISAM不支持事務、也不支持外鍵,但其訪問速度快,對事務完整性沒有要求。InnoDB存儲引擎提供了具備提交、回滾和崩潰恢復能力的事務安全。可是比起MyISAM存儲引擎,InnoDB寫的處理效率差一些而且會佔用更多的磁盤空間以保留數據和索引數據庫

四、說說MVC原理MVC模式的優缺點,若是讓你設計你會怎麼改造MVC?

MVC是一種程序開發設計模式,它實現了顯示模塊與功能模塊的分離。提升了程序的可維護性、可移植性、可擴展性與可重用性,下降了程序的開發難度。它主要分模型、視圖、控制器三層。 設計模式

原理緩存

一、模型(model)它是應用程序的主體部分,主要包括業務邏輯模塊(web項目中的Action,dao類)和數據模塊(pojo類)。模型與數據格式無關,這樣一個模型能爲多個視圖提供數據。因爲應用於模型的代碼只需寫一次就能夠被多個視圖重用,因此減小了代碼的重複性 
二、視圖(view) 用戶與之交互的界面、在web中視圖通常由jsp,html組成 
三、控制器(controller)接收來自界面的請求 並交給模型進行處理 在這個過程當中控制器不作任何處理只是起到了一個鏈接的作用tomcat

優勢 
一、能夠爲一個模型在運行時同時創建和使用多個視圖。變化-傳播機制能夠確保全部相關的視圖及時獲得模型數據變化,從而使全部關聯的視圖和控制器作到行爲同步。 
二、視圖與控制器的可接插性,容許更換視圖和控制器對象,並且能夠根據需求動態的打開或關閉、甚至在運行期間進行對象替換。 
三、模型的可移植性。由於模型是獨立於視圖的,因此能夠把一個模型獨立地移植到新的平臺工做。須要作的只是在新平臺上對視圖和控制器進行新的修改。 
四、潛在的框架結構。能夠基於此模型創建應用程序框架,不只僅是用在設計界面的設計中。安全

缺點
一、增長了系統結構和實現的複雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增長結構的複雜性,並可能產生過多的更新操做,下降運行效率。 
二、視圖與控制器間的過於緊密的鏈接。視圖與控制器是相互分離,但確實聯繫緊密的部件,視圖沒有控制器的存在,其應用是頗有限的,反之亦然,這樣就妨礙了他們的獨立重用。 
三、視圖對模型數據的低效率訪問。依據模型操做接口的不一樣,視圖可能須要屢次調用才能得到足夠的顯示數據。對未變化數據的沒必要要的頻繁訪問,也將損害操做性能。 
四、目前,通常高級的界面工具或構造器不支持模式。改造這些工具以適應MVC須要和創建分離的部件的代價是很高的,從而形成MVC使用的困難服務器

五、hibernate支持集羣嗎?如何實現集羣?

Hibernate只是對JDBC的一個封裝,簡化了CRUD的操做而已。一般咱們所說的集羣,是指數據庫的集羣或者應用服務器的集羣。若是須要在集羣上使用Hibernate,那就須要考慮使用支持集羣的二級緩存。好比JBoss Cache,但不要使用Hibernate默認的二級緩存:EHCache,它並不支持二級緩存。

六、tomcat 最多支持併發多少用戶?

Tomcat的最大併發數是能夠配置的,並無限制所配置的併發數量,根據請求數量所須要的帶寬,CPU,內存,壓力等進行配置。更好的硬件,更多的處理器都會使Tomcat支持更多的併發。

七、map原理,它是如何快速查找key的?map與set區別?

http://zhangshixi.iteye.com/blog/672697

MAP的節點是一對數據.
SET的節點是一個數據.
Map使用關鍵值Key來惟一標識每個成員 map能夠重複。
set是集合
都屬於關聯容器
map的形式 map<type1, type2> mymap;
set的形式 set<type> myset;
set(集合)——包含了通過排序了的數據,這些數據的值(value)必須是惟一的。

map(映射)——通過排序了的二元組的集合,map中的每一個元素都是由兩個值組成,其中的key(鍵值,一個map中的鍵值必須是惟一的)是在排序或搜索時使用,它的值能夠在容器中從新獲取;而另外一個值是該元素關聯的數值。好比,除了能夠ar[43] = "overripe"這樣找到一個數據,map還能夠經過ar["banana"] = "overripe"這樣的方法找到一個數據。若是你想得到其中的元素信息,經過輸入元素的全名就能夠輕鬆實現。

map是映射集合中的元素不能重複,set能夠進行集合的各類操做(交併補等),固然你也能夠用list或vector實現set,可是效率會很低。set通常是用平衡樹或哈西表實現的。
映射是一種一一對應的關係,哈西表也能夠看做是映射的一種。映射一般可用來實現字典結構(dictionary)

八、如何有效合併兩個文件,一個是1億條的用戶基本信息,另外一個是用戶天天看電影連續劇等的記錄,5000萬條,內存只有1G?

1億5千萬條數據不可能所有載入1G內存後再計算,只能先將文件劃分紅小塊,再合併輸出到一個文件。

九、Spring如何實現IOC與AOP的,說出實現原理?

Spring AOP原理:http://blog.csdn.net/moreevan/article/details/11977115

Spring IOC原理:http://blog.csdn.net/it_man/article/details/4402245

十、 Java中抽象類和接口的區別

http://www.cnblogs.com/roky/archive/2008/02/21/1076332.html

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

相關文章
相關標籤/搜索