java 面試題2

Java 模擬面試題

1.面向對象的特色javascript

    繼承,封裝,多態css

2.對象和類的區別是什麼?html

    對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型,它們的關係是,對象是類的實例,類是對象的模板。前端

3.靜態成員和實例成員的區別?java

    靜態成員又叫類成員,指的是用static修飾符所修飾過的變量或方法。mysql

    實例成員就是沒有用static修飾的變量或方法.主要不一樣就是這有沒有static修飾。程序員

    形成的結果是靜態成員能夠直接由類名調用,而實例成員還要用new標示符進行實例化,長生對象才能去調用方法和變量。web

 

4.Java支持多重繼承麼,Java中全部對象共同的基類是什麼,可以阻止某一個類被其餘類繼承麼?面試

    1.不支持ajax

    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類沒有任何區別

接口是徹底不一樣的類型

訪問修飾符

抽象方法能夠有publicprotecteddefault這些修飾符

接口方法默認修飾符是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區別是什麼?

hashmap

線程不安全

容許有null的鍵和值

效率高一點、

方法不是Synchronize的要提供外同步

有containsvalue和containsKey方法

HashMap 是Java1.2 引進的Map interface 的一個實現

HashMap是Hashtable的輕量級實現

hashtable

線程安全

不容許有null的鍵和值

效率稍低、

方法是是Synchronize的

有contains方法方法

、Hashtable 繼承於Dictionary 類

Hashtable 比HashMap 要舊

 

 

27.List和Set區別是什麼?

一、List,Set都是繼承自Collection接口

二、List特色:元素有放入順序,元素可重複 ,Set特色:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,可是元素在set中的位置是有該元素的HashCode決定的,其位置實際上是固定的)

三、List接口有三個實現類:LinkedList,ArrayList,Vector ,Set接口有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet

 

28.HashMap是什麼樣的集合,它是否容許空鍵空值

         無序的鍵值對集合,經過HASHCODE決定元素的存儲.容許空鍵空值,但不能重複

29.HashMap是無序的,如何實現有序存儲?

         使用LinkedHashMap能夠實現有序的HASHMAP

30.隊列和棧的區別是什麼,實現了隊列和棧的集合分別是什麼?

         隊列先進先出,棧先進後出,

         java.util.Queue 和 java.util.Stack

31.ArrayList集合如何排序

  1. 編寫排序類實現Comparator接口
  2. 實現Comparator接口的compare方法
  3. Collections.sort(集合, 排序類); 

 

32.java中集合的工具類是什麼?

         java.util.Collections

        

1)      排序(Sort)
使用sort方法能夠根據元素的天然順序 對指定列表按升序進行排序。列表中的全部元素都必須實現 Comparable 接口。此列表內的全部元素都必須是使用指定比較器可相互比較的

2)      混排(Shuffling)
混排算法所作的正好與 sort 相反: 它打亂在一個 List 中可能有的任何排列的蹤影。也就是說,基於隨機源的輸入重排該 List, 這樣的排列具備相同的可能性(假設隨機源是公正的)。這個算法在實現一個碰運氣的遊戲中是很是有用的。例如,它可被用來混排表明一副牌的 Card 對象的一個 List 。另外,在生成測試案例時,它也是十分有用的。

3)      反轉(Reverse)
       使用Reverse方法能夠根據元素的天然順序 對指定列表按降序進行排序。

4)      替換因此的元素(Fill)
使用指定元素替換指定列表中的全部元素。

5)      拷貝(Copy)
用兩個參數,一個目標 List 和一個源 List, 將源的元素拷貝到目標,並覆蓋它的內容。目標 List 至少與源同樣長。若是它更長,則在目標 List 中的剩餘元素不受影響。

6)      返回Collections中最小元素(min)
根據指定比較器產生的順序,返回給定 collection 的最小元素。collection 中的全部元素都必須是經過指定比較器可相互比較的

7)      返回Collections中最小元素(max)
根據指定比較器產生的順序,返回給定 collection 的最大元素。collection 中的全部元素都必須是經過指定比較器可相互比較的

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如何調用帶輸出參數存儲過程

        

  1. 首先經過Connection對象建立CallableStatement的對象,並傳入要執行的存儲過程名稱如: {call 存儲過程名稱(參數)}
  2. 註冊輸出參數
  3. 執行存儲過程
  4. 獲取輸出參數帶出的值

 

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 的區別:

