1.面向對象的特點
繼承,封裝,多態
2.對象和類的區別是什么?
對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型,它們的關系是,對象是類的實例,類是對象的模板。
3.靜態成員和實例成員的區別?
靜態成員又叫類成員,指的是用static修飾符所修飾過的變量或方法。
實例成員就是沒有用static修飾的變量或方法.主要不同就是這有沒有static修飾。
造成的結果是靜態成員可以直接由類名調用,而實例成員還要用new標示符進行實例化,長生對象才能去調用方法和變量。
4.Java支持多重繼承么,Java中所有對象共同的基類是什么,能夠阻止某一個類被其他類繼承么?
1.不支持
2.java.lang.Object
3.可以,在定義類是加上final關鍵字修飾
public final class 類名
5.父類可以指向子類對象嗎?
可以
Father f = new Son();
6.Java中接口中允許有那些內容
常量和抽象方法
接口中抽象方法無需用public abstract修飾
接口中常量無需用public final 修飾
7.Java中抽象類中能有那些內容
普通方法,抽象方法,屬性,常量,構造方法
8.抽象類與接口的區別
參數 |
抽象類 |
接口 |
默認的方法實現 |
它可以有默認的方法實現 |
接口完全是抽象的。它根本不存在方法的實現 |
實現 |
子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現。 |
子類使用關鍵字implements來實現接口。它需要提供接口中所有聲明的方法的實現 |
構造器 |
抽象類可以有構造器 |
接口不能有構造器 |
與正常Java類的區別 |
除了你不能實例化抽象類之外,它和普通Java類沒有任何區別 |
接口是完全不同的類型 |
訪問修飾符 |
抽象方法可以有public、protected和default這些修飾符 |
接口方法默認修飾符是public。你不可以使用其它修飾符。 |
main方法 |
抽象方法可以有main方法並且我們可以運行它 |
接口沒有main方法,因此我們不能運行它。 |
多繼承 |
抽象方法可以繼承一個類和實現多個接口 |
接口只可以繼承一個或多個其它接口 |
速度 |
它比接口速度要快 |
接口是稍微有點慢的,因為它需要時間去尋找在類中實現的方法。 |
添加新方法 |
如果你往抽象類中添加新的方法,你可以給它提供默認的實現。因此你不需要改變你現在的代碼。 |
如果你往接口中添加方法,那么你必須改變實現該接口的類。 |
9.重載和重寫的區別
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了,而且如果子類的方法名和參數類型和個數都和父類相同,那么子類的返回值類型必須和父類的相同;如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載。Overloaded的方法是可以改變返回值的類型。也就是說,重載的返回值類型可以相同也可以不同。
10.基本數據類型有哪些,引用類型有哪些
基本數據類型byte,short,int,long,char,boolean,float,double
引用類型 String ,基本類型的包裝類如Integer,Double等,集合,數組等
11.方法的重寫是什么意思,用途在哪里,舉例說明
1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。
2) 若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
3) 子類函數的訪問修飾權限不能少於父類的;
12.String常用的方法有哪些及各自作用,有多少說多少
public char charAt(int index) 返回字符串中第index個字符;
public int length() 返回字符串的長度;
public int indexOf(String str) 返回字符串中第一次出現str的位置;
public int indexOf(String str,int fromIndex) 返回字符串從fromIndex開始第一次出現str的位置;
public boolean equalsIgnoreCase(String another) 比較字符串與another是否一樣(忽略大小寫);
public String replace(char oldchar,char newChar) 在字符串中用newChar字符替換oldChar字符
public boolean startsWith(String prefix) 判斷字符串是否以prefix字符串開頭;
public boolean endsWith(String suffix) 判斷一個字符串是否以suffix字符串結尾;
public String toUpperCase() 返回一個字符串為該字符串的大寫形式;
public String toLowerCase() 返回一個字符串為該字符串的小寫形式
public String substring(int beginIndex) 返回該字符串從beginIndex開始到結尾的子字符串;
public String substring(int beginIndex,int endIndex) 返回該字符串從beginIndex開始到endsIndex結尾的子字符串
public String trim() 返回該字符串去掉開頭和結尾空格后的字符串
public String[] split(String regex) 將一個字符串按照指定的分隔符分隔,返回分隔后的字符串數組
13.null和""的區別
Null是空什么都沒有,””是字符串類型,是空的字符串
14.Java中正則表達式如何使用驗證
在Java中,正則表達式是通過java.util.regex包中的Pattern和Matcher兩個類來實現的。一個Pattern對象表示一個正則表達式的編譯版本,可以做類似的對比,就好像是java文件和class文件,一個是讓程序員看的,一個是讓虛擬機執行的,在Java中一個正則表達式要轉換為Pattern對象才能最終被使用,Pattern的complie()方法可以實現,同時,我們可以使用matcher()方法和輸入字符串從編譯過的Pattern對象中產生Matcher對象,在Matcher中可以得到你想要得到的處理完成以后的結果值的信息。
下來介紹Matcher類中的幾個重要方法: 1)find():用戶發現應用於CharSequence(即輸入的字符串)的多重模式匹配,find()就像是一種迭代器,可以在輸入字符串中向前移動迭代,在find()的第二版中,可以指定一個整型參數以告知要開始搜索的字符的位置; 2)groupCount():在介紹這個方法的之前,現介紹一個概念:“組” 組是由圓括號分開的多個正則表達式,隨后可以根據它們的組號進行調用。第0組表示整個匹配表達式,第1組表示第一個用圓括號括起來的組,等等,因此,在表達式A(B(C))D中有三個組:第0組ABCD,第1組BC,第2組C。 groupCount()方法返回該模式中分組的數目。要注意的是第0組不包括在內。 3)group():返回由以前匹配操作所匹配的輸入子序列。 4)group(int i):返回在以前匹配操作期間由給定組捕獲的輸入子序列。如果匹配成功,但是指定的組沒有匹配輸入字符串的任何部分,將返回null。 5)start(int group):返回在以前的匹配操作期間,由給定組所捕獲的子序列的初始索引。 6)end(int group):返回在以前的匹配操作期間,由給定組所捕獲子序列的最后字符之后的偏移量。 7)start(): 返回以前匹配的初始索引。 8)end(): 返回最后匹配字符之后的偏移量。
模式標記: 模式標記是可以影響正則表達式的匹配行為的標記參數,為方便理解,列出這些標記的作用: Pattern.CANON_EQ :啟用規范等價。 Pattern.CASE_INSENSITIVE :啟用不區分大小寫的匹配。 Pattern.COMMENTS :模式中允許空白和注釋。 Pattern.DOTALL :啟用 dotall 模式,在dotall模式中,表達式.匹配多有字符,包括行終結符,缺省情況下,.表達式不匹配行終結符。 Pattern.LITERAL :啟用模式的字面值分析。 Pattern.MULTILINE :啟用多行模式。 Pattern.UNICODE_CASE :啟用 Unicode 感知的大小寫折疊。 Pattern.UNIX_LINES :啟用 Unix 行模式。
替換操作: 替換操作在正則表達式中起了尤為重要的作用,能夠實現替換操作的幾個方法是: 1)replaceFirst(String replacement) :用replacement替換輸入字符串中最先匹配的部分。 2)replaceAll(String replacement) :用replacement替換輸入字符串中所有匹配的部分。 3)appendReplacement(StringBuffer sb, String replacement) :逐步的在sb中執行替換;而不是像replaceFirst()那樣僅替換第一個匹配,或者像replaceAll()那樣替換所有的匹配。這是個非常重要的方法,因為它允許我們通過調用某些方法來執行一些其他處理來產生replacement(而不像replaceFirst()和replaceAll()只能輸入固定字符串)。有了這個方法,我們就可以通過編程來實現將目標拆分成組以及創建功能強大的替換。 4)appendTail(StringBuffer sb) :在一個或多個appendReplacement()調用之后被調用,以便復制輸入字符串的剩余部分。 reset(String s)方法:可以將Matcher對象應用於一個新的字符序列。 |
15.String和StringBuffer區別,StringBuilder呢
String 類型和StringBuffer的主要性能區別:String是不可變的對象, 因此在每次對String 類型進行改變的時候,都會生成一個新的 String 對象,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因為每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以后, JVM 的 GC 就會開始工作,性能就會降低。 使用 StringBuffer 類時,每次都會對 StringBuffer 對象本身進行操作,而不是生成新的對象並改變對象引用。所以多數情況下推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。 在某些特別情況下, String 對象的字符串拼接其實是被 Java Compiler 編譯成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度並不會比 StringBuffer 對象慢. StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。 StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。 最后,如果程序不是多線程的,那么使用StringBuilder效率高於StringBuffer。 |
16.Java中String類型的字符串比較大小使用什么?
String. compareTo()
17.string是值類型還是引用類型
引用類型
18.String s=""""創建了幾個對象
1
19.String s = new String("""")創建了幾個對象"
2
20.訪問修飾符有哪些
public、protect、default、private
21.簡述訪問修飾符的訪問權限
訪問權限 類 包 子類 其他包 public ∨ ∨ ∨ ∨ protect ∨ ∨ ∨ × default ∨ ∨ × × private ∨ × × ×
|
22.java讀寫文件有哪兩種流,分別舉例說明
輸入流和輸出流
如:InputStream OutputStream
FileInputStream FileOutputStream
BufferedInputStream BufferedOutputStream
BufferReader BufferWriter
InputStreamReader OutputStreamWriter
23.進程和線程的區別是什么
線程是最小的單位,進程是由線程組成的
24.請說出java中的集合框架和類
25.ArrayList和LinkedList區別是什么?和Vector呢?
ArrayList 是一個可改變大小的數組.當更多的元素加入到ArrayList中時,其大小將會動態地增長.內部的元素可以直接通過get與set方法進行訪問,因為ArrayList本質上就是一個數組. LinkedList 是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱於ArrayList. 當然,這些對比都是指數據量很大或者操作很頻繁的情況下的對比,如果數據和運算量很小,那么對比將失去意義. Vector 和ArrayList類似,但屬於強同步類。如果你的程序本身是線程安全的(thread-safe,沒有在多個線程之間共享同一個集合/對象),那么使用ArrayList是更好的選擇。 Vector和ArrayList在更多元素添加進來時會請求更大的空間。Vector每次請求其大小的雙倍空間,而ArrayList每次對size增長50%. 而 LinkedList 還實現了 Queue 接口,該接口比List提供了更多的方法,包括 offer(),peek(),poll()等. 注意: 默認情況下ArrayList的初始容量非常小,所以如果可以預估數據量的話,分配一個較大的初始值屬於最佳實踐,這樣可以減少調整大小的開銷。 |
26.HashMap和Hashtable區別是什么?
|
27.List和Set區別是什么?
1、List,Set都是繼承自Collection接口 2、List特點:元素有放入順序,元素可重復 ,Set特點:元素無放入順序,元素不可重復(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) 3、List接口有三個實現類:LinkedList,ArrayList,Vector ,Set接口有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet |
28.HashMap是什么樣的集合,它是否允許空鍵空值
無序的鍵值對集合,通過HASHCODE決定元素的存儲.允許空鍵空值,但不能重復
29.HashMap是無序的,如何實現有序存儲?
使用LinkedHashMap可以實現有序的HASHMAP
30.隊列和棧的區別是什么,實現了隊列和棧的集合分別是什么?
隊列先進先出,棧先進后出,
java.util.Queue 和 java.util.Stack
31.ArrayList集合如何排序
|
32.java中集合的工具類是什么?
java.util.Collections
1) 排序(Sort) 2) 混排(Shuffling) 3) 反轉(Reverse) 4) 替換所以的元素(Fill) 5) 拷貝(Copy) 6) 返回Collections中最小元素(min) 7) 返回Collections中最小元素(max) 8) lastIndexOfSubList 9) IndexOfSubList 10) Rotate |
32堆和棧的區別?
Java 的堆是一個運行時數據區,類的(對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。" 棧的優勢是,存取速度比堆要快,僅次於寄存器,棧數據可以共享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。 |
33.請寫出Java中的運行時異常,越多越好
AnnotationTypeMismatchException, ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, EnumConstantNotPresentException, EventException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IncompleteAnnotationException, IndexOutOfBoundsException, JMRuntimeException, LSException, MalformedParameterizedTypeException, MirroredTypeException, MirroredTypesException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NoSuchMechanismException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, RejectedExecutionException, SecurityException, SystemException, TypeConstraintException, TypeNotPresentException, UndeclaredThrowableException, UnknownAnnotationValueException, UnknownElementException, UnknownTypeException, UnmodifiableSetException, UnsupportedOperationException, WebServiceException
常見的5中運行時異常。 例如:ClassCastException(類轉換異常) IndexOutOfBoundsException(數組越界) NullPointerException(空指針) ArrayStoreException(數據存儲異常,操作數組時類型不一致) 還有IO操作的BufferOverflowException異常 |
34.Java中的異常處理機制是什么?寫法
java異常處理機制主要依賴於try,catch,finally,throw,throws五個關鍵字。 try 關鍵字后緊跟一個花括號括起來的代碼塊,簡稱try塊。同理:下面的也被稱為相應的塊。它里面可置引發異常的代碼。catch后對應異常類型和一個代碼塊,用於表明catch塊用於處理這種類型的代碼塊。后還可以跟一個finally塊,finally塊用於回收在try塊里打開的物理資源,異常機制會保證finally塊總被執行。throws關鍵字主要在方法簽名中使用,用於聲明該方法可能拋出的異常,而throw則用於拋出一個實際的異常,throw可以單獨作為語句使用,拋出一個具體的異常的對象 java異常處理可以讓程序具有更好的容錯性,程序更加健壯。當程序 出現意外情形時,系統會自動生成一個Exception對象來通知程序,從而實現將“業務功能實現代碼”和“錯誤處理代碼”分離,提供更好的可讀性。 如果執行try塊里的業務邏輯代碼時出現異常,系統自動會生成一個異常對象,該異常對象被提交給java運行環境,這個過程被稱為拋出(throw)異常。當java運行環境收到異常對象時,會尋找處理該異常對象的catch塊,如果找到合適的catch塊並把該異常交給它處理,該過程被稱為捕獲異常;如果java運行環境找不到捕獲異常的catch塊,則運行環境終止,程序也將退出。 使用finally回收物理資源 當程序在try塊里打開了的一些物理資源(數據庫連接,網絡連接及磁盤文件),這些物理資源必須顯示回收。為了保證一定能夠回收try塊中打開的物理資源,異常處理機制提供了finally塊,無論try塊中的代碼是否出現異常,也不管在哪個catch塊中被執行,finally塊總會被執行。異常處理結構語法中只有try塊是必須的,一旦沒有try塊,則不能出現catch和finally塊,如果存在try塊,則catch塊和finally塊都是可選的。但二者至少要出現其一。也可以同時出現多個catch塊。catch塊必須位於try塊后面,而finally必須位於catch塊后面(如果存在的話);
當java程序執行try塊,catch塊,時遇到了return語句或throw語句,這兩個語句都會導致該方法的立即結束,但是系統並不會立即執行這兩個語句,而是去尋找該異常處理流程中是否包含finally塊,如果沒有finally塊程序立即執行return語句或throw語句,方法終止。反之,則系統會立即執行finally塊——只有當finally塊執行完后,系統才會再次跳回來執行try塊,catch塊里的return或throw語句,如果同時在 finally塊中也存在return或throw語句,則finally塊已經終止了方法,自然不存在系統再次跳轉去執行try或catch塊里的return或throw語句。
使用throws聲明拋出異常的思路是:當前方法不知道應該如何處理這種異常,該異常應該由上一級調用者處理,如果main方法也不知道如何處理這種異常類型。也可以使用throws聲明拋出異常,把該異常交給javaJVM處理。 語法: Try{ 可能出現異常的代碼 }catch(Exception e){ 出現異常后的處理 }finally{ 不管出現異常與否都要執行的代碼 }
|
35.如何避免發生空指針異常
Java避免空指針 ====
1.空指針引起的原因 ---- * 調用空對象的方法 * 訪問或更新空對象的變量 * 獲取空集合的長度 * 訪問或更新空集合中的內容 * 拋出空的Throwable對象 * 同步空對象
2.避免空指針 ---- 為避免空指針,應當在使用之前確保對其做了適當的初始化。
1. 比較字符串時,模板在前,如: > Sting str = null; > if("test".equals(str)){ > //do something > } 2. 檢查方法傳進來的參數是否為空,如: > public static int getLength(){ > if(s == null){ > throw new IllegalArgumentException("The argument cannot be null"); > > } > return s.length(); > }
3. 使用String.valueOf()而不是toString() 4. 使用三元操作符,如: > String message = (str == null) ? "":"message"; 5. 方法返回空集合,而不是null,如: > private static List<Integer> getList(String jsonData){ > if(jsonData == null){ > return Collections.emptyList(); > } > //do something > } 6. 使用Apache StringUtils類(如果是Android的話,可以使用TextUtils.isEmpty()方法),如: > if(TextUtils.isEmpty(str)) 7. 合理使用contains(),containsKey,containsValue等方法,如: * > Map<String, String> map = ... > ... > String key = ... > if(map.containsKey(key)){ > //do something > } * > JSONObject jsonObject= new JSONObject() ; > String key = ... > if (jsonObject.has(key)) { > try { > long result = jsonObject.getLong(key); > } catch (JSONException e) { > e.printStackTrace(); > } > } 8. 檢查外部方法的返回值是否為空 9. 使用Assertions(斷言),如: > public static int getLength(String str){ > /*確定string不為空*/ > assert(str!=null); > return str.length(); > }
此時如果str為空,那么則拋出java.lang.AssertionError異常而不是空指針異常 10. 使用單元測試 |
36.throw和throws的區別是什么
Throw是代碼需要創建一個異常時的關鍵字,寫在方法體里,Throws是當前方法會有異常拋出的聲明,寫在方法簽名
37.&和&&的區別
&是位運算 &&是邏輯運算
38.==和=的區別
==是條件運算,=是賦值運算
39.JDBC是什么,常用的幾個操作接口是什么?
JDBC是sun公司定義的JAVA用來訪問數據庫系統的技術. Java Data Base Connectivtity
常用的接口Connection Statement PreparedStatement CallableStatement ResultSet
40.PreparedStatement和Statement的區別是什么?
PreparedStatement是Statement的子類,是預編譯SQL語句的,可以用?來標識SQL的參數,有效的防止SQL注入,而Statement只能執行靜態的SQL
41.Jdbc如何調用帶輸出參數存儲過程
|
42.JDBC中事務如何實現
1.JDBC的事務是基於Connection對象的,超越Connection事務不是同一個事務 2.啟動事務 conn.beginTransaction() 3.提交事務 conn.commit() 4.事務回滾 conn.rollback() [一般異常中] |
43.JDBC如何實現批量操作
1采用Statement.addBatch(sql)方式實現批處理: 優點:可以向數據庫發送多條不同的SQL語句。 缺點: SQL語句沒有預編譯。 當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重復寫上很多條SQL語句 2采用PreparedStatement.addBatch()實現批處理 優點:發送的是預編譯后的SQL語句,執行效率高。 缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入數據,或批量更新表的數據 |
44.Servlet生命周期是什么?
加載 實例化 初始化 服務 消亡
45.JSP中如何處理中文亂碼?
請求:request.setCharacterEncoding(“編碼”);
響應:response.setContentType(“text/html;charset=編碼”);
46.JSP的執行原理是什么?
WEB容器(Servlet引擎)接收到以.jsp為擴展名的URL的訪問請求時,它將把該訪問請求交給JSP引擎去處理。Tomcat中的JSP引擎就是一個Servlet程序,它負責解釋和執行JSP頁面。 每個JSP 頁面在第一次被訪問時,JSP引擎將它翻譯成一個Servlet源程序,接着再把這個Servlet源程序編譯成Servlet的class類文件,然后再由WEB容器(Servlet引擎)像調用普通Servlet程序一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程序。 Tomcat 5.x把為JSP頁面創建的Servlet源文件和class類文件放置在“<TOMCAT_HOME>\work\Catalina\<主機名>\<應用程序名>\”目錄中,Tomcat將JSP頁面翻譯成的Servlet的包名為org.apache.jsp.<JSP頁面在WEB應用程序內的目錄名> 。 JSP規范也沒有明確要求JSP中的腳本程序代碼必須采用Java語言,JSP中的腳本程序代碼可以采用Java語言之外的其他腳本語言來編寫,但是,JSP頁面最終必須轉換成Java Servlet程序。 可以在WEB應用程序正式發布之前,將其中的所有JSP頁面預先編譯成Servlet程序。 分析JSP所生成的Servlet代碼 JSP頁面翻譯成的Servlet繼承了org.apache.jasper.runtime.HttpJspBase類,HttpJspBase類是HttpServlet的一個子類,因此JSP頁面翻譯成的Servlet是HttpServlet的一個孫子類。HttpJspBase類實現了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase類是抽象的。 SUN公司為JSP的WEB容器開發商和JSP頁面開發人員提供了一套專門應用於開發JSP程序的Java類,這套Java類被稱為JSP API。HttpJspPage接口和JspPage接口屬於JSP API,在HttpJspPage接口中只定義了一個_jspService方法,但它繼承了JspPage接口,JspPage接口中定義了兩個方法:jspInit()和jspDestroy()。 HttpJspBase的init方法調用了jspInit和_jspInit方法,destroy方法內部調用了jspDestroy和_jspDestroy方法,service方法內部調用了_jspService方法。在HttpJspBase中實現的init、service和destroy方法都被聲明成了final類型。 JSP頁面中的位於<% %>外面的每行和緊臨<%%>兩邊的每段文本被轉換成以這些文本作為參數的一條條out.write語句,JSP腳本片斷(位於<%%>內的一段java代碼)中的java代碼被原封不動地搬移進了_jspService方法中的相應位置處,JSP表達式(位於<%=和%>之中的內容)則是被轉換成以其中的變量或表達式作為參數的out.print語句。
|
47.JSP中的內置對象有那些?常用即可
Request page session application servletConfig out page exception response
48.jsp中數據存儲的作用域有那些,區別是什么
由小到大 Page request session application
49.Session和Cookie的區別
cookie 和session 的區別: 1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。 2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙 考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能 考慮到減輕服務器性能方面,應當使用COOKIE。 4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie |
50.JSP中的標准動作有那些
jsp:include:在頁面被請求的時候引入一個文件。 jsp:useBean:尋找或者實例化一個JavaBean。 jsp:setProperty:設置JavaBean的屬性。 jsp:getProperty:輸出某個JavaBean的屬性。 jsp:forward:把請求轉到一個新的頁面。 jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記 |
51.JSP中動態Include和靜態Include的區別
52.Include指令是
include可以在JSP頁面轉換成Servlet之前,將JSP代碼插入其中。它的主要優點是功能強大,所包含的代碼可以含有總體上影響主頁面的JSP構造,比如屬性、方法的定義和文檔類型的設定。它的缺點是難於維護只要被包含的頁面發生更改,就得更改主頁面,這是因為主頁面不會自動地查看被包含的頁面是否發生更改。 |
53.JSP常用指令有那些
Page taglib include
54.JSP中界面到Servlet中傳遞、獲取數據的方式
Request.getParameter獲取請求參數
Request.getAttribute()獲取請求中存儲的值,以鍵獲取值
Request.SetAttribute()設置請求中存儲的值,以鍵值對存儲
55.Application是什么,有什么用?
是Jsp項目中最大的作用域,可以用來保存全局唯一的變量
56.JSP中頁面跳轉的兩種方式是什么,有什么區別
轉發和重定向,轉發是同一個請求的再次傳遞,發生在服務器內部,不能訪問其他項目地址,效率高
重定向是讓客戶端瀏覽器重新發送新的請求到服務器,發生在客戶端和服務器,可以訪問其他項目地址,效率低
57.什么是MVC,那些框架是基於MVC模式的
模型視圖控制器,Struts1,Struts2,SpringMvc
58.什么叫做sql注入,如何防止
編程人員如果以拼湊的SQL語句附加參數容易引起SQL注入,防止的方式可以通過預執行編譯SQL(PreparedStatement)和存儲過程解決
59.sql語句中如何實現分頁
SQLSERVER中通過子查詢排除上一頁數據可以實現,Mysql主要通過limit子句實現
60.B/S結構與C/S結構的區別? B/S結構的優點
C/S結構,即Client/Server(客戶機/服務器)結構,是大家熟知的軟件系統體系結構,通過將任務合理分配到Client端和Server端,降低了系統的通訊開銷,可以充分利用兩端硬件環境的優勢。早期的軟件系統多以此作為首選設計標准。。 |
61.表單提交方式?區別是什么
Get和POST,GET以明文提交請求參數,有長度限制,POST以暗文提交請求參數,無長度限制
62.簡述html、http、www、URL、web、W3C的意思
Html: 超文本標記語言,標准通用標記語言下的一個應用。超文本”就是指頁面內可以包含圖片、鏈接,甚至音樂、程序等非文字元素。 http: 超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標准。 www: WWW是環球信息網的縮寫,(亦作“Web”、“WWW”、“'W3'”,英文全稱為“World Wide Web”),中文名字為“萬維網”,"環球網"等,常簡稱為Web。 URL: 統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標准資源的地址。 WEB: web的本意是蜘蛛網和網的意思,在網頁設計中我們稱為網頁的意思。現廣泛譯作網絡、互聯網等技術領域。表現為三種形式,即超文本(hypertext)、超媒體(hypermedia)、超文本傳輸協議(HTTP)等。 WWW:萬維網聯盟, 萬維網聯盟創建於1994年,是Web技術領域最具權威和影響力的國際中立性技術標准機構。 |
63.XML和Html的區別
HTML是超文本標記語言,XML是可擴展標記語言,前者應用側重點在展示數據,后者用在配置文件,傳輸數據載體等方面
64.JS有哪些數據類型
字符串、數字、布爾、數組、對象、Null、Undefined
65.說一下你對瀏覽器模型的理解
BOM(Browser Object Model) 是指瀏覽器對象模型,是用於描述這種對象與對象之間層次關系的模型,瀏覽器對象模型提供了獨立於內容的、可以與瀏覽器窗口進行互動的對象結構。BOM由多個對象組成,其中代表瀏覽器窗口的Window對象是BOM的頂層對象,其他對象都是該對象的子對象。 瀏覽器對象模型頂層對象是window,window對象包含 location history document三個屬性 |
66.doucment有哪些常用方法
document.write() 動態向頁面寫入內容 document.createElement(Tag) 創建一個html標簽對象 document.getElementById(ID) 獲得指定ID值的對象 document.getElementsByName(Name) 獲得指定Name值的對象 document.body.appendChild(oTag) 向當前BODY標簽追加子標簽 document.getElementsByTagName(TagName)通過標簽名獲取當前頁面該標簽對象 |
67.談一下你知道的JS事件
onblur 元素失去焦點。 onchange 域的內容被改變。 onclick 當用戶點擊某個對象時調用的事件句柄。 ondblclick 當用戶雙擊某個對象時調用的事件句柄。 onfocus 元素獲得焦點。 onkeydown 某個鍵盤按鍵被按下。 onkeypress 某個鍵盤按鍵被按下並松開。 onkeyup 某個鍵盤按鍵被松開。 onload 一張頁面或一幅圖像完成加載。 onmousedown 鼠標按鈕被按下。 onmousemove 鼠標被移動。 onmouseout 鼠標從某元素移開。 onmouseover 鼠標移到某元素之上。 onmouseup 鼠標按鍵被松開。 onselect 文本被選中。 onsubmit 確認按鈕被點擊。 onunload 用戶退出頁面。 |
Struts2是什么,其工作原理是什么(執行流程)
Struts2是一個優秀的MVC框架,基於WEBWORK,吸收了STRUTS1的優點. 工作原理: 一個請求在Struts2框架中的處理大概分為以下幾個步驟 1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin) 3、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action ,FilterDispatcher是控制器的核心,就是mvc中c控制層的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher進行初始化並啟用核心doFilter 4、如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy 5、ActionProxy通過ConfigurationManager詢問框架的配置文件,找到需要調用的Action類 ,這里,我們一般是從struts.xml配置中讀取。 6、ActionProxy創建一個ActionInvocation的實例。 7、ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。 8、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper 在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來創建的。 |
68.Struts中接收數據時有那些方式
屬性驅動和模型驅動
69.Struts2中的攔截器有什么用,工作原理是什么
攔截器(interceptor)是Struts2最強大的特性之一,也可以說是struts2的核心,攔截器可以讓你在Action和result被執行之前或之后進行一些處理。同時,攔截器也可以讓你將通用的代碼模塊化並作為可重用的類。Struts2中的很多特性都是由攔截器來完成的。 工作原理: 當請求到達Struts 2的ServletDispatcher時,Struts 2會查找配置文件,並根據其配置實例化相對的攔截器對象,然后串成一個列表(list),最后一個一個地調用列表中的攔截器。事實上,我們之所以能夠如此靈活地使用攔截器,完全歸功於“動態代理”的使用。動態代理是代理對象根據客戶的需求做出不同的處理。對於客戶來說,只要知道一個代理對象就行了。那Struts2中,攔截器是如何通過動態代理被調用的呢?當Action請求到來的時候,會由系統的代理生成一個Action的代理對象,由這個代理對象調用Action的execute()或指定的方法,並在struts.xml中查找與該Action對應的攔截器。如果有對應的攔截器,就在Action的方法執行前(后)調用這些攔截器;如果沒有對應的攔截器則執行Action的方法。其中系統對於攔截器的調用,是通過ActionInvocation來實現的。 |
70.Strtus2中攔截器和過濾器的區別是什么
攔截器主要攔截的是對ACTION的請求,而過濾器是對項目所有資源的請求都可以攔截
71.Struts2比JSP+Servlet有什么好處
1.首先,最重要的一點是多個視圖能共享一個模型。同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性。 2.由於MVC的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的松耦合的構件。 3.此外,控制器提高了應用程序的靈活性和可配置性。控制器可以用來聯接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構造應用程序提供強有力的手段 |
72.Struts2中的默認包有什么用
Struts-defualt Package包含了STRUTS2內置的Result的類型和攔截器
Result:dispathcer,redirect,chain,redirectAction等
攔截器:文件上傳攔截器,為Action屬性賦值的攔截器等
73.至少說出5個Struts2的內置攔截器
- fileUpload 文件上傳
- modelDriven 模型驅動
- validation 驗證
- exception 異常
- cookie COOKIE
- createSession 創建會話
- i18n 國際化
74.如何在Struts2中使用Ajax功能
|
75.為什么用Spring,它的核心功能有那些
控制反轉和面向切面編程
76.SpringMVC的工作原理
1. 客戶端請求提交到DispatcherServlet 2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller 3. DispatcherServlet將請求提交到Controller 4. Controller調用業務邏輯處理后,返回ModelAndView 5. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖 6. 視圖負責將結果顯示到客戶端 |
77.談談你覺得springMVC和其他MVC框架的區別
1. 機制:spring mvc的入口是servlet,而struts2是filter。 2. 性能:spring會稍微比struts快。spring mvc是基於方法的設計,而sturts是基於類,每次發一次請求都會實例一個action,每個action都會被注入屬性.
而spring基於方法,粒度更細,但要小心把握像在servlet控制數據一樣。spring3 mvc是方法級別的攔截,攔截到方法后根據參數上的注解,把request數據注入進去,在spring3 mvc中,一個方法對應一個request上下文。
而struts2框架是類級別的攔截,每次來了請求就創建一個Action,然后調用setter getter方法把request中的數據注入;struts2實際上是通過setter getter方法與request打交道的;struts2中,一個Action對象對應一個request上下文。 3. 參數傳遞:struts是在接受參數的時候,可以用屬性來接受參數,這就說明參數是讓多個方法共享的。 4. 設計思想上:struts更加符合oop的編程思想, spring就比較謹慎,在servlet上擴展。 5. intercepter的實現機制:struts有以自己的interceptor機制,spring mvc用的是獨立的AOP方式。這樣導致struts的配置文件量還是比spring mvc大,雖然struts的配置能繼承,所以我覺得論使用上來講,spring mvc使用更加簡潔,開發效率Spring MVC確實比struts2高。 |
78.談談SSH的整合和各自分工
通過STRUTS和SPRING 及HIBERNATE的整合,可以讓項目的MVC持久層及對象的創建都得到控制.
- Struts2的整合主要負責MVC方面,所有的ACTION實例的產生不在由STRUTS2框架負責而是交給Spring來負責,Spring管理的Bean默認是單例模式所以需要設置Action的Bean為原型模式
- Hibernate的Session創建交給了Spring來管理,所以在項目中編程人員只用負責使用Session就可以了,事務的管理同樣交給了Spring來控制,讓我們的DML(增刪改)操作更加安全便利
79.介紹一下Spring的事務管理
Spring配置文件中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。 DataSource、 TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問時,DataSource實際為 SessionFactory,TransactionManager的實現為HibernateTransactionManager。 <!-- 配置事務管理器(聲明式的事務) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:advice id="txadvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice>
<aop:config> <aop:pointcut id="daoMethod" expression="execution(* com.dao.*.*(..))"/> <aop:advisor pointcut-ref="daoMethod" advice-ref="txadvice"/> </aop:config> expression="execution(* com.dao.*.*(..))" 其中第一個*代表返回值,第二*代表dao下子包,第三個*代表方法名,“(..)”代表方法參數。 |
80.如何在web項目中配置spring
1:引入包,這個就不說了,官網下載。
spring-core-3.2.3.RELEASE.jar 核心依賴jar包 spring-context-3.2.3.RELEASE.jar 容器包 spring-beans-3.2.3.RELEASE.jar beans的管理包 spring-expression-3.2.3.RELEASE.jar 另外還需加入commons-logging.jar 2:在web.xml中添加spring配置。一個監聽,一個路徑(配置bean文件所在目錄) <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 默認配置在WEB-INF目錄下 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/applicationContext.xml</param-value> </context-param> 3:bean配置文件applicationContext.xml <beans> <!-- 每個bean都對應有一個id和class --> <bean id="u" class="dao.UserDaoImpl"></bean> <!-- 下面代碼表示:在id為userService的service中有一個名叫userDao的屬性, 更准確的說是在service中有一個setUserDao的方法 ,該方法調用時必須把上面id為u的bean傳進來, 此時就把這兩個東西裝配起來:專業說法是動態裝配。 即可以把UserService.java中的private的userDao屬性給注入進來【注入】 <!-- 一定要注意:下面代碼中的property中的name的值必須和你UserService.java中定義的變量要一致。 也就是和必須和你service中的setDao的方法匹配,有setDao(),則name的值就是dao,即去掉前面的set --> --> <bean id="userService" class="service.UserService"> <property name="dao" ref="u"></property> </bean> </beans> 4:使用(UserService.java) ApplciationContext ctx=new ClasspathXmlApplicationContext(“beans.xml”); UserService service =(UserService)ctx.getBean("userService"); User u =new User(); service.add(u); |
81.Spring中自動裝配的方式有哪些?
|
82.Spring框架中用到了那些設計模式
1. 簡單工廠 又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。 簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。 Spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得Bean對象,但是否是在傳入參數后創建還是傳入參數前創建這個要根據具體情況來定。 2. 工廠方法(Factory Method) 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類。 Spring中的FactoryBean就是典型的工廠方法模式。 3. 單例(Singleton) 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 Spring中的單例模式完成了后半句話,即提供了全局的訪問點BeanFactory。但沒有從構造器級別去控制單例,這是因為Spring管理的是是任意的Java對象。 4. 適配器(Adapter) 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。 5.包裝器(Decorator) 動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。 Spring中用到的包裝器模式在類名上有兩種表現:一種是類名中含有Wrapper,另一種是類名中含有Decorator。基本上都是動態地給一個對象添加一些額外的職責。 6. 代理(Proxy) 為其他對象提供一種代理以控制對這個對象的訪問。 從結構上來看和Decorator模式類似,但Proxy是控制,更像是一種對功能的限制,而Decorator是增加職責。 Spring的Proxy模式在aop中有體現,比如JdkDynamicAopProxy和Cglib2AopProxy。
7.觀察者(Observer) 定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。 Spring中Observer模式常用的地方是listener的實現。如ApplicationListener。
8. 策略(Strategy) 定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。 Spring中在實例化對象的時候用到Strategy模式 9.模板方法(Template Method) 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method 使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 |
83.在Web項目中如何獲得Spring的IoC容器?
|
84.如何配置Spring+Struts
1. 利用ContextLoaderListener Spring提供一個ContextLoaderListener對象,該類可以作為Web應用的Listener使用,它會在Web應用啟動時自動查找WEB-INF/下的applicationContext.xml配置文件(Spring的配置文件),並且根據該文件來創建Spring容器.因此,如果Web應用中只有一個Spring配置文件,並且文件名為"applicationContext.xml",並將該文件放在Web應用的WEB-INF/路徑下,則只需在web.xml文件中增加如下一段即可: <!-- 根據默認配置文件來初始化Spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 如果有多個配置文件需要載入,或則applicationContext.xml不在WEB-INF目錄下,則應該在web.xml中再使用<context-param>元素來確定配置文件的文件名,內容如下: <!-- 定義spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml, /WEB-INF/classes/conf/spring/applicationContext-*.xml </param-value> </context-param> 如果spring配置文件被命名為applicationContext.xml,並且放在WEB-INF目錄下,則不需要配置<context-param>,因為ContextLoaderListener默認在WEB-INF目錄下尋找名為applicationContext.xml的文件。若存在多個Spring配置文件,則在<param-value>中依次列出,之間以逗號隔開。 2. Spring管理控制器,並利用依賴注入為控制器注入業務邏輯組件 1) 將Struts的業務邏輯控制器類配置在Spring的配置文件中,業務邏輯控制器中引用的業務類一並注入。注意,必須將業務邏輯控制器類配置為scope=”prototype”! <bean id=”LoginAction” class=”yaso.struts.action.LoginAction”> <property name=”loginDao” ref=”LoginDao”/> </bean> 2) 在struts.xml或者等效的Struts2配置文件中配置Action時,指定<action>的class屬性為Spring配置文件中相應bean的id或者name值。示例如下: <action name=”LoginAction” class=”LoginAction”> <result name=”success”>/index.jsp</result> </action>
|
85.Spring中如何實現國際化
在applicationContext.xml加載一個bean <bean id=”messageSource” class=”org.springframework.context.support.ResourceBundleMessageSource”> <property name=”basename”> <value>message</value> </property> </bean> 在src目錄下建多個properties文件 對於非英文的要用native2ascii -encoding gb2312 源 目轉化文件相關內容 其命名格式是message_語言_國家。 頁面中的中顯示提示信息,鍵名取鍵值。 當給定國家,系統會自動加載對應的國家的properties信息。 通過applictionContext.getMessage(“鍵名”,”參數”,”區域”)取出相關的信息。 |
86.介紹一下Spring的bean生命周期
1. 當調用者通過 getBean( name )向 容器尋找Bean 時,如果容器注冊了 org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在實例 bean 之前,將調用該接口的 postProcessBeforeInstantiation ()方法, 2. 根據配置情況調用 Bean構造函數或工廠方法實例化 bean 3. 如果容器注冊了 org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在實例 bean 之后,調用該接口的 postProcessAfterInstantiation ()方法,可以在這里對已經實例化的對象進行一些裝飾。 4. 受用依賴注入,Spring 按照 Bean 定義信息配置 Bean 的所有屬性 ,在設置每個屬性之前將調用 InstantiationAwareBeanPostProcess接口的 postProcessPropertyValues ()方法 。 5 .如果 Bean 實現了 BeanNameAware 接口,工廠調用 Bean 的 setBeanName() 方法傳遞 Bean 的 ID 。 6 .如果 Bean 實現了 BeanFactoryAware 接口,工廠調用 setBeanFactory() 方法傳入工廠自身。 7 .如果 BeanPostProcessor 和 Bean 關聯,那么 將調用該接口 的postProcessBeforeInitialzation() 方法 對 bean進行加工操作,這個非常重要, spring 的 AOP 就是用它實現的。 8. 如果bean 實現了 InitializingBean 接口,將調用 afterPropertiesSet ()方法 9. 如果Bean 指定了 init-method 方法,它將被調用。 10. 如果有BeanPsotProcessor 和 Bean 關聯,那么它們的 postProcessAfterInitialization() 方法將被調用。 到這個時候, Bean 已經可以被應用系統使用了 。 11. 如果在<bean> 中指定了該 bean 的作用范圍為 scope="prototype", 將 bean 的調用者,調用者管理該 bean 的生命周期, spring 不在管理該 bean 。 12. 如果在<bean> 中指定了該 bean 的作用范圍為 scope="singleton", 則將該 bean 放入 springIOC 的緩存池中,將觸發 spring 對該 bean 的生命周期管理。 13. 有兩種方法可以把它從Bean Factory 中刪除掉 : 1.如果 Bean 實現了 DisposableBean 接口, destory() 方法被調用。 2.如果指定了訂制的銷毀方法,就調用這個方法。 |
87.如何配置Spring+Hibernate
<!-- 定義DBCP的數據庫連接屬性,該數據源會被hibernate使用,DBCP是連接池開源包,其中的url,username,password需要替換成你的數據庫訪問屬性 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost/mysql</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>doerliu</value> </property> </bean>
<!-- 配置sessionFactory, 為Hibernate配置屬性 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <!—Hibernate的map 文件在這里配置了,注意文件的相對位置。 --> <value>../Userinfo.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>
|
88.解釋一下依賴注入和控制反轉作用
控制反轉(IoC/Inverse Of Control): 調用者不再創建被調用者的實例,由spring框架實現(容器創建)所以稱為控制反轉。
依賴注入(DI/Dependence injection) : 容器創建好實例后再注入調用者稱為依賴注入。 |
89.ORM是什么,如何實現數據庫操作的,那些框架基於ORM思想的
1.ORM 對象關系映射 2.通過實體類和表之間的映射完成用面向對象的方式操作關系型數據庫 實體類映射表 實體類屬性映射列 實體類對象映射行 當我們完成對某個實體類的 ,框架會將我們的JAVA實體類的操作轉換成SQL語句,具體轉換通過映射配置來完成. 3.MYBATIS,HIBERNATE,JPA |
90.Hibernate的工作原理是什么,如何加載配置
工作原理: 就是讀取你的hql語句 然后根據數據庫方言轉變成sql語句然后使用jdbc執行轉變后的數據庫 加載配置: 1.通過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>讀取並解析映射信息 3.通過config.buildSessionFactory();//創建SessionFactory
|
91.Hiberante中get和load的區別
GET不會使用類級別延遲加載,LOAD會
92.Hibernate如何實現的延遲加載
延遲加載分類級別和關聯級別 類級別是在映射文件<Class>節點上添加lazy屬性 關聯級別是在<set><many-to-one>上添加lazy屬性 |
93.說一下Hibernate的緩存機制
Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。SessionFactory的內置緩存和Session的緩存在實現方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數據,后者是指Session的一些集合屬性包含的數據。SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是數據庫數據的拷貝,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。
Hibernate的這兩級緩存都位於持久化層,存放的都是數據庫數據的拷貝,為了理解二者的區別,需要深入理解持久化層的緩存的兩個特性:緩存的范圍和緩存的並發訪問策略。 |
94.如何優化Hibernate的使用
通過設置inverse和cascade及優化HQL和緩存機制
95.Hibernate中的SessionFactory有什么作用? SessionFactory是線程安全的嗎?
SessionFactory在Hibernate中實際起到了一個緩沖區的作用,它緩沖了Hibernate自動生成的SQL語句和一些其它的映射數據,還緩沖了一些將來有可能重復利用的數據。 SessionFactory是線程安全的,多個並發線程可以同時訪問一個 SessionFactory 並從中獲取Session實例。 |
96.Hibernate中的Session指的是什么? 可否將單個的Session在多個線程間進行共享?
Session接口對於Hibernate 開發人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創建以及銷毀Session對象,如果Session的開銷太大,會給系統帶來不良影響。但值得注意的是 Session對象是非線程安全的,因此在你的設計中,最好是一個線程只創建一個Session對象。 |
97.Hibernate中transient、persistent、detached對象三者之間有什么區別?
1. 在Hibernate中,對象具有三種狀態:transient、persistent和detached。 2. 同Hibernate的session有關聯的對象是persistent對象。對這種對象進行的所有修改都會按照事先設定的刷新策略,反映到數據庫之中,也即,可以在對象的任何一個屬性發生改變時自動刷新,也可以通過調用Session.flush()方法顯式地進行刷新。 3. 如果一個對象原來同Session有關聯關系,但當下卻沒有關聯關系了,這樣的對象就是detached的對象。 可以通過調用任意一個session的update()或者saveOrUpdate()方法,重新將該detached對象同相應的seesion建立關聯關系。 4. Transient對象指的是新建的持久化類的實例,它還從未同Hibernate的任何Session有過關聯關系。 可以調用persist()或者save()方法,將transient對象變成persistent對象。 注意:這里所說的transient指的不是 Java中的transient關鍵字。 |
98.可不可以將Hibernate的實體類定義為final類?
不能
99.Hibenate的查詢方式
Session的load get
Query 的 uniqueResult list iterate
QBC
100.MyBatis工作原理
MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的注解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之后關閉SqlSession。 |
101.MyBatis中#{...} 和 ${...}的區別
使用#{}格式的語法在mybatis中使用Preparement語句來安全的設置值,可以防止SQL注入 $將傳入的數據直接顯示生成在sql中,不能防止SQL注入 |
102.你覺得MyBatis和Hibernate的區別在那里
Hibernate是全自動的ORM持久層框架,Mybatis是半自動的ORM持久層框架.
Hibernate的對象關系映射做的非常全面,SQL語句自動生成,而Mybatis的SQL語句需要編程人員自己寫.
103.如何實現批量插入
在Mybatis的映射器配置文件中使用<insert>語句為 insert into <foreach> select </foreach>
104.在mapper中如何傳遞多個參數
將Mapper中抽象方法的參數設置為HashMap 數據類型,在SQL語句中用#{key}取到對應的值
105.如何獲取自動生成的(主)鍵值?
在<INSERT>中頂部添加 <selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS id </selectKey> |
106.MyBatis中的動態SQL是什么意思?
MyBatis的動態SQL是基於OGNL表達式的,它可以幫助我們方便的在SQL語句中實現某些邏輯。 MyBatis中用於實現動態SQL的元素主要有: If if就是簡單的條件判斷,利用if語句我們可以實現某些簡單的條件選擇 choose(when,otherwise) choose元素的作用就相當於JAVA中的switch語句,基本上跟JSTL中的choose的作用和用法是一樣的,通常都是與when和otherwise搭配的。 Trim trim元素的主要功能是可以在自己包含的內容前加上某些前綴,也可以在其后加上某些后綴,與之對應的屬性是prefix和suffix;可以把包含內容的首部某些內容覆蓋,即忽略,也可以把尾部的某些內容覆蓋,對應的屬性是prefixOverrides和suffixOverrides;正因為trim有這樣的功能,所以我們也可以非常簡單的利用trim來代替where元素的功能 where where語句的作用主要是簡化SQL語句中where中的條件判斷的 set set元素主要是用在更新操作的時候,它的主要功能和where元素其實是差不多的,主要是在包含的語句前輸出一個set,然后如果包含的語句是以逗號結束的話將會把該逗號忽略,如果set包含的內容為空的話則會出錯。有了set元素我們就可以動態的更新那些修改了的字段。 foreach foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。
|
107.什么是ajax,為什么要使用Ajax(請談一下你對Ajax的認識)
AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創建交互式網頁應用的網頁開發技術。它使用: 使用XHTML+CSS來標准化呈現; 使用XML和XSLT進行數據交換及相關操作; 使用XMLHttpRequest對象與Web服務器進行異步數據通信; 使用Javascript操作Document Object Model進行動態顯示及交互; 使用JavaScript綁定和處理所有數據。 為什么使用 傳統的Web應用交互由用戶觸發一個HTTP請求到服務器,服務器對其進行處理后再返回一個新的HTHL頁到客戶端, 每當服務器處理客戶端提交的請求時,客戶都只能空閑等待,並且哪怕只是一次很小的交互、只需從服務器端得到很簡單的一個數據,都要返回一個完整的HTML頁,而用戶每次都要浪費時間和帶寬去重新讀取整個頁面。這個做法浪費了許多帶寬,由於每次應用的交互都需要向服務器發送請求,應用的響應時間就依賴於服務器的響應時間。這導致了用戶界面的響應比本地應用慢得多。 與此不同,AJAX應用可以僅向服務器發送並取回必需的數據,它使用SOAP或其它一些基於XML的Web Service接口,並在客戶端采用JavaScript處理來自服務器的響應。因為在服務器和瀏覽器之間交換的數據大量減少,結果我們就能看到響應更快的應用。同時很多的處理工作可以在發出請求的客戶端機器上完成,所以Web服務器的處理時間也減少了。 |
108.Ajax技術體系的組成部分有哪些
XHTML和CSS 使用文檔對象模型(Document Object Model)作動態顯示和交互 使用XML和XSLT做數據交互和操作 使用XMLHttpRequest進行異步數據接收 使用JavaScript將它們綁定在一起 |
109.Ajax的優點和缺點
(1).AJAX的優點 <1>.無刷新更新數據。 <2>.異步與服務器通信。 <3>.前端和后端負載平衡。 <4>.基於標准被廣泛支持。 <5>.界面與應用分離。
(2).AJAX的缺點 <1>.AJAX干掉了Back和History功能,即對瀏覽器機制的破壞。 <2>.AJAX的安全問題。 <3>.對搜索引擎支持較弱。 <4>.破壞程序的異常處理機制。 <5>.違背URL和資源定位的初衷。 <6>.AJAX不能很好支持移動設備。 <7>.客戶端過肥,太多客戶端代碼造成開發上的成本。 |
110.body中的onload()函數和jQuery中的document.ready()有什么區別?
1.執行時間 window.onload必須等到頁面內包括圖片的所有元素加載完畢后才能執行。 $(document).ready()是DOM結構繪制完畢后就執行,不必等到加載完畢。 2.編寫個數不同 window.onload不能同時編寫多個,如果有多個window.onload方法,只會執行一個 $(document).ready()可以同時編寫多個,並且都可以得到執行 3.簡化寫法 window.onload沒有簡化寫法 $(document).ready(function(){})可以簡寫成$(function(){}); |
111.你用過的網站前端優化的技術有哪些?
Js+css: 1.把CSS放到代碼頁上端 2.避免CSS表達式 3.從頁面中剝離JavaScript與CSS 4.精簡JavaScript與CSS 5.使用<link>而不是@importChoose<link>over@import 6.避免使用CSSFilter 7.JS盡量放到頁面最下端 8.頁面展現盡量交給CSS完成 圖片: 1. 優化圖片,盡量使用PNG 2. 使用 CSS Sprites 對圖片優化 3. 不要在 HTML 中縮放圖片 4. 用更小的並且可緩存的 favicon.ico |
112.常用的SQL優化技巧
1.創建必要的索引 2.使用預編譯查詢 3.調整Where子句中的連接順序 4.Select 語句中避免使用* 5.盡量將多條SQL語句壓縮到一句SQL中 6.用Where子句中替換Having子句 7.使用表的別名 8. 用EXISTS 替代IN 9.用表連接替換EXISTS 10.避免在索引列上使用計算 11.用UNION ALL替換UNION 12.避免隱式類型轉換造成全表掃描 13.防止檢索范圍過寬
|
113.java中常見的優化技巧
1、生成對象時,合理分配空間和大小 2、優化for循環 將集合或數組長度做成變量,循環判斷只判斷長度變量,不用SIZE().LENGTH()之類方法 3、new一個實例對象,new在什么位置(盡量在使用時再創建該對象)。 4、異常處理技巧 5、盡量使用局部變量和靜態變量 6、盡量不適用多線程同步 7、盡可能的使用Java自身提供的API 8、盡量減少I/O操作(控制台、日志) 9、盡量使用緩存流(盡可能使用帶有Buffer的類代替沒有Buffer的類,BufferedReader、BufferedWriter、BufferedInputStream) 10、sql優化、存儲過程、視圖、連接池(C3P0 、DBCP) 11、數據庫數據分級存儲 12、緩存策略 13、html靜態化 14、不用保存太多的信息在HttpSession中 15、在使用大數據對象時,因此建議在對象使用完畢后,手動設置成null(避免內存溢出)。 |
114.WEB應用中服務器技術如何優化
方法 1:在servlet的init()方法中緩存數據 方法 2:禁止servlet和JSP 自動重載(auto-reloading) 方法 3: 不要濫用HttpSession 方法 4: 將頁面輸出進行壓縮 方法 5: 使用線程池 方法 6: 選擇正確的頁面包含機制 方法 7:正確地確定javabean的生命周期 |
115.觸發器的作用
a.允許/限制對表的修改 b.自動派生列,如自增字段 c.強制數據的一致性 d.提供審計和日志記錄 e.防止無效的事務處理 f.啟動復雜的業務邏輯 |
116.什么是存儲過程,如何調用,它有什么好處
存儲過程是: 將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。 調用: 調用: 1.創建CallableStatement對象 callStmt = conn.prepareCall("{call 存儲過程名(參數占位符?)}"); 2.為參數占位符賦值 callStmt.setString(1, "jdbc"); 3.如果是輸出參數則需要注冊 callStmt.registerOutParameter(問號下標, Types.數據類型); 4.執行 callStmt.execute(); 5.如果有輸出參數則獲取帶出的值 callStmt.getString(下標) 優點: 1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。 2.當對數據庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。 3.存儲過程可以重復使用,可減少數據庫開發人員的工作量 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權 |
117.索引的作用,優缺點是什么
索引: 數據庫索引是為了增加查詢速度而對表字段附加的一種標識 優點: 1.通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。 2.可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。 3.可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。 4.在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。 5.通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。 缺點: 1.創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。 2.索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。 3.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。 |
118.索引的分類
1.直接創建索引和間接創建索引 直接創建索引: CREATE INDEX mycolumn_index ON mytable (myclumn) 間接創建索引:定義主鍵約束或者唯一性鍵約束,可以間接創建索引 2.普通索引和唯一性索引 普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn) 唯一性索引:保證在索引列中的全部數據是唯一的,對聚簇索引和非聚簇索引都可以使用 CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn) 3.單個索引和復合索引 單個索引:即非復合索引 復合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,最多16個字段 CREATE INDEX name_index ON username(firstname,lastname) 4.聚簇索引和非聚簇索引(聚集索引,群集索引) 聚簇索引:物理索引,與基表的物理順序相同,數據值的順序總是按照順序排列 CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW(允許有重復記錄的聚簇索引) 非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) |
119.什么是事務,事務的特點有哪些
事務(Transaction)是訪問並可能更新數據庫中各種數據項的一個程序執行單元(unit)。事務通常由高級數據庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操作組成。 事務應該具有4個屬性:原子性、一致性、隔離性、持續性。這四個屬性通常稱為ACID特性。 1.原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的操作要么都做,要么都不做。 2.一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。 3.隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。 4.持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。 |
120.事務的分類有哪些,sqlserver的默認事務是什么
Read Uncommitted(未提交讀) 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為臟讀(Dirty Read) Read Committed(已提交讀) 這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別也支持所謂的不可重復讀(Nonrepeatable Read), Repeatable Read(可重讀) 是MySQL的默認事務隔離級別,它確保同一事務的多個實例在並發(指一個時間段中有幾個程序都處於已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。)讀取數據時,會看到同樣的數據行。 Serializable(可串行化) 是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。 sqlserver默認級別是已提交讀 |
121.數據庫里開始事務 提交事務 回滾事務的代碼是什么
SQLSERVER:
MYSQL
|
什么叫視圖?游標是什么?
視圖: 在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。 視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。我們可以向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,我們也可以提交數據,就像這些來自於某個單一的表。 游標: 游標(cursor)是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字,用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變量,交由主語言進一步處理。 |
什么是設計模式
設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。 |
你知道那些設計模式
設計模式分為三種類型,共23種。 創建型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。 結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。 行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式(Interpreter模式)、狀態模式、策略模式、職責鏈模式(責任鏈模式)、訪問者模式。 |
工廠模式有那些,各自的作用
簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
工廠方法模式(FACTORY METHOD)是一種常用的對象創建型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達到解耦、復用和方便后期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品
抽象工廠是一種常見的設計模式。此模式為一個產品家族提供了統一的創建接口。當需要這個產品家族的某一系列的時候,可以從抽象工廠中選出相對系的系列來創建一個具體的工廠類別。 |
單例模式什么時候用,你能寫出一個單例嗎
單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例 Code: public class SingletonClass{ private static SingletonClass instance=null; public static SingletonClass getInstance(){ if(instance==null){ synchronized(SingletonClass.class){ if(instance==null){ instance=new SingletonClass(); } } } return instance; } private SingletonClass(){} } |
代理模式你在那里見到過
Hibernate的延遲加載及Spring的AOP編程都包含代理模式
適配器模式是什么意思
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以在一起工作。
為什么要分層開發?
表示層,業務層,持久層 1、開發人員可以只關注整個結構中的其中某一層; 2、可以很容易的用新的實現來替換原有層次的實現; 3、可以降低層與層之間的依賴; 4、有利於標准化; 5、利於各層邏輯的復用。 6、結構更加的明確 7、在后期維護的時候,極大地降低了維護成本和維護時間 |
一般應用程序分為幾層?
三層,表示層,業務層,持久層 |
多層之間如何解偶合?
為每個層次抽象出統一的接口,供上層引用,同時我們必須提供相應的注入方式,為調用層引用的接口實例賦值實例化。 |
各種數據結構的特點?
a) 順序存儲結構 邏輯相鄰,物理相鄰,數據元素之間的關系存儲單元的領接關系唯一確定,例如數組就是這種存儲結構 b) 鏈式存儲結構 a) 存儲數據結構的內存空間可以不連續,數據元素之間的由指針來確定 b) 結點由兩個域組成:數據域和指針域 c) 插入和刪除操作方便靈活 hashtable就是這種存儲結構 |
Java中是否有對應的實現?
順序結構-ArrayList
鏈式存儲結構 LinkedList
查找的算法有幾種?
a) 順序查找 從表的一端開始,順序掃描線性表,一次獎掃描到的結點的關鍵字和給定值K想比較 b) 二分查找 折半查找 要求線性表是有序表,即表中結點按關鍵字有序,並且用順序表作為表的存儲結構。 c) 哈希表查詢技術 查找和檢索與唯一標識鍵相關信息的最好方法之一 |
排序的算法?
a) 插入排序 i. 1.從第一個元素開始,該元素可以認為已經被排序 2.取出下一個元素,在已經排序的元素序列中從后向前掃描 3.如果該元素(已排序)大於新元素,將該元素移到下一位置 4.重復步驟3,直到找到已排序的元素小於或者等於新元素的位置 5.將新元素插入到該位置后 6.重復步驟2~5 b) 希爾排序 將數組列在一個表中並對列排序(用插入排序)。重復這過程,不過每次用更長的列來進行。最后整個表就只有一列了 c) 選擇排序 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢 d) 冒泡排序 它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成 |
Java產生柱狀、折線等圖形
JfreeChart以及一些JS庫比如 highChart
使用Java發送郵件
1、構建一個繼承自javax.mail.Authenticator的具體類,並重寫里面的getPasswordAuthentication()方法。此類是用作登錄校驗的,以確保你對該郵箱有發送郵件的權利。 2、構建一個properties文件,該文件中存放SMTP服務器地址等參數。 3、通過構建的properties文件和javax.mail.Authenticator具體類來創建一個javax.mail.Session。Session的創建,就相當於登錄郵箱一樣。剩下的自然就是新建郵件。 4、構建郵件內容,一般是javax.mail.internet.MimeMessage對象,並指定發送人,收信人,主題,內容等等。 5、使用javax.mail.Transport工具類發送郵件。 |
Js中使用地圖
以百度地圖為例:
|
poi等組件的應用
Apache POI 是創建和維護操作各種符合Office Open XML(OOXML)標准和微軟的OLE 2復合文檔格式(OLE2)的Java API。用它可以使用Java讀取和創建,修改MS Excel文件.而且,還可以使用Java讀取和創建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解決方案(適用於Excel97-2008)。 HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。 XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。 HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。 HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。 HDGF - 提供讀Microsoft Visio格式檔案的功能。 HPBF - 提供讀Microsoft Publisher格式檔案的功能。 HSMF - 提供讀Microsoft Outlook格式檔案的功能。 // 聲明一個工作薄 HSSFWorkbook wb = new HSSFWorkbook(); //聲明一個單子並命名 HSSFSheet sheet = wb.createSheet(學生表); //給單子名稱一個長度 sheet.setDefaultColumnWidth((short)15); // 生成一個樣式 HSSFCellStyle style = wb.createCellStyle(); //創建第一行(也可以稱為表頭) HSSFRow row = sheet.createRow(0); //樣式字體居中 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //給表頭第一行一次創建單元格 HSSFCell cell = row.createCell((short) 0); cell.setCellValue(學生編號); cell.setCellStyle(style); cell = row.createCell( (short) 1); cell.setCellValue(學生姓名); cell.setCellStyle(style); cell = row.createCell((short) 2); cell.setCellValue(學生性別); cell.setCellStyle(style); //添加一些數據集合數據 List<student> list = new ArrayList<student>(); list.add(new Student(111,張三,男)); list.add(new Student(111,李四,男)); list.add(new Student(111,王五,女));
//向單元格里填充數據 for (short i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); row.createCell(0).setCellValue(list.get(i).getId()); row.createCell(1).setCellValue(list.get(i).getName()); row.createCell(2).setCellValue(list.get(i).getSex()); } |
在javascript中如何運用?
1.創建一個新Excel表格 var XLObj = new ActiveXObject("Excel.Application"); var xlBook = XLObj.Workbooks.Add; //新增工作簿 var ExcelSheet = xlBook.Worksheets(1); //創建工作表 2.保存表格 ExcelSheet.SaveAs("C:\\TEST.XLS"); 3.使 Excel 通過Application 對象可見 ExcelSheet.Application.Visible = true; 4.打印 xlBook.PrintOut; 或者: ExcelSheet.PrintOut; 5.關閉 xlBook.Close(savechanges=false); 或者: ExcelSheet.Close(savechanges=false); 6.結束進程 ExcelSheet.Application.Quit(); |
WebService的協議? WebService的優點?
a) Web Service使用的是 SOAP協議 b) 優點 i. (1)可以跨防火牆進行通信 ii. (2)應用程序集成。 即把在不同平台編寫的應用程序統一集成起來 iii. (3)軟件和數據重用 |
使用過哪些開源組件?
Poi,jfreechart,dom4j,log4j等
MyEclipse開發工具
收費的eclipse插件版
weblogic服務器
WebLogic是美商Oracle的主要產品之一,系並購BEA得來。是商業市場上主要的Java(J2EE)應用服務器軟件(application server)之一,是世界上第一個成功商業化的J2EE應用服務器, 已推出到12c(12.1.3) 版。而此產品也延伸出WebLogic Portal,WebLogic Integration等企業用的中間件(但當下Oracle主要以Fusion Middleware融合中間件來取代這些WebLogic Server之外的企業包),以及OEPE(Oracle Enterprise Pack for Eclipse)開發工具。 |
MySql、Oracle
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。 Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說Oracle數據庫系統是目前世界上流行的關系數據庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。 它是一種高效率、可靠性好的 適應高吞吐量的數據庫解決方案。 |
Sql Server2008
SQL Server是由Microsoft開發和推廣的關系數據庫管理系統(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發的,並於1988年推出了第一個OS/2版本。 |
Powerdesinger ,Project
PowerDesiger是“一站式”建模與設計的解決方案。企業級用戶可以借此創建新應用或對現有商業應用軟件進行反向工程,而整個流程會十分迅速、流暢、經濟。那些困擾項目開發的難題--------使用不同的技術、跨平台運行,以及在大部分企業中常見的混合多種開發語言的問題都可迎刃而解了。這樣用戶可以在開發流程的各個階段(從系統分析和設計到自動生成編碼)將精力集中在實現商業需求上。 Microsoft Project (或 MSP)是一個國際上享有盛譽的通用的項目管理工具軟件,凝集了許多成熟的項目管理現代理論和方法,可以幫助項目管理者實現時間、資源、成本的計划、控制。 |
LoadRunner,QTP,StarUML
LoadRunner,是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施並發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。企業使用LoadRunner能最大限度地縮短測試時間,優化性能和加速應用系統的發布周期。 LoadRunner可適用於各種體系架構的自動負載測試,能預測系統行為並評估系統性能。 QTP是quicktest Professional的簡稱,是一種自動測試工具。使用QTP的目的是想用它來執行重復的自動化測試,主要是用於回歸測試和測試同一軟件的新版本。因此你在測試前要考慮好如何對應用程序進行測試,例如要測試哪些功能、操作步驟、輸入數據和期望的輸出數據等 StarUML是一款開放源碼的UML開發工具,是由韓國公司主導開發出來的產品 |
SVN
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它采用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。 |
Tomcat服務器
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成 |