Hibernate中的update()和saveOrUpdate()的區別. java
saveOrUpdate()作下面的事: git
若是對象已經在本session中持久化了,不作任何事 程序員
若是另外一個與本session關聯的對象擁有相同的持久化標識(identifier),拋出一個異常 若是對象沒有持久化標識(identifier)屬性,對其調用save() web
若是對象的持久標識(identifier)代表其是一個新實例化的對象,對其調用save() 若是對象是附帶版本信息的(經過 <version>或 <timestamp>) 而且版本屬性的值代表其是一個新實例化的對象,save()它。 不然update() 這個對象面試
Spring對多種ORM框架提供了很好的支持,簡單描述在Spring中使用Hibernate的方法,並結合事務管理。 spring
getHiberanteTemplate裏面提供了save,update,delete,find等方法。 sql
簡單說一個:若是配置了聲明式事務,當執行getHibernateTemplate的各類方法的時候,事務會 數據庫
自動被加載 編程
若是沒有配置事務,那麼以上操做不會真正的被同步到數據庫,除非配置了hibernate的 autocommit=true
-
- 1. BeanFactory的做用是什麼? [中]
- BeanFactory是配置、建立、管理bean的容器,有時候也稱爲bean上下文。Bean與bean的依賴關係,也是由BeanFactory負責維護的。
- 2. bean在spring的容器中兩種基本行爲是什麼? [中]
- Singleton:單態
- Non-singleton或prototype:原型
- 3. spring配置文件中的ref元素的做用是什麼?它的兩個基本屬性是什麼? [中]
- 用於指定屬性值爲spring容器中的其它bean.兩個基本屬性是bean和local
- 4. 什麼是DWR?它有哪些功能? [中]
- DWR(Direct Web Remoting)是一個WEB遠程調用框架.
- 能夠在客戶端利用JavaScript直接調用服務端的Java方法並返回值給JavaScript
- DWR根據Java類來動態生成JavaScrip代碼.
- 支持Dom Trees,支持Spring,支持commons-logging
- 5. Ajax的工做原理 ? [難]
- 在會話的開始,瀏覽器加載Ajax引擎
- 請求動做經過JavaScript調用Ajax引擎來代替.
- 引擎負責繪製用戶界面以及與服務器端通信。
- Ajax引擎採用異步交互過程--不用等待服務器的通信。
- 6. XMLHttpRequest對象是什麼,它有哪些經常使用方法? [難]
- 一個 JavaScript 對象。是Ajax 的核心。
- 該對象的方法和屬性。
- open():創建到服務器的新請求。
- send():向服務器發送請求。
- abort():退出當前請求。
- readyState:提供當前 HTML 的就緒狀態。
- responseText:服務器返回的請求響應文本。.
-
- 7. XMLHttpRequest有哪些屬性, 它的值分表明什麼?[ 中]
-
-
-
- 8. 什麼是Ajax? [易]
- AJAX(Asynchronous JavaScript and XML),它不是一門新的語言或技術,而是多種技術的綜合,包括:
- Javascript
- XHTML
- CSS
- DOM
- XML
- XSTL
- XMLHttpRequest
-
- 9. 同步與異步的區別? [ 難]
- 普通B/S模式(同步)AJAX技術(異步)
- 同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事,而異步則是 請求經過事件觸發->服務器處理->處理完畢
- 同步是阻塞模式,異步是非阻塞模式。
- 同步(發送方發出數據後,等接收方發回) 異步(發送方發出數據後,不等接收方發回響應)
-
- 10. Struts+Hibernate+Spring開發模式中Hibernate扮演的角色 [中]
- 答:Hibernate扮演的是數據持久層 它的做用是實現持久化對象和數據庫表
- 之間的映射,造成持久化對象和數據庫表中數據的一個轉換平臺
-
- 11. 什麼是Hibernate 的抓取策略 [難]
- 抓取策略是指當應用程序須要利用關聯關係進行對象獲取的時候。
- 12. 何爲容器 [中]
- 容器就是符合某種規範的可以提供一系列服務的管理器。
- 13. Spring實現了那幾種模式 [中]
- 答: 工廠模式 和 單例模式
-
- 14 :Hibernate實體對象生命週期的三種狀態 [難]
- 答 Transient(瞬態) ,persistent(持久態)和Detached(遊歷態)
-
- 15: HQL查詢參數的處理方法 [中]
- 答:直接將參數拼寫爲HQL語句
- 經過參數名稱來標識參數
-
- 16. Hibernate實體之間的關聯關係的三種形式 [中]
- 答 一對一關聯
- 一對多關聯
- 多對多關聯
-
- 17. Hibernate具用的三種檢索方式 [難]
- 答:HQL檢索方式
- QBC檢索方式
- SQL檢索方式
- 18. spring 中<Bean>的depends-on屬性是什麼 [中]
- Depends-on用於當前Bean初始化以前顯示的強制一個或多個bean被初始化
- 19. spring 中的BeanWrapper類是什麼 [難]
- BeanWrapper類是一個對JavaBean進行各類操做的工具類
- BeanWrapper自己是一個接口BeanWrapperImpl實現了BeanWrapper
- 20 . <set>元素有一個cascade屬性,若是但願Hibernate級聯保存集合中的對象,casecade屬性應該取什麼值? [難]
- 答:save-update
- 21. Hibernate中session何時是遊離態 [中]
- 答:session.close();方法後
- 22. Hibernate中映射文件<hibernate-mapping> inverse屬性和cascade屬性的區別 [中]
- 答:inverse屬性只存在於集合標記的元素中集合元素包括<set/>,<map/>,<list/>,<array/>,<bag/>
- Inverse屬性的做用是是否將對集合對象的修改反射到數據庫中 inverse=」false」時修改反射到數據庫中 inverse=」true」 時修改不反射到數據庫中
- Cascade屬性的做用是描述關聯對象進行操做時的級聯特性,所以只有涉及到關係的元素纔有cascade屬性
-
- 23. : Hibernate中Session對象的load()方法和get()方法的區別(請列舉出兩點)[難]
- 答:①記錄不存在時 get()方法會返回空(null),而load()方法將會拋出一個HibernateException異常 ② load()方法查詢數據時會先找Hibernate的內部緩存和二級緩
- 存中的現有數據,get()方法在內部緩存中沒有打到相對應的數據時裝直接執行SQL語句
- 進行查詢
- 24. : Hibernate中HQL屬於什麼語言 [易]
- 答:HQL是面向對象的查詢語言,它能夠查詢以對象形式存在的數據。
-
- 25. Hibernate簡介以及主要功能 [中]
- 答:Hibernate是採用ORM模式實現數據持久層的一個優秀的JAVA組件,它提供了
- 強大,高效的將JAVA對象進行持久化操做的服務
-
- 26. 簡述Hibernate的優勢 [難]
- 答:開源和免費的License,我能夠在須要的時候研究源代碼,改寫源代碼,進行功能的定製。輕量級封裝,避免引入過多複雜的問題,調試容易,也減輕程序員的負擔。
- 具備可擴展性,API開放,當自己功能不夠用的時候,能夠本身編碼進行擴展。
-
- 27. 怎樣構建SessionFactory [難]
- 答: Hibernate的SessionFactory接口提供Session類的實例,Session類用於完成對數據庫的操做。
- 因爲SessionFactory實例是線程安全的(而Session實例不是線程安全的),因此每一個操做均可以共用同一個SessionFactory來獲取Session。Hibernate配置文件分爲兩種格式,一種是xml格式的配置文件,另外一種是Java屬性文件格式的配置文件
- 28. :從XML文件讀取配置信息構建SessionFactory的具體步驟以下。 [難]
- (1)建立一個Configuration對象,並經過該對象的configura()方法加載Hibernate配置文件,代碼以下。
- Configuration config = new Configuration().configure();
- configura()方法:用於告訴Hibernate加載hibernate.cfg.xml文件。Configuration在實例化時默認加載classpath中的hibernate.cfg.xml,固然也能夠加載名稱不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,能夠經過如下代碼實現。
- Configuration config = new Configuration().configure("wghhibernate.cfg.xml");
- (2)完成配置文件和映射文件的加載後,將獲得一個包括全部Hibernate運行期參數的Configuration實例,經過Configuration實例的buildSessionFactory()方法能夠構建一個唯一的SessionFactory,代碼以下:
- SessionFactory sessionFactory = config.buildSessionFactory();
- 構建SessionFactory要放在靜態代碼塊中,由於它只在該類被加載時執行一次。
-
- 29. 寫出使用構造方法進行注入的關鍵代碼 [難]
- <bean id=」constructBean」 class=」com.huang.ConstructBean」>
- <constructor-arg><ref bean=」bean_1」/></ constructor-arg >
- <constructor-arg><ref bean=」bean_2」/></ constructor-arg >
- <constructor-arg><ref bean=」bean_3」/></ constructor-arg >
- </bean>
-
-
- 30. 什麼是IOC? [難]
- 不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器(在Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。
- 就是由容器控制程序之間的關係,而非傳統實現中,由程序代碼直接操控,控制權由應用代碼中轉到了外部容器,控制權的轉移,就是所謂的反轉。
-
- 31. 編程題: 寫一個Singleton出來。 [難]
- Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。
-
- 第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
- public class Singleton {
- private Singleton(){}
- private static Singleton instance = new Singleton();
- public static Singleton getInstance() {
- return instance;
- }
- }
- 第二種形式:
- public class Singleton {
- private static Singleton instance = null;
- public static synchronized Singleton getInstance() {
- if (instance==null)
- instance=new Singleton();
- return instance; }
- }
-
-
- String tempStr = "";
- try {
- tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
- tempStr = tempStr.trim();
- }
- catch (Exception e) {
- System.err.println(e.getMessage());
- }
- return tempStr;
- }
- 32. J2EE是技術仍是平臺仍是框架? [中]
- J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。
- J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
-
- 33. 咱們在web應用開發過程當中常常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串? [難]
- Public String translate (String str) {
- String tempStr = "";
- try {
- tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
- tempStr = tempStr.trim();
- }
- catch (Exception e) {
- System.err.println(e.getMessage());
- }
- return tempStr;
- }
- 34.如何使用靜態工廠方法來建立Bean的實例 [易]
- <bean id=」staticFactoryBean」 class=」com.huang.StaticFactoryBean」
- factory-method=」靜態方法名」/>
- 至關於: StaticFactoryBean staticFactoryBean=StaticFactoryBean.靜態方法名
-
- 使用實例化的工廠方法來建立Bean的實例
- <!—注意此時bean的class屬性爲空-->
- <bean id=」dynamicFactory」class=」com.huang.DynamicFactory」/>
- <bean id=」dynamiceFactoryBean」 factory-bean=」dynamicFactory」
- Factory-method=」方法名」/>
- 至關於: DynamicFactory dynamicFactory=new DynamicFactory();
- DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名
- 35. 從Java屬性文件讀取配置信息構建SessionFactory的具體步驟以下: [難]
- (1)建立一個Configuration對象,此時Hibernate會默認加載classpath中的配置文件hibernate.properties,代碼以下。
- Configuration config = new Configuration();
- (2)因爲在配置文件中缺乏相應的配置映射文件的信息,因此此處須要經過編碼方式加載,這能夠經過Configuration對象的addClass()方法實現,具體代碼以下。
- config.addClass(BranchForm.class);
- addClass()方法用於加載實體類。
- (3)完成配置文件和映射文件的加載後,將獲得一個包括全部Hibernate運行期參數的Configuration實例,經過Configuration實例的buildSessionFactory()方法能夠構建一個唯一的SessionFactory,代碼以下。
- SessionFactory sessionFactory = config.buildSessionFactory();
-
-
-
- 36. spring框架的7個模塊是什麼? [ 難]
- 答: (1) spring AOP --面象切面編程
- (2)spring DAO --數據訪問對象
- (3)spring ORM --對象關係影射
- (4)spring Contect -- 上下文配置,向Spring框架提供上下文信息
- (5)spring WEB - -WEB上下文模塊
- (6)\spring WEB-MVC --實現了MVC
- (7)spring CORE –核心容器提供Spring框架基本功能
-
- 37. 什麼是AOP 請祥述 [中]
- 答: 是面向切面編程
- AOP 把軟件系統分爲兩個部分:核心關注點和橫切關注點。所謂的核心關注點,是業務處理的主要流程,也就是說這個解決方案要作的事。所謂橫切關注點,是與核心業務無關的部分,它把常發生在覈心關注點的多處,而各處基本類似,如日誌,事務,權限等 。
-
- 38. Hinbernate和EJB的區別 [中]
- 答:Hibernate能夠用在任何JDBC使用的場合,例如Java應用程序的數據庫訪問代碼,DAO接口的實現類,甚至能夠是BMP裏面的訪問數據庫的代碼。從這個意義上來講,Hibernate和EB不是一個範疇的東西,也不存在非此即彼的關係。
-
- 39. 通常狀況下,關係數據模型與對象模型之間有哪些匹配關係 [難]
- 答:表對應類
- 記錄對應表的對象
- 表的字段對應類的屬性
-
- 40. 事務隔離級別是由誰實現的? [難]
- 答:數據庫系統‘
-
- 41. 什麼是IOC [難]
- 答:IOC 是控制反轉,實現了對象之間的依賴關係的轉移成而使程序的菘耦合
- 42. 在Spring中給屬性有幾種賦值方式 請祥敘 [難]
- 答:有四種 分別是
- (1)普通屬性賦值
- (2)集合屬性賦值
- (3)Properties賦值
- (4)Map 屬性賦值
-
- 43. 在Spring說說Bean的alias元素和name屬性有什麼區別 [難]
- 答: <bean>元素name屬性能夠一次爲<bean>定義多個別名
- 例:<bean id=」beanName」 name=」alias_1,alias_2」/>
- <alias>元素一次只能定義一個別名
- 例:<alias name=」beanName」 alias=」toName」/>
- 注意: alias元素name屬性是bean實例名
- 44. Bean 的做用域用幾種,請祥敘 [難]
- 答: 用5種
- 分別是:
- 1. singleton IOC容器只會建立一個Bean的惟一的實例
- 2. prototype IOC容器在每次請求該Bean的時候都建立一個新的實例
- 3. request 在一次Http請求中 IOC容器會返回該Bean的同一個實例,而對於不一樣的用戶請求,則會返回不一樣的實例
- 4. session 在一次Http請求Session 中 IOC容器會返回該Bean的同一個實例,而對於不一樣的用戶Session,則會返回不一樣的實例
- 5. global session在一個全局Http請求Session 中
-
- 45. 簡述什麼是ORM [中]
- 答:ORM的全稱是Object-Relational Mapping 翻譯成中文就是「對象-關係映射」
- ORM組件的主要功能就是實現實體域對象的持久化並封裝數據庫訪問的細節
- ORM自己並非一個組件,它是具用某種功能的組件的總稱,也能夠說是一種框
- 架結構
-
- 46.:struts中的幾個關鍵對象的做用(說說幾個關鍵對象的做用) [中]
- struts中的幾個關鍵對象:Action Global(設置語言靠它了) ModuleConfig(獲取mapping),
- 47.Action的做用 [中]
- Action的做用是接受用戶的請求,經過調用業務方法實現業務處理的功能。
- 48. 在一般狀況下軟件系統由表示層,業務層,持久層和數據庫層組成,Struts屬於哪一層? [難]
- Struts屬於表示層組件,它的做用主要體如今如下幾個方面:
- 1) 輸出用戶界面和接收用戶的輸入,實現與用戶的交互。
- 2) 調用業務方法,完成業務處理,還要包括處理後的顯示工做。
-
- 48:Struts標籤庫由哪些組件組成? [難]
- 標籤庫是組合在一塊兒的一組JSP自定義標籤。
- 標籤庫由如下組件組成:
- 1) 標籤處理程序
- 2) 標籤庫描述符(TLD)文件
- 3) 應用程序部署描述符(web.xml)文件
- 4) JSP頁面中標籤庫的聲明
- 49. 用<bean:write>讀出一個URL和一個名稱, [難]
- 用<html:link>的話怎麼組合起來。
- 即要達到這樣的效果
- <a href="<bean:write name="data" property="url">">
- <bean:write name="data" property="tilte">
- </a>
- <html:link page="<bean:write name="data" property="url">">
- <bean:write name="data" property="title"/>
- </html:link> 會報出屬性data無值的錯誤!(page="<bean:write name="data" property="url">"中的data無值。)
- 50:怎樣才能配置<html:button>的資源文件? [難]
- 在資源文件 ApplicationResourses.properties 中加入 label.login=login
- 在jsp頁面寫:
- <html:button name="btn_login"><bean:message key="label.login"/></html:button>
- 這樣顯示頁面時,button上就會顯示label.login的對應內容「login」
-
-
- 51. 說說struts框架,的方法的工做原理或流程 [易]
- 答: 對於採用Struts框架的web應用, 在web應用啓動時會加載並初始化ActionServlet,ActionServlet從struts-config.xml中讀取配置信息,
- 把它們存放到各類配置對象中,例如把Action的映射信息存放在ActionMapping對象中。
- 當ActionServlet接收到客戶請求時,執行如下流程:
- 1.檢索和用戶請求匹配的ActionMapping實例,若是不存在,就返回用戶請求路徑無效信息;
- 2.若是ActionForm實例不存在,就建立一個ActionForm對象並在其中保存客戶提交的表單內容;
- 3.根據配置信息決定是否調用ActionForm的validate()方法;
- 4.若是ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功;
- 5.ActionServlet根據ActionMapping實例包含的映射信息將請求轉發給Action(若是Action實例不存在,就先建立Action實例),而後調用Action的excute()方法;
- 6.Action的excute()方法返回一個ActionForward對象,ActionServlet再把客戶請求轉發給ActionForward對象指向的JSP組件;
- 7.ActionForward對象指向的JSP組件生成動態網頁,返回給客戶。
-
- 52: strust的Action是否是線程安全的? [難]
- 答:線程安全就是你能夠在多線程環境下使用它,而不須要你來對它進行特殊的處理。action都是繼承至servlet的,因爲servlet就是線程不安全的(指多個線程共享一個servlet對象,因此),因此不要再action中定義類變量和實例變量,不然其餘線程改變了這些值,可本線程還在使用
- 53 :MVC,分析一下struts是如何實現MVC的 [難]
- 從MVC角度來看看struts的體系結構(Model 2)與工做原理:
- 1)模型(Model)
- 在Struts的體系結構中,模型分爲兩個部分:系統的內部狀態和能夠改變狀態的操做(事務邏輯)。內部狀態一般由一組ActinForm Bean表示。根據設計或應用程序複雜度的不一樣,這些Bean能夠是自包含的並具備持續的狀態,或只在須要時纔得到數據(從某個數據庫)。大型應用程序一般在方法內部封裝事務邏輯(操做),這些方法能夠被擁有狀態信息的bean調用。好比購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發訂貨信息。 小型程序中,操做可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。 建議用戶將事務邏輯(要作什麼)與Action類所扮演的角色(決定作什麼)分開。
- 2)視圖(View)
- 視圖主要由JSP創建,struts包含擴展自定義標籤庫(TagLib),能夠簡化建立徹底國際化用戶界面的過程。目前的標籤庫包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。
- 3)控制器(Controller)
-
- 在struts中,基本的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。對於業務邏輯的操做則主要由Action、ActionMapping、ActionForward這幾個組件協調完成的,其中Action扮演了真正的業務邏輯的實現者,ActionMapping與ActionForward則指定了不一樣業務邏輯或流程的運行方向。struts-config.xml 文件配置控制器。
- 54 :簡述什麼是Struts [中]
- Struts只是一個MVC框架(Framework),用於快速開發Java Web應用。Struts實現的重點在C(Controller),包括ActionServlet/RequestProcessor和咱們定製的Action,也爲V(View)提供了一系列定製標籤(Custom Tag)。但Struts幾乎沒有涉及M(Model),因此Struts能夠採用JAVA實現的任何形式的商業邏輯。
- Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構造咱們所須要的M(Model)。在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的編程)的實現,用它來提供非管理環境下申明方式的事務、安全等服務;對Bean工廠的擴展ApplicationContext更加方便咱們實現J2EE的應用;DAO/ORM的實現方便咱們進行數據庫的開發;Web MVC和Spring Web提供了Java Web應用的框架或與其餘流行的Web框架進行集成。
- 就是說可將二者一塊兒使用,達到將二者自身的特色進行互補。
-
- 55 :Struts有哪些主要功能:[難]
- 1.包含一個controller servlet,能將用戶的請求發送到相應的Action對象。
- 2. JSP自由tag庫,而且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。
- 3. 提供了一系列實用對象:XML處理、經過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
- Struts項目的目標是爲建立Java web應用提供一個開放源代碼的framework。Struts framework的內核是基於例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各類 Jakarta Commons包的標準技術的靈活的控制層。
- Struts提供了它自身的控制器組件,並整合了其餘技術,以提供模型和視圖。對於模型,同大多數的第三方軟件包同樣,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts可以和標準數據鏈接技術相結合,如JDBC和EJB。對於視圖,Struts與JavaServer Pages協同工做,包含JSTL和JSF。
- 56 :Stuts框架中控制器組件的類主要有哪些? [難]
- ActionServlet ,
- RequestProcessor
- , Action,
- ActionMapping,
- ActionForward
- 41:Validator的組成與做用 [難]
- Validator框架主要包括如下幾個部分:
- 1) 實現各類驗證規則的Java類
- 2) 配置文件
- 3) 資源文件
- 4) JSP自定義標籤
- Validator組件能夠很好地解決用戶輸入數據的驗證問題,但它並非一個獨立運行的組件,它能夠被嵌入到目前大部分的Web應用開發框架中。Validator組件的驗證方式有多種,既能夠經過JavaScript腳本實現用戶輸入數據的頁面驗證,也能夠實如今後臺處理程序中的Java驗證
- 57. ActionForm的做用?[難]
- ActionForm屬於一種數據傳輸對象,聯繫了前臺頁面與後臺的Action方法,實現了前臺與後臺之間的數據轉換和傳遞。它的做用主要體如今如下幾個方面:
- 1) 在顯示頁面的時候用於完成頁面中各類控件的初始化工做。
- 2) 在用戶提交請求的時候,ActionForm又表明了用戶所提交的數據,供Action以及後續的業務處理方法使用
- ActionForm還有另一個做用就是對用戶提交數據的合法性進行驗證
- Java 基礎就業題庫
-
- 1. 類和對象的區別? [易]
- 類是對象的抽象,是模型概念,而對象是實實在在存在的事物,是現實中存在的實體
- 2. Java類庫中八個標準包分別是什麼? [易]
- java.lang 提供經常使用的類、接口、通常異常、系統等編程語言的核心內容。
- java.util 包含日期、日曆、向量、堆棧等實用工具。
- java.io 包含輸入輸出流類、文件類等與輸入輸出I/O有關的類。
- java.awt 包含窗口和屏幕元素類,事件處理接口等與圖形用戶界面有關的內容。
- java.applet 提供爲編寫applet小程序所須要的類。
- java.text 提供與文本有關的類。
- java.net 包含url類等與網絡傳輸有關的東西。
- java.sql 提供與數據庫應用相關的類和接口。
-
- 3. 接口和抽象類有什麼區別? [中]
-
- 接口是公開的,不能包含私有的方法或變量,而抽象類是能夠有私有方法或私有變量的,
- 實現接口的必定要實現接口裏定義的全部方法,而實現抽象類能夠有選擇地重寫須要用到的方法,
- 接口能夠實現多重繼承,而一個類只能繼承一個超類,但能夠經過繼承多個接口實現多重繼承,
- 接口還有標識(裏面沒有任何方法,如Remote接口)和數據共享(裏面的變量全是常量)的做用.
- 通常的應用裏,最頂級的是接口,而後是抽象類實現接口,最後纔到具體類實現。
-
-
- 4. 說說java中的內存分配? [難]
- Java把內存分紅兩種,一種叫作棧內存,一種叫作堆內存
- 在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配。當在一段代碼塊中定義一個變量時,java就在棧中爲這個變量分配內存空間,當超過變量的做用域後,java會自動釋放掉爲該變量分配的內存空間,該內存空間能夠馬上被另做他用。
-
- 堆內存用於存放由new建立的對象和數組。在堆中分配的內存,由java虛擬機自動垃圾回收器來管理。在堆中產生了一個數組或者對象後,還能夠在棧中定義一個特殊的變量,這個變量的取值等於數組或者對象在堆內存中的首地址,在棧中的這個特殊的變量就變成了數組或者對象的引用變量,之後就能夠在程序中使用棧內存中的引用變量來訪問堆中的數組或者對象,引用變量至關於爲數組或者對象起的一個別名,或者代號。
-
- 引用變量是普通變量,定義時在棧中分配內存,引用變量在程序運行到做用域外釋放。而數組&對象自己在堆中分配,即便程序運行到使用new產生數組和對象的語句所在地代碼塊以外,數組和對象自己佔用的堆內存也不會被釋放,數組和對象在沒有引用變量指向它的時候,才變成垃圾,不能再被使用,可是仍然佔着內存,在隨後的一個不肯定的時間被垃圾回收器釋放掉。這個也是java比較佔內存的主要緣由。可是在寫程序的時候,能夠人爲的控制
-
- 5. Character類有哪些經常使用方法? [難]
- charValue()
- 返回字符對象對應的值。
- digit(char, int)
- 以指定基數返回字符 ch 對應的數值。
- equals(Object)
- 比較該對象和指定對象。
- forDigit(int, int)
- 肯定以指定基數指定的數對應的字符。
- getNumericValue(char)
- 返回此字符對應的 Unicode 的非負整型值。
- getType(char)
- 返回一個表示字符種類的值。
- hashCode()
- 返回此字符對應的哈希碼。
- isDefined(char)
- 斷定一個字符在 Unicode 中是否有定義。
- isDigit(char)
- 斷定指定字符是否爲數字。
- isIdentifierIgnorable(char)
- 斷定指定字符在 Java 標識符中或 Unicode 標識符中是否應看做是一個可忽略字符。
- isISOControl(char)
- 斷定指定字符是否爲 ISO 控制字符。
- isJavaIdentifierPart(char)
- 斷定指定字符是否爲 Java 標識符中除首字符外的字符。
- isJavaIdentifierStart(char)
- 斷定指定字符是否可做爲 Java 標識符的首字符。
- isJavaLetter(char)
- 斷定指定字符是否爲 Java 字母,如果,它可做爲 Java 語言中一個標識符的首字符。 不推薦使用該方法。
- isJavaLetterOrDigit(char)
- 斷定指定字符是否爲 Java 字母或數字,如果,它可做爲 Java 語言中的一個標識符除首字符外的字符。 不推薦使用該方法。
- isLetter(char)
- 斷定指定字符是否爲字母。
- isLetterOrDigit(char)
- 斷定指定字符是否爲字母或數字。
- isLowerCase(char)
- 斷定指定字符是否爲小寫字符。
- isSpace(char)
- 斷定指定字符是否爲 ISO-LATIN-1 空格。 不推薦使用該方法。
- isSpaceChar(char)
- 斷定指定字符是否爲 Unicode 空白字符。
- isTitleCase(char)
- 斷定指定字符是否爲標題字符。
- isUnicodeIdentifierPart(char)
- 斷定指定字符是否爲 Unicode 標識符中除首字符外的字符。
- isUnicodeIdentifierStart(char)
- 斷定指定字符是否可做爲 Unicode 標識符首字符。
- isUpperCase(char)
- 斷定指定字符是否爲大寫字符。
- isWhitespace(char)
- 據 Java 語言,斷定指定字符是否爲空格。
- toLowerCase(char)
- 將給定字符映射爲對應的小寫字符,若沒有對應的小寫字符,返回此字符自己。
- toString()
- 返回表示此字符值的串對象。
- toTitleCase(char)
- 將字符參數轉換爲標題字符。
- toUpperCase(char)
- 將字符參數轉換爲大寫字符。
- 5.Boolean類有哪些方法?
- booleanValue()
- 返回 Boolean 對象對應的布爾值。
- equals(Object)
- 當且僅當參數非空,且是包含與此對象相同的布爾值的布爾對象時,返回 true。
- getBoolean(String)
- 當且僅當以參數命名的系統屬性存在,且等於 "true" 時,返回爲 true。
- hashCode()
- 返回此布爾值對應的哈希碼。
- toString()
- 返回表示當前布爾值的一個串對象。
- valueOf(String)
- 返回表示指定串的布爾值。
-
- 6. String s = new String("xyz");建立了幾個String Object? [中]
- 兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
- 7. String與StringBuffer有什麼區別? [難]
- 從表面看來String類只用一個加號(+)便完成了字符串的拼接,而StringBuffer類卻要調用一個append()方法,是否實現起來更簡潔,更單純呢?其實否則,讓咱們瞭解一下程序運行內部發生了哪些事情:
-
- 經編譯後程序的bytecode(字節碼)展現出了實質: 在用String類對象直接拼接時,JVM會建立一個臨時的StringBuffer類對象,並調用其append()方法完成字符串的拼接,這是由於String類是不可變的,拼接操做不得不使用StringBuffer類(而且--JVM會將"You are nice."和"I love you so much."建立爲兩個新的String對象)。以後,再將這個臨時StringBuffer對象轉型爲一個String,代價不菲!可見,在這一個簡單的一次拼接過程當中,咱們讓程序建立了四個對象:兩個待拼接的String,一個臨時StringBuffer,和最後將StringBuffer轉型成爲的String--它固然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。
-
- 而若是直接使用StringBuffer類,程序將只產生兩個對象:最初的StringBuffer和拼接時的String("I love you so much."),也再也不須要建立臨時的StringBuffer類對象然後還得將其轉換回String對象。
-
- short s1 = 1; s1 = s1 + 1;有什麼錯?
- short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型)
- short s1 = 1; s1 += 1;有什麼錯?
- short s1 = 1; s1 += 1;(能夠正確編譯)
-
- 8. 是否能夠繼承String類? [難]
- String類是final類故不能夠繼承。
-
-
- 9. throw與throws有什麼區別? [中]
-
- throws是用來聲明一個方法可能拋出的全部異常信息
- throw則是指拋出的一個具體的異常類型。
- 一般在一個方法(類)的聲明處經過throws聲明方法(類)可能拋出的異常信息,而在方法(類)內部經過throw聲明一個具體的異常信息。
- throws一般不用顯示的捕獲異常,可由系統自動將全部捕獲的異常信息拋給上級方法;
- throw則須要用戶本身捕獲相關的異常,然後在對其進行相關包裝,最後在將包裝後的異常信息拋出。
-
- throws語句
- throws用來標明一個成員函數可能拋出的各類"異常"。對大多數Exception子類來講,Java編譯器會強迫你聲明在一個成員函數中拋出的"異常"的類型。若是"異常"的類型是Error或RuntimeException,或它們的子類,這個規則不起做用,由於這copy;在程序 的正常部分中是不期待出現的。若是你想明確地拋出一個RuntimeException,你必須用throws語句來聲明它的類型。這就從新定義了成員函數的定義語法:type method-name(arg-list) throws exception-list { }下面是一段程序,它拋出了一個"異常", 但既沒有捕捉它,也沒有用throws來聲明。這在編譯時將不會經過。
-
- try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?
- 會執行,在return前執行。
-
- 10. 常見的runtime exception有哪些?。 [中]
- ArithmeticException,
- ArrayStoreException,
- BufferOverflowException,
- BufferUnderflowException,
- CannotRedoException, CannotUndoException,
- ClassCastException,
- CMMException,
- ConcurrentModificationException,
- DOMException,
- EmptyStackException, IllegalArgumentException,
- IllegalMonitorStateException,
- IllegalPathStateException,
- IllegalStateException,
- ImagingOpException, IndexOutOfBoundsException,
- MissingResourceException,
- NegativeArraySizeException,
- NoSuchElementException, NullPointerException,
- ProfileDataException,
- ProviderException,
- RasterFormatException,
- SecurityException,
- SystemException, UndeclaredThrowableException,
- UnmodifiableSetException,
- UnsupportedOperationException
- NullPointException
-
- 11. 介紹JAVA中的Collection FrameWork(包括如何寫本身的數據結構)? [難]
- 答:Collection FrameWork以下:
- Collection
- ├List
- │├LinkedList
- │├ArrayList
- │└Vector
- │ └Stack
- └Set
- Map
- ├Hashtable
- ├HashMap
- └WeakHashMap
- Collection是最基本的集合接口,一個Collection表明一組Object,即Collection的元素(Elements)
- Map提供key到value的映射
-
-
- 12. ArrayList和Vector的區別,HashMap和Hashtable的區別 [難]
- 答:就ArrayList與Vector主要從二方面來講.
- 一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
- 二.數據增加:當須要增加時,Vector 默認增加爲原來一培,而ArrayList倒是原來的一半
- 就HashMap與HashTable主要從三方面來講。
- 一.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
- 二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
- 三.值:只有HashMap可讓你將空值做爲一個表的條目的key或value
-
-
- 13. Math.round(11.5)等於多少? Math.round(-11.5)等於多少? [難]
- Math.round(11.5)==12
- Math.round(-11.5)==-11
- round方法返回與參數最接近的長整數.
- 14. swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上? [難]
- switch(expr1)中,expr1是一個整數表達式。應該是 int、 short、 char byte。
- long,string 都不能做用於swtich。
-
-
- 15. GC是什麼? 爲何要有GC? [難]
- GC是垃圾收集的意思(Gabage Collection)
- Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,
- Java語言沒有提供釋放已分配內存的顯示操做方法。
-
-
-
- 16. 什麼叫方法重載 [中]
- 方法重載就是一個同名方法,有多種不一樣的簽名
- 說白了就是一個同名方法能夠傳入不一樣個數或類型的參數
- 之間能夠互相調用
-
-
- 17. 數組有沒有length()這個方法? String有沒有length()這個方法? [中]
- 數組沒有length()這個方法,有length的屬性。String有有length()這個方法
-
- 18. 什麼是抽象類抽象類 [中]
- 僅提供一個類型的部分實現。抽象類能夠有實例變量,以及一個或多個構造函數。抽象類能夠同時有抽象方法和具體方法。一個抽象類不會有實例,這些構造函數不能被客戶端調用來建立實例。一個抽象類的構造函數能夠被其子類調用,從而使一個抽象類的全部子類均可以有一些共同的實現,而不一樣的子類能夠在此基礎上有其本身的實現。
-
- 19. 抽象類的用途 [中]
- 1) 具體類不是用來繼承的。 Scott Meyers曾指出,只要有可能,不要叢具體類繼承。2) 假設有2個具體類,類A和類B,類B是類A 的子類,那麼一個最簡單的修改方案是應當創建一個抽象類(或java接口)C,而後讓類A和類B成爲抽象類C的子類。3) 抽象類應當擁有儘量多的共同代碼。以提升代碼的複用率。4) 抽象類應當擁有儘量少的數據。
- 20 .java中接口有什麼用? [難]
- java不容許多重繼承,也就是說一個子類只能有一個父類,Son extends FatherA,FatherB 是錯誤的
- 爲了彌補這點不足,java容許實現多個接口,Son extends FatherA implements AnotherFatherA,AnotherFatherB是容許的
- 接口中的方法沒有實體,就這一點而言就至關於abstact class,如:
- interface ainter{
- void dosth(int i);
- }
- ainter是一個接口,它僅僅聲明瞭一個方法dosth,而沒有具體實現它
- class aclass implements ainter
- {
- public void dosth(int i) {
-
- //在這裏你能夠不做任何處理,可是必須實現方法體
- }
- }
- aclass實現了ainter這個接口,所以它必須實現ainter中的方法dosth
-
- 21. 什麼叫方法重載 [易]
- 方法重載就是一個同名方法,有多種不一樣的簽名
- 說白了就是一個同名方法能夠傳入不一樣個數或類型的參數
- 之間能夠互相調用
-
-
- 22. 垃圾回收機制的原理? [難]
- 在JAVA中 ,JAVA VM 每隔一段時間就會查看每一塊由NEW分配的內存空間,看指向它的有效引用是否存在,若是這個引用不存在,系統會自動將這塊空間納入空閒內存區.這個過程被稱爲 垃圾收集.
-
-
- 23.. 什麼叫面向對象? [中]
- 面向對象是一種新興的程序設計方法,或者是一種新的程序設計規範(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟件系統,而且在系統構造中儘量運用人類的天然思惟方式。開發一個軟件是爲了解決某些問題,這些問題所涉及的業務範圍稱做該軟件的問題域。其應用領域不只僅是軟件,還有計算機體系結構和人工智能等。
-
-
-
- 24. 面向對象的涉及方法有哪些? [中]
- OOA-Object Oriented Analysis 面向對象的分析
-
- OOD-Object Oriented Design 面向對象的設計
-
- OOI-Object Oriented Implementation 面向對象的實現
-
-
- 25. jvm工做原理 [難]
- 運行jvm 字符碼的工做是由解釋器來完成的。解釋執行過程分三步進行:
-
- 代碼的裝入、代碼的校驗、和代碼的執行。
- 裝入代碼的工做由「類裝載器class loader」完成。類裝載器負責裝入運
-
- 行一個程序須要的全部代碼,這也包括程序代碼中的類所繼承的類和被調
-
- 用的類。當類裝載器裝入一個類時,該類被放在本身的名字空間中。除了
-
- 經過符號引用本身名字空間之外的類,類之間沒有其餘辦法能夠影響其餘
-
- 類。在本臺計算機的全部類都在同一地址空間中,而全部從外部引進的類
-
- ,都有一個本身獨立的名字空間。這使得本地類經過共享相同的名字空間
-
- 得到較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。
-
- 當裝入了運行程序須要的全部類後,解釋器即可肯定整個可執行程序的內
-
- 存佈局。解釋器爲符號引用與特定的地址空間創建對應關係及查詢表。通
-
- 過在這一階段肯定代碼的內佈局,java很好地解決了由超類改變而使子類
-
- 崩潰的問題,同時也防止了代碼的非法訪問。
- 隨後,被裝入的代碼由字節碼校驗器進行檢查。校驗器能夠發現操做數棧
-
- 益處、非法數據類型轉化等多種錯誤。經過校驗後,代碼便開始執行了。
- java字節碼的執行有兩種方式:
- 1) 即時編譯方式:解釋器先將字節編譯成機器碼,而後再執行該機器碼
- 。
- 2)解釋執行方式:解釋器經過每次解釋並執行一小段代碼來完成java字節
-
- 碼程序的全部操做。
-
-
-
- 26. .java中輸入輸出流有哪些相關的類? [難]
- Input和Output
- 1. stream表明的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,全部的stream(包括Input和Out stream)都包括兩種類型:
-
- 1.1 以字節爲導向的stream
- 以字節爲導向的stream,表示以字節爲單位從stream中讀取或往stream中寫入信息。以字節爲導向的stream包括下面幾種類型:
- 1) input stream:
- 1) ByteArrayInputStream:把內存中的一個緩衝區做爲InputStream使用
- 2) StringBufferInputStream:把一個String對象做爲InputStream
- 3) FileInputStream:把一個文件做爲InputStream,實現對文件的讀取操做
- 4) PipedInputStream:實現了pipe的概念,主要在線程中使用
- 5) SequenceInputStream:把多個InputStream合併爲一個InputStream
- 2) Out stream
- 1) ByteArrayOutputStream:把信息存入內存中的一個緩衝區中
- 2) FileOutputStream:把信息存入文件中
- 3) PipedOutputStream:實現了pipe的概念,主要在線程中使用
- 4) SequenceOutputStream:把多個OutStream合併爲一個OutStream
- 1.2 以Unicode字符爲導向的stream
- 以Unicode字符爲導向的stream,表示以Unicode字符爲單位從stream中讀取或往stream中寫入信息。以Unicode字符爲導向的stream包括下面幾種類型:
- 1) Input Stream
- 1) CharArrayReader:與ByteArrayInputStream對應
- 2) StringReader:與StringBufferInputStream對應
- 3) FileReader:與FileInputStream對應
- 4) PipedReader:與PipedInputStream對應
- 2) Out Stream
- 1) CharArrayWrite:與ByteArrayOutputStream對應
- 2) StringWrite:無與之對應的以字節爲導向的stream
- 3) FileWrite:與FileOutputStream對應
- 4) PipedWrite:與PipedOutputStream對應
- 以字符爲導向的stream基本上對有與之相對應的以字節爲導向的stream。兩個對應類實現的功能相同,字是在操做時的導向不一樣。
- 如CharArrayReader:和ByteArrayInputStream的做用都是把內存中的一個緩衝區做爲InputStream使用,所不一樣的是前者每次從內存中讀取一個字節的信息,然後者每次從內存中讀取一個字符。
- 1.3 兩種不現導向的stream之間的轉換
- InputStreamReader和OutputStreamReader:把一個以字節爲導向的stream轉換成一個以字符爲導向的stream。
- 2. stream添加屬性
- 2.1 「爲stream添加屬性」的做用
- 運用上面介紹的Java中操做IO的API,咱們就可完成咱們想完成的任何操做了。但經過FilterInputStream和FilterOutStream的子類,咱們能夠爲stream添加屬性。下面以一個例子來講明這種功能的做用。
- 若是咱們要往一個文件中寫入數據,咱們能夠這樣操做:
- FileOutStream fs = new FileOutStream(「test.txt」);
- 而後就能夠經過產生的fs對象調用write()函數來往test.txt文件中寫入數據了。可是,若是咱們想實現「先把要寫入文件的數據先緩存到內存中,再把緩存中的數據寫入文件中」的功能時,上面的API就沒有一個能知足咱們的需求了。可是經過FilterInputStream和FilterOutStream的子類,爲FileOutStream添加咱們所須要的功能。
- 2.2 FilterInputStream的各類類型
- 2.2.1 用於封裝以字節爲導向的InputStream
- 1) DataInputStream:從stream中讀取基本類型(int、char等)數據。
- 2) BufferedInputStream:使用緩衝區
- 3) LineNumberInputStream:會記錄input stream內的行數,而後能夠調用getLineNumber()和setLineNumber(int)
- 4) PushbackInputStream:不多用到,通常用於編譯器開發
- 2.2.2 用於封裝以字符爲導向的InputStream
- 1) 沒有與DataInputStream對應的類。除非在要使用readLine()時改用BufferedReader,不然使用DataInputStream
- 2) BufferedReader:與BufferedInputStream對應
- 3) LineNumberReader:與LineNumberInputStream對應
- 4) PushBackReader:與PushbackInputStream對應
- 2.3 FilterOutStream的各類類型
- 2.2.3 用於封裝以字節爲導向的OutputStream
- 1) DataIOutStream:往stream中輸出基本類型(int、char等)數據。
- 2) BufferedOutStream:使用緩衝區
- 3) PrintStream:產生格式化輸出
- 2.2.4 用於封裝以字符爲導向的OutputStream
- 1) BufferedWrite:與對應
- 2) PrintWrite:與對應
- 3. RandomAccessFile
- 1) 可經過RandomAccessFile對象完成對文件的讀寫操做
- 2) 在產生一個對象時,可指明要打開的文件的性質:r,只讀;w,只寫;rw可讀寫
- 3) 能夠直接跳到文件中指定的位置
- 4. I/O應用的一個例子
- import java.io.*;
- public class TestIO{
- public static void main(String[] args)
- throws IOException{
- //1.以行爲單位從一個文件讀取數據
- BufferedReader in =
- new BufferedReader(
- new FileReader("F:\\nepalon\\TestIO.java"));
- String s, s2 = new String();
- while((s = in.readLine()) != null)
- s2 += s + "\n";
- in.close();
-
- //1b. 接收鍵盤的輸入
- BufferedReader stdin =
- new BufferedReader(
- new InputStreamReader(System.in));
- System.out.println("Enter a line:");
- System.out.println(stdin.readLine());
-
- //2. 從一個String對象中讀取數據
- StringReader in2 = new StringReader(s2);
- int c;
- while((c = in2.read()) != -1)
- System.out.println((char)c);
- in2.close();
-
- //3. 從內存取出格式化輸入
- try{
- DataInputStream in3 =
- new DataInputStream(
- new ByteArrayInputStream(s2.getBytes()));
- while(true)
- System.out.println((char)in3.readByte());
- }
- catch(EOFException e){
- System.out.println("End of stream");
- }
-
- //4. 輸出到文件
- try{
- BufferedReader in4 =
- new BufferedReader(
- new StringReader(s2));
- PrintWriter out1 =
- new PrintWriter(
- new BufferedWriter(
- new FileWriter("F:\\nepalon\\ TestIO.out")));
- int lineCount = 1;
- while((s = in4.readLine()) != null)
- out1.println(lineCount++ + ":" + s);
- out1.close();
- in4.close();
- }
- atch(EOFException ex){
- System.out.println("End of stream");
- }
-
- //5. 數據的存儲和恢復
- try{
- DataOutputStream out2 =
- new DataOutputStream(
- new BufferedOutputStream(
- new FileOutputStream("F:\\nepalon\\ Data.txt")));
- out2.writeDouble(3.1415926);
- out2.writeChars("\nThas was pi:writeChars\n");
- out2.writeBytes("Thas was pi:writeByte\n");
- out2.close();
- DataInputStream in5 =
- new DataInputStream(
- new BufferedInputStream(
- new FileInputStream("F:\\nepalon\\ Data.txt")));
- BufferedReader in5br =
- new BufferedReader(
- new InputStreamReader(in5));
- System.out.println(in5.readDouble());
- System.out.println(in5br.readLine());
- System.out.println(in5br.readLine());
- }
- catch(EOFException e){
- System.out.println("End of stream");
- }
-
-
- 27. 構造器Constructor是否可被(覆蓋)override? [難]
- 構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
-
-
- 28. JAVA反射機制做用是什麼? [難]
- 能夠於運行時加載、探知、使用編譯期間徹底未知的
- classes。換句話說,Java程序能夠加載一個運行時才得知名稱
- 的class,獲悉其完整構造(但不包括methods定義),並生成其
- 對象實體、或對其fields設值、或喚起其methods1。
-
-
-
-
- 29. web應用程序體系結構是怎樣的? [難]
- 通常分爲表示層、業務層、數據存取層
- 30. .GET和POST有什麼區別? [難]
- GET是明碼傳遞,POST是暗碼傳遞
-
-
- 31. HTTP協議的特色? [中]
- 使用端口發送和接受消息 。端口是協議發送和接收數據的信道或機制 ,80是默認端口
- 經過這種協議傳遞數據服務器不會保存鏈接信息,所以又稱爲鏈接信息。
-
- 32. 如何經過RandomAccessFile操做文件 [難]
- RandomAccessFile rf =
- new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
- for(int i=0; i<10; i++)
- rf.writeDouble(i*1.414);
- rf.close();
-
- rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
- for(int i=0; i<10; i++)
- System.out.println("Value " + i + ":" + rf.readDouble());
- rf.close();
-
- rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
- rf.seek(5*8);
- rf.writeDouble(47.0001);
- rf.close();
-
- rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
- for(int i=0; i<10; i++)
- System.out.println("Value " + i + ":" + rf.readDouble());
- rf.close();
- }
- }
-
-
- 32. 靜態方法有什麼好處? [難]
-
- (1)在Java裏,能夠定義一個不須要建立對象的方法,這種方法就是靜態方法。要實現這樣的效果,只須要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)
- 使用類的靜態方法時,注意:
- a) 在靜態方法裏只能直接調用同類中其餘的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是由於,對於非靜態的方法和變量,須要先建立類的實例對象後纔可以使用,而靜態方法在使用前不用建立任何對象。
- b) 靜態方法不能以任何方式引用this和super關鍵字,由於靜態方法在使用前不用建立任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生。
- (2)靜態變量是屬於整個類的變量而不是屬於某個對象的。注意不能把任何方法體內的變量聲明爲靜態,例如:
- fun()
- {
- static int i=0;//非法。
- }
- (3)一個類可使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且之被執行一次,靜態塊經常使用來執行類屬性的初始化。例如:
- static
- {
- }
-
-
- 33. Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別? [中]
- Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判斷兩個對象是否相等。
-
-
-
- 34. JAVA中的靜態方法有什麼理解? [難]
-
- 在Java裏,能夠定義一個不須要建立對象的方法,這種方法就是靜態方法。要實現這樣的效果,只須要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)
- 使用類的靜態方法時,注意:
- a) 在靜態方法裏只能直接調用同類中其餘的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是由於,對於非靜態的方法和變量,須要先建立類的實例對象後纔可以使用,而靜態方法在使用前不用建立任何對象。
- b) 靜態方法不能以任何方式引用this和super關鍵字,由於靜態方法在使用前不用建立任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生。
- (2)靜態變量是屬於整個類的變量而不是屬於某個對象的。注意不能把任何方法體內的變量聲明爲靜態,例如:
- fun()
- {
- static int i=0;//非法。
- }
- (3)一個類可使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且之被執行一次,靜態塊經常使用來執行類屬性的初始化。例如:
- static
- {
- }
-
- 35. JSP中動態INCLUDE與靜態INCLUDE的區別? [難]
- 動態INCLUDE用jsp:include動做實現 <jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件中的變化,
- 適合用於包含動態頁面,而且能夠帶參數。
- 靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>
-
-
- 36. Java有沒有goto?
- java中的保留字,如今沒有在java中使用。
-
- 37. 啓動一個線程是用run()仍是start()? [難]
- 啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。
-
-
- 38. swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上? [易]
- switch(expr1)中,expr1是一個整數表達式。應該是 int、 short、 char byte。
- long,string 都不能做用於swtich。
-
- 39. try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後? [難]
- 會執行,在return前執行。
-
- 40. 兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
- 不對,有相同的hash code。 [易]
- \
- 41. char型變量中能不能存貯一箇中文漢字?爲何? [難]
- 能夠,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的
-
- 42. Java中的線程有四種狀態分別是是什麼? [難]
- 運行、就緒、掛起、結束。
-
- 43. java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類? [難]
- 字節流,字符流。
- 字節流繼承於InputStream \ OutputStream,
- 字符流繼承於InputStreamReader \ OutputStreamWriter。
-
- 44. 靜態變量和實例變量的區別? [中]
- static i = 10; //常量
- class A a; a.i =10;//可變
-
- 45. 什麼是java序列化,如何實現java序列化? [難]
- 序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
- 序列化的實現:
- 將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化
-
- 46. 是否能夠從一個static方法內部發出對非static方法的調用? [難]
- 不能夠,若是其中包含對象的method();不能保證對象初始化.
-
- 47. 在JAVA中,如何跳出當前的多重嵌套循環? [難]
- 用break; return 方法。
-
- 48. 面向對象的特徵有哪些方面 [中]
- 1.抽象:
- 抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
- 2.繼承:
- 繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要。
- 3.封裝:
- 封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。
- 4. 多態性:
- 多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。
-
- 49. String是最基本的數據類型嗎? [中]
- 基本數據類型包括byte、int、char、long、float、double、boolean和short。
- java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類
- 50. int 和 Integer 有什麼區別 [中]
- Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類。Java爲每一個原始類型提供了封裝類。
-
- 51. 運行時異常與通常異常有何異同? [ 難]
- 異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。
-
- 52. &和&&的區別。 [ 中]
- &是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
-
- 53. final, finally, finalize的區別。 [中]
- final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
- finally是異常處理語句結構的一部分,表示老是執行。
- finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
-
-
- Jsp/servlet面試題
- 1. 四種會話跟蹤技術是什麼?(jsp) (中)
- 答:cookie,url重寫,session,隱藏表單域。
- 2.不一樣客戶端可不能夠共享Session?不能夠 (易)
- Jps和Servlet之間可不能夠用session傳值?能夠
- 3.簡介cookie的有關知識 (中)
- 瀏覽器與WEB服務器之間是使用HTTP協議進行通訊的,當某個用戶發出頁面請求時,WEB服務器只是簡單的進行響應,而後就關閉與該用戶的鏈接。所以當一個請求發送到WEB服務器時,不管其是不是第一次來訪,服務器都會把它看成第一次來對待,這樣的很差之處可想而知。爲了彌補這個缺陷,Netscape 開發出了cookie這個有效的工具來保存某個用戶的識別信息,所以人們暱稱爲「小甜餅」。cookies是一種WEB服務器經過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個名爲cookies.txt本地文件保存從全部站點接收的Cookie信息;而IE瀏覽器把Cookie信息保存在相似於C: \windows\cookies的目錄下。當用戶再次訪問某個站點時,服務端將要求瀏覽器查找並返回先前發送的Cookie信息,來識別這個用戶。
- cookies給網站和用戶帶來的好處很是多:
- 一、Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑
- 二、Cookie能告訴在線廣告商廣告被點擊的次數 ,從而能夠更精確的投放廣告
- 三、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的狀況下進入曾經瀏覽過的一些站點
- 四、Cookie能幫助站點統計用戶我的資料以實現各類各樣的個性化服務
- JSP是使用以下的語法格式來建立cookie的:
- Cookie cookie_name =new Cookie(""Parameter"",""Value"");
- 例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);
-
- 4.在瀏覽器的打開時再新打開一個瀏覽器仍是同一個session嗎? (中)
- 對IE而言不是同一個SESSION
- 5.描述Cookie和Session的做用,區別和各自的應用範圍 (中)
- Cookie和Session均可以用來在多個頁面之間共享數據,區別是Cookie保存在客戶端,能夠設置比較長的保存時間.而Session保存在服務器端,一般生存時間較短。若是客戶端禁用了Cookie,Cookie將沒法工做,而session不受這一影響。通常來講保密性高、保存時間短的信息適合用session來存放,而Cookie適合存放須要長期保存的非敏感數據。
-
- 6.如何實現購物車添加新項,又不使購物車中原有項目被取消? (易)
- 能夠將購物車存放在session當中
-
- 7.Cookie的過時時間如何設置? (易)
- 使用setMaxAge(int exp)方法
-
- 8.若是BROWSER已關閉了cookies,在JSP中我如何打開session? (中)
- 若是Cookie被禁用,session將經過url重寫的方式來傳送,因此不會影響session的使用
-
- 9.include指令和include動做的區別 (中)
-
- 10. Jsp有哪些經常使用動做?做用分別是什麼?(jsp) (中)
- 答:JSP有6種經常使用基本動做 jsp:include:在頁面被請求的時候引入一個文件。
- jsp:useBean:尋找或者實例化一個JavaBean。
- jsp:setProperty:設置JavaBean的屬性。
- jsp:getProperty:輸出某個JavaBean的屬性。
- jsp:forward:把請求轉到一個新的頁面。
- jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。
-
- 11. "forward與redirect區別? (中)
- Forward是在服務器端進行分發,分發後地址欄無變化,用戶看不到分發後的地址.而redirect是在客戶端進行的頁面重定向,地址欄上會顯示重定向後的網頁.forward的頁面只能是在同一個web應用程序以內,而重定向能夠定位到外部資源.forward後仍是同一個request請求,而重定向後之前的request請求就不存在了.
-
- 12.Jsp和Servlet中的請求轉發分別如何實現? (易)
- Jsp中使用<jsp:forward>動做,servlet中使用RequestDistpatcher對象的forward方法"
-
- 13.什麼是web容器?(易)
- 答:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,沒必要關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵照J2EE規範中的WEB APPLICATION 標準。咱們把遵照以上標準的WEB服務器就叫作J2EE中的WEB容器。
-
- 14.應用服務器有那些? (中)
- 答:BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。"
-
- 15.請說出JSP的內置對象及方法 (中)
- 答:request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie,
- header, 和session數據的有用的方法。
- response表示HttpServletResponse對象,並提供了幾個用於設置送回
- 瀏覽器的響應的方法(如cookies,頭信息等)
- out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
- pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,而且包裝了通用的servlet相關功能的方法。
- session表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息
- applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息
- config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
- page表示從該頁面產生的一個servlet實例。
-
- 16.使用JSP如何得到客戶瀏覽器的信息? (易)
- request對象的getXXXX方法"