




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
設計模式6大原則1、開閉原則(OpenClosePrinciple)開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,后面的具體設計中我們會提到這點。2、里氏代換原則(LiskovSubstitutionPrinciple )里氏代換原則(LiskovSubstitutionPrincipleLSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規(guī)范。——FromBaidu百科3、依賴倒轉原則(DependenceInversionPrinciple)這個是開閉原則的基礎,具體內容:真對接口編程,依賴于抽象而不依賴于具體。4、接口隔離原則(InterfaceSegregationPrinciple )這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發(fā),為了升級和維護方便。所以上文中多次出現:降低依賴,降低耦合。5、迪米特法則(最少知道原則)(DemeterPrinciple)為什么叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立。6、合成復用原則(CompositeReusePrinciple)原則是盡量使用合成/聚合的方式,而不是使用繼承1、寫出常用的設計模式,如單例、工廠、裝飾者、觀察者等模式,分別介紹他們運用的場景關于標準的JDK庫中使用的一些設計模式Decorator設計模式常被用于各種JavaIO類中Singleton模式常被用在運行環(huán)節(jié)中,Calendar以及各種其他類Factory(工廠)模式常被用于各種不可變類,比如Boolean。Boolean.valueOfObserver模式常被用于Swing和許多事件監(jiān)聽器框架中。在Java中Singleton設計模式是什么?為線程安全Singleton編碼。Singleton模式在整個系統(tǒng)中主要是共享模式。在整個應用程序實例中只保持一個特定的類,這是由所以模塊共享決定的。Java.lang.Runtime是Singleton設計模式中一個典型范例。從Java5版本開始,你可以為安全線程singleton模式使用enum舉例說明你什么時候會用抽象類,什么時候更愿意使用接口?抽象類是一種模板,而接口是一種規(guī)范在Java中,你只能繼承一個類,但實現多個接口。所以你繼承一個類的時候就無法再繼承別的類了。接口是用來代表形容詞或行為,例如Runnable、Clonable、Serializable等。因此,如果您使用一個抽象類來實現Runnable和Clonacle,你就不可以使你的類同時實現這兩個功能,而如果接口的話就沒問題。抽象類是比接口稍快,所以很在乎時間的應用盡量使用抽象類。如果多個繼承層次的共同行為在在同一個地方編寫更好,那么抽象類會是更好的選擇。有時候可以在接口里定義函數但是在抽象類里默認功能就能實現接口和抽象類共同工作了。java設計模式面試題一、你對MVC的理解,MVC有什么優(yōu)缺點?結合Struts,說明在一個Web應用如何去使用?答:MVC設計模式(應用觀察者模式的框架模式)M:Model(Businessprocesslayer),模型,操作數據的業(yè)務處理層,并獨立于表現層(Independentofpresentation)。V:View(Presentationlayer),視圖,通過客戶端數據類型顯示數據,并回顯模型層的執(zhí)行結果。C:Controller(Controllayer) ,控制器,也就是視圖層和模型層橋梁,控制數據的流向,接受視圖層發(fā)出的事件,并重繪視圖MVC框架的一種實現模型模型二(Servlet-centric):JSPServletJavaBean,以控制為核心,JSP只負責顯示和收集數據,Sevlet,連接視圖和模型,將視圖層數據,發(fā)送給模型層,JavaBean,分為業(yè)務類和數據實體,業(yè)務類處理業(yè)務數據,數據實體,承載數據,基本上大多數的項目都是使用這種MVC的實現模式。StrutsMVC框架(Webapplicationframeworks)Struts是使用MVC的實現模式二來實現的,也就是以控制器為核心。Struts提供了一些組件使用MVC開發(fā)應用程序:Model:Struts沒有提供model類。這個商業(yè)邏輯必須由Web應用程序的開發(fā)者以JavaBean或EJB的形式提供View:Struts提供了actionform創(chuàng)建formbean,用于在controller和view間傳輸數據。此外,Struts提供了自定義JSP標簽庫,輔助開發(fā)者用JSP創(chuàng)建交互式的以表單為基礎的應用程序,應用程序資源文件保留了一些文本常量和錯誤消息,可轉變?yōu)槠渌Z言,可用于JSP中。Controller:Struts提供了一個核心的控制器ActionServlet,通過這個核心的控制器來調用其他用戶注冊了的自定義的控制器Action,自定義Action需要符合Struts的自定義Action規(guī)范,還需要在struts-config.xml的特定配置文件中進行配置,接收JSP輸入字段形成Actionform,然后調用一個Action控制器。Action控制器中提供了model的邏輯接口。二、什么是WebService?答:WebService是一個SOA(面向服務的編程)的架構,它是不依賴于語言,不依賴于平臺,可以實現不同的語言間的相互調用,通過Internet進行基于Http協(xié)議的網絡應用間的交互。WebService實現不同語言間的調用,是依托于一個標準,webservice是需要遵守WSDL(web服務定義語言)/SOAP(簡單請求協(xié)議)規(guī)范的。WebService=WSDLSOAPUDD(Iwebservice的注冊)Soap是由Soap的part和0個或多個附件組成,一般只有part,在part中有Envelope和Body。WebService是通過提供標準的協(xié)議和接口,可以讓不同的程序集成的一種SOA架構。第2頁共10頁WebService的優(yōu)點可以讓異構的程序相互訪問(跨平臺)松耦合基于標準協(xié)議(通用語言,允許其他程序訪問)WebService的基本原理ServiceProvider采用WSDL描述服務ServiceProvider采用UDDI將服務的描述文件發(fā)布到UDDI服務器(Registerserver)⑶ServiceRequestor在UDDI服務器上查詢并獲取WSDL文件Servicerequestor將請求綁定到SOAP,并訪問相應的服務。三、什么是中間件?中間件就是程序中可織入的,可重用的,與業(yè)務邏輯無關的各種組件。中間件(middleware)是基礎軟件的一大類,屬于可復用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應用軟件的中間。中間件在操作系統(tǒng)、網絡和數據庫之上,應用軟件的下層,總的作用是為處于自己上層的應用軟件提供運行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復雜的應用軟件。在眾多關于中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨立的系統(tǒng)軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件位于客戶機服務器的操作系統(tǒng)之上,管理計算資源和網絡通信。分類:數據訪問中間件,遠程調用中間件,消息中間件,交易中間件,對象中間件。舉例:,RMI(RemoteMethodInvocations,遠程調用),LoadBalancing(負載均衡,將訪問負荷分散到各個服務器中),TransparentFail-over(透明的故障切換),Clustering(集群,用多個小的服務器代替大型機),Back-end-Integration(后端集成,用現有的、新開發(fā)的系統(tǒng)如何去集成遺留的系統(tǒng)),Transaction事務(全局/局部)全局事務(分布式事務)局部事務(在同一數據庫聯接內的事務),DynamicRedeployment(動態(tài)重新部署,在不停止原系統(tǒng)的情況下,部署新的系統(tǒng)),SystemManagement(系統(tǒng)管理),Threading(多線程處理),Message-orientedMiddleware面向消息的中間件(異步的調用編程),ComponentLifeCycle(組件的生命周期管理),Resourcepooling(資源池),Security(安全),Caching(緩存)四、什么是典型的軟件三層結構?軟件設計為什么要分層?軟件分層有什么好處?答:(1)Presentationlayer(表示層)(1)表示邏輯(生成界面代碼)(2)接收請求(3)處理業(yè)務層拋出的異常(4)負責規(guī)則驗證(數據格式,數據非空等)(5)流程控制第3頁共10頁(2)Servicelayer(服務層/業(yè)務層)(1)封裝業(yè)務邏輯處理,并且對外暴露接口(2)負責事務,安全等服務(3) Persistencelayer(持久層)(1)封裝數據訪問的邏輯,暴露接口(2)提供方便的數據訪問的方案(查詢語言,API,映射機制等)Domainlayer(域層)(1)業(yè)務對象以及業(yè)務關系的表示(2)處理簡單的業(yè)務邏輯(3)域層的對象可以穿越表示層,業(yè)務層,持久層軟件分層結構使得代碼維護非常方便,設計明確,各層獨立,專注自己擅長的領域。五、什么是OOP?OOP相對于面向過程編程有哪些優(yōu)點?OOP,Object-OrientedProgramming ,面向對象編程不同于面向過程編程:(1)OOP關注對象和角色,也就是事物的本質1)OOP把客觀世界中的對象抽象成對應的類;2)通過類構造實例;3)通過依賴、繼承、實現等形式建立對象間的通信關系(2)OOP易于擴展,增加或改變業(yè)務的功能,無需大幅改動改變源代碼(3)OOP易于建模,OOP就是軟件架構師在計算機高級語言中對客觀世界的抽象和再現,人們可以很好地理解和建立起計算機中的抽象模型六、談談Overload和Override的區(qū)別。答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現。重寫Overriding是父類與子類之間多態(tài)性的一種表現,重載Overloading是一個類中多態(tài)性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。七、談談HashMap和Hashtable的區(qū)別。答:HashMap是輕量級的(線程不安全的,效率高的)集合,Hashtable是重量級的(線程安全的,效率低的)集合。都屬于Map接口的類,實現了將惟一鍵映射到特定的值上。HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。Hashtable類似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因為它是同步的。八、 請問abstractclass 和interface有什么區(qū)別?答:1) 接口沒有任何的實現,而抽象類它可以有部分的實現也可以沒有;2) 如果需要復用或者共享部分代碼,應該用抽象類而不是接口;3) 繼承無法解決類型的轉換問題,接口就是為了解決這一問題而產生的(Java的單繼第4頁共10頁承是接口產生的根本原因)接口是一種抽象的第三方規(guī)范,跟對象沒什么直接關系。九、 請問軟件開發(fā)中的設計模式你會使用哪些?答:我熟悉的設計模式有單例模式,DAO模式,模板方法,工廠模式,委托代理模式,MVC模式等。Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。Singleton模式一般形式:定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。十、類的核心特性有哪些?類具有封裝性、繼承性和多態(tài)性。封裝性:類的封裝性為類的成員提供公有、缺省、保護和私有等多級訪問權限,目的是隱藏類中的私有變量和類中方法的實現細節(jié)。繼承性:類的繼承性提供從已存在的類創(chuàng)建新類的機制,繼承(inheritance)使一個新類自動擁有被繼承類(父類)的全部成員。多態(tài)性:類的多態(tài)性提供類中方法執(zhí)行的多樣性,多態(tài)性有兩種表現形式:重載和覆蓋。十一、請問類與對象有什么區(qū)別?類類就是某一種事物的一般性的集合體,是相同或相似的各個事物共同特性的一種抽象。對象在面向對象概念中,對象(Object)是類的實例(instance)。對象與類的關系就像變量與數據類型的關系一樣。十二、寫出生產者消費者模型的實現(參照OOA/D中老師的代碼)十三、用軟件工程和Java來敘述購物車(shoppingcart)系統(tǒng)實現十四、文件系統(tǒng)的幾個類:FileInputStream、FileOutputStream、FileReader、FileWriter的區(qū)別十五、請寫出JavaAPI中最常用的五個包,并且各舉兩個類加以說明。(查閱api)十六、請問你在“電信運營支撐系統(tǒng)”中遇到了哪些問題?你是怎么解決的?做這個項目你最大的收獲是什么?(自己結合自己的項目,做一下總結,然后想想怎么去回答)十七、請說出幾個常用的異常類
答:NullpointException(空指針異常)ClassNotFoundException(類找不到異常)ClassCastException(類型轉換異常)IllegalArgumentException(非法參數異常)ArithmeticException(算術異常)NumberFormatException(數據格式異常)IndexOutOfBoundsException(數組下標越界異常)IllegalStateException(非法語句異常)十八、什么是進程和線程?兩者的區(qū)別是什么?(經常會被問道,查閱操作系統(tǒng)書,或問問陳老十九、請簡要描述一下你做的ShoppingCart項目。十九、請簡要描述一下你做的ShoppingCart項目。(自己結合自己的項目二十一、Java面向對象的四大特點二十一、Java面向對象的四大特點二十二、public,private,protected答:public:全局可見protected:繼承體系結構之間可見default(或不寫):同包可見private:本類可見。做一下總結,然后想第5頁共10想怎么去回答)二十、請問網絡7層協(xié)議,tcp/ip4二十三、名詞解釋CRM[CustomerRelationshipManagement,頁層協(xié)議是什么?,default訪問權限(可見性)客戶關系管理]ERP[EnterpriseResourcePlanning,企業(yè)資源規(guī)劃]OSS[OperationSupportSystem, 運營支撐系統(tǒng)]BSS[BusinessSupportSystem,數據定義語言]BOSS[BusinessOperationSupportSystem, 數據定義語言]OA[OfficeAutomatization,辦公自動化]HTTPOOPSOAGUIDDL[DataDefinitionLanguage,數據定義語言]DML[DataManipulationLanguage,數據操作語言]WYSIWYG所見即所得[WhatYouSeeisWhatYouGet]CMPCMTB2BC2CB2CIDEDOMClient/ServerCMMORMMISMVC第6頁共10頁MVC是Model—View—Controller 的簡寫。"Model"代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現),"View"是應用的表示面(由JSP頁面產生),"Controller"是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。OLECORBACORBA標準是公共對象請求代理結構(CommonObjectRequestBrokerArchitecture),由對象管理組織(ObjectManagementGroup,縮寫為OMG)標準化。它的組成是接口定義語言(IDL),語言綁定(binding:也譯為聯編)和允許應用程序間互操作的協(xié)議。其目的為:用不同的程序設計語言書寫在不同的進程中運行為不同的操作系統(tǒng)開發(fā)。UMLUML,標準建模語言,包含用例圖,靜態(tài)圖(包括類圖、對象圖和包圖),行為圖,交互圖(順序圖,合作圖),實現圖等。XMLCMMIJREJ2EEJ2EE是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應用模型(enterprieseapplicationmodel).在這樣的一個應用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶層(clietntier) 組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。JDKAOPOOContainerW3CJMSDomainPOJOJVMJNDIJTASOAP[SimpleObjectAccessProtocol,簡單對象訪問協(xié)議]WSDLJDOJDO是Java對象持久化的新的規(guī)范,為JavaDataObject的簡稱,也是一個用于存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,因此對開發(fā)人員來說,存儲數據對象完全不需要額外的代碼(如JDBCAPI的使用)。這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發(fā)人員解脫出來,從而集中時間和精力在業(yè)務邏輯上。另外,JDO很靈活,因為它可以在任何數據底層上運行。JDBC只是面向關系數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、XML以及對象數據庫第7頁共10頁(ODBMS)等等,使得應用可移植性更強。TDDDAOIoC[InversionofControl,控制反轉]RMIDNS[InternetDomainNameSystem,因特網域名系統(tǒng)]URLURI二十四、數據庫連接池的工作機制二十五、互聯網提供哪些服務?二十六、請寫出JSP的幾個隱含內置對象答:JSP中隱含內置對象名稱類型注釋和范圍requestjavax.servlet.http.HttpServletRequestrequestresponsejavax.servlet.http.HttpServletResponseresponsepagejavax.lang.ObjectpageExceptionjava.lang.ThrowablepagepageContextjavax.servlet.jsp.PageContextpagesessionjavax.servlet.http.HttpSessionsessionapplicationjavax.servlet.ServletContextServletContextoutjavax.servlet.jsp.JspWriterOutputStreamconfigjavax.servlet.ServletConfigServletConfigJSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):request用戶端請求,此請求會包含來自GET/POST請求的參數response網頁傳回用戶端的回應pageJSP網頁本身exception針對錯誤網頁,未捕捉的例外pageContext網頁的屬性是在這里管理session與請求有關的會話期applicationservlet正在執(zhí)行的內容out用來傳送回應的輸出configServlet的構架部件二十七、請你談談SSH整合答:SSH:Struts(表示層)Spring(業(yè)務層)Hibernate(持久層)Struts:Struts是一個表示層框架,主要作用是界面展示,接收請求,分發(fā)請求。在MVC框架中,Struts屬于VC層次,負責界面表現,負責MVC關系的分發(fā)(View:沿用JSP,HTTP,Form,Tag,Resourse;Controller:ActionServlet,struts-config.xml,Action)Hibernate:第8頁共10頁Hibernate是一個持久層框架,它只負責與關系數據庫的操作。Spring:Spring是一個業(yè)務層框架,是一個整合的框架,能夠很好地黏合表示層與持久層。二十八、應用服務器與WebServer的區(qū)別二十九、JavaServletAPI中forward()與redirect()的區(qū)別答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。三十、寫一個簡單的C/S結構程序,Java的通信編程,編程題(或問答),用JAVASOCKET編程,讀服務器幾個字符,再寫入本地顯示?答:Server端程序:packagetest;import.*;importjava.io.*;publicclassServer{privateServerSocketss;privateSocketsocket;privateBufferedReaderin;privatePrintWriterout;publicServer(){try{ss=newServerSocket(10000);while(true){socket=ss.accept();StringRemoteIP=socket.getInetAddress().getHostAddress();StringRemotePort=":"socket.getLocalPort();System.out.println("Aclientcomein!IP:"RemoteIPRemotePort);in=newBufferedReader(newInputStreamReader(socket.getInputStream()));Stringline=in.readLine();System.out.println("Cleintsendis:"line);out=newPrintWriter(socket.getOutputStream(),true);out.println("YourMessageReceived!");out.close();in.close();第9頁共10頁socket.close();}}catch(IOExceptione){out.println("wrong");}}publicstaticvoidmain(String[]args){newServer();}};Client端程序:packagetest;importjava.io.*;import.*;publicclassClient
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產計劃第1章
- 市場營銷計劃組織與審計
- 2025年黑龍江貨運叢業(yè)資格證考試題庫答案
- 2025年金昌貨運資格證模擬考試題庫
- 2025年松原貨運從業(yè)資格證考試卷
- 第2課+中華文化的世界意義高二下學期歷史統(tǒng)編版(2019)選擇性必修3
- 重慶市部分區(qū)2024-2025學年高二(上)期末物理試卷【含解析】
- 四川省達州市2023-2024學年高一(上)期末物理試卷【含解析】
- 小升初統(tǒng)編版語文銜接課程:《從感知比喻到運用比喻》教學設計001
- 智能手機用戶位置隱私保護
- 工業(yè)引風機知識培訓課件
- 《喜劇天賦提升》課件
- 第16課《青春之光》教學設計 2024-2025學年統(tǒng)編版語文七年級下冊
- 2025年哈爾濱幼兒師范高等??茖W校單招職業(yè)技能測試題庫1套
- 2025年湖南城建職業(yè)技術學院單招職業(yè)傾向性測試題庫及答案一套
- 2025廣東省安全員A證考試題庫
- 2025年廣東深圳高三一模高考英語試卷試題(含答案詳解)
- 《酒店服務禮儀細節(jié)》課件
- 《建筑工程混凝土施工質量控制課件》
- 2025-2030年中國煤炭行業(yè)發(fā)展動態(tài)及前景趨勢分析報告
- 工程機械租賃服務方案及保障措施投標方案文件
評論
0/150
提交評論