一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙

   考慮到安全應當使用session。

三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能

   考慮到減輕服務器性能方面,應當使用COOKIE。

四、單個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端,下降了系統的通信開銷,能夠充分利用兩端硬件環境的優點。早期的軟件系統多以此做爲首選設計標準。。 
B/S結構,即Browser/Server(瀏覽器/服務器)結構,是隨着Internet技術的興起,對C/S結構的一種變化或者改進的結構。在這種 結構下,用戶界面徹底經過WWW瀏覽器實現,一部分事務邏輯在前端實現,可是主要事務邏輯在服務器端實現,造成所謂3-tier結構。B/S結構,主要是 利用了不斷成熟的WWW瀏覽器技術,結合瀏覽器的多種Script語言(VBScript、JavaScript…)和ActiveX技術,用通用瀏覽器 就實現了原來須要複雜專用軟件才能實現的強大功能,並節約了開發成本,是一種全新的軟件系統構造技術。隨着Windows 98/Windows 2000將瀏覽器技術植入操做系統內部,這種結構更成爲當今應用軟件的首選體系結構。 

 

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框架中的處理大概分爲如下幾個步驟

一、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求

二、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin)

三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否須要調用某個Action ,FilterDispatcher是控制器的核心,就是mvc中c控制層的核心。下面粗略的分析下我理解的FilterDispatcher工做流程和原理:FilterDispatcher進行初始化並啓用核心doFilter

四、若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy

五、ActionProxy經過ConfigurationManager詢問框架的配置文件,找到須要調用的Action類 ,這裏,咱們通常是從struts.xml配置中讀取。

六、ActionProxy建立一個ActionInvocation的實例。

七、ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。

八、一旦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的內置攔截器

  1. fileUpload 文件上傳
  2. modelDriven 模型驅動
  3. validation 驗證
  4. exception 異常
  5. cookie COOKIE
  6. createSession 建立會話
  7. i18n 國際化

74.如何在Struts2中使用Ajax功能

        

  1. 能夠使用Struts2內置的AJAX插件
  2. 編寫原生的AJAX代碼發送異步請求,或者用JQUERY等JS框架發送請求,此時ACTION處理請求的方法的返回值必須爲NULL

 

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持久層及對象的建立都獲得控制.

  1. Struts2的整合主要負責MVC方面,全部的ACTION實例的產生不在由STRUTS2框架負責而是交給Spring來負責,Spring管理的Bean默認是單例模式因此須要設置Action的Bean爲原型模式
  2. 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中自動裝配的方式有哪些?

模式

說明

  Default

在每一個bean中都一個autowire=default的默認配置它的含義是:

採用beans和跟標籤中的default-autowire="屬性值"同樣的設置。

 

  On

不使用自動裝配,必須經過ref元素指定依賴,默認設置。

 

  ByNname

根據屬性名自動裝配。此選項將檢查容器並根據名字查找與屬性徹底一致的bean,並將其與屬性自動裝配。例如,在bean定義中將autowire設置爲by name,而該bean包含master屬性(同時提供setMaster(..)方法),Spring就會查找名爲master的bean定義,並用它來裝配給master屬性。

  Bytype

若是容器中存在一個與指定屬性類型相同的bean,那麼將與該屬性自動裝配。若是存在多個該類型的bean,那麼將會拋出異常,並指出不能使用byType方式進行自動裝配。若沒有找到相匹配的bean,則什麼事都不發生,屬性也不會被設置。若是你不但願這樣,那麼能夠經過設置dependency-check="objects"讓Spring拋出異常。

 

 Constructor

byType的方式相似,不一樣之處在於它應用於構造器參數。若是在容器中沒有找到與構造器參數類型一致的bean,那麼將會拋出異常。 

Antodetect

經過bean類的自省機制(introspection)來決定是使用constructor仍是byType方式進行自動裝配。若是發現默認的構造器,那麼將使用byType方式。

 

 

 

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容器?

        

  1. request.getSession().getServletContext().getAttribute("org.springframework.web.context.WebApplicationContext.ROOT") 
  2. WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc); 
  3. WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();

 

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中常見的優化技巧

一、生成對象時,合理分配空間和大小

二、優化for循環 將集合或數組長度作成變量,循環判斷只判斷長度變量,不用SIZE().LENGTH()之類方法

