M:model代表的是應用的業務邏輯,通過Javabeen,EJB實現, V:view代表的是應用的表示面,有jsp頁面產生 C:controller提供應用的處理過程機制,一般是一個servlet,通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用 Jav ...
- MVC的各個部分都有哪些技術來實現?如何實現?
M:model代表的是應用的業務邏輯,通過Javabeen,EJB實現,
V:view代表的是應用的表示面,有jsp頁面產生
C:controller提供應用的處理過程機制,一般是一個servlet,通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用
- J2EE常用的設計模式有哪些?說明工廠模式?
Java中的23種設計模式:
Factory(工廠模式),Builder(建造模式),Factory Method(工廠方法模式),Prototype(原始模型模式),Singleton(單例模式),Facade(門面模式),Adapter(適配器模式),Bridge(橋梁模式), Composite(合成模式),Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),Observer(觀察者模式), State(狀態模式), Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
- 什麼是java虛擬機?為什麼java被稱作是“平臺無關的編程語言?”
Java虛擬機是指在實際的電腦上模擬模擬各種電腦功能實現的,java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。
Java虛擬機屏蔽了與具體操作系統平臺相關的信息,使得Java程式只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平臺上不加修改地運行。
- JDK和JRE的區別是什麼?
JDK包含了JRE,但是JRE是可以獨立安裝的
JDK是Java Development Kit的縮寫,是Java的開發工具包,主要包含了各種類庫和工具
JRE是Java Runtime Environment的縮寫,是Java程式的運行環境。既然是運行,當然要包含JVM,也就是所謂的Java虛擬機,還有所以的Java類庫的class文件,都在lib目錄下,並且都打包成了jar。
- String、StringBuffer、StringBuilder之間的區別?
運行速度方面:StringBuilder > StringBuffer > String String為字元串常量,而StringBuilder和StringBuffer均為字元串變數,即String對象一旦創建之後該對象是不可更改的,但後兩者的對象是變數,是可以更改的。
線程安全方面:StringBuilder是不安全的,運行速度快,而StringBuffer是線程安全的,運行速度慢。
- List、map、set三個介面,存取元素時,各有什麼特點?
List特點:元素有放入順序,元素可重覆。
Set特點:元素無放入順序,元素不可以重覆。(元素雖然無放入順序,但是元素在set中的位置是有該元素的hashcode決定的,其位置其實是固定的)
Map特點:元素按鍵值對存儲(key-value),無放入順序
List介面有是三個實現類:linkedlist,ArrayList,vector
LinkedList:底層基於鏈表實現,鏈表記憶體是散亂的,每一個元素存儲本身記憶體地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢
ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基於線程安全的,效率低
Set介面有兩個實現類:hashset(底層由hashmap實現),linkedhashset
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap
- Forward和redirect的區別?
Forward請求轉發
request.getRequestDispatcher().forward(request,response);
Redirect重定向response.sendRedirect();
請求轉發是在伺服器端完成的,重定向是在客戶端完成的
請求轉發的速度快,重定向速度慢
轉發是同一次請求,重定向是兩次請求
轉發的地址欄沒有變化,重定向地址欄有變化
轉發必須是在同一臺伺服器下完成,重定向可以在不同的伺服器下完成。
- Jsp有哪些內置對象,作用分別是什麼?
名稱 |
數據類型 |
說明 |
request |
javax.servlet.http.HttpServletRequest |
客戶端的請求信息 |
response |
javax.servlet.http.HttpServletResponse |
伺服器對客戶端的響應 |
out |
javax.servlet.jsp.JspWriter |
Web瀏覽器內輸出信息 |
page |
java.lang.Object |
page 對象代表JSP本身 |
pageContext |
javax.servlet.jsp.PageContext |
頁面屬性範圍,可以獲取其他屬性範圍對象 |
session |
javax.servlet.http.HttpSession |
會話對象 |
application |
javax.servlet.ServletContext |
應用程式範圍 |
config |
javax.servlet.ServletConfig |
Servlet初始化配置信息 |
exception |
java.lang.Throwable |
異常處理對象 |
- 兩張表,student(sid,sname,did),dep(did,tname)。學生表和院系表。
(1)請按系號升序,學號降序列出學生的系號、學號、姓名
select did,sid,sname from student order by did asc, sid desc;
(2)請分別用(1)不包含in和exists(2)包含in(3)包含exists的sql語句,查詢出所有系名等於工商院的學生。
- 請列舉三個以上Oracle索引失效的情況。
1,<> |
- 請描述Oracle資料庫啟動的三個階段?
1、startup nomount -- 啟動實例,不載入資料庫 nomount:在這一階段,只需要讀取initSID.ora文件,啟動資料庫實例,創建後臺進程。在initSID.ora文件中,可以定位SPFILEORAC.ora文件,這是參數文件,通過它可以初始化SGA和啟動後臺進程。並可以定位控制文件位置。在此階段,可以執行的操作有:重建控制文件,重建資料庫。 2、alter database mount -- 載入資料庫 mount:在nomount階段,可以通過讀取控制文件來轉換到mount階段。在資料庫載入階段(mount),所有的數據文件和聯機日誌文件的名稱和位置都從控制文件中讀取,但是並沒有真正查找這些文件。在此階段,可以執行的操作有:資料庫日誌歸檔、資料庫介質恢復、使數據文件聯機或離線、重定位數據文件和聯機日誌文件。 3、alter database open -- 打開資料庫 open:通過查找定位並打開數據文件和聯機日誌文件來切換到open階段。此時資料庫可用,可以建立會話。 |
- 使用遞歸函數計算一個階乘 如 :5!=5*4*3*2*1=120
public class JieCheng { public static int run(int n){ if (n == 1) { return n; }else { return n * run( n - 1 ); } } } |
- 編寫一段代碼,將字元串’abcdefg’倒敘輸出為’gfedcba’;
public static void main(String[] args) { String temp= ""; String str = "abcdefg"; char[] strs = str.toCharArray();
for(int i = strs.length-1; i>=0; i--){ temp += strs[i]; } System.out.print(temp); } |
- 請說明sysnchronized(鎖、線程)關鍵字的作用,在什麼情況下使用?
synchronized修飾方法和synchronized修飾代碼塊。
主要是用來處理java中的同步機制,用來防止同一個資源被用戶併發訪問時,會出現併發問題。
- 介面和抽象類有什麼區別?兩者分別在什麼情況下使用?
介面是對動作的抽象,抽象類是對根源的抽象。 抽象類表示的是,這個對象是什麼。介面表示的是,這個對象能做什麼。 1、抽象類和介面都不能直接實例化,如果要實例化,抽象類變數必須指向實現所有抽象方法的子類對象,介面變數必須指向實現所有介面方法的類對象。 2、抽象類要被子類繼承,介面要被類實現。 3、介面只能做方法申明,抽象類中可以做方法申明,也可以做方法實現 4、介面里定義的變數只能是公共的靜態的常量,抽象類中的變數是普通變數。 5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。同樣,一個實現介面的時候,如不能全部實現介面方法,那麼該類也只能為抽象類。 6、抽象方法只能申明,不能實現,介面是設計的結果 ,抽象類是重構的結果 7、抽象類里可以沒有抽象方法 8、如果一個類里有抽象方法,那麼這個類只能是抽象類 9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。 10、介面可繼承介面,並可多繼承介面,但類只能單根繼承。
|
- 從代碼編碼(採用Hibernate技術)和資料庫設計兩個層面,說出一些資料庫操作與優化方面的經驗?
a) 降低關聯的複雜性;
b) 儘量不使用聯合主鍵
c) ID的生成機制,不同的資料庫所提供的機制並不完全一樣
d) 適當的冗餘數據,不過分追求高範式
HQL優化:HQL如果拋開它同HIBERNATE本身一些緩存機制的關聯,HQL的優化技巧同普通的SQL優化技巧一樣,可以很容易在網上找到一些經驗之談。
延遲載入:a) 實體延遲載入:通過使用動態代理實現b) 集合延遲載入:通過實現自有的SET/LIST,HIBERNATE提供了這方面的支持c) 屬性延遲載入;
- 類的載入過程?
1)通過一個類的全限定名來獲取定義此類的二進位位元組流。
2)將這個位元組流所代表的靜態存儲結構轉化為方法區的運行時數據結構
3)在Java堆中生成一個代表這個類的java.lang.Class對象,作為方法區這些數據的訪問入口。
- 多線程有哪幾種實現方法?同步有哪幾種實現方法?
Java實現多線程有兩種方法:
共同點:都必須用Thread產生線程,然後再調用start()方法。 不同點:
|
同步的實現方面有兩種:分別是synchronized,wait和notity |
- 不通過new語句創建對象有哪幾種方式?
Java中創建對象有四種方式:
- 用new語句創建對象
- 運用反射機制,調用java.lang.class 或者java.lang.reflect.Constructor類的newInstance()實例方法
- 調用對象的clone()方法
- 運用反序列化手段,調用java.io.ObjectInputStream對象的readObject()方法
- 寫一個java正則表達式,用於匹配email地址(填寫表達式即可);
public static void main (String[] args) { String str = "[email protected]@sdfs.comddd"; String reg = "([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})"; Pattern pattern = Pattern.compile (reg); Matcher matcher = pattern.matcher (str); while (matcher.find()) { System.out.println (matcher.group()); } } |
- Java中的基本類型?
四類八種:數值型(整數型:byte、short、int、long
浮點型:float、double)
字元型:char
布爾型:boolean
引用類型(類class、介面interface、數組)
- 什麼是cookie?Session和cookie有什麼區別?
Cookie是web伺服器發送數據到客戶端並且將信息保存在客戶端的一種機制,用來記錄用戶的信息。
Session是服務端記錄用戶狀態時用於標識具體用戶的機制。
區別:1.cookie在客戶端,session在伺服器端 2.cookie的安全性一般,他人可以通過分析存放在本地的cookie併進行cookie欺騙。Session的安全性高於cookie。
|
- 寫出幾點java最佳編程實踐?
- Jsp中引用資源永遠使用絕對路徑src=””
- URL編碼永遠使用utf-8
- Finally 語句中不要return xx
finally語句只能做如下事件:
|
- 寫一個Singleton(單例模式)出來
懶漢模式: class Singleton { } public static Singleton getSigleton(){ s=new Singleton(); } } |
惡漢模式: Public calss Singleton{ Private singleton(){} Private static singleton instance = new singleton(); Public static singleton gettlnstance(){ Return instance; } } |
- Static和final關鍵字可以用來修飾什麼,分別起什麼作用?
Static可以修飾方法、屬性和代碼塊
--1)Static關鍵字修飾方法稱為靜態方法,靜態方法不依賴對象就可以訪問,所以對於靜態方法是沒有this的
在靜態方法中不能訪問非靜態成員方法和非靜態成員變數,但是在非靜態成員方法中是可以訪問靜態成員方法/變數的
--2)static變數也被稱為靜態變數,靜態變數和非靜態變數的區別是:靜態變數被所有的對象所共用,在記憶體中只有一個副本,它當且僅當在類初次載入時會被初始化。而非靜態變數是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
--3)static關鍵字用來形成靜態代碼塊以優化程式性能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。
Final關鍵字可以修飾類,變數,方法
修飾類不可以被繼承,但是可以繼承其他類
修飾的方法不能被子類重寫
修飾變數:a. 修飾局部變數,變為常量,只能被賦值一次
b. 修飾引用變數,變數保存的是記憶體的地址,被修飾後就不能再重新創建。
- Java有哪些異常類,請寫出最少三個,並說明他們在什麼情況下產生的?
輸入不匹配異常:InputMisMatchException
空指針異常:NullPointerException
類型強制轉換異常:ClassCastExceptin/NumberFormatExction
數組索引(下標越界異常):ArrayIndexOfBoundsExction
文件已經結束異常:EOFException
不合法參數異常:IllagalArgumentException
文件未找到異常:FileNotFoundException
操作資料庫異常:SQLException
輸入輸出異常:IOException
算數異常(除數為0):ArithmaticException
- Jsp頁面是如何執行的?Jsp執行的效率比servlet低嗎?
創建jsp頁面,將jsp頁面部署在Tomcat伺服器下
用戶第一次訪問jsp頁面時,將jsp頁面轉譯成servlet
Jspc對轉譯的servlet文件編譯成servlet.class文件
伺服器訪問servlet.class文件並將響應結果響應到客戶端
- Servlet api 中的forWord() 與 redirect() 的區別?
請求轉發(內部跳轉、伺服器跳轉):
request.getRequestDispather("地址").forward(request,response);
a、伺服器端完成跳轉,地址欄地址不會變化;
b、效率高,能繼續訪問request中的數據;
c、客戶端只發一個請求,最後獲得一個響應;
d、只能跳轉到該web應用程式的內部頁面地址;
2018年11月12日21:10:53
重定向(客戶端的跳轉):response.sendRedirect("地址");
a、伺服器與客戶端共同參與跳轉,跳轉最終客戶端發出,地址欄地址發生改變;
b、效率較低,不能繼續訪問原請求中的數據;
c、客戶端發送兩個請求,獲得兩個響應;
d、可以跳轉到網路上的任何可以訪問的地址;
- 同步請求和非同步請求有什麼不同?請描述一個使用同步請求和
非同步請求的場景。
同步:發送方發出數據後,等待收方發迴響應後才發下一個數據包的通訊方式。
非同步:發送方發出數據後,不等接收方發迴響應,接著發送下個數據包的通訊方式。