三、new一個實例對象,new在什麼位置(儘可能在使用時再建立該對象)。

四、異常處理技巧

五、儘可能使用局部變量和靜態變量

六、儘可能不適用多線程同步

七、儘量的使用Java自身提供的API

八、儘可能減小I/O操做(控制檯、日誌)

九、儘可能使用緩存流(儘量使用帶有Buffer的類代替沒有Buffer的類,BufferedReader、BufferedWriter、BufferedInputStream)

十、sql優化、存儲過程、視圖、鏈接池(C3P0 、DBCP)

十一、數據庫數據分級存儲

十二、緩存策略

1三、html靜態化

1四、不用保存太多的信息在HttpSession中

1五、在使用大數據對象時,所以建議在對象使用完畢後,手動設置成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:

  1. Begin tran 2.commit tran 3.rollback tran

MYSQL

  1. Start transaction 2.commit 3.rollback

 

什麼叫視圖?遊標是什麼?

視圖:

在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。

視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。咱們能夠向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,咱們也能夠提交數據,就像這些來自於某個單一的表。

遊標:

遊標(cursor)是系統爲用戶開設的一個數據緩衝區,存放SQL語句的執行結果。每一個遊標區都有一個名字,用戶能夠用SQL語句逐一從遊標中獲取記錄,並賦給主變量,交由主語言進一步處理。

 

什麼是設計模式

設計模式(Design pattern)是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構同樣。

 

你知道那些設計模式

設計模式分爲三種類型,共23種。

建立型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。

結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。

行爲型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式(Interpreter模式)、狀態模式、策略模式、職責鏈模式(責任鏈模式)、訪問者模式。

 

工廠模式有那些,各自的做用

  1. 簡單工廠

簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是經過專門定義一個類來負責建立其餘類的實例,被建立的實例一般都具備共同的父類。

  1. 工廠方法

工廠方法模式(FACTORY METHOD)是一種經常使用的對象建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分爲獨立類,經過依賴注入以達到解耦、複用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品

  1. 抽象工廠

抽象工廠是一種常見的設計模式。此模式爲一個產品家族提供了統一的建立接口。當須要這個產品家族的某一系列的時候,能夠從抽象工廠中選出相對系的系列來建立一個具體的工廠類別。

 

單例模式何時用,你能寫出一個單例嗎

單例模式是一種經常使用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。經過單例模式能夠保證系統中一個類只有一個實例

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模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠在一塊兒工做。

爲何要分層開發?

表示層,業務層,持久層

一、開發人員能夠只關注整個結構中的其中某一層;

  二、能夠很容易的用新的實現來替換原有層次的實現;

  三、能夠下降層與層之間的依賴;

  四、有利於標準化;

  五、利於各層邏輯的複用。

  六、結構更加的明確

  七、在後期維護的時候,極大地下降了維護成本和維護時間

 

通常應用程序分爲幾層?

三層,表示層,業務層,持久層

 

多層之間如何解偶合?

爲每一個層次抽象出統一的接口,供上層引用,同時咱們必須提供相應的注入方式,爲調用層引用的接口實例賦值實例化。

 

各類數據結構的特色?

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發送郵件

一、構建一個繼承自javax.mail.Authenticator的具體類,並重寫裏面的getPasswordAuthentication()方法。此類是用做登陸校驗的,以確保你對該郵箱有發送郵件的權利。

二、構建一個properties文件,該文件中存放SMTP服務器地址等參數。

三、經過構建的properties文件和javax.mail.Authenticator具體類來建立一個javax.mail.Session。Session的建立,就至關於登陸郵箱同樣。剩下的天然就是新建郵件。

四、構建郵件內容,通常是javax.mail.internet.MimeMessage對象,並指定發送人,收信人,主題,內容等等。

五、使用javax.mail.Transport工具類發送郵件。

 

Js中使用地圖

以百度地圖爲例:

  1. 導入JS <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰">
  2. 設置移動端兼容性 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  3. 建立地圖對象 var map = new BMap.Map("地圖要呈現的DIV");
  4. 建立定位點 var point = new BMap.Point(116.404, 39.915);
  5. 讓地圖對象定位在剛剛的座標map.centerAndZoom(point, 15);

 

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 和其餘一些公司及我的共同開發而成

相關文章
相關標籤/搜索