色www,五月婷婷深爱五月,午夜国产一级片,色噜噜综合,国产大胸无码视频,清纯美女被操黄网站在线观看,波多野结衣av高清一区二区三区

Java代碼的基本知識(shí)

時(shí)間:2024-10-26 11:29:20 計(jì)算機(jī)等級(jí) 我要投稿
  • 相關(guān)推薦

Java代碼的基本知識(shí)

  Java是一個(gè)強(qiáng)類(lèi)型語(yǔ)言,它允許擴(kuò)展編譯時(shí)檢查潛在類(lèi)型不匹配問(wèn)題的功能。下面是小編整理的關(guān)于Java代碼的基本知識(shí),希望大家認(rèn)真閱讀~

Java代碼的基本知識(shí)

  1、 簡(jiǎn)述Java的基本歷史

  java起源于SUN公司的一個(gè)GREEN的項(xiàng)目,其原先目的是:為家用消費(fèi)電子產(chǎn)品發(fā)送一個(gè)信息的分布式代碼系統(tǒng),通過(guò)發(fā)送信息控制電視機(jī)、冰箱等

  2、 簡(jiǎn)單寫(xiě)出Java特點(diǎn),寫(xiě)出5個(gè)以上,越多越好

  簡(jiǎn)單的、面向?qū)ο蟮摹⒎植际降、安全的、穩(wěn)定的、與平臺(tái)無(wú)關(guān)的、可解釋的、多線(xiàn)的、動(dòng)態(tài)的語(yǔ)言。

  3、 什么是Java?

  JAVA:一種編程語(yǔ)言

  一種開(kāi)發(fā)環(huán)境

  一種應(yīng)用環(huán)境

  一種部署環(huán)境

  4、 請(qǐng)寫(xiě)出Java的版本分類(lèi),以及每種版本的應(yīng)用方向

  三種版本:

  JME:是面向內(nèi)存有限的移動(dòng)終端. 為消費(fèi)性產(chǎn)品設(shè)計(jì)的;

  JSE: 是SUN公司針對(duì)桌面開(kāi)發(fā)和低端商務(wù)計(jì)算方案開(kāi)發(fā)的版本。為筆記本電腦、PC機(jī)設(shè)計(jì)的;

  JEE: 是一種利用JAVA 2平臺(tái)來(lái)簡(jiǎn)化企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)的復(fù)雜問(wèn)題的體系結(jié)構(gòu)。 為企業(yè)級(jí)的、服務(wù)器端的高端應(yīng)用而設(shè)計(jì)的;

  5、 描述Java技術(shù)的主要特性

  java虛擬機(jī)

  垃圾回收

  代碼安全性

  6、 描述 Java虛擬機(jī)的功能

  (1)通過(guò) ClassLoader 尋找和裝載 class 文件

  (2)解釋字節(jié)碼成為指令并執(zhí)行,提供 class 文件的運(yùn)行環(huán)境

  (3)進(jìn)行運(yùn)行期間垃圾回收

  (4)提供與硬件交互的平臺(tái)

  7、 簡(jiǎn)述Java代碼安全性

  (1)編譯時(shí)的錯(cuò)誤檢驗(yàn)

  (2)類(lèi)裝載檢查,把本機(jī)上的類(lèi)和網(wǎng)絡(luò)資源類(lèi)相分離,在調(diào)入類(lèi)的時(shí)候進(jìn)行檢查,因而可以限制任何“特洛伊木馬”的應(yīng)用

  (3)字節(jié)碼校驗(yàn)

  (4)沙箱機(jī)制,限定訪(fǎng)問(wèn)權(quán)限

  8、 描述Java垃圾回收機(jī)制

  Java 編程語(yǔ)言解除了程序員釋放內(nèi)存的責(zé)任。它可提供一種系統(tǒng)級(jí)線(xiàn)程以跟蹤每一次內(nèi)存的分配情況。在 Java 虛擬機(jī)的空閑周期,垃圾收集線(xiàn)程檢查并釋放那些可被釋放的內(nèi)存。垃圾收集在 Java 技術(shù)程序的生命周期中自動(dòng)進(jìn)行,它解除了釋放內(nèi)存的要求,這樣能夠有效避免內(nèi)存漏洞和內(nèi)存泄露(內(nèi)存泄露就是程序運(yùn)行期間,所占用的內(nèi)存一直往上漲, 很容易造成系統(tǒng)資源耗盡而降低性能或崩潰 。

  垃圾回收有以下特點(diǎn):

  (1)垃圾回收是一個(gè)自動(dòng)的系統(tǒng)行為,程序員不能控制垃圾回收的功能和行為。

  (2)有一些跟垃圾回收相關(guān)的方法,比如:System.gc( ) ,調(diào)用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運(yùn)不運(yùn)行,什么時(shí)候運(yùn)行,都是無(wú)法控制的。

  (3)程序員可以通過(guò)設(shè)置對(duì)象為 null,來(lái)標(biāo)示某個(gè)對(duì)象不再被需要了, 這只是表示這個(gè)對(duì)象可以被回收了,并不是馬上被回收。

  9、 簡(jiǎn)述Java代碼的運(yùn)行過(guò)程

  (1)編寫(xiě)代碼

  (2)編譯

  (3)類(lèi)裝載 通過(guò)類(lèi)裝載器裝載CLASS文件

  (4)校驗(yàn)代碼 由字節(jié)碼校驗(yàn)

  (5)解釋 由解釋器將字節(jié)碼轉(zhuǎn)換成機(jī)器碼

  (6)運(yùn)行

  10、 簡(jiǎn)述如何搭建Java開(kāi)發(fā)環(huán)境

  首先下載安裝JDK 然后配置環(huán)境

  (1)配置PATH, 操作系統(tǒng)運(yùn)行環(huán)境的路徑

  (2)配置CLASSPATH JAVA運(yùn)行應(yīng)用程序時(shí)所需要的類(lèi)包的路徑

  (3)配置JAVA_HOME 供需要運(yùn)行JAVA的程序使用

  11、 簡(jiǎn)述classpath,path,JAVA_HOME的意義和配置方法

  path 操作系統(tǒng)運(yùn)行環(huán)境的路徑

  classpath JAVA運(yùn)行應(yīng)用程序時(shí)所需要的類(lèi)包的路徑

  JAVA_HOME 供需要運(yùn)行JAVA的程序使用

  12、 請(qǐng)描述:一個(gè)完整的Java文件的代碼分幾個(gè)部分,每部分都起什么作用,大致的寫(xiě)法

  package 當(dāng)前類(lèi)所在位置

  import 當(dāng)前類(lèi)運(yùn)行時(shí)所需要的包或類(lèi)

  public class 類(lèi)名 {

  屬性定義;

  方法定義:

  構(gòu)造方法定義;

  public static void main(String args []) 例外{ 程序入口

  語(yǔ)句;

  }

  }

  //注釋

  13、 Java代碼的注釋有幾種?分別舉例說(shuō)明

  (1) // 單行注解

  (2) /* */ 塊注釋

  (3) /* *

  * 文檔注釋

  */

  14、 什么是Java代碼的語(yǔ)句,什么是Java代碼的塊,舉例說(shuō)明

  語(yǔ)句 是一行以分號(hào)終止的代碼,例:int a;

  塊 是以{ }為邊界的一些語(yǔ)句的集合 例:public void tt( ){}

  15、 什么是標(biāo)示符?

  標(biāo)識(shí)符:是賦予變量、類(lèi)、方法的名稱(chēng)。

  //標(biāo)識(shí)符是標(biāo)識(shí)變量、類(lèi)或方法的有效字符序列

  16、 標(biāo)示符定義的規(guī)則?

  (1) 首字母只能以字母、下劃線(xiàn)、$開(kāi)頭,其后可以跟字母‘下劃線(xiàn)、$和數(shù)字配置CLASSPATH

  (2) 表示符不能是關(guān)鍵字

  (3) 標(biāo)識(shí)符區(qū)分大小寫(xiě)

  17、 什么是關(guān)鍵字?

  關(guān)鍵字就是編程語(yǔ)言與機(jī)器語(yǔ)言的編碼約定

  18、 true、false、null、sizeof、goto、const那些是Java關(guān)鍵字

  true 、false 、null 為JAVA的關(guān)鍵字

  19、 Java的基本數(shù)據(jù)類(lèi)型有幾種?分別是?

  short int long boolean float double char byte

  /*布爾類(lèi)型(boolean)

  字符型(char)

  數(shù)值類(lèi)型

  定點(diǎn)類(lèi)型 字節(jié)型(byte)

  短整型(short)

  整型(int)

  長(zhǎng)整型(long)

  浮點(diǎn)類(lèi)型 單精度(float)

  雙精度(double)

  20、 請(qǐng)寫(xiě)出每種基本類(lèi)型的默認(rèn)值?取值范圍?分別給出一個(gè)定義的例子

  默認(rèn)值 取值范圍 示例

  字節(jié)型 : 0 -2^7----2^7-1 byte b=10;

  字符型 : ' u0000' 0----2^16-1 char c=’c’ ;

  short : 0 -2^15----2^15-1 short s=10;

  int : 0 -2^31----2^31-1 int i=10;

  long : 0 -2^63----2^63-1 long o=10L;

  float : 0.0f -2^31----2^31-1 float f=10.0F

  double : 0.0d -2^63----2^63-1 double d=10.0;

  boolean: false truefalse boolean flag=true;

  21、 在基本類(lèi)型中,如果不明確指定,整數(shù)型的默認(rèn)是什么類(lèi)型?帶小數(shù)的默認(rèn)是什么類(lèi)型?

  整數(shù)類(lèi)型 默認(rèn)為 int

  帶小數(shù)的默認(rèn)為 double

  boolean的默認(rèn)值 false

  22、 如何定義float類(lèi)型和long型

  float f = 1.2f

  long l = 1.2L

  23、 什么是變量?

  變量是用來(lái)引用一塊內(nèi)存區(qū)域或一個(gè)值,用標(biāo)識(shí)符來(lái)表示,可以通過(guò)操作變量來(lái)操作變量所對(duì)應(yīng)的內(nèi)存區(qū)域或值塊的值。

  24、 變量的定義規(guī)則?

  (1) 以字母、$、下劃線(xiàn)開(kāi)頭,其后可以跟字母、下劃線(xiàn)、$和數(shù)字;

  (2) 首字母小寫(xiě),中間單詞用大寫(xiě)字母隔開(kāi);

  (3) 名稱(chēng)具有一定含義;

  //4.可以先聲明再賦值也可以聲明的同時(shí)進(jìn)行賦值

  //5.沒(méi)有賦值的變量是不可以使用的

  25、 請(qǐng)寫(xiě)出Java編碼約定中對(duì)下列部分的要求:類(lèi)、屬性、方法、包、文件名、變量、常量、控制結(jié)構(gòu)、語(yǔ)句行、注釋

  類(lèi): 一個(gè)類(lèi)文件中類(lèi)名要和文件名相同,類(lèi)名一定要以大寫(xiě)字母開(kāi)頭,單詞之間用大寫(xiě)字母分隔

  屬性: 屬性名首字母小寫(xiě),中間用大寫(xiě)字母隔開(kāi)。

  方法: 方法名首字母小寫(xiě),中間用大寫(xiě)字母隔開(kāi)。

  包: 引用包必須寫(xiě)在類(lèi)文件的開(kāi)頭,有且只能有一個(gè)包,全部用小寫(xiě)字母。

  控制結(jié)構(gòu):當(dāng)語(yǔ)句是控制結(jié)構(gòu)的一部分時(shí),即使是單個(gè)語(yǔ)句,也應(yīng)使用大括號(hào)將語(yǔ)句封閉。

  語(yǔ)句行:每行只寫(xiě)一個(gè)語(yǔ)句,并使用四個(gè)縮進(jìn)的空格,使代碼更易讀,注意用分號(hào)結(jié)束。

  注釋?zhuān)?用注釋來(lái)說(shuō)明那些不明顯代碼的段落。

  常量: 常量名一般用大寫(xiě)字母,單詞之間用下劃線(xiàn)分隔,一旦賦值不允許修改。

  26、 什么是Javadoc?

  按照一定格式生成程序的文檔的工具。

  27、 什么是引用類(lèi)型?

  用戶(hù)定義類(lèi)型, 它可引用類(lèi)和數(shù)組。

  除去基本數(shù)據(jù)類(lèi)型的其他類(lèi)型都是引用數(shù)據(jù)類(lèi)型。

  28、 什么是按值傳遞?什么是按引用傳遞?

  按值傳遞:就是將該值的副本傳過(guò)去(基本數(shù)據(jù)類(lèi)型+String類(lèi)型的傳遞,就是按值傳遞)

  按引用傳遞:就是將值的內(nèi)存地址傳過(guò)去(除基本數(shù)據(jù)類(lèi)型+String以外類(lèi)型的傳遞,就是引用傳遞)

  29、 如何創(chuàng)建一個(gè)新對(duì)象?如何使用對(duì)象中的屬性和方法?

  使用new 關(guān)鍵字來(lái)創(chuàng)建一個(gè)新的對(duì)象;

  通過(guò)對(duì)象的實(shí)例用“.”(點(diǎn))來(lái)調(diào)用對(duì)象中的屬性和方法;

  靜態(tài)的方法和屬性,也可以直接用類(lèi)名“.”(點(diǎn))來(lái)調(diào)用;

  30、 簡(jiǎn)述new關(guān)鍵字所做的工作

  new 創(chuàng)建一個(gè)對(duì)象,并為對(duì)象分配一塊內(nèi)存。

  31、 簡(jiǎn)述”=” 和”= =”的功能和區(qū)別

  "=" 賦值,

  "= ="當(dāng)比較基本數(shù)據(jù)類(lèi)型的時(shí)候,判斷前后兩個(gè)值是否相等;

  當(dāng)比較引用數(shù)據(jù)類(lèi)型的時(shí)候,判斷= =前后兩個(gè)值的內(nèi)存地址是否相等;

  區(qū)別:

  = :為賦值表達(dá)式

  = = :為邏輯表達(dá)式

  32、 什么是實(shí)例變量?什么是局部變量?什么是類(lèi)變量?什么是final變量?

  實(shí)例變量: 類(lèi)中定義的變量,即類(lèi)成員變量,如果沒(méi)有初始化,會(huì)有默認(rèn)值;

  局部變量: 在方法中定義的變量,必須初始化;

  類(lèi)變量: 用static修飾的屬性;

  final變量: 用final 修飾的變量,

  33、 簡(jiǎn)述上述各種變量的定義規(guī)則和使用規(guī)則?

  實(shí)例變量: 不需要static關(guān)鍵字來(lái)聲明,需要類(lèi)的實(shí)例(對(duì)象)調(diào)用(用“.”);

  類(lèi)變量: 用static修飾,可以用類(lèi)名調(diào)用,也可以用類(lèi)的實(shí)例調(diào)用;

  局部變量: 在方法內(nèi)任意定義變量即為局部變量;

  final變量: 一旦賦值,不可以再修改的變量;

  final屬性只允許賦值一次,且只能通過(guò)構(gòu)造方法賦值,定義后也就是一個(gè)常量;

  final修飾的變量,只允許賦值一次

  34、 a++和++a的區(qū)別?

  a++ : 先使用,后加1

  ++a : 先加1,后使用

  35、 請(qǐng)描述instanceof、?:、&、&&各自的功能

  instanceof :用來(lái)判斷某個(gè)實(shí)例變量是否屬于某種類(lèi)的類(lèi)型。

  ? : 三目運(yùn)算符:

  表達(dá)式1?表達(dá)式2:表達(dá)式3

  如果表達(dá)式1為true,執(zhí)行表達(dá)式2,否則執(zhí)行表達(dá)式3

  &: 位運(yùn)算:按位與 |

  &&: 邏輯運(yùn)算:邏輯與

  36、 請(qǐng)描述>>、<<、>>>的功能

  10>>4 :算術(shù)或符號(hào)右移位運(yùn)算符

  << :算術(shù)或符號(hào)左移位運(yùn)算符

  >>> :邏輯或無(wú)符號(hào)右移位運(yùn)算符

  37、 請(qǐng)描述什么是強(qiáng)制類(lèi)型轉(zhuǎn)換?什么是自動(dòng)類(lèi)型轉(zhuǎn)換?什么是向上造型?并分別舉例說(shuō)明

  強(qiáng)制類(lèi)型轉(zhuǎn)換:在一個(gè)類(lèi)型前面加( ),來(lái)強(qiáng)制轉(zhuǎn)換

  long l = 9L;

  int i = (int)l;

  自動(dòng)類(lèi)型轉(zhuǎn)換:

  int i = 5;

  String str = ""+i;

  向上造型:把范圍小的造型為范圍大的類(lèi)型:

  int i = 2;

  long l = i;

  38、 請(qǐng)寫(xiě)出完整的if條件控制語(yǔ)句的結(jié)構(gòu)

  if(布爾表達(dá)式){

  語(yǔ)句

  }else{

  語(yǔ)句

  }

  39、 請(qǐng)寫(xiě)出完整的switch語(yǔ)句的結(jié)構(gòu)

  switch(字符){

  case 字符: 語(yǔ)句

  break;

  case 字符: 語(yǔ)句

  break;

  default:語(yǔ)句

  }

  40、 請(qǐng)寫(xiě)出完整的for語(yǔ)句的結(jié)構(gòu)

  for(初始語(yǔ)句;條件語(yǔ)句;步長(zhǎng)){

  }

  41、 請(qǐng)寫(xiě)出完整的while語(yǔ)句的結(jié)構(gòu)

  while(boolean語(yǔ)句){

  }

  42、 請(qǐng)寫(xiě)出完整的do while語(yǔ)句的結(jié)構(gòu)

  do{

  }while(boolean語(yǔ)句);

  43、 請(qǐng)描述break 和 continue的功能和用法

  break:終止(跳出)最近的循環(huán)

  continue:跳出本次循環(huán),執(zhí)行下一次循環(huán)

  44、 定義一個(gè)一維的int數(shù)組,先創(chuàng)建它,并初始化它,給它賦值,然后輸出其中的一個(gè)值

  public class Arr{

  public static void main(String args[]){

  int a[] = new int[5];

  a={1,2,3,4,5};//錯(cuò)誤 , 只能在初始化時(shí)這樣做

  a[0]=1;

  a[1]=2;

  System.out.println(a[0]);

  }

  }

  45、 定義一個(gè)一維的A類(lèi)型數(shù)組,直接定義并賦值,然后輸出其中的一個(gè)值

  public class A{

  public static int i;

  public static void main(String args[]){

  A aa = new A( );

  A bb = new A( );

  A a[] = {aa,bb};

  a[0].i=2;

  System.out.println(a[0]);

  }

  }

  46、 把上面的數(shù)組改成2維的數(shù)組

  public class A{

  public static int i;

  public static void main(String args[]){

  A a[ ][ ] = new A[5][5];

  a[0][0].i=2;

  System.out.println(a[0][0]);

  }

  }

  47、 舉例說(shuō)明數(shù)組拷貝方法的使用:arraycopy方法

  public class A{

  public static void main(String args[]){

  int a[] = new int[5];

  int b[] = new int[5];

  System.arraycopy(a[5],0,b[5],0,a.length)

  System.out.println(b[0][0]);

  }

  }

  48、 什么是構(gòu)造和析構(gòu)方法?功能是?

  構(gòu)造方法:每個(gè)類(lèi)至少有一個(gè)構(gòu)造方法,類(lèi)初始化時(shí)調(diào)用的方法

  1.方法名和類(lèi)名相同

  2.無(wú)返回值類(lèi)型

  格式:訪(fǎng)問(wèn)權(quán)限 類(lèi)名(參數(shù)列表) {};

  1.自己定義構(gòu)造后,就沒(méi)有默認(rèn)的構(gòu)造方法

  2.無(wú)構(gòu)造方法時(shí),默認(rèn)為空參的構(gòu)造方法(無(wú)參數(shù),方法體為空)

  析構(gòu)方法:finalize

  類(lèi)銷(xiāo)毀時(shí),自動(dòng)調(diào)用方法

  當(dāng)對(duì)象在內(nèi)存中被刪除時(shí),自動(dòng)調(diào)用該方法

  在此方法中可以寫(xiě)回收對(duì)象內(nèi)部的動(dòng)態(tài)空間的代碼

  49、 簡(jiǎn)述Java的訪(fǎng)問(wèn)修飾符類(lèi)型?分別有什么功能?

  public 公開(kāi)的,任何一個(gè)類(lèi)都有可以訪(fǎng)問(wèn)

  protected 同包同類(lèi),只可被它的子類(lèi)訪(fǎng)問(wèn)

  default 只能被同一個(gè)包中類(lèi)訪(fǎng)問(wèn)

  private 私有的,只能在本類(lèi)中被訪(fǎng)問(wèn)

  50、 分別說(shuō)明:在類(lèi)上、在屬性上、在方法上能使用哪些訪(fǎng)問(wèn)修飾符

  在類(lèi)上:public default final

  在方法上: 訪(fǎng)問(wèn)權(quán)限:public protected private default

  方法修飾符:static

  final

  返回類(lèi)型:void

  在屬性上:public protected private default

  static

  final

  51、 簡(jiǎn)述什么是包?包的功能

  包:對(duì)所定義的多個(gè)JAVA類(lèi)進(jìn)行分組,將多個(gè)功能相關(guān)的類(lèi)定義到一個(gè)包(文件)中。

  功能:1.易于查找和使用適當(dāng)?shù)念?lèi)

  2.包不止包含類(lèi)和接口,還可以包含其它包,形成層次的包空間

  3.有助于避免命名沖突

  52、 請(qǐng)寫(xiě)出5個(gè)以上的JDK中的包,以及他們的基本功能

  java.awt: 包含構(gòu)成抽象窗口工具集的多個(gè)類(lèi),用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶(hù)界面

  java.lang: 提供java編成語(yǔ)言的程序設(shè)計(jì)的基礎(chǔ)類(lèi)

  java.io:  包含提供多種輸出輸入功能的類(lèi),

  java.net:  包含執(zhí)行與網(wǎng)絡(luò)有關(guān)的類(lèi),如URL,SCOKET,SEVERSOCKET,

  java.applet: 包含java小應(yīng)用程序的類(lèi)

  java.util:  包含一些實(shí)用性的類(lèi)

  53、 什么是包裝類(lèi)?Java中都有哪些包裝類(lèi)

  在JDK中針對(duì)各種基本類(lèi)型分別定義相應(yīng)的引用類(lèi)型 --------------稱(chēng)為封裝類(lèi)

  Boolean Byte Short Integer Long Float Double Character

  54、 OOP(面向?qū)ο?語(yǔ)言的三大特征是?

  封裝性,繼承性,多態(tài)性

  55、 分別表述類(lèi)的三大特性及其他們的功能

  封裝:隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)、迫使用戶(hù)去使用一個(gè)接口去訪(fǎng)問(wèn)數(shù)據(jù)、使代碼更好維護(hù)

  繼承:子類(lèi)可以直接繼承使用父類(lèi)的方法,程序員只需要做的是定義額外特征或規(guī)定將適用的變化

  多態(tài)性:同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力

  56、 如何實(shí)現(xiàn)繼承?繼承的規(guī)則?

  public class A extends B{

  }

  (1) 單繼承性

  (2) 構(gòu)造方法不能繼承

  (3) super引用父類(lèi),調(diào)用父類(lèi)的屬性,方法

  (4) 當(dāng)子類(lèi)中出現(xiàn)與父類(lèi)的方法名,返回類(lèi)型,參數(shù)列表相同的方法時(shí)要覆蓋此方法

  57、 簡(jiǎn)述this和super的功能和用法

  this :

  (1) 能訪(fǎng)問(wèn)除構(gòu)造方法以外所有的屬性、方法,通過(guò)this. 來(lái)調(diào)用方法和屬性

  (2) 不可以在靜態(tài)方法中使用,

  (3) 在調(diào)用其它構(gòu)造方法時(shí),必須放在該構(gòu)造方法的第一行

  (4) 在構(gòu)造方法中使用this(參數(shù)列表),相當(dāng)于調(diào)用本類(lèi)的其它構(gòu)造方法,它必須作為構(gòu)造方法的第一句

  super :訪(fǎng)問(wèn)父類(lèi)

  (1) super. 點(diǎn)取父類(lèi)中被子類(lèi)隱藏的方法和屬性,

  (2) 通過(guò) super(參數(shù)列表) 來(lái)調(diào)用父類(lèi)的屬性和方法,在調(diào)用父類(lèi)的構(gòu)造方法時(shí)必須放在子類(lèi)構(gòu)造方法里的第一行;

  58、 如何確定在多態(tài)的調(diào)用中,究竟是調(diào)用的那個(gè)方法?

  new的是哪一個(gè)類(lèi)就是調(diào)用的哪個(gè)類(lèi)的方法。

  59、 請(qǐng)描述方法定義的完整的語(yǔ)法結(jié)構(gòu)

  權(quán)限修飾符 修飾符 返回類(lèi)型 方法名(參數(shù)) 例外{

  方法體;

  }

  60、 什么是重載?

  在一個(gè)類(lèi)中出現(xiàn)方法名相同,但參數(shù)列表不同時(shí),這種情況就是重載。

  61、 簡(jiǎn)述重載的規(guī)則

  (1) 方法名稱(chēng)必須相同;

  (2) 參數(shù)列表必須不同(個(gè)數(shù)不同,或類(lèi)型不同,或參數(shù)排列順序不同);

  (3) 與返回類(lèi)型無(wú)關(guān);

  62、 什么是方法的覆蓋?什么情況下出現(xiàn)?

  方法覆蓋:

  子類(lèi)可以修改從父類(lèi)繼承過(guò)來(lái)的行為,也就是說(shuō)子類(lèi)可以創(chuàng)建一個(gè)與父類(lèi)方法有不同功能的方法,但具有相同的:名稱(chēng)、返回類(lèi)型名和參數(shù)列表。

  在父子類(lèi)的情況下出現(xiàn)時(shí)。

  63、 方法覆蓋的規(guī)則?

  (1) 方法名要和父類(lèi)中被覆蓋的方法名相同,返回類(lèi)型相同,參數(shù)列表相同。

  (2) 訪(fǎng)問(wèn)權(quán)限要大于等于被覆蓋方法的權(quán)限。

  (3) 例外列表要小于等于被覆蓋方法的例外列表。

  64、 static修飾符的功能是?可以用在什么地方?怎么訪(fǎng)問(wèn)?

  static 修飾符功能:

  (1) 共用一塊內(nèi)存區(qū)域,也就是用static修飾的變量或成員方法對(duì)所有類(lèi)的實(shí)例都是相同的

  (2) 靜態(tài)成員方法和靜態(tài)變量的優(yōu)點(diǎn)在于他們能在沒(méi)有創(chuàng)建類(lèi)的任何一個(gè)實(shí)例的情況下被引用。

  (3) 可以用在方法或?qū)傩陨?/p>

  訪(fǎng)問(wèn)方式:

  (1) 直接使用類(lèi)名調(diào)用

  (2) new 一個(gè)實(shí)例,用實(shí)例調(diào)用

  65、 static的基本規(guī)則

  (1) 類(lèi)中的靜態(tài)方法只可以調(diào)用靜態(tài)的屬性和方法,不允許調(diào)用非靜態(tài)的屬性和方法。

  (2) 靜態(tài)變量為類(lèi)變量,可以用類(lèi)名直接調(diào)用靜態(tài)的屬性和方法。

  (3) 靜態(tài)方法中不允許出現(xiàn)this和super

  (4) 構(gòu)造方法不允許聲明static

  (5) 非靜態(tài)變量為實(shí)例變量,通過(guò)實(shí)例調(diào)用

  (6) 靜態(tài)方法不能被非靜態(tài)方法覆蓋

  66、 final修飾符的功能是?可以用在什么地方?

  功能:final標(biāo)記所有通用的功能,不能隨意更改

  可以用在類(lèi)、屬性和方法上

  67、 final的基本規(guī)則

  (1) final修飾的類(lèi)不能被繼承

  (2) final修飾的成員變量只允許賦值一次,且只能通過(guò)構(gòu)造方法里賦值。

  (3) final修飾的局部變量即為常量,只能賦值一次。

  (4) final修飾的方法不允許被子類(lèi)覆蓋。

  68、 什么是抽象方法,什么是抽象類(lèi)

  用abstract修飾的方法,只有方法的聲明,而沒(méi)有方法的實(shí)現(xiàn),就叫抽象方法。

  用abstract修飾的類(lèi),就叫抽象類(lèi)。

  69、 抽象類(lèi)的規(guī)則

  (1) 抽象類(lèi)內(nèi)部可以沒(méi)有抽象方法

  (2) 必須用abstract修飾

  (3) 不能夠直接使用抽象類(lèi),必須通過(guò)子類(lèi)繼承并且實(shí)現(xiàn)

  (4) 抽象方法不允許被private修飾

  70、 什么情況下使用抽象類(lèi)

  (1) 當(dāng)一個(gè)類(lèi)的一個(gè)或多個(gè)方法是抽象方法時(shí);

  (2) 當(dāng)類(lèi)是一個(gè)抽象類(lèi)的子類(lèi),并且不能為任何抽象方法提供任何實(shí)現(xiàn)細(xì)節(jié)或方法體時(shí);

  (3) 當(dāng)一個(gè)類(lèi)實(shí)現(xiàn)一個(gè)接口,并且不能為任何抽象方法提供實(shí)現(xiàn)細(xì)節(jié)或方法體時(shí);

  71、 equals方法和”= =”的功能和區(qū)別

  功能:判斷對(duì)象是否相等

  區(qū)別:

  equals方法比較的是對(duì)象的值

  = =:比較的是對(duì)象值的內(nèi)存地址,對(duì)基本數(shù)據(jù)類(lèi)型來(lái)說(shuō)= =比較的是數(shù)值

  72、 toString方法的功能和基本寫(xiě)法

  返回一個(gè)String類(lèi)型

  public String toString(){

  return “”;

  }

  73、 String的方法的功能和基本使用方法,請(qǐng)描述5個(gè)以上

  substring(參數(shù)1,參數(shù)2); 功能:取字符串中參數(shù)1到參數(shù)2的的所有字符; "String".subString(0,1);

  replace(參數(shù)1,參數(shù)2); 功能:用參數(shù)1中的值替換字符串中所有參數(shù)2的值 "String".replace(ing,tt);

  equals( ); 功能:判斷兩個(gè)字符串是否相等 "String".equals("tt");

  trim( );   功能:去掉字符串兩邊的空格 "String".trim();

  indexof( ); 功能:查找字符串中參數(shù)所在位置,并返回字符串第一個(gè)出該參數(shù)的下標(biāo)

  "String".indexOf("ing");

  split( ); 功能:根據(jù)參數(shù)分割該字符串 "String".split("-");

  74、 為什么使用StringBuffer類(lèi)?有什么功能和優(yōu)點(diǎn)?

  –只創(chuàng)建一個(gè)對(duì)象

  –StringBuffer 對(duì)象的內(nèi)容是可以被修改的

  –除了字符的長(zhǎng)度之外,還有容量的概念

  –通過(guò)動(dòng)態(tài)改變?nèi)萘康拇笮。铀僮址芾?/p>

  75、 舉例說(shuō)明如何使用StringBuffer

  StringBuffer sb = new StringBuffer();

  sb.append("aaa");

  76、 如何使用Java讀寫(xiě)系統(tǒng)屬性?

  讀:

  Properties props = System.getProperties();

  Enumeration prop_names = props.propertyNames();

  while (prop_names.hasMoreElements()) {

  String prop_name = (String) prop_names.nextElement();

  String property = props.getProperty(prop_name);

  System.out.println("Property '" + prop_name + "' is '"+ property + "'");

  }

  寫(xiě):

  System.setProperties(props);

  77、 簡(jiǎn)述properties文件的結(jié)構(gòu)和基本用法

  結(jié)構(gòu):擴(kuò)展名為properties的文件,內(nèi)容為key、value的映射,例如“a=2”

  用法:

  public class Test {

  public static void main(String args[]) {

  try {

  String name = "test.properties";

  InputStream in = new BufferedInputStream(new FileInputStream(name));

  Properties p = new Properties();

  p.load(in);

  System.out.println("a的值==" + p.getProperty("a"));

  } catch (Exception err) {

  err.printStackTrace();

  }

  }

  }

  78、 什么是接口?接口的定義規(guī)則?

  接口是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。

  public interface Tt {

  public void outPut( );

  public int tt( );

  }

  79、 接口的作用?為什么使用接口?

  多重繼承

  封裝、隔離

  功能,實(shí)現(xiàn)的分離

  多態(tài)

  便于后期維護(hù)

  接口是可插入性的保證。

  80、 什么是多重接口

  就是一個(gè)類(lèi)實(shí)現(xiàn)多個(gè)接口

  81、 描述接口的基本思想?

  封裝 隔離

  接口及相關(guān)機(jī)制的最基本作用在于:通過(guò)接口可以實(shí)現(xiàn)不相關(guān)類(lèi)的相同行為,

  而不需考慮這些類(lèi)之間的層次關(guān)系。

  根據(jù)接口可以了解對(duì)象的交互界面,而不需了解對(duì)象所屬的類(lèi)。

  面向?qū)ο蟪绦蛟O(shè)計(jì)講究“提高內(nèi)聚,降低耦合”。

  82、 如何在代碼中使用接口?

  public class MyCast implements Tt{

  public void outPut( ){}

  public int tt( ){

  return 0;

  }

  }

  83、 舉例說(shuō)明如何把接口當(dāng)作類(lèi)型使用

  public interface Animal(){

  public void tt( );

  }

  public class Dog implements Animal{

  public void tt ( ){}

  }

  Animal ani = new Dog();

  84、 如何選擇接口和抽象類(lèi)?為什么?

  優(yōu)先選用接口,盡量少用抽象類(lèi)

  在下列情況下選擇抽象類(lèi):需要定義子類(lèi)的行為,又要為子類(lèi)提供共性的功能。

  85、 什么是異常,異常的分類(lèi)?

  程序中導(dǎo)致程序中斷的一些情況叫做異常,一般程序員可以處理。

  異常分為運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常(一般異常)

  運(yùn)行時(shí)異常是指因設(shè)計(jì)或?qū)崿F(xiàn)方式不當(dāng)導(dǎo)致的問(wèn)題。也可以說(shuō),是程序員的原因?qū)е碌,本?lái)可以避免發(fā)生的情況。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出現(xiàn)這些異常的代碼不需要try塊包圍。

  非運(yùn)行時(shí)異常是指除運(yùn)行時(shí)異常以外所有的異常,出現(xiàn)這些異常的代碼必須用try塊包圍。例如:FileNotFoundException,EOFException,

  86、 簡(jiǎn)述處理異常的兩種方式?

  拋出(throws)和catch語(yǔ)句處理

  87、 簡(jiǎn)述try塊的功能和規(guī)則

  try塊內(nèi)部一般寫(xiě)一些編程人員認(rèn)為可能會(huì)出現(xiàn)異常的代碼,使程序運(yùn)行時(shí)不會(huì)因?yàn)槌霈F(xiàn)異常而中斷。

  88、 簡(jiǎn)述catch塊的功能和規(guī)則

  功能:可以截獲所聲明的異常,并在語(yǔ)句塊內(nèi)對(duì)其進(jìn)行處理

  規(guī)則:catch(Exeption e){

  e.printStackTrace( );

  }

  89、 簡(jiǎn)述finally塊的功能和規(guī)則

  finally塊一般寫(xiě)一些不論是否發(fā)生異常都必須執(zhí)行一次的代碼

  例如關(guān)閉與數(shù)據(jù)庫(kù)的連接等

  90、 簡(jiǎn)述throw和throws的功能和使用方法

  throw 指編程人員主動(dòng)拋出一個(gè)異常

  throw new NullPointerExeption( );

  throws指程序遇到異常情況自動(dòng)的被動(dòng)拋出一個(gè)異常

  public void test( ) throws Exeption{}

  91、 異常的分類(lèi)?

  錯(cuò)誤(Error): JVM 系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況,程序員不可控制

  例外(Exception):其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,程序可以控制

  92、 什么是預(yù)定義異常

  java程序中預(yù)先定義好的異常叫做預(yù)定義異常

  93、 簡(jiǎn)述自定義異常的規(guī)則

  寫(xiě)一個(gè)類(lèi)繼承Exception

  用戶(hù)自定義異常通常屬Exception范疇,依據(jù)慣例,應(yīng)以Exception結(jié)尾,應(yīng)該由人工創(chuàng)建并拋出。

  94、 什么是斷言?

  用來(lái)證明和測(cè)試程序的假設(shè)。

  95、 如何使用斷言?舉例說(shuō)明

  一種是assert<<布爾表達(dá)式>>;另一種是assert<<布爾表達(dá)式>>:<<細(xì)節(jié)描述>>。

  assert a= =10 : "這里a等于10";

  集合框架

  1、 什么是集合?什么是元素?

  可以包含其他對(duì)象的簡(jiǎn)單對(duì)象就叫集合

  集合框架中所包含的對(duì)象就叫做元素

  2、 描述出Java集合框架中集合的接口關(guān)系

  Collection----Set和List

  Set----HashSet和SortedSet

  List----ArrayList和LinkedList

  Map----HashMap、SortedMap和TreeMap

  3、 代碼示例:Collection接口的使用,包括如何定義、初始化、賦值、取值、修改值除值

  Collection col = new ArrayList();

  String oldValue = "abcd";

  String newValue = "1234";

  //增加

  col.add(oldValue);

  Iterator it = col.iterator();

  while(it.hasNext()){

  //取值

  String str = (String)it.next();

  if(str.equals(oldValue)){

  //刪除

  col.remove(oldValue);

  //修改

  col.add(newValue);

  }

  }

  4、 代碼示例:List接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值

  List col = new ArrayList();

  String oldValue = "abcd";

  String newValue = "1234";

  col.add(oldValue);

  Iterator it = col.iterator();

  while(it.hasNext()){

  String str = (String)it.next();

  if(str.equals(oldValue)){

  col.remove(oldValue);

  col.add(newValue);

  }

  }

  5、 代碼示例:Set接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪值

  Set col = new HashSet();

  String oldValue = "abcd";

  String newValue = "1234";

  col.add(oldValue);

  Iterator it = col.iterator();

  while(it.hasNext( )){

  String str = (String)it.next();

  if(str.equals(oldValue)){

  col.remove(oldValue);

  col.add(newValue);

  }

  }

  6、 代碼示例:Map接口的使用,包括如何定義、初始化、賦值、取值、修改值、刪

  Map map = new HashMap();

  String oldValue = "abcd";

  String newValue = "1234";

  //增加

  map.put("1",oldValue);

  Set set = map.keySet( );

  Iterator it = set.iterator( );

  while(it.hasNext( )){

  String key = (String)it.next( );

  //取值

  String value = map.get(key);

  }

  //修改

  map.put("1",newValue);

  //刪除

  map.remove("1");

  }

  7、 描述List接口、Set接口和Map接口的特點(diǎn)

  List接口中的對(duì)象按一定順序排列,允許重復(fù)

  Set接口中的對(duì)象沒(méi)有順序,但是不允許重復(fù)

  Map接口中的對(duì)象是key、value的映射關(guān)系,key不允許重復(fù)

  8、 如何給集合排序?

  實(shí)現(xiàn)comparable接口

  IO

  1、 什么是流?可畫(huà)圖說(shuō)明

  流是要傳輸?shù)臄?shù)據(jù)在源和目的地之間運(yùn)行的軌跡。

  2、 描述I/O流的基本接口和類(lèi)的結(jié)構(gòu)

  3、 代碼示例:使用URL流,讀取網(wǎng)頁(yè)代碼

  import java.io.*;

  import java.net.URL;

  import java.net.URLConnection;

  public class ReadURL {

  public static void main(String[] args) throws Exception {

  URL url = new URL("http://bbs.tarena.com.cn"); //建立封裝統(tǒng)一資源定位符的類(lèi)

  URLConnection uc = url.openConnection(); //打開(kāi)連接

  InputStreamReader isr = new InputStreamReader(uc.getInputStream());

  BufferedReader br = new BufferedReader(isr);

  //傳輸數(shù)據(jù)

  while(true){

  String temp = br.readLine();

  if(temp==null){

  break;

  }

  System.out.println(temp);

  }

  br.close();

  }

  }

  4、 什么是Unicode?

  是一種字符的編碼方式,占16位字節(jié),Java 技術(shù)使用 Unicode 來(lái)表示字符串和字符。

  5、 代碼示例:如何使用Reader和Writer來(lái)進(jìn)行輸入輸出

  //Writer寫(xiě)入操作

  FileOutputStream fos=new FileOutputStream("a.txt");

  OutputStreamWriter osw=new OutputStreamWriter(fos);

  BufferedWriter bw=new BufferedWriter(osw);

  bw.write("歡迎來(lái)到j(luò)ava快車(chē)");

  bw.close();

  //Reader讀取操作

  FileInputStream fis=new FileInputStream("a.txt");

  InputStreamReader isr=new InputStreamReader(fis);

  BufferedReader br=new BufferedReader(isr);

  String str=br.readLine();

  System.out.println(str);

  6、 什么叫保持?什么是可序列化?如何實(shí)現(xiàn)可序列化?

  將一個(gè)對(duì)象存放在某種類(lèi)型的永久存儲(chǔ)器上(比如硬盤(pán),光盤(pán),軟盤(pán)等),稱(chēng)為保持。

  標(biāo)識(shí)一個(gè)類(lèi)可以被持久化,叫序列化,也叫串行化或持久化。表示這個(gè)類(lèi)中的數(shù)據(jù)可以按流式輸出。

  實(shí)現(xiàn)可序列化的方法:實(shí)現(xiàn)java.io.Serializable接口。

  7、 代碼示例:如何讀寫(xiě)對(duì)象流

  //讀

  try {

  String str = "123";

  FileOutputStream f = new FileOutputStream("test.txt");

  ObjectOutputStream s = new ObjectOutputStream(f);

  s.writeObject(str);

  f.close( );

  }catch(Exception e) {

  e.printStackTrace( );

  }

  //寫(xiě)

  try {

  FileInputStream f = new FileInputStream("test.txt");

  ObjectInputStream s = new ObjectInputStream(f);

  str =(String)s.readObject( );

  f.close( );

  }catch(Exception e){

  e.printStackTrace( );

  }

  8、 簡(jiǎn)述File類(lèi)的基本功能

  處理文件和獲取文件信息;文件或文件夾的管理。

  概括一句話(huà)就是:除了讀寫(xiě)文件內(nèi)容其他的都可以做。

  9、 代碼示例:如何使用隨機(jī)文件讀寫(xiě)類(lèi)來(lái)讀寫(xiě)文件內(nèi)容

  RW表示文件時(shí)可讀寫(xiě)的

  讀:

  try{

  RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

  long len = 0L;

  long allLen = f.length();

  int i = 0;

  while (len < allLen) {

  String s = f.readLine();

  if (i > 0) {

  col.add(s);

  }

  i++;

  //游標(biāo)

  len = f.getFilePointer();

  }

  }catch(Exception err){

  err.printStackTrace();

  }

  寫(xiě):

  try{

  RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

  StringBuffer buffer = new StringBuffer(" ");

  Iterator it = col.iterator();

  while (it.hasNext()) {

  buffer.append(it.next() + " ");

  }

  f.writeUTF(buffer.toString());

  }catch(Exception err){

  err.printStackTrace();

  }

  10、 代碼示例:如何使用流的基本接口來(lái)讀寫(xiě)文件內(nèi)容

  try{

  DataInputStream in =

  new DataInputStream(

  new BufferedInputStream(

  new FileInputStream("Test.java")

  )

  );

  String currentLine=null;

  while ((currentLine = in.readLine()) != null){

  System.out.println(currentLine);

  }

  }catch (IOException e){

  System.err.println("Error: " + e);

  }

  多線(xiàn)程

  1、 什么是線(xiàn)程?

  輕量級(jí)的進(jìn)程

  2、 線(xiàn)程的三個(gè)部分是?

  處理機(jī)

  代碼

  數(shù)據(jù)

  3、 為什么使用多線(xiàn)程

  使UI響應(yīng)更快

  利用多處理器系統(tǒng)

  簡(jiǎn)化建模

  4、 代碼示例:Java中實(shí)現(xiàn)多線(xiàn)程的兩種方式,包括如何定義多線(xiàn)程,如何使用多線(xiàn)程

  實(shí)現(xiàn)Runnable接口

  class Thread1 implements Runnable{

  public void run( ){

  //run里一般寫(xiě)一個(gè)while(true)循環(huán)

  System.out.println("Runnable");

  }

  }

  public class Test{

  public static void main(String[] a){

  Thread1 r = new Thread1();

  Thread t1 = new Thread(r);

  Thread t2 = new Thread(r);

  t1.start();

  t2.start();

  }

  }

  繼承Thread

  class Thread2 extends Thread{

  public void run(){

  System.out.println("extends");

  }

  }

  public class Test{

  public static void main(String[] a){

  Thread t = new Thread2();

  t.start();

  }

  }

  5、 如何實(shí)現(xiàn)線(xiàn)程的調(diào)度?如何暫停一個(gè)線(xiàn)程的運(yùn)行

  調(diào)度用wait和notify,

  ----

  sleep()

  6、 什么是線(xiàn)程的優(yōu)先級(jí)

  判斷哪個(gè)線(xiàn)程先執(zhí)行的級(jí)別

  7、 簡(jiǎn)述sleep方法和wait方法的功能和區(qū)別

  sleep是讓線(xiàn)程休眠一段時(shí)間

  wait是讓線(xiàn)程掛起

  8、 什么是守候線(xiàn)程

  隱藏在后臺(tái)持續(xù)運(yùn)行的線(xiàn)程

  9、 什么是臨界資源

  指多個(gè)線(xiàn)程共享的資源

  10、 什么是互斥鎖,Java中如何實(shí)現(xiàn)

  用來(lái)保證在任一時(shí)刻只能有一個(gè)線(xiàn)程來(lái)訪(fǎng)問(wèn)臨界資源的那個(gè)標(biāo)記

  在Java中使用

  用在對(duì)象前面限制一段代碼的執(zhí)行

  用在方法聲明中,表示整個(gè)方法為同步方法。

  11、 什么是死鎖?如何避免?

  如果程序中有多個(gè)線(xiàn)程競(jìng)爭(zhēng)多個(gè)資源,就可能會(huì)產(chǎn)生死鎖。當(dāng)一個(gè)線(xiàn)程等待由另一個(gè)線(xiàn)程持有的鎖,而后者正在等待已被第一個(gè)線(xiàn)程持有的鎖時(shí),就會(huì)發(fā)生死鎖。

  要避免死鎖,應(yīng)該確保在獲取多個(gè)鎖時(shí),在所有的線(xiàn)程中都以相同的順序獲取鎖。盡量少用臨界資源。

  12、 簡(jiǎn)述wait和notify,notifyAll的使用

  被鎖定的對(duì)象可以調(diào)用wait( )方法,這將導(dǎo)致當(dāng)前線(xiàn)程被阻塞并放棄該對(duì)象的互斥鎖,即解除了wait( )方法的當(dāng)前對(duì)象的鎖定狀態(tài),其他的線(xiàn)程就有機(jī)會(huì)訪(fǎng)問(wèn)該對(duì)象。

  notify使等待隊(duì)列上的一個(gè)線(xiàn)程離開(kāi)阻塞狀態(tài)

  notifyAll使等待隊(duì)列上的所有線(xiàn)程離開(kāi)阻塞狀態(tài)

  Socket編程

  13、 什么是url?基本的格式是?

  統(tǒng)一資源定位器

  Http://www.163.com:port

  14、 簡(jiǎn)述IP,Port,TCP的基本功能

  IP代表網(wǎng)絡(luò)位置

  Port代表端口號(hào)

  TCP可保證不同廠(chǎng)家生產(chǎn)的計(jì)算機(jī)能在共同網(wǎng)絡(luò)環(huán)境下運(yùn)行,解決異構(gòu)網(wǎng)通信問(wèn)題,是目前網(wǎng)絡(luò)通信的基本協(xié)議

  15、 簡(jiǎn)述Java網(wǎng)絡(luò)模型的基本功能

  描述服務(wù)端和客戶(hù)端的連接過(guò)程

  16、 簡(jiǎn)述Java網(wǎng)絡(luò)編程究竟做些什么?如何做?

  1.建立連接

  2.準(zhǔn)備輸出的數(shù)據(jù),流式輸出

  3.流式輸入,編程業(yè)務(wù)需要的格式

  4.關(guān)閉連接

  服務(wù)器分配一個(gè)端口號(hào)。如果客戶(hù)請(qǐng)求一個(gè)連接,服務(wù)器使用accept( )方法打開(kāi)socket連接。

  客戶(hù)在host的port端口建立連接。

  服務(wù)器和客戶(hù)使用InputStream和OutputStream進(jìn)行通信。

  17、 代碼示例:基于Socket編程

  try {

  ServerSocket s = new ServerSocket(8888);

  while (true) {

  Socket s1 = s.accept();

  OutputStream os = s1.getOutputStream();

  DataOutputStream dos = new DataOutputStream(os);

  dos.writeUTF("Hello," +s1.getInetAddress() + "port#" + s1.getPort() + " bye!");

  dos.close();

  s1.close();

  }

  }catch (IOException e) {

  System.out.println("程序運(yùn)行出錯(cuò):" + e);

  }

  18、 TCP和UDP區(qū)別

  TCP(傳輸控制協(xié)議)和UDP(用戶(hù)數(shù)據(jù)報(bào)協(xié)議)是傳輸層協(xié)議

  TCP是面向連接的可靠數(shù)據(jù)傳輸協(xié)議,能保證傳輸內(nèi)容的完整和準(zhǔn)確;數(shù)據(jù)傳輸?shù)妮o助開(kāi)銷(xiāo)大,效率低

  UDP: 是無(wú)連接的,不可靠地傳輸協(xié)議,不能保證傳輸內(nèi)容的完整和準(zhǔn)確,對(duì)信息的適時(shí)要求比較高

  設(shè)計(jì)模式

  1、 什么是設(shè)計(jì)模式?

  就是經(jīng)過(guò)實(shí)踐驗(yàn)證的用來(lái)解決特定環(huán)境下特定問(wèn)題的解決方案。

  2、 設(shè)計(jì)模式用來(lái)干什么?

  尋找合適的對(duì)象

  決定對(duì)象的粒度

  指定對(duì)象的接口

  描述對(duì)象的實(shí)現(xiàn)

  運(yùn)用復(fù)用機(jī)制

  重復(fù)使用經(jīng)過(guò)實(shí)踐驗(yàn)證的正確的,用來(lái)解決某一類(lèi)問(wèn)題的解決方案來(lái)達(dá)到減少工作量、提高正確率等目的

  3、 什么是對(duì)象粒度

  對(duì)象中方法的大小就是粒度

  4、 基本的Java編程設(shè)計(jì)應(yīng)遵循的規(guī)則?

  面向接口編程,優(yōu)先使用對(duì)象組合

  5、 設(shè)計(jì)模式的應(yīng)用范圍

  所能解決的特定的一類(lèi)問(wèn)題中

  6、 簡(jiǎn)述什么是單例模式,以及解決的問(wèn)題,應(yīng)用的環(huán)境,解決的方案,應(yīng)用時(shí)應(yīng)注意什么?

  解決的問(wèn)題:在任何時(shí)間內(nèi)只有一個(gè)類(lèi)實(shí)例存在的模式。

  應(yīng)用環(huán)境:需要有一個(gè)從中進(jìn)行全局訪(fǎng)問(wèn)和維護(hù)某種類(lèi)型數(shù)據(jù)的區(qū)域的環(huán)境下使用單例模式。

  解決方案:保證一個(gè)類(lèi)只有一個(gè)類(lèi)實(shí)例存在。

  本質(zhì):控制實(shí)例的數(shù)量。

  注意:要合理的使用單例,避免單例成為瓶頸。

  7、 代碼示例:?jiǎn)卫J降膬煞N實(shí)現(xiàn)方法,并說(shuō)明優(yōu)缺點(diǎn)

  public class Test{

  private static Test test = new Test();

  public Test(){

  }

  public static Test getInstance(){

  return test;

  }

  }

  public class Test{

  private static Test test = null;

  private Test(){

  }

  public static Test getInstance(){

  if(test==null){

  test = new Test();

  }

  return test;

  }

  }

  第一種方式:裝載類(lèi)的時(shí)候就創(chuàng)建類(lèi)的實(shí)例,用空間換時(shí)間。

  第二種方式:延遲裝載,不需每次都創(chuàng)建一個(gè)類(lèi)實(shí)例,而只是在第一次使用時(shí)創(chuàng)建,有效的利用資源,用時(shí)間換資源。

  8、 簡(jiǎn)述什么是工廠(chǎng)模式,以及他解決的問(wèn)題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)

  利用工廠(chǎng)來(lái)解決接口選擇的問(wèn)題的模式。

  應(yīng)用環(huán)境:當(dāng)一個(gè)類(lèi)無(wú)法預(yù)料要?jiǎng)?chuàng)建哪種類(lèi)的對(duì)象或是一個(gè)類(lèi)需要由子類(lèi)來(lái)指定,創(chuàng)建的對(duì)象時(shí),就需要用到工廠(chǎng)模式。

  解決方案:定義一個(gè)創(chuàng)建對(duì)象的類(lèi),在類(lèi)的方法中決定具體實(shí)例化哪一個(gè)類(lèi)。

  本質(zhì):就是根據(jù)不同的情況來(lái)選擇不同的實(shí)現(xiàn)類(lèi),重在選擇。

  9、 代碼示例:工廠(chǎng)模式的實(shí)現(xiàn)方法

  單獨(dú)是使用工廠(chǎng):

  public class Factory{

  public static Sample creator(int which){

  if (which==1){

  return new SampleA();

  }else if (which==2)

  return new SampleB();

  }

  }

  }

  工廠(chǎng)+單例:

  public class MyFactory{

  public static MyFactory f = null;

  public MyFactory(){

  }

  public static MyFactory getInstance(){

  if(f==null){

  f=new MyFactory();

  }

  }

  public DBDAO getDAO(){

  return new DBDAOImpl();

  }

  }

  10、 簡(jiǎn)述什么是值對(duì)象模式,以及他解決的問(wèn)題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)

  用來(lái)把一組數(shù)據(jù)封裝成一個(gè)對(duì)象的模式

  解決問(wèn)題:在遠(yuǎn)程方法的調(diào)用次數(shù)增加的時(shí)候,相關(guān)的應(yīng)用程序性能將會(huì)有很大的下降

  解決方案:使用值對(duì)象的時(shí)候,可以通過(guò)僅僅一次方法調(diào)用來(lái)取得整個(gè)對(duì)象,而不是使用多次方法調(diào)用以得到對(duì)象中每個(gè)域的數(shù)值

  本質(zhì):封裝數(shù)據(jù)。

  11、 代碼示例:值對(duì)象模式的實(shí)現(xiàn)方法

  步驟:

  public class UserModel{

  private String userId;

  private String userName;

  public void setUserId(String id){

  this.userId = id;

  }

  public String getUserId(){

  return userId;

  }

  public void setUserName(String name){

  this.userName = name;

  }

  public String getUserName(){

  return userName;

  }

  }

  12、 簡(jiǎn)述什么是DAO模式,以及他解決的問(wèn)題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)

  數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象

  解決問(wèn)題:根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪(fǎng)問(wèn)也不同。根據(jù)存儲(chǔ)的類(lèi)型(關(guān)系數(shù)據(jù)庫(kù)、面向?qū)ο髷?shù)據(jù)庫(kù)、純文件等)和供應(yīng)商實(shí)現(xiàn)不同,持久性存儲(chǔ)(如數(shù)據(jù)庫(kù))的訪(fǎng)問(wèn)差別也很大。如何對(duì)存儲(chǔ)層以外的模塊屏蔽這些復(fù)雜性,以提供統(tǒng)一的調(diào)用存儲(chǔ)實(shí)現(xiàn)。程序的分布式問(wèn)題

  解決方案:將數(shù)據(jù)訪(fǎng)問(wèn)邏輯抽象為特殊的資源,也就是說(shuō)將系統(tǒng)資源的接口從其底層訪(fǎng)問(wèn)機(jī)制中隔離出來(lái);通過(guò)將數(shù)據(jù)訪(fǎng)問(wèn)的調(diào)用打包,數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象可以促進(jìn)對(duì)于不同數(shù)據(jù)庫(kù)類(lèi)型和模式的數(shù)據(jù)訪(fǎng)問(wèn)。

  本質(zhì):分層,是系統(tǒng)組件和數(shù)據(jù)源中間的適配器。(一層屏蔽一種變化)

  13、 代碼示例:DAO模式的實(shí)現(xiàn)方法

  14、 什么是框架?框架的優(yōu)點(diǎn)?

  框架是能夠完成一定功能的半成品

  1.優(yōu)點(diǎn):完成一定的功能、提供一個(gè)精良的應(yīng)用程序架構(gòu)

  2.框架都是以接口的形式出現(xiàn)

  3.應(yīng)該了解框架完成的功能、框架的API接口、框架的功能是怎么實(shí)現(xiàn)的

  15、 什么是開(kāi)放-封閉法則(OCP)

  可擴(kuò)展但是不可以更改已有的模塊

  對(duì)擴(kuò)展是開(kāi)放的,對(duì)修改是封閉

  16、 什么是替換法則(LSP)

  使用指向基類(lèi)(超類(lèi))的引用的函數(shù),必須能夠在不知道具體派生類(lèi)(子類(lèi))對(duì)象類(lèi)型的情況下使用。

  17、 如何綜合使用我們學(xué)過(guò)的設(shè)計(jì)模式來(lái)構(gòu)建合理的應(yīng)用程序結(jié)構(gòu)

  是采用接口進(jìn)行隔離,然后同時(shí)暴露值對(duì)象和工廠(chǎng)類(lèi),如果是需要數(shù)據(jù)存儲(chǔ)的功能,又會(huì)通過(guò)DAO 模式去與數(shù)據(jù)存儲(chǔ)層交互。

  18、 構(gòu)建常用的合理的Java應(yīng)用包結(jié)構(gòu)

  Ui(表現(xiàn)層)

  business--factory,ebi,ebo

  dao--factory,dao,impl

  awt、swing

  1、 什么是GUI中的容器?什么是GUI中的組件?

  容器:能包含其他container和其他component的component。

  組件:在設(shè)計(jì)上能實(shí)現(xiàn)一定功能的封裝體;

  2、 簡(jiǎn)述AWT中的Frame、Panel和組件的關(guān)系

  組件放在Panel上,而多個(gè)Panel可以疊加到Frame上,F(xiàn)rame一般只有一個(gè),各個(gè)Panel可以互相在Frame上切換

  3、 簡(jiǎn)述如何使用一個(gè)組件

  初始化,加到容器中,注冊(cè)事件,實(shí)現(xiàn)相應(yīng)的事件

  Panel pan = new Panel();

  TextField td = new TextField();

  td.setText("this is in a TextField.");

  pan.add(td);

  4、 描述一個(gè)GUI界面的基本構(gòu)成?

  Frame,Panel,組件

  Popmenu

  5、 如何控制外觀(guān),如顏色、字體等?

  可使用setColor(),setFont()方法

  例如:

  Frame f = new Frame();

  Font font = new Font("TimesRoman", Font.PLAIN, 14);

  f.setColor(Color.red);

  f.setFont(f);

  6、 什么是布局管理器?

  用來(lái)管理GUI界面中組件的分布情況,負(fù)責(zé)決定布局方針以及其容器的每一個(gè)子組件的大小

  7、 描述每種布局管理器的基本特點(diǎn)

  FlowLayout 從左到右分布,排滿(mǎn)推到下一行

  BorderLayout 上下左右中分布

  CardLayout 卡片式分布

  GridLayout 網(wǎng)格式分布

  XYLayout 坐標(biāo)分布

  8、 什么是JFC(Java基礎(chǔ)類(lèi))?

  是關(guān)于GUI組件和服務(wù)完整集合,

  主要包括5個(gè)API:

  AWT,JavaD,Accessibility,Drag&Drop,Swing

  提供了幫助開(kāi)發(fā)人員設(shè)計(jì)復(fù)雜應(yīng)用程序的一整套應(yīng)用程序開(kāi)發(fā)包;

  9、 Swing和AWT的區(qū)別?

  Swing提供了更完整的組件,引入了許多新的特性和能力。Swing API是圍繞著實(shí)現(xiàn)AWT 各個(gè)部分的API 構(gòu)筑的。

  AWT 采用了與特定平臺(tái)相關(guān)的實(shí)現(xiàn),而絕大多數(shù)Swing 組件卻不是這樣做的,因此Swing 的外觀(guān)和感覺(jué)是可客戶(hù)化和可插的。

  10、 什么是雙緩沖?

  在后臺(tái)進(jìn)行界面的更新,然后在前臺(tái)進(jìn)行界面交換

  功能:雙緩沖可以改善一個(gè)被頻繁改變的組件的外觀(guān)

  11、 描述GUI的事件機(jī)制

  事件源:是一個(gè)事件的產(chǎn)生者,或產(chǎn)生事件的組件對(duì)象

  

  事件處理器:就是一個(gè)接收事件、解釋事件并處理用戶(hù)交互的方法。

  12、 描述Swing應(yīng)用程序的基本結(jié)構(gòu)?

  組件定義

  初始化界面

  各種事件處理方法

  各種適配類(lèi)

  13、 描述表現(xiàn)層的基本功能?

  展示數(shù)據(jù)

  人機(jī)交互

  收集參數(shù)、調(diào)用邏輯層api

  14、 描述在開(kāi)發(fā)Swing應(yīng)用程序中,一般都要寫(xiě)那些代碼?都寫(xiě)到什么地方?

  一般要在類(lèi)的初始化的時(shí)候給組件賦值,寫(xiě)在jinit的方法里面

  一般要在按扭的事件處理中寫(xiě)收集參數(shù),組織參數(shù),調(diào)用業(yè)務(wù)接口的方法

  15、 對(duì)于GUI組件而言,最主要的方法是哪些?

  初始化

  如何給組件初始化

  如何從組件中取值

  設(shè)計(jì)組件的屬性

  16、 如何學(xué)習(xí)GUI組件的用法?

  主要學(xué)會(huì)組件的定義、取值、賦值的方法

  類(lèi)比學(xué)習(xí)

  JavaScript

  1、 什么是Javascript

  JavaScript是一種基于對(duì)象(Object)和事件驅(qū)動(dòng)(Event Driven)并具有安全性能的腳本語(yǔ)言。

  2、 Java和Javascript的區(qū)別

  1、基于對(duì)象和面向?qū)ο?/p>

  Java是一種真正的面向?qū)ο蟮恼Z(yǔ)言,即使是開(kāi)發(fā)簡(jiǎn)單的程序,必須設(shè)計(jì)對(duì)象。

  JavaScript是種腳本語(yǔ)言,它可以用來(lái)制作與網(wǎng)絡(luò)無(wú)關(guān)的,與用戶(hù)交互作用的復(fù)雜軟件。它是一種基于對(duì)象(Object Based)和事件驅(qū)動(dòng)(Event Driver)的編程語(yǔ)言。因而它本身提供了非常豐富的內(nèi)部對(duì)象供設(shè)計(jì)人員使用。

  2、解釋和編譯

  兩種語(yǔ)言在其瀏覽器中所執(zhí)行的方式不一樣。Java的源代碼在傳遞到客戶(hù)端執(zhí)行之前,必須經(jīng)過(guò)編譯,因而客戶(hù)端上必須具有相應(yīng)平臺(tái) 上的仿真器或解釋器,它可以通過(guò)編譯器或解釋器實(shí)現(xiàn)獨(dú)立于某個(gè)特定的平臺(tái)編譯代碼的束縛。

  JavaScript是一種解釋性編程語(yǔ)言,其源代碼在發(fā)往客戶(hù)端執(zhí)行之前不需經(jīng)過(guò)編譯,而是將文本格式的字符代碼發(fā)送給客戶(hù)編由瀏覽器 解釋執(zhí)行。

  3、強(qiáng)變量和弱變量

  兩種語(yǔ)言所采取的變量是不一樣的。

  Java采用強(qiáng)類(lèi)型變量檢查,即所有變量在編譯之前必須作聲明。

  JavaScript中變量聲明,采用其弱類(lèi)型。即變量在使用前不需作聲明,而是解釋器在運(yùn)行時(shí)檢查其數(shù)據(jù)類(lèi)型,

  4、代碼格式不一樣

  Java是一種與HTML無(wú)關(guān)的格式,必須通過(guò)像HTML中引用外媒體那么進(jìn)行裝載,其代碼以字節(jié)代碼的形式保存在獨(dú)立的文檔中。

  JavaScript的代碼是一種文本字符格式,可以直接嵌入HTML文檔中,并且可動(dòng)態(tài)裝載。編寫(xiě)HTML文檔就像編輯文本文件一樣方便。

  5、嵌入方式不一樣

  在HTML文檔中,兩種編程語(yǔ)言的標(biāo)識(shí)不同,JavaScript使用來(lái)標(biāo)識(shí),而Java使用來(lái)標(biāo)識(shí)。

  6、靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編

  Java采用靜態(tài)聯(lián)編,即Java的對(duì)象引用必須在編譯時(shí)的進(jìn)行,以使編譯器能夠?qū)崿F(xiàn)強(qiáng)類(lèi)型檢查。

  JavaScript采用動(dòng)態(tài)聯(lián)編,即JavaScript的對(duì)象引用在運(yùn)行時(shí)進(jìn)行檢查,如不經(jīng)編譯則就無(wú)法實(shí)現(xiàn)對(duì)象引用的檢查。

  3、 Javascript的運(yùn)行環(huán)境

  具備javascript運(yùn)行器的

  4、 如何在web頁(yè)面加入Javascript,請(qǐng)寫(xiě)出兩種方式并示例

  或者

  5、 寫(xiě)出Javascript基本的數(shù)據(jù)類(lèi)型

  整型

  實(shí)型

  布爾

  字符型

  空值

  特殊字符

  6、 Javascript中如何定義變量,有何規(guī)則

  必須是一個(gè)有效的變量,即變量以字母開(kāi)頭,中間可以出現(xiàn)數(shù)字如test1、text2等。除下劃線(xiàn)(-)作為連字符外,變量名稱(chēng)不能有空格、(+)、(-)、(,)或其它符號(hào)。

  不能使用javascript中的關(guān)鍵字

  7、 代碼示例:Javascript中的if控制語(yǔ)句的結(jié)構(gòu)

  if(i>4){

  alert(11);

  }

  8、 代碼示例:Javascript中的for、while循環(huán)語(yǔ)句的結(jié)構(gòu)

  for(var i=0;i<10;i++){

  alert(11);

  }

  while(i<10){

  alert(22);

  }

  9、 簡(jiǎn)述break和continue的用法和功能

  使用break語(yǔ)句使得循環(huán)從For或while中跳出,continue使得跳過(guò)循環(huán)內(nèi)剩余的語(yǔ)句而進(jìn)入下一次循環(huán)。

  10、 Javascript中如何定義類(lèi),如何定義屬性,如何定義方法,請(qǐng)代碼示例

  function QuaryArgItem(){

  this.keys = new Array();

  this.values = new Array();

  }

  QuaryArgItem.prototype.push = function(key, value)

  {

  key = (key == null) ? "" : "" + key;

  value = (value == null) ? "" : "" + value;

  this.keys.push(key.toUpperCase());

  this.values.push(value);

  }

  QuaryArgItem是類(lèi)名

  push相當(dāng)于方法名

  使用的時(shí)候 :

  a = new QuaryArgItem();

  a.push();

  11、 Javascript的function如何定義,有何規(guī)則

  Function 方法名 (參數(shù),變?cè)?{

  方法體;

  Return 表達(dá)式;

  }

  12、 如何觸發(fā)Javascript的function

  function test(){

  alert(11);

  }

  13、 說(shuō)出下列String對(duì)象的方法的功能和用法:toLowerCase、indexOf、subString、toUpperCase

  toLowerCase將指定字符串轉(zhuǎn)化為小寫(xiě)

  indexOf判斷是否包含某一字符或字符串

  substring從字符串中取一段并返回

  toUpperCase將指定字符串轉(zhuǎn)化為大寫(xiě)

  14、 Javascript的日期對(duì)象是?如何初始化日期對(duì)象?

  提供一個(gè)有關(guān)日期和時(shí)間的對(duì)象Date

  date = new Date();

  15、 說(shuō)出下列Javascript系統(tǒng)方法的功能和用法:eval、unEscape、escape、parseFloat

  eval:返回字符串表達(dá)式中的值

  unEscape:返回字符串ASCI碼

  escape:返回字符的編碼

  parseFloat:返回實(shí)數(shù)

  16、 Javascript中如何定義數(shù)組?如何初始化?如何取值和賦值

  var arrayName = new Array();

  Function arrayName(size){

  This.length=Size;

  for(var x=; x<=size;x++){

  this[x]=0;

  }

  Reture this;

  }

  17、 簡(jiǎn)要描述Javascript中下列內(nèi)部對(duì)象的功能:Navigator、Window、Location、History、Document

  Navagator:提供有關(guān)瀏覽器的信息

  Window:Window對(duì)象處于對(duì)象層次的最頂層,它提供了處理Navagator窗口的方法和屬性

  Location:提供了與當(dāng)前打開(kāi)的URL一起工作的方法和屬性,是一個(gè)靜態(tài)的對(duì)象

  History:提供了與歷史清單有關(guān)的信息

  Document:包含與文檔元素一起工作的對(duì)象,它將這些元素封裝起來(lái)供編程人員使用

  18、 如何利用Document來(lái)從頁(yè)面上取值和賦值

  取值:var a = document.all("text1").value;

  賦值:document.all("text1").value = '123';

  19、 簡(jiǎn)要描述Javascript對(duì)象層次結(jié)構(gòu)

  window--document--組件

  20、 說(shuō)出下列常見(jiàn)事件什么時(shí)候被觸發(fā):onFocus、onBlur、onSelect、onChange、onClick

  onBlur:當(dāng)失去輸入焦點(diǎn)后產(chǎn)生該事件

  onFocus:當(dāng)輸入獲得焦點(diǎn)后,產(chǎn)生該文件

  onchange:當(dāng)文字值改變時(shí),產(chǎn)生該事件

  onselect:當(dāng)文字加亮后,產(chǎn)生該事件

  onClick:當(dāng)組件被點(diǎn)擊時(shí)產(chǎn)生的事件

  21、 代碼示例:使用Frame作一個(gè)基本的三分頁(yè)面

  22、 框架如何載入頁(yè)面

  23、 如何從框架中的一個(gè)頁(yè)面訪(fǎng)問(wèn)另一個(gè)頁(yè)面中的組件

  var value = parent.right.document.all("text1");

  CSS

  1、 如何把樣式表加入到html頁(yè)面中

  在文檔中用定義;

  使用元素鏈接到外部的樣式表單。;

  2、 如何鏈接元素和樣式,請(qǐng)寫(xiě)出4種方法,并代碼示例

  1、直接連接

  2、class連接

  3、id連接

  4、元素的style=""

  Xml

  1、 XML有幾種解析方法,有什么區(qū)別?

  有XML DOM解析、SAX解析、StAX解析

  XML DOM:(XML Document Object Model)處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問(wèn)題是由DOM的樹(shù)結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪(fǎng)問(wèn);

  SAX:(Simple API for XML)不同于DOM,SAX是事件驅(qū)動(dòng)型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔結(jié)束,或者標(biāo)簽開(kāi)頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶(hù)通過(guò)在其回調(diào)事件中寫(xiě)入處理代碼來(lái)處理XML文件,適合對(duì)XML的順序訪(fǎng)問(wèn);

  StAX:(Streaming API for XML)與其他方法的區(qū)別就在于應(yīng)用程序能夠把 XML 作為一個(gè)事件流來(lái)處理,無(wú)論從性能還是可用性上都優(yōu)于其他方法;

  DOM解析代碼如下:

  import java.io.*;

  import java.util.*;

  import javax.xml.parsers.*;

  import javax.xml.transform.*;

  import javax.xml.transform.dom.*;

  import javax.xml.transform.stream.*;

  import org.w3c.dom.*;

  public class Fuxi{

  public Fuxi(){}

  public void runXml(){

  File f = new File("f:/test/xmltest/student.xml");

  try{

  //首先創(chuàng)建一個(gè)documentbuilderfoctory的工廠(chǎng)

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  //利用工廠(chǎng)來(lái)創(chuàng)建documengbuilder

  DocumentBuilder db = dbf.newDocumentBuilder();

  //利用db的parse方法來(lái)解析xml文件

  Document doc = db.parse(f);

  //將讀出來(lái)的文件格式化

  doc.normalize();

  //定義一個(gè)nodelist數(shù)組來(lái)存放xml文件中的節(jié)點(diǎn)(標(biāo)簽)

  NodeList students = doc.getElementsByTagName("student");

  //從xml文件中讀取數(shù)據(jù)

  for(int i=0;i

  //定義一個(gè)元素

  Element student = (Element)students.item(i);

  System.out.println("stu_id :"+student.getElementsByTagName("stu_id").item(0).getFirstChild().getNodeValue());

  System.out.println("name :"+student.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());

  System.out.println("age :"+student.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());

  }

  //向文件中寫(xiě)數(shù)據(jù)

  String stu_id = "001";

  String name = "xingxing";

  String age = "22";

  Text msg;

  //創(chuàng)建元素

  Element studentNew = doc.createElement("student");

  //創(chuàng)建子元素

  Element stuid = doc.createElement("stu_id");

  //設(shè)置元素的值

  msg = doc.createTextNode(stu_id);

  //將值添加 給元素

  stuid.appendChild(msg);

  //將元素添加到節(jié)點(diǎn)數(shù)組中

  studentNew.appendChild(stuid);

  Element name1 = doc.createElement("name");

  msg = doc.createTextNode(name);

  name1.appendChild(msg);

  studentNew.appendChild(name1);

  Element age1 = doc.createElement("age");

  msg = doc.createTextNode(age);

  age1.appendChild(msg);

  studentNew.appendChild(age1);

  //將元素studentnew添加到document樹(shù)中

  doc.getDocumentElement().appendChild(studentNew);

  //進(jìn)行寫(xiě)操作

  TransformerFactory tff = TransformerFactory.newInstance();

  Transformer tfor = tff.newTransformer();

  DOMSource dos = new DOMSource(doc);

  StreamResult result = new StreamResult(f);

  tfor.transform(dos,result);

  }catch(Exception e){

  System.out.println(e.toString());

  }

  }

  public static void main(String[] args){

  Fuxi ff = new Fuxi();

  ff.runXml();

  }

  }

  JEE

  1、 簡(jiǎn)述JEE

  JEE。 JAVA  PLATFORM  ENTERPRISE  EDITION

  JEE是一個(gè)規(guī)范集;

  JEE是一個(gè)框架集;

  JEE是一個(gè)技術(shù)集或API集;

  適用于創(chuàng)建服務(wù)器端的大型的軟件服務(wù)系統(tǒng)

  2、 C/S B/S 模式

  C/S client/server即客戶(hù)機(jī)/服務(wù)器模式,客戶(hù)端也參與程序的運(yùn)行與計(jì)算(富客戶(hù)端、胖客戶(hù)端)

  B/S border/server即瀏覽器/服務(wù)器模式,又稱(chēng)為瘦客戶(hù)端,客戶(hù)端不參與程序的運(yùn)行與計(jì)算

  3、 企業(yè)級(jí)應(yīng)用(大規(guī)模的應(yīng)用)的特點(diǎn)

  1.生命周期長(zhǎng)、穩(wěn)定、可靠

  2.組件往往分布在異構(gòu)的環(huán)境中,能夠跨平臺(tái)

  3.維護(hù)性、擴(kuò)展性、重用性

  4.有事務(wù)、安全、線(xiàn)程

  4、 什么是業(yè)務(wù)邏輯?

  依照業(yè)務(wù)邏輯劃分模塊,

  所謂判定業(yè)務(wù) 就是具有以下特征:

  1.業(yè)務(wù)流程

  2.業(yè)務(wù)判斷

  3.功能組合

  5、 平臺(tái)(角色)的劃分

  1.平臺(tái)供應(yīng)商。提供滿(mǎn)足API集實(shí)現(xiàn)的廠(chǎng)商(BEA weblogic IBM webshphere)

  2.組件供應(yīng)商

  3.組件裝配人員

  4.部署人員

  5.系統(tǒng)管理人員

  6.工具供應(yīng)商 提供開(kāi)發(fā)組件所使用的工具(Jbuilder、eclipse)

  6、 java技術(shù)分布(設(shè)計(jì)架構(gòu) 模塊內(nèi)部設(shè)計(jì))

  1.表現(xiàn)層 Servlet、 Jsp、 JavaBean、 Taglib

  2.邏輯層 EJB(SessionBean)

  3.數(shù)據(jù)層 ( JDBC  EJB(EntityBean))

  4.服務(wù) JTA(JAVA事務(wù)架構(gòu)) JTS(JAVA事務(wù)服務(wù)) JAAS(JAVA授權(quán)與驗(yàn)證服務(wù))

  5.分布式通訊 RMI(IIOP)+JNDI 、JAXP(JAVA 的 XML 架構(gòu))

  JAVAMAIL(郵件服務(wù))、JMS(消息服務(wù))、IDLC、JCA(JAVA連接器框架 (成))

  7、 JEE的體系結(jié)構(gòu): 是一種組件的體系結(jié)構(gòu)

  1.組件 : 能夠完成一定功能的封狀體(獨(dú)立的功能的集合)

  不能單獨(dú)運(yùn)行,必須運(yùn)行在容器上

  分為兩類(lèi):web組件、ejb組件

  2.容器 : 提供組件的運(yùn)行環(huán)境,并對(duì)組件進(jìn)行管理(一段程序)

  管理組件的生命周期

  不能單獨(dú)運(yùn)行,必須運(yùn)行在服務(wù)器上

  程序(組件)通過(guò)上下文來(lái)調(diào)用容器(context)

  組件通過(guò)web.xml向容器描述自己,使容器能夠認(rèn)識(shí)組件

  容器通過(guò)回調(diào)方法來(lái)調(diào)用組件

  分為兩類(lèi):web容器、ejb容器

  3.服務(wù)器 : 提供容器的運(yùn)行環(huán)境,提供大量的JEE基礎(chǔ)服務(wù)

  web服務(wù)器(只提供web服務(wù))

  jee服務(wù)器(提供web、jee服務(wù))

  8、 什么是回調(diào)方法

  由容器自動(dòng)調(diào)用的方法,就叫回調(diào)方法。

  9、 RMI遠(yuǎn)程方法的調(diào)用機(jī)制

  例如:A主機(jī)有B()方法,C主機(jī)有D()方法,A 想調(diào)用C主機(jī)的D方法

  10、 學(xué)習(xí)方法

  1.規(guī)范(熟記) 2.熟悉API 3.多練 4.多想

  Servlet

  1、 描述war包、jar包、ear包的結(jié)構(gòu)

  war- web文檔壓縮包

  ---WEB-INF

  ----web.xml web應(yīng)用部署文件

  ----lib 本web應(yīng)用需要的jar包(可選)

  ----classes 本web應(yīng)用需要的類(lèi)文件(可選)

  jar- java文件壓縮包

  ---META-INF

  ----*.MF java包的啟動(dòng)和描述文件

  ear- 企業(yè)資源包/企業(yè)應(yīng)用包

  --META-INF

  ---Application.xml 配置文件

  --*.war

  --*.jar

  2、 什么是servlet?servlet主要做什么?

  Servlet是運(yùn)行在服務(wù)器端的小應(yīng)用程序,是接收網(wǎng)絡(luò)服務(wù)的請(qǐng)求和產(chǎn)生響應(yīng)的一種方式。

  servlet的功能:接受http請(qǐng)求,產(chǎn)生動(dòng)態(tài)http響應(yīng)。

  3、 servlet 與cgi相比的優(yōu)點(diǎn)?servlet的缺點(diǎn)

  優(yōu)點(diǎn):

  性能(線(xiàn)程比進(jìn)程更快)

  可伸縮

  Java強(qiáng)健且面向?qū)ο?/p>

  Java平臺(tái)的獨(dú)立

  缺點(diǎn):

  處理代碼(業(yè)務(wù)邏輯)與HTML(表現(xiàn)邏輯)混合在一起

  4、 常用的servlet包的名稱(chēng)是?

  javax.servlet

  javax.servlet.http

  5、 描述servlet接口的層次結(jié)構(gòu)?

  Servlet

  --GenericServlet

  --HttpServlet

  --自己的servlet

  ServletRequest

  --HttpServletRequest

  ServletResponse

  --HttpServletResponse

  6、 對(duì)比get方法和post方法?

  (1)安全性問(wèn)題, 通過(guò)Get方式提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)在URL中不可見(jiàn)。

  (2)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒(méi)有此限制。

  (3)GET方式不可以傳輸中文,POST方式可以傳輸中文。

  (4)POST 是被設(shè)計(jì)用來(lái)向上放東西的,而GET是被設(shè)計(jì)用來(lái)從服務(wù)器取東西的,GET也能夠向服務(wù)器傳送較少的數(shù)據(jù),而Get之所以也能傳送數(shù)據(jù),只是用來(lái)設(shè)計(jì)告訴服務(wù)器,你到底需要什么樣的數(shù)據(jù)。POST的信息作為HTTP 請(qǐng)求的內(nèi)容,而GET是在HTTP 頭部傳輸?shù)摹?/p>

  7、 歸類(lèi)描述HttpServletRequest接口都完成那些功能

  讀取HTTP頭標(biāo)

  讀取cookie

  讀取路徑信息

  標(biāo)識(shí)HTTP會(huì)話(huà)。

  8、 歸類(lèi)描述HttpServletResponse接口都完成那些功能

  設(shè)置HTTP頭標(biāo)

  設(shè)置cookie

  設(shè)定響應(yīng)的content類(lèi)型

  輸出返回?cái)?shù)據(jù)

  9、 描述service方法所完成的基本功能?默認(rèn)是在那里實(shí)現(xiàn)的?

  基本功能:service方法是在servlet生命周期中的服務(wù)期,根據(jù)HTTP請(qǐng)求方法(GET、POST等),將請(qǐng)求分發(fā)到doGet、doPost等方法

  實(shí)現(xiàn):默認(rèn)在HttpServlet類(lèi)中實(shí)現(xiàn)

  10、 如何開(kāi)發(fā)自己的Servlet?描述應(yīng)該做的步驟和每步需要完成的工作

  1.引jar包

  1)構(gòu)建開(kāi)發(fā)環(huán)境: 新建工程,把tomcat下lib文件夾下的servlet-api.jar引入到Eclipse的工程中

  2.開(kāi)發(fā)servlet類(lèi)

  1)首先繼承HttpServlet

  2)重寫(xiě) doGet( ) doPost( )

  3.部署

  安裝web服務(wù)器,例如Tomcat

  在Tomcat的webapps目錄下新建一個(gè)文件夾作為web應(yīng)用的根

  在根下新建一個(gè)名為WEB-INF的文件夾,里面建立一個(gè)web.xml的文件、一個(gè)classes的文件夾、一個(gè)lib文件夾

  按照servlet的DTD配置web.xml文件

  把編譯好的servlet的class文件復(fù)制到classes目錄下

  lib文件存放程序所需要的jar包

  4.啟動(dòng)服務(wù)器

  11、 為何servlet需要部署描述?

  servlet需要配置web.xml文件來(lái)使容器認(rèn)識(shí)servlet程序(web組件)

  12、 Servlet基本的描述應(yīng)該是?請(qǐng)寫(xiě)出來(lái)

  Hello

  com.javakc.web.action.MyServlet

  Hello

  /greeting

  13、 如何在html中使用servlet

  FORM標(biāo)記

  ACTION– 指定form信息的目的地(相關(guān)的URL)

  METHOD – 指定HTTP方法(GET或POST)

  語(yǔ)法:

  {HTML form tags and other HTML content}

  14、 如何接受request中的參數(shù)

  String userName = request.getParameter("userName")方法

  15、 如何接受request中header的值

  request.getHeader(name);

  request.getIntHeader(name);

  request.getDateHeader(name);

  request.getHeaderNames();

  16、 如何輸出html

  PrintWriter pw = response.getWriter();

  pw.write("");

  pw.write("Hello");

  pw.write("");

  17、 如何設(shè)置輸出的contentType

  response.setContentType("text/html")

  18、 描述servlet的生命周期?

  生命周期是指servlet實(shí)例在web容器中從:首次創(chuàng)建調(diào)用init方法開(kāi)始初始化期,經(jīng)過(guò)service方法運(yùn)行期,一直到destory方法銷(xiāo)毀期 結(jié)束。

  servlet實(shí)例的生命周期由web容器來(lái)管理。

  19、 描述init,service,destroy方法的功能和特點(diǎn)

  init方法: 是在servlet實(shí)例創(chuàng)建時(shí)調(diào)用的方法,用于創(chuàng)建或打開(kāi)任何與servlet相的資源和初始

  化servlet的狀態(tài),Servlet規(guī)范保證調(diào)用init方法前不會(huì)處理任何請(qǐng)求

  service方法:是servlet真正處理客戶(hù)端傳過(guò)來(lái)的請(qǐng)求的方法,由web容器調(diào)用,

  根據(jù)HTTP請(qǐng)求方法(GET、POST等),將請(qǐng)求分發(fā)到doGet、doPost等方法

  destory方法:是在servlet實(shí)例被銷(xiāo)毀時(shí)由web容器調(diào)用。Servlet規(guī)范確保在destroy方法調(diào)用之

  前所有請(qǐng)求的處理均完成,需要覆蓋destroy方法的情況:釋放任何在init方法中

  打開(kāi)的與servlet相關(guān)的資源存儲(chǔ)servlet的狀態(tài)

  20、 什么是回調(diào)方法?有什么特點(diǎn)?

  由容器來(lái)調(diào)用程序的方法

  由容器來(lái)決定什么時(shí)候來(lái)調(diào)

  21、 如何設(shè)置初始化servlet的參數(shù)?

  在中添加如下配置

  greetingText

  Hello

  22、 如何獲取servlet初始化的參數(shù)

  public void init() {

  greetingText = getInitParameter("greetingText");

  System.out.println(">> greetingText = '" + greetingText + "'");

  }

  23、 ServletConfig接口默認(rèn)實(shí)在那里實(shí)現(xiàn)的

  GenericServlet類(lèi)實(shí)現(xiàn)ServletConfig接口

  24、 什么是ServletContext?有什么作用?

  Servlet上下文

  ServletContext對(duì)象是Web應(yīng)用的運(yùn)行時(shí)表示,約等于整個(gè)web應(yīng)用;可通過(guò)其實(shí)現(xiàn)Web應(yīng)用中的資源共享

  25、 如何訪(fǎng)問(wèn)ServletContext接口?是在那里實(shí)現(xiàn)的?

  在Servlet的實(shí)現(xiàn)類(lèi)中通過(guò)this.getServletContext()方法訪(fǎng)問(wèn)。

  GenericServlet類(lèi)實(shí)現(xiàn)了ServletContext接口。

  26、 ServletContext接口的功能包括?分別用代碼示例

  只讀初始化參數(shù): getInitParameter(name:String) : String

  getInitParameterNames() : Enumeration

  讀寫(xiě)訪(fǎng)問(wèn)應(yīng)用級(jí)屬性:getAttribute(name:String) : Object

  setAttribute(name:String, value:Object)

  getAttributeNames() : Enumeration

  只讀訪(fǎng)問(wèn)文件資源: getResource(path) : URL

  getResourceAsStream(path) : InputStream

  寫(xiě)web應(yīng)用日志文件:log(message:String)

  log(message:String, Throwable:excp)

  27、 如何設(shè)置ServletContext的參數(shù)?

  catalogFileName

  /WEB-INF/catalog.txt

  28、 如何獲取ServletContext設(shè)置的參數(shù)值?

  ServletContext context = this.getServletContext();

  String catalogFileName = context.getInitParameter(“catalogFileName”);

  29、 描述Web應(yīng)用的生命周期?

  Web容器啟動(dòng)時(shí),初始化每個(gè)Web應(yīng)用

  Web容器關(guān)閉時(shí),銷(xiāo)毀每個(gè)Web應(yīng)用

  

  30、 如何用代碼實(shí)現(xiàn)監(jiān)控Web應(yīng)用的生命周期?

  public class Test implements ServletContextListener{

  public void contextDestroyed(ServletContextEvent arg0) {

  System.out.println("web 容器銷(xiāo)毀了+++++");

  }

  public void contextInitialized(ServletContextEvent arg0) {

  System.out.println("web 容器啟動(dòng)了+++++");

  }

  }

  web.xml文件中的配置:

  com.csy.Test

  31、 web應(yīng)用中如下錯(cuò)誤碼示什么意思:400,401,404,500

  400 Bad Request//錯(cuò)誤請(qǐng)求

  401 Unauthorized//未被認(rèn)可

  404 Not Found//沒(méi)有創(chuàng)建

  500 Internal Server Error//服務(wù)器內(nèi)部錯(cuò)誤

  32、 描述Web應(yīng)用中用聲明方式來(lái)進(jìn)行錯(cuò)誤處理的兩種方法

  使用error-page元素聲明一個(gè)給定HTTP狀態(tài)碼的處理器

  404

  /error/404.html

  可以聲明任意數(shù)量的錯(cuò)誤頁(yè)面,但一個(gè)給定的狀態(tài)碼只能對(duì)應(yīng)一個(gè)頁(yè)面

  使用exception-type元素聲明給定Java異常的處理器

  java.lang.ArithmeticException

  /error/ExceptionPage

  可以聲明任意數(shù)量的錯(cuò)誤頁(yè)面,但一個(gè)給定的異常類(lèi)型只對(duì)應(yīng)一個(gè)頁(yè)面

  不能使用父類(lèi)捕獲多種異常

  33、 描述記錄異常日志的方法,都位于那些接口?

  GenericServlet:

  log(message:String)

  log(message:String, Throwable:excp)

  ServletContext:

  log(message:String)

  log(message:String, excp:Throwable)

  34、 什么是會(huì)話(huà)?

  Web容器可為每個(gè)用戶(hù)保存一個(gè)"會(huì)話(huà)對(duì)象",用來(lái)存儲(chǔ)特定用戶(hù)的會(huì)話(huà)信息。

  35、 如何獲得會(huì)話(huà)?

  HttpSession session = request.getSesseion( );

  36、 會(huì)話(huà)Api的基本功能?

  getID() :String

  isNew() :boolean

  getAttribute(name):Object

  setAttribute(name,value)

  removeAttribute(name)

  37、 如何銷(xiāo)毀會(huì)話(huà)?

  1、可使用部署描述符控制所有會(huì)話(huà)的生命周期

  10

  2、可使用控制特定會(huì)話(huà)對(duì)象的生命周期HttpSession接口

  invalidate()

  getCreationTime() :long

  getLastAccessedTime() :long

  getMaxInactiveInterval() :int

  setMaxInactiveInterval(int)

  38、 描述會(huì)話(huà)保持狀態(tài)的基本原理

  client server

  request

  response (sessionid)

  request (cookies)

  當(dāng)客戶(hù)端第一次請(qǐng)求時(shí),服務(wù)器創(chuàng)建一個(gè)session與request綁定,用響應(yīng)對(duì)象response來(lái)返回sessionid 放到客戶(hù)端的cookies中存儲(chǔ)下來(lái),下次在發(fā)送請(qǐng)求時(shí),直接根據(jù)sessionid來(lái)檢索服務(wù)器的會(huì)話(huà)(每次請(qǐng)求都會(huì)將所有的cookies帶到服務(wù)器端)

  39、 請(qǐng)描述session和cookie的異同之處

  40、 如何讀寫(xiě)cookie,代碼示例

  寫(xiě): Cookie c = new Cookie("yourname", name);

  response.addCookie(c);

  讀:Cookie[] cookies = request.getCookies();

  for ( int i=0; i < cookies.length; i++ ) {

  String key =cookies[i].getName();

  String value = cookies[i].getValue();

  System.out.println("cook"+i+":key="+key+",value="+value);

  }

  41、 什么是URL重寫(xiě),如何實(shí)現(xiàn),代碼示例

  Cookie不能使用時(shí),可使用URL重寫(xiě) request.encodeURL();

  客戶(hù)在每個(gè)URL的后面追加額外的數(shù)據(jù)

  服務(wù)器將此標(biāo)識(shí)符與其存儲(chǔ)的有關(guān)會(huì)話(huà)數(shù)據(jù)相關(guān)聯(lián)

  http://host/path/file;jsessionid=123

  42、 描述web應(yīng)用的4種認(rèn)證技術(shù)

  BASIC – Web瀏覽器接收用戶(hù)名和口令,將其以明碼方式發(fā)送給Web服務(wù)器

  DIGEST – Web瀏覽器接收用戶(hù)名和口令,使用加密算法將此數(shù)據(jù)發(fā)送給Web服務(wù)器

  FORM – Web應(yīng)用提供發(fā)送給Web瀏覽器的HTML form

  CLIENT-CERT – Web容器使用SSL驗(yàn)證用戶(hù),服務(wù)端和客戶(hù)端的鏈路保護(hù)

  43、 什么是授權(quán),什么是驗(yàn)證?

  授權(quán)是根據(jù)用戶(hù)角色劃分web資源的過(guò)程,其標(biāo)識(shí)web應(yīng)用中的安全域 分配權(quán)限

  web容器使用廠(chǎng)商指定的機(jī)制驗(yàn)證用戶(hù)的角色 匹配權(quán)限

  44、 什么是HTTPS

  HTTPS (Secure Hypertext Transfer Protocol) 是使用SSL協(xié)議的HTTP

  45、 什么是審計(jì)?

  也就是訪(fǎng)問(wèn)跟蹤,是為web應(yīng)用的每次訪(fǎng)問(wèn)保留記錄的過(guò)程

  46、 如何實(shí)現(xiàn)聲明性授權(quán)

  1、標(biāo)識(shí)web資源集

  2、標(biāo)識(shí)角色

  3、將web資源集影射到角色

  4、標(biāo)識(shí)每個(gè)角色中的用戶(hù)

  在 web.xml里配

  47、 描述servlet并發(fā)問(wèn)題?

  多個(gè)同類(lèi)線(xiàn)程運(yùn)行,可以共享同一個(gè)Servlet實(shí)例,共享的數(shù)據(jù)和資源未合理同步,可能會(huì)引起數(shù)據(jù)的沖突

  48、 描述Web應(yīng)用中的六種屬性范圍

  局部變量(頁(yè)面范圍)

  實(shí)例變量

  類(lèi)變量

  請(qǐng)求屬性(請(qǐng)求范圍)

  會(huì)話(huà)屬性(會(huì)話(huà)范圍)

  上下文屬性(應(yīng)用范圍)

  49、 指出上述六種哪些是線(xiàn)程安全的

  局部變量和請(qǐng)求屬性

  50、 什么是STM?如何實(shí)現(xiàn)?

  SingleThreadModel接口

  可以實(shí)現(xiàn)SingleThreadModel接口保證某一時(shí)刻只有一個(gè)請(qǐng)求執(zhí)行service方法

  51、 如何實(shí)現(xiàn)并發(fā)管理?

  盡可能使用局部和請(qǐng)求屬性

  使用synchronized語(yǔ)法控制并發(fā)

  盡可能減少同步塊和同步方法的使用

  使用正確設(shè)置了線(xiàn)程安全的資源類(lèi)

  Jsp

  1、 什么是Jsp?

  Java Server Page 結(jié)合java和html在服務(wù)端動(dòng)態(tài)生成web頁(yè)面的技術(shù)

  2、 描述Jsp頁(yè)面的運(yùn)行過(guò)程?

  第一步:

  請(qǐng)求進(jìn)入Web容器,將JSP頁(yè)面翻譯成Servlet代碼

  第二步:

  編譯Servlet代碼,并將編譯過(guò)的類(lèi)文件裝入Web容器(JVM)環(huán)境

  第三步:

  Web容器為JSP頁(yè)面創(chuàng)建一個(gè)Servlet類(lèi)實(shí)例,并執(zhí)行jspInit方法

  第四步:

  Web容器為該JSP頁(yè)面調(diào)用Servlet實(shí)例的_jspService方法;將結(jié)果發(fā)送給用戶(hù)

  3、 描述Jsp頁(yè)面的五類(lèi)腳本元素的功能、寫(xiě)法、并示例

  注釋

  指令標(biāo)記 指令標(biāo)記影響JSP頁(yè)面的翻譯階段

  聲明標(biāo)記 聲明標(biāo)記允許JSP頁(yè)面開(kāi)發(fā)人員包含類(lèi)級(jí)聲明

  腳本標(biāo)記 腳本標(biāo)記允許JSP頁(yè)面開(kāi)發(fā)人員在_jspService方法中包含任意的Java代碼

  表達(dá)式標(biāo)記 表達(dá)式標(biāo)記封裝Java運(yùn)行時(shí)的表達(dá)式,其值被送至HTTP響應(yīng)流 Ten is

  4、 描述Jsp頁(yè)面中的注釋種類(lèi)和寫(xiě)法

  HTML注釋

  JSP頁(yè)面注釋

  Java注釋

  5、 描述Jsp頁(yè)面的指令標(biāo)記的功能、寫(xiě)法、并示例

  指令標(biāo)記影響JSP頁(yè)面的翻譯階段

  6、 描述Jsp頁(yè)面的聲明標(biāo)記的功能、寫(xiě)法、并示例

  聲明標(biāo)記允許JSP頁(yè)面開(kāi)發(fā)人員包含類(lèi)級(jí)聲明

  寫(xiě)法:

  例:

  7、 描述Jsp頁(yè)面翻譯成Servlet的規(guī)則

  jsp中的注釋標(biāo)記被翻譯成Servlet類(lèi)中的注釋

  jsp中的指令標(biāo)記被翻譯成Servlet類(lèi)中的import語(yǔ)句等

  jsp中的聲明標(biāo)記被翻譯成Servlet類(lèi)中的屬性

  jsp中的腳本標(biāo)記被轉(zhuǎn)移到Servlet類(lèi)中service方法中的代碼

  jsp中的表達(dá)式標(biāo)記被翻譯成Serlvet類(lèi)中的write()或者print()方法括號(hào)中的代碼

  8、 描述Jsp頁(yè)面的九個(gè)預(yù)定義變量的功能、用法、并示例

  request 與請(qǐng)求相關(guān)的HttpServletRequest對(duì)象

  response 與送回瀏覽器的響應(yīng)相關(guān)的HttpServletResponse對(duì)象

  out 與響應(yīng)的輸出流相關(guān)的JspWriter對(duì)象

  session 與給定用戶(hù)請(qǐng)求會(huì)話(huà)相關(guān)的HttpSession對(duì)象,該變量只在JSP頁(yè)面參

  與一個(gè)HTTP會(huì)話(huà)時(shí)有意義

  application 用于Web應(yīng)用的ServletContext對(duì)象

  config 與該JSP頁(yè)面的servlet相關(guān)的ServletConfig對(duì)象

  pageContext 該對(duì)象封裝了一個(gè)JSP頁(yè)面請(qǐng)求的環(huán)境

  page 該變量與Java編程語(yǔ)言中的this變量等價(jià)

  exception 由其它JSP頁(yè)面拋出的Throwable對(duì)象,該變量只在"JSP錯(cuò)誤頁(yè)面"中可用

  9、 page指令的功能,寫(xiě)法、并示例,并描述它的如下屬性的功能和用法:import、session、buffer、errorPage、isErrorPage、ContentType、pageEncoding

  import import 定義了一組servlet類(lèi)定義必須導(dǎo)入的類(lèi)和包,值是一個(gè)由

  逗號(hào)分隔的完全類(lèi)名或包的列表。

  session session 定義JSP頁(yè)面是否參與HTTP會(huì)話(huà),值可以為true(缺省)

  或false。

  buffer buffer 定義用于輸出流(JspWriter對(duì)象)的緩沖區(qū)大小,值可以為

  none或Nkb,缺省為8KB或更大。

  errorPage 用來(lái)指定由另一個(gè)jsp頁(yè)面來(lái)處理所有該頁(yè)面拋出的異常

  isErrorPage 定義JSP頁(yè)面為其它JSP頁(yè)面errorPage屬性的目標(biāo),值為true或

  false(缺省)。

  ContentType 定義輸出流的MIME類(lèi)型,缺省為text/html。

  pageEncoding 定義輸出流的字符編碼,缺省為ISO-8859-1

  10、 描述MVC各部分的功能?MVC的優(yōu)點(diǎn)?MVC的缺點(diǎn)?

  MVC各部分的功能:

  Model(模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)邏輯)

  封裝應(yīng)用狀態(tài)

  響應(yīng)狀態(tài)查詢(xún)

  暴露應(yīng)用的功能

  Controller(控制器接受用戶(hù)的輸入并調(diào)用模型和視圖去完成用戶(hù)的需求)

  驗(yàn)證HTTP請(qǐng)求的數(shù)據(jù)

  將用戶(hù)數(shù)據(jù)與模型的更新相映射

  選擇用于響應(yīng)的視圖

  View(視圖是用戶(hù)看到并與之交互的界面)

  產(chǎn)生HTML響應(yīng)

  請(qǐng)求模型的更新

  提供HTML form用于用戶(hù)請(qǐng)求

  MVC的優(yōu)點(diǎn):

  低耦合性:視圖層和業(yè)務(wù)層分離

  高重用性和可適用性

  較低的生命周期成本

  快速的部署

  可維護(hù)性

  有利于軟件工程化管理

  提高軟件的健壯性

  MVC的缺點(diǎn):

  工作量大,增加工作的復(fù)雜性,MVC不適合小型甚至中等規(guī)模的應(yīng)用程序

  11、 什么是Model 1結(jié)構(gòu),以及結(jié)構(gòu)中各部分的功能

  結(jié)構(gòu):jsp+javabean

  Model1中使用jsp來(lái)處理web應(yīng)用中的視圖控制部分

  Javabean收集參數(shù)

  12、 什么是JavaBean?

  用戶(hù)可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)和其他任何可以用java代碼創(chuàng)造的對(duì)象進(jìn)行打包,并且其他的開(kāi)發(fā)者可以通過(guò)內(nèi)部的JSP頁(yè)面、Servlet、其他JavaBean、applet程序或者應(yīng)用來(lái)使用這些對(duì)象。

  13、 JavaBean的規(guī)則?

  使用get和set方法定義屬性

  一個(gè)無(wú)參構(gòu)造方法

  無(wú)public實(shí)例變量( 所有屬性私有化)

  14、 什么是jsp標(biāo)準(zhǔn)動(dòng)作?包含那些?分別都是什么功能?如何使用?

  JSP頁(yè)面中使用類(lèi)似于XML的標(biāo)記表示運(yùn)行時(shí)的動(dòng)作

  jsp:useBean

  jsp:setProperty

  jsp:getProperty

  jsp:param

  jsp:include

  jsp:forward

  15、 用代碼示例如下標(biāo)準(zhǔn)動(dòng)作的使用:useBean、getProperty、setProperty

  id="myForms"

  class="com.base.mystruts.forms.MyActionForm" scope="session" />

  16、 描述說(shuō)明Bean的四種scope

  page

  request

  session

  application

  17、 描述說(shuō)明頁(yè)面上的字段和Bean中屬性的對(duì)應(yīng)規(guī)則

  id 指javabean的變量名

  class指javabean類(lèi)的全路徑

  scope指javabean的應(yīng)用范圍

  name指所用到的javabean的變量名

  property指javabean中的屬性

  18、 描述useBean動(dòng)作的處理過(guò)程

  使用id聲明變量

  試圖在指定的范圍內(nèi)查找對(duì)象

  如果沒(méi)找到

  創(chuàng)建一個(gè)類(lèi)的實(shí)例

  執(zhí)行useBean標(biāo)記體初始化對(duì)象

  如果找到

  將對(duì)象轉(zhuǎn)換為類(lèi)指定的類(lèi)型

  19、 描述forward動(dòng)作的功能

  使用腳本代碼處理請(qǐng)求時(shí),可用jsp:forward 動(dòng)作產(chǎn)生一個(gè)不同的視圖,

  使用同一個(gè)request:

  20、 什么是Model 2結(jié)構(gòu),以及結(jié)構(gòu)中各部分的功能

  jsp+model+servlet

  Model 2架構(gòu)使用MVC模式,JSP頁(yè)面充當(dāng)視圖,Servlet充當(dāng)控制器

  Servlet控制器:

  驗(yàn)證HTML form數(shù)據(jù)

  調(diào)用模型中的業(yè)務(wù)服務(wù)

  存儲(chǔ)請(qǐng)求(或會(huì)話(huà))范圍內(nèi)的域?qū)ο?/p>

  選擇下一個(gè)用戶(hù)的視圖

  JSP頁(yè)面視圖:

  使用用戶(hù)界面(在HTML中)

  訪(fǎng)問(wèn)域?qū)ο?/p>

  21、 如何獲得分發(fā)器?分發(fā)器的功能?

  上下文對(duì)象中的分發(fā)器:

  ServletContext context = this.getServletContext();

  RequestDispatcher servlet = context.getNamedDispatcher("MyServlet");

  servlet.forward(request, response);

  請(qǐng)求對(duì)象中的分發(fā)器:

  RequestDispatcher view = request.getRequestDispatcher("tools/nails.jsp");

  view.forward(request, response);

  可以將請(qǐng)求轉(zhuǎn)發(fā)到另一個(gè)jsp頁(yè)面,并保持請(qǐng)求的傳遞性

  22、 Jsp中頁(yè)面跳轉(zhuǎn)的兩種方式?

  使用分發(fā)器跳轉(zhuǎn)頁(yè)面

  RequestDispatcher dispatcher = request.getRequestDispatcher(“url”);

  dispatcher.forword(request);

  特點(diǎn):保持請(qǐng)求的傳遞(上一次請(qǐng)求中的數(shù)據(jù),在下一個(gè)請(qǐng)求中仍然可以得到);

  轉(zhuǎn)發(fā)的頁(yè)面只能是同一個(gè)Web應(yīng)用程序的其他Web組件

  使用重定向跳轉(zhuǎn)頁(yè)面

  response.sendRedirect(“url”);

  特點(diǎn):產(chǎn)生全新的請(qǐng)求,(上一次請(qǐng)求中的數(shù)據(jù),在下一個(gè)請(qǐng)求中不能得到);

  重新定向的頁(yè)面可以是任意的URL

  23、 描述Jsp中引入另外頁(yè)面的兩種方法,并比較兩種方法的特點(diǎn)?

  在編譯期間把另一個(gè)頁(yè)面完全嵌入這個(gè)頁(yè)面,可以說(shuō)是一個(gè)頁(yè)面

  在這里可以共享變量

  動(dòng)態(tài)的再運(yùn)行期間把另一個(gè)頁(yè)面加入這個(gè)頁(yè)面,可以說(shuō)是兩個(gè)

  頁(yè)面,不可以共享變量

  24、 什么是自定義標(biāo)記

  自定義標(biāo)記庫(kù)是一個(gè)Web組件,

  包括:

  一個(gè)標(biāo)記庫(kù)描述符文件(*.tld)

  所有相關(guān)的標(biāo)記處理器類(lèi)(*.jar)

  25、 描述使用自定義標(biāo)記的步驟,以及每步詳細(xì)的工作

  使用自定義標(biāo)記前,要拿到.tld和.jar兩類(lèi)文件

  1、 把.jar文件放到WEB-INF的lib里面。

  2、 把.tld文件放到WEB-INF根目錄下。

  3、 在web.xml中配置。

  http://java.sun.com/jsp/jstl/core

  /WEB-INF/c.tld

  4、 在頁(yè)面中引用。

  uri必須與web.xml中的uri對(duì)應(yīng)

  prefix是前綴,用來(lái)區(qū)分是哪一個(gè)taglib

  使用標(biāo)記

  格式:

  在tomcat下配置數(shù)據(jù)源

  1、服務(wù)器與數(shù)據(jù)庫(kù)的連接

  配置server.xml文件

  1.oracle

  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"

  driverClassName="oracle.jdbc.driver.OracleDriver"

  username="aa"

  password="aa"

  maxActive="50"

  maxIdle="10"

  maxWait="-1"

  />

  2.sqlserver

  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

  url="jdbc:jtds:sqlserver://localhost:1433;SelectMethod=cursor;

  DatabaseName=webpagetest"

  driverClassName="net.sourceforge.jtds.jdbc.Driver"

  username="aa"

  password="aa"

  maxActive="50"

  maxIdle="10"

  maxWait="-1"

  />

  2、配置自己的web應(yīng)用的xml文件

  privileged="true" antiResourceLocking="false" antiJARLocking="false">

  3、配置web.xml文件

  與服務(wù)器建立連接

  jdbc/company

  javax.sql.DataSource

  Container

  4、在應(yīng)用程序中不直接與數(shù)據(jù)庫(kù)連接,通過(guò)DataSource連接池建立連接

  //1.在程序單獨(dú)用時(shí)設(shè)置系統(tǒng)的屬性,在tomcat下可以不用配置,

  System.setProperty(Context.PROVIDER_URL,"");

  System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"");

  //2.創(chuàng)建一個(gè)上下文對(duì)象

  InitialContext context = new InitialContext();

  //3.通過(guò)上下文對(duì)象在連接池中查找DataSource

  DataSource ds = (DataSource)context.lookUp("java:comp/env/jdbc/company");

  //4.通過(guò)數(shù)據(jù)源建立連接

  ds.getConnection();

  Struts2

  1、 struts2簡(jiǎn)介

  struts2是一種基于MVC(Model View Controller )的web應(yīng)用框架。

  struts2包括三個(gè)部分:struts和xwork,對(duì)其他框架或技術(shù)的支持

  struts處理web相關(guān)的部分,xwork處理web無(wú)關(guān)的部分。

  2、 描述基本的struts應(yīng)用的組成部分以及每部分的功能,并指出哪些是需要開(kāi)發(fā)人員做的

  1) struts ActionContext Clear Up :負(fù)責(zé)清空ActionContext,確保不會(huì)出現(xiàn)由于內(nèi)存引起的并發(fā)問(wèn)題。

  2) other Filters :其他的過(guò)濾器

  3) Filter Dispatcher :struts2的總調(diào)度類(lèi),通過(guò)http請(qǐng)求到ActionMapper詢(xún)問(wèn)請(qǐng)求的Action是否執(zhí)行

  4) ActionMapper :決定這個(gè)action需要被執(zhí)行

  5) ActionProxy:找ConfigurationManager要Action的配置,然后產(chǎn)生Action Invocation對(duì)象

  6) ConfigurationManager:響應(yīng)ActionProxy的請(qǐng)求找到xwok.xml

  7) struts.xml :通過(guò)配置讓 Action 調(diào)用器 調(diào)用Action

  8) Action Invocation:調(diào)用對(duì)應(yīng)的Action

  9) Interceptor :攔截在A(yíng)ction和result執(zhí)行前后完成一些功能(比如將request中的數(shù)據(jù)映射到值棧中)

  10) Action :處理客戶(hù)端請(qǐng)求,調(diào)用邏輯層API,通過(guò)Result選擇下一界面

  11) Result:常量字符串

  12) 頁(yè)面:通過(guò)Taglib的標(biāo)簽 得到值棧中的數(shù)據(jù)并顯示

  13) Taglib: 得到封裝對(duì)象中的數(shù)據(jù)

  需要開(kāi)發(fā)的有:Action,頁(yè)面(配置上Taglib的前綴,用OGNL得到數(shù)據(jù)),struts.xml,如果要解決中文問(wèn)題還要配置 struts.properties文件

  3、 描述struts開(kāi)發(fā)的步驟,以及每步具體的工作

  見(jiàn)教材第二章

  4、 描述從頁(yè)面點(diǎn)擊一個(gè)按鈕開(kāi)始,完整的Struts應(yīng)用運(yùn)行過(guò)程

  1) 用戶(hù)點(diǎn)擊頁(yè)面的提交按鈕,即客戶(hù)端發(fā)送http請(qǐng)求到web容器。

  2) web容器通過(guò)web.xml找到web容器的Filter;通過(guò)url-pattern 找到filter-name,再通過(guò)filter-name找到filter-class,即找到FilterDispatcher。

  3) Action代理調(diào)用ConfigurationManager讀取xwork.xml文件,根據(jù)提交的xx.action,找到對(duì)用的action的全路徑,通過(guò)Action調(diào)用器調(diào)用Action類(lèi)。

  4) 在調(diào)用Action類(lèi)之前,首先被配置攔截到,進(jìn)行相關(guān)的處理,如將request中的數(shù)據(jù)映射到值棧中。

  5) 回調(diào)Action中的execute方法,執(zhí)行后返回Result。

  6) 得到Reslut后,在xwork.xml中匹配下一個(gè)頁(yè)面。

  7) 執(zhí)行Result調(diào)用下一個(gè)頁(yè)面。

  5、 圖示描述struts的架構(gòu)

  6、 為什么推薦使用ActionSupport

  因?yàn)锳ctionSupport不僅實(shí)現(xiàn)了Action接口,而且實(shí)現(xiàn)了其他的接口,例如:validate()方法-數(shù)據(jù)檢驗(yàn),getLocal()獲取本地信息等功能

  7、 Struts中數(shù)據(jù)檢測(cè)的方式有幾種,詳細(xì)寫(xiě)出分別怎么做

  1、在validate()方法中進(jìn)行數(shù)據(jù)檢驗(yàn)

  2、在execute()方法中進(jìn)行數(shù)據(jù)檢驗(yàn),但一定要有返回值為INPUT

  8、 Struts中如何使用本地信息

  1、和Action類(lèi)同級(jí)新建一個(gè)與Action同名的.properties文件,并用key,value定義好組件對(duì)應(yīng)的信息(國(guó)際化信息)

  2、在A(yíng)ction類(lèi)中使用:this.getText("key")

  9、 詳細(xì)寫(xiě)出struts的Action中三種數(shù)據(jù)的對(duì)應(yīng)方式,并比較優(yōu)缺點(diǎn)

  1、域模型:靈活,封裝數(shù)據(jù), public 或 private+get/set

  2、字段驅(qū)動(dòng):把字段直接封裝在A(yíng)ction中,適用于字段少的程序

  3、模型驅(qū)動(dòng):Action類(lèi)實(shí)現(xiàn)ModelDriver接口,并實(shí)現(xiàn)getModel方法,頁(yè)面上直接用返回對(duì)象的字段就可以,但一個(gè)Action只能對(duì)應(yīng)一個(gè)Model

  10、 什么是Result

  result是一個(gè)字符串常量,他表示Action執(zhí)行完成的狀態(tài),struts.xml根據(jù)返回的result選擇下一個(gè)界面

  11、 寫(xiě)出通用Result中dispatch,redirect和chain的特點(diǎn)

  1、dispatch:保持同一請(qǐng)求,保持?jǐn)?shù)據(jù)的傳遞

  2、redirect:重定向,一個(gè)全新的請(qǐng)求,丟失數(shù)據(jù)

  3、chain;保持?jǐn)?shù)據(jù)的傳遞,但不是同一請(qǐng)求(一個(gè)全新的請(qǐng)求)

  12、 Interceptor的功能和運(yùn)行特點(diǎn)

  能在A(yíng)ction和Result執(zhí)行前后完成一些功能;也可以把Action的共性功能分離出來(lái),以便以后發(fā)生變化便于修改,不用動(dòng)很多的類(lèi)

  13、 配置Interceptor要注意什么,什么是Interceptor棧

  注意:以后自定義的Intercepter要追加到defaultStack后——即自己定義一個(gè)棧把默認(rèn)棧和自定義的Intercepter追加上

  多個(gè)Interceptor構(gòu)成Interceptor棧

  14、 什么是OGNL

  OGNL是Object-Graph Navigation Language的縮寫(xiě),它是一種功能強(qiáng)大的表達(dá)式語(yǔ)言(Expression Language,簡(jiǎn)稱(chēng)為EL),通過(guò)它簡(jiǎn)單一致的表達(dá)式語(yǔ)法,可以存取對(duì)象的任意屬性,調(diào)用對(duì)象的方法,遍歷整個(gè)對(duì)象的結(jié)構(gòu)圖,實(shí)現(xiàn)字段類(lèi)型轉(zhuǎn)化等功能。它使用相同的表達(dá)式去存取對(duì)象的屬性。

  15、 代碼示例:在struts中向session中取值和賦值

  Action向session中取值:

  ServletActionContext.getRequest().getSession().getAttribute("nowPage");

  賦值:

  ServletActionContext.getRequest().getSession().setAttribute("nowPage",nowPage);

  頁(yè)面向session中取值:

  16、 代碼示例:在struts中定義集合,并取值和賦值

  17、 簡(jiǎn)述值棧的原理

  1、值棧與request綁定,而且是線(xiàn)程安全的

  2、值棧相當(dāng)于一個(gè)小型的數(shù)據(jù)庫(kù)

  3、struts所有的Action屬性值存取都通過(guò)值棧

  18、 如何在struts中取得HttpSession的數(shù)據(jù)

  (1)取得HttpRequest對(duì)象:

  HttpServletRequest request = ServletActionContext. getRequest();//這個(gè)方法返回了與當(dāng)前線(xiàn)程的ActionContext相關(guān)聯(lián)的request

  (2)取得HttpSession對(duì)象:

  HttpSession session = ServletActionContext. getRequest().getSession();

  19、 描述如何使用驗(yàn)證框架的步驟和每步應(yīng)做的工作

  使用驗(yàn)證框架的方法特別簡(jiǎn)單:

  (1)寫(xiě)validatiors.xml文件,注冊(cè)要用到的驗(yàn)證器

  (2)寫(xiě)類(lèi)名-validation.xml文件,并放到相應(yīng)的地方

  (3)開(kāi)啟Action的驗(yàn)證功能,在xwork.xml文件中指定攔截“validation”或者“validationWorkflowStack”,示例:

  注意:不管驗(yàn)證是否通過(guò),我們的Action都會(huì)執(zhí)行,但如果驗(yàn)證沒(méi)有通過(guò),它不會(huì)調(diào)用Action的execute()方法

  20、 set標(biāo)簽是用來(lái)做什么的,描述set標(biāo)簽支持的作用域

  功能:對(duì)值棧中的表達(dá)式進(jìn)行求值,并將結(jié)果賦給特定作用域中的某個(gè)變量

  下面來(lái)看個(gè)例子:

  每次都要重復(fù)#session[‘user’]不僅是麻煩,而且容易出錯(cuò),較好的方式是:定義一個(gè)臨時(shí)變量來(lái)代替它。

  作用域的說(shuō)明: Set標(biāo)簽支持5種作用域:default(也是默認(rèn)的,ActionContext),page,request,session,application。通常我們不需要管,除非你要把一個(gè)標(biāo)簽或者servlet集成到struts中。

  21、 代碼示例:property、set、Iterator、bean、param、if、else標(biāo)簽的用法

  偶數(shù)行

  奇數(shù)行

  ORM對(duì)象關(guān)系型數(shù)據(jù)庫(kù)映射

  (Object Relation Mapping)

  一、映射的特點(diǎn)

  1.一個(gè)對(duì)象可以對(duì)應(yīng)多個(gè)表

  2.一個(gè)表可以對(duì)應(yīng)多個(gè)對(duì)象

  3.對(duì)象和表的關(guān)系不用完全對(duì)應(yīng)

  4.對(duì)象的屬性的名稱(chēng)和表字段的名稱(chēng)可以不同

  5.類(lèi)型可以不同,但數(shù)據(jù)類(lèi)型之間可以轉(zhuǎn)換

  6.對(duì)象中必須有主鍵,數(shù)據(jù)庫(kù)的表對(duì)主鍵無(wú)所謂

  7.數(shù)據(jù)庫(kù)中有主外鍵關(guān)系時(shí),對(duì)象中可以有,也可以沒(méi)有

  二 、有一個(gè)映射的描述文件————>xml

  三 、怎樣實(shí)現(xiàn)描述文件————>一段程序

  對(duì)象 映射(mapping) 數(shù)據(jù)庫(kù)

  user

  id=11

  name="張三"———— > (1) —————> tbl_user(id,name,age,tel,address)

  age=25 <————(2) <————

  (1)從對(duì)象映射到數(shù)據(jù)庫(kù)

  1.JDBC

  2.根據(jù)描述文件來(lái)動(dòng)態(tài)拼接sql

  3.執(zhí)行,添加到數(shù)據(jù)庫(kù)中

  (2)從數(shù)據(jù)庫(kù)中映射到對(duì)象

  1.JDBC

  2.拼接查詢(xún)sql

  3.ResultSet

  4.Model

  hibernate

  開(kāi)發(fā)流程:

  1、 是什么?

  hibernate是一種基于orm 的輕量級(jí)的框架

  2、 有什么?

  1. session 保持連接狀態(tài)(依賴(lài)事務(wù)和連接池)

  2. Transaction事務(wù)

  3. Connection Provider 連接池

  3、 能干什么?

  1.orm

  2.提供操作數(shù)據(jù)庫(kù)的接口,簡(jiǎn)化數(shù)據(jù)持久化的編程任務(wù)

  4、 怎么做?

  1.搭建hibernate的運(yùn)行環(huán)境,將hibernate的包和hibernate所需要的包拷貝到lib 文件夾下

  2.O(vo)

  3.R (關(guān)系型數(shù)據(jù)庫(kù)中的表)

  4.配置文件

  4.1 cfg.xml 放在classes根目錄下,默認(rèn)名字為hibernate.cfg.xml

  a.與數(shù)據(jù)庫(kù)的連接

  b.可選配置

  c.映射資源的注冊(cè)

  4.2 hbm.xml文件 名字與類(lèi)名相同 并且與類(lèi)放在一起

  a. 對(duì)象與數(shù)據(jù)庫(kù)表之間的映射

  b. 對(duì)象的屬性與數(shù)據(jù)庫(kù)表的字段之間的映射

  c.組件之間的映射

  d.對(duì)象與對(duì)象之間的關(guān)系映射

  5、客戶(hù)端

  1.得到SessionFactory

  2.通過(guò)SessionFactory 工廠(chǎng)來(lái)創(chuàng)建Session實(shí)例

  3.打開(kāi)事務(wù)

  4.操作數(shù)據(jù)庫(kù)

  5.事務(wù)提交

  6.關(guān)閉連接

  運(yùn)行流程:

  5、 整體流程

  1.通過(guò)configuration來(lái)讀cfg.xml文件

  2.得到SessionFactory 工廠(chǎng)(根據(jù)數(shù)據(jù)庫(kù)的連接來(lái)創(chuàng)建sessionfactory)

  3.通過(guò)SessionFactory 工廠(chǎng)來(lái)創(chuàng)建Session實(shí)例

  4.打開(kāi)事務(wù)

  5.通過(guò)session的api操作數(shù)據(jù)庫(kù)

  6.事務(wù)提交

  7.關(guān)閉連接

  6、 save

  1.to--->po

  2.根據(jù)model和cfg.xml中映射文件的注冊(cè)來(lái)找到hbm.xml文件

  3.根據(jù)hbm.xml文件和model來(lái)動(dòng)態(tài)的拼sql

  4.客戶(hù)端提交或者刷新內(nèi)存

  5.執(zhí)行sql,值放到數(shù)據(jù)庫(kù)

  7、 update、

  1.根據(jù)model 的id在內(nèi)存hibernate的緩存中查找該對(duì)象

  如果內(nèi)存中沒(méi)有就到數(shù)據(jù)庫(kù)中查找來(lái)保證對(duì)象的存在

  2.根據(jù)model和cfg.xml文件中映射文件的注冊(cè)來(lái)找到hbm.xml文件

  3.根據(jù)model和hbm.xml 文件來(lái)動(dòng)態(tài)拼sql

  4.客戶(hù)端提交或者刷新內(nèi)存

  5.執(zhí)行sql

  8、 Query

  load

  1.根據(jù)model的類(lèi)型來(lái)找到hbm.xml文件

  2.判斷id對(duì)應(yīng)的對(duì)象在緩存中是否存在,如果存在,就直接使用,如果不存在就進(jìn)行下一步。

  3.用id做為查詢(xún)條件來(lái)動(dòng)態(tài)拼sql

  4.執(zhí)行sql 查詢(xún)(先在內(nèi)存中查找,如果沒(méi)有找到(會(huì)拋出例外),就去數(shù)據(jù)庫(kù)中查找)

  5.返回一個(gè)model類(lèi)型的對(duì)象

  get

  1.根據(jù)model的類(lèi)型來(lái)找到hbm.xml文件

  2.用id做為查詢(xún)條件來(lái)動(dòng)態(tài)拼sql

  3.執(zhí)行sql 直接在數(shù)據(jù)庫(kù)中查找,如果沒(méi)有查到就會(huì)返回null

  query

  1.分析hql語(yǔ)句,得到model的類(lèi)型

  2.根據(jù)moedel和cfg.xml文件中映射文件的注冊(cè)找到hbm.xml文件

  3.根據(jù)model和hbm.xml文件來(lái)動(dòng)態(tài)拼sql

  4.執(zhí)行sql查詢(xún)數(shù)據(jù)庫(kù)

  5.返回一個(gè)resultset

  6.循環(huán)resultset的值,放到model中在放到集合(List)中

  談?wù)刪ibernate緩存機(jī)制

  緩存其實(shí)很直觀(guān)的理解為放到內(nèi)存或者硬盤(pán)上的一塊區(qū)域,緩存就是一個(gè)緩沖的作用,有很多時(shí)候,我們的數(shù)據(jù)需要經(jīng)常訪(fǎng)問(wèn),如果放到數(shù)據(jù)庫(kù)中,不是不可,只是效率上低,如果有了中間產(chǎn)物來(lái)代替數(shù)據(jù)庫(kù),就省很多事情了。打個(gè)比方,去買(mǎi)醬油,不一定一定要去醬油的生產(chǎn)工廠(chǎng)去買(mǎi)。代碼中需要數(shù)據(jù)的時(shí)候,可以先到緩存中查找,如果存在,就直接拿數(shù)據(jù),不存在就去數(shù)據(jù)庫(kù)中取,也省了很多事。

  hibernate使用的是二級(jí)緩存,有兩個(gè)級(jí)別,分別是Session,SessionFactroy級(jí)別,一級(jí)緩存是Session級(jí)別的緩存,Hiberante來(lái)管理的,這個(gè)我們一般不用管,二級(jí)緩存是SessionFactory級(jí)別的,可以進(jìn)行配置和更改,加載卸載,就是我們平時(shí)用的hibernate配置文件中的配置SessionFactory的屬性。

  對(duì)一級(jí)緩存中的session事務(wù)進(jìn)行數(shù)據(jù)的預(yù)存取,數(shù)據(jù)在各個(gè)session的上下文中存在(單例),當(dāng)session關(guān)閉時(shí),就是session.close( ),整個(gè)所有session范圍內(nèi)的數(shù)據(jù)全部清空;二級(jí)緩存默認(rèn)的情況下是不開(kāi)啟的,數(shù)據(jù)庫(kù)匯總的所有數(shù)據(jù)都先copy到二級(jí)緩存中,這里要注意的是,一級(jí)緩存是每個(gè)線(xiàn)程下創(chuàng)建的session緩存區(qū)域,可以是多個(gè),二級(jí)緩存只有一個(gè)區(qū)域 ,畫(huà)個(gè)圖比較容易理解。

  | 一級(jí)session緩存| | 一級(jí)session緩存| |一級(jí)session緩存| |一級(jí)session緩存|

  | | | |

  | | | |

  ---------------------------------------------------------------------------------------------------

  sessionFactroy級(jí)別的二級(jí)緩存

  -------------------------------------------------------------------------------------------------------------------

  |

  |

  |

  ------------------------------------------------------------------------------------------------------------------

  DB

  -----------------------------------------------------------------------------------------------------------------

  Spring

  1、 是什么?

  Spring是基于JEE的輕量級(jí)的應(yīng)用框架

  2、 有什么?

  每個(gè)包的功能:

  Spring MVC:spring 本身提供的web 框架

  WEB:集成其他的web 應(yīng)用的框架,或者說(shuō)是對(duì)其他web應(yīng)用框架的支持。如struts,struts

  JEE :集成一系列的jee的技術(shù)(對(duì)JEE技術(shù)的支持)

  DAO:封裝了JDBC;(對(duì)JDBC的支持)

  ORM:提供了對(duì)ORM工具的集成(支持)

  AOP :面向切面編成

  CORE:spring的核心包,提供bean的工廠(chǎng)和IOC容器

  3、 能干什么?

  把一系列的jee的技術(shù)有效的組合在一起形成以良好的系統(tǒng)

  4、 怎么用?

  1、 搭建web工程,引入spring的jar包

  2、 在web.xml中添加如下配置

  contextConfigLocation

  classpath*:applicationContext*.xml

  struts2

  org.apache.struts2.dispatcher.FilterDispatcher

  struts2

  /*

  org.springframework.web.context.ContextLoaderListener

  3、 部署

  5、 容器和bean

  Ioc容器是Bean實(shí)例的容器,類(lèi)似于一個(gè)實(shí)例池,Ioc容器對(duì)Bean進(jìn)行實(shí)例化、配置及管理(控制Bean的生命周期及相互的關(guān)系)。

  Ioc容器與jee的容器類(lèi)比:

  Jee:提供組件的運(yùn)行環(huán)境和管理組件的生命周期(不能單獨(dú)存在)

  Ioc容器:提供bean的運(yùn)行環(huán)境和管理bean的生命周期(可以單獨(dú)存在)

  Bean是受Spring Ioc容器管理(控制)的對(duì)象,這些對(duì)象除了代表類(lèi)實(shí)例本身,還可以包含各種資源,比如文件、圖片、集合、數(shù)組、數(shù)字、字符串等一切外部資源。

  6、 IOC控制反轉(zhuǎn)

  Spring的ioc中最重要的兩個(gè)類(lèi)是ApplicationContext和BeanFactory

  在使用Ioc容器之前,應(yīng)用程序總是通過(guò)工廠(chǎng),主動(dòng)索取需要的資源(bean),比如表現(xiàn)層通過(guò)調(diào)用邏輯層的工廠(chǎng)得到邏輯層接口的實(shí)例,這樣做層與層之間就會(huì)耦合。

  當(dāng)使用Ioc容器之后,應(yīng)用程序由主動(dòng)索取變成被動(dòng)等待,由Ioc容器控制應(yīng)用程序需要的資源對(duì)象,應(yīng)用程序只需要做相應(yīng)的配置聲明,說(shuō)明需要什么bean資源,Ioc容器就可以給應(yīng)用程序注入相應(yīng)的資源了。

  程序的控制權(quán)由應(yīng)用程序轉(zhuǎn)到了Ioc容器,應(yīng)用程序由“主動(dòng)控制”轉(zhuǎn)換成了被Ioc容器控制,控制權(quán)發(fā)生了轉(zhuǎn)移,所以是控制反轉(zhuǎn);應(yīng)用程序依賴(lài)Ioc容器的注入才可以運(yùn)行,所以稱(chēng)為依賴(lài)注入?刂品崔D(zhuǎn)、依賴(lài)注入,方向不同,但描述的卻是同一件事情。

  好處:

  使程序模塊化,真正實(shí)現(xiàn)松散耦合

  使程序可裝配

  使代碼可重用

  代碼開(kāi)發(fā):

  容器:

  BeanFactory是Spring IoC容器的實(shí)際代表者,通過(guò)BeanFactory的對(duì)象可以對(duì)Ioc容器中的bean進(jìn)行管理。

  BeanFactory的創(chuàng)建過(guò)程是:先讀取BeanFactory的配置文件(FileSystemResource或ClassPathResource),再創(chuàng)建BeanFactory的實(shí)例(XmlBeanFactory)。

  容器實(shí)例化bean的三種方法:

  構(gòu)造器實(shí)例化

  靜態(tài)工廠(chǎng)實(shí)例化

  class="examples.ExampleBean2"

  factory-method="createInstance"/>

  實(shí)例工廠(chǎng)實(shí)例化

  bean id="myFactoryBean" class="...">

  ...

  factory-bean="myFactoryBean"

  factory-method="createInstance"/>

  BeanFactory有containsBean、getBean、isSingleton、getType、getAliases等方法。

  ApplicationContext是BeanFactory的子接口,它增強(qiáng)了BeanFactory的功能,比如:提供國(guó)際化的消息訪(fǎng)問(wèn)、資源訪(fǎng)問(wèn)(讀文件)、bean相關(guān)的事件控制、在web環(huán)境中可以實(shí)例化。

  BeanFactory是延遲加載,ApplicationContext是創(chuàng)建Ioc容器就對(duì)bean進(jìn)行初始化。

  7、 DI依賴(lài)注入

  1. 應(yīng)用程序依賴(lài)spring注入所需要的對(duì)象

  IOC和DI是對(duì)同一種事情的不同描述

  2.setter注入: 在配置文件中將接口的實(shí)現(xiàn)配置為bean在應(yīng)用程序中注入bean

  例如:

  在配置文件中

  在應(yīng)用程序中

  Public DBDAO dao ;

  Public void setDao(DBDAO dao){

  This.dao = dao;

  }

  3.構(gòu)造器注入

  4.lookup方法注入

  5.ref 表示參照其它的bean

  在參照的過(guò)程中一定要注意死循環(huán)

  6.自動(dòng)裝配-----------〉no

  自動(dòng)裝配根據(jù)名字來(lái)匹配相應(yīng)的bean 盡量不要去自動(dòng)裝配

  7. bean的作用域:

  singleton 單例

  prototype 非單例

  使用spring的webApplicationContext,則可以使用request,session和globalSession

  8.DI的優(yōu)點(diǎn):

  1.程序被動(dòng)等待,強(qiáng)化面向接口編成

  2.切斷了對(duì)象或組件之間的聯(lián)系,使程序的結(jié)構(gòu)更加松散,運(yùn)行和維護(hù)更加簡(jiǎn)單

  8、 Aop面向切面編程

  Aop中最重要的三個(gè)概念是切入點(diǎn)、切面,通知。

  1.AOP面向切面編程

  切面:代表我們所關(guān)注的一系列的共同的功能點(diǎn)(模塊之間的共同的功能點(diǎn))

  面向切面編程提供了另外一種角度來(lái)思考程序的結(jié)構(gòu),彌補(bǔ)了面向?qū)ο缶幊痰牟蛔恪?/p>

  2.AOP的好處:

  靈活的實(shí)現(xiàn)功能

  使各個(gè)模塊之間不耦合

  3.AOP 的概念

  1.切面 :我們所關(guān)注的功能點(diǎn)

  2.連接點(diǎn) :事件的觸發(fā)點(diǎn)(方法的執(zhí)行)

  3.通知 :連接點(diǎn)觸發(fā)時(shí)執(zhí)行的動(dòng)作(方法)

  4.切入點(diǎn) :一系列的連接點(diǎn)的集合 (連接點(diǎn)的模塊化)

  5.引入 :擴(kuò)展的功能

  6.目標(biāo)對(duì)象 :包含連接點(diǎn)的對(duì)象

  7.aop代理 :實(shí)現(xiàn)機(jī)制

  8.織入 :把a(bǔ)dvice和目標(biāo)對(duì)象連接起來(lái)

  4.AOP的事件機(jī)制

  1.通過(guò)切面找出一系列共同的功能點(diǎn)

  2.找到目標(biāo)對(duì)象(在標(biāo)準(zhǔn)的spring 中 接口的實(shí)現(xiàn)類(lèi)為target)

  3.找到切入點(diǎn)

  4.確定連接點(diǎn)

  5.通知spring AOP,查詢(xún)xml文件,通過(guò)代理找到advice。

  6.由aop代理來(lái)實(shí)現(xiàn)動(dòng)態(tài)織入

  5. AspectJ

  5.1.在xml中配置比較煩瑣

  所有的入口必須從一個(gè)代理(ProxyFactoryBean)開(kāi)始

  expression="execution(* com.javakc.aop.MyTarget.t*())"/>

  5.3.使用注解的方法相對(duì)簡(jiǎn)單

  @AspectJ的基本語(yǔ)法

  1.@Aspect聲明一個(gè)切面,將一系列的共同的功能定義成一個(gè)切面

  直接在類(lèi)上定義@Aspect

  2.@Pointcut聲明切入點(diǎn)

  2.1、用一個(gè)專(zhuān)門(mén)的類(lèi)來(lái)定義pointcut,類(lèi)中的方法名就是該pointcut的名字

  2.2、可以使用匿名的pointcut

  2.3、執(zhí)行切點(diǎn)的幾種方法

  2.3.1 execute(public * 包結(jié)構(gòu).*.*.(..)) 可以指定到具體的方法

  2.3.2 within 指定到包,不能指定到類(lèi)

  within("com.javakc.spring..*")

  2.3.3 this 指定到實(shí)現(xiàn)接口的所有的實(shí)現(xiàn)類(lèi)

  2.3.4 target 指定具體的實(shí)現(xiàn)類(lèi)

  5.4.advice的五種類(lèi)型的示例

  客戶(hù)端必須從接口走才能得到監(jiān)控,實(shí)現(xiàn)想要追加的功能

  5.4.1.@AfterReturning(pointcut="" returning="retVal")

  追加的方法的參數(shù)名字一定要與retrning的名字相同

  在注解@AfterReturning中必須加上pointcut和returning兩個(gè)參數(shù)

  pointcut指所要監(jiān)控的目標(biāo)對(duì)象的方法

  得到目標(biāo)對(duì)象的方法的返回值,來(lái)作為參數(shù),進(jìn)行下一步的處理,參數(shù)沒(méi)有順序,按參數(shù)的名字進(jìn)行匹配

  完成追加的功能

  1 定義一個(gè)pointcut,通過(guò)方法名來(lái)作為pointcut的名稱(chēng)來(lái)引用

  (1).@AfterReturning("com.javakc.spring.schemaaop.TestPointcut.t4()")

  (2).

  2.直接引用匿名的pointcut

  (1).@AfterReturning("execution(

  * com.javakc.spring.schemaaop.Api.test4())")

  (2).@AfterReturning(pointcut=

  "com.javakc.spring.schemaaop.TestPointcut.t4() &&

  args(str)", returning="retVal")

  @AfterReturning (pointcut="com.javakc.spring.schemaaop.TestPointcut.t4() && args(str)",returning="retVal")

  public void testAfterReturning(String str,Object retVal){

  System.out.println("afterReturning1=>"+retVal+"=>"+str);

  }

  5.4.2.@Aronud

  注解@Around環(huán)繞追加功能;

  在執(zhí)行目標(biāo)對(duì)象的方法的前、后追加功能;

  必須有參數(shù);第一個(gè)參數(shù)的類(lèi)型必須為ProceedingJoinPoint;

  通過(guò)ProceedingJoinPoint的實(shí)例的proceed來(lái)調(diào)用所監(jiān)控的

  目標(biāo)對(duì)象的方法

  1 定義一個(gè)pointcut,通過(guò)方法名來(lái)作為pointcut的名稱(chēng)來(lái)引用

  (1).@Around("com.javakc.spring.schemaaop.TestPointcut.t1()")

  (2).@Around("com.javakc.spring.schemaaop.TestPointcut.t2()

  && args(str)")

  2.直接引用匿名的pointcut

  (1).@Around("execution(

  * com.javakc.spring.schemaaop.Api.test1())")

  (2).@Around("execution(

  * com.javakc.spring.schemaaop.Api.test2(..)) && args(str)")

  // @Around("com.javakc.spring.schemaaop.TestPointcut.t2() && args(str)")

  @Around("execution(* com.javakc.spring.schemaaop.Api.test2(..)) && args(str)")

  public void testAround(ProceedingJoinPoint prj,String str) throws Throwable{

  System.out.println("around1==========before1pointcut==>"+str)

  Object obj = prj.proceed();

  System.out.println("around1==========after1pointcut==>"+str);

  }

  5.4.3.@Before

  注解@Before在執(zhí)行目標(biāo)對(duì)象的方法前追加相應(yīng)的功能

  1 定義一個(gè)pointcut,通過(guò)方法名來(lái)作為pointcut的名稱(chēng)來(lái)引用

  (1).@Before("com.javakc.spring.schemaaop.TestPointcut.t1()")

  (2).@Before("com.javakc.spring.schemaaop.TestPointcut.t2() && args(str)")

  注意args后的名稱(chēng)與參數(shù)名相同

  2.直接引用匿名的pointcut

  (1).@Before("execution(* com.javakc.spring.schemaaop.Api.test1())")

  (2).@Before("execution(* com.javakc.spring.schemaaop.Api.test2(..)) && args(str)")

  注意args后的名稱(chēng)與參數(shù)名相同

  // @Before("com.javakc.spring.schemaaop.TestPointcut.t2() && args(str)")

  @Before("execution(* com.javakc.spring.schemaaop.Api.test2(..)) && args(str)")

  public void testBeforeParam(String str){

  System.out.println("before1=param=>"+str);

  }

  5.4.4.@After

  注解@After在執(zhí)行目標(biāo)對(duì)象的方法后追加相應(yīng)的功能

  1 定義一個(gè)pointcut,通過(guò)方法名來(lái)作為pointcut的名稱(chēng)來(lái)引用

  (1).@After("com.javakc.spring.schemaaop.TestPointcut.t1()")

  2.直接引用匿名的pointcut

  (1).@After("execution(* com.javakc.spring.schemaaop.Api.test1())")

  @After("com.javakc.spring.schemaaop.TestPointcut.t1()")

  public void testAfter(){

  System.out.println("after1== >pointcut");

  }

  5.4.5.@AfterThorwing

  9、 描述一下spring中BeanFactory和ApplicationContext的差別

  BeanFactory是一個(gè)Interface,這是Spring的核心。它僅僅只是提供的一些基本功能。ApplicaionContext 也是一個(gè)interface,這是從BeanFactory繼承過(guò)來(lái)的所以它具備了BeanFactory的所有功能。但它也從其它的類(lèi)或interface得到了一些特性。比如提供國(guó)際化的消息訪(fǎng)問(wèn),資源訪(fǎng)問(wèn),事件傳播。

  但其主要區(qū)別在于BeanFactory是延遲加載,如果Bean的某一個(gè)屬性沒(méi)有注入,BeanFactory加載后,直至第一次使用getBean方法調(diào)用此Bean時(shí)才會(huì)拋出異常;而ApplicationContext則在初始化自身時(shí)檢驗(yàn),這樣有利于檢查所依賴(lài)屬性是否注入;所以通常情況下我們選擇使用ApplicationContext.

  代碼示例:

  BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("beans.xml"));

  ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");

  10、 談?wù)剆pring對(duì)DAO的支持

  Spring提供的DAO(數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象)支持主要的目的是便于以標(biāo)準(zhǔn)的方式使用不同的數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)。

  簡(jiǎn)化 DAO 組件的開(kāi)發(fā)。 Spring提供了一套抽象DAO類(lèi)供你擴(kuò)展。這些抽象類(lèi)提供了一些方法,用來(lái)簡(jiǎn)化代碼開(kāi)發(fā)。

  IoC 容器的使用,提供了 DAO 組件與業(yè)務(wù)邏輯組件之間的解耦。所有的 DAO 組件,都由容器負(fù)責(zé)注入到業(yè)務(wù)邏輯組件中,其業(yè)務(wù)組件無(wú)須關(guān)心 DAO 組件的實(shí)現(xiàn)。

  面向接口編程及 DAO 模式的使用,提高了系統(tǒng)組件之間的解耦,降低了系統(tǒng)重構(gòu)的成本。

  方便的事務(wù)管理: Spring的聲明式事務(wù)管理力度是方法級(jí)。

  異常包裝:Spring能夠包裝JDBC異常,把它們從CheckedException變?yōu)镽untimeException; 開(kāi)發(fā)者可選擇在恰當(dāng)?shù)膶犹幚頂?shù)據(jù)中不可恢復(fù)的異常,從而避免煩瑣的 catch/throw 及異常聲明。

  11、 談?wù)剆pring對(duì)hibernate的支持

  在所有的 ORM 框架中, Sping 對(duì) Hibernate 的支持最好。如 SessionFactory 的注入、HibernateTemplate 的簡(jiǎn)化操作及 DAO 支持等。另外, Spring 還提供了統(tǒng)一的異常體系及聲明式事務(wù)管理等。

  一旦 Hibernate 處于 Spring 的管理下, Hibernate 所需要的基礎(chǔ)資源,都由 Spring 提供注入。 Hibernate 創(chuàng)建 SessionFactory 必需的 DataSource ,執(zhí)行持久化必需的 Session 及持久層訪(fǎng)問(wèn)必需的事務(wù)控制等,這些原本必須通過(guò)代碼控制的邏輯,都將由Spring 接管:DataSource, SessionFactory, TransactionManager等,都將作為 Spring 容器中的 bean。將這些bean 放在配置文件中管理。

  1、通用的資源管理: Spring 的 ApplicationContext 能管理 SessionFactory,使得配置值很容易被管理和修改,無(wú)須使用Hibernate 的配置文件。詳細(xì)配置如下:

  class="org.apache.commons.dbcp.BasicDataSource">

  oracle.jdbc.driver.OracleDriver

  jdbc:oracle:thin:@localhost:1521:orcl

  javakc2

  javakc2

  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

  com/javakc/spring/h3/UserModel.hbm.xml

  hibernate.dialect=org.hibernate.dialect.OracleDialect

  如果需要使用容器管理的數(shù)據(jù)源,則無(wú)須提供數(shù)據(jù)驅(qū)動(dòng)等信息,只需要提供數(shù)據(jù)源的JNDI 即可。對(duì)上文的SessionFactory只需將dataSource的配置替換成 JNDI 數(shù)據(jù)源,并將原有的 myDataSource Bean 替換成如下所示:

  class="org.springframework.jndi.JndiObjectFactoryBean">

  java:comp/env/jdbc/myds

  2、有效的 Session 管理: Dao類(lèi)繼承HibernateDaoSurport后,Spring 提供了 HibernateTemplate,用于持久層訪(fǎng)問(wèn),該模板類(lèi)無(wú)須顯示打開(kāi) Session及關(guān)閉 Session。它只要獲得 SessionFactory 的引用,將可以智能打開(kāi) Session,并在持久化訪(fǎng)問(wèn)結(jié)束后關(guān)閉 Session ,程序開(kāi)發(fā)只需完成持久層邏輯,通用的操作則由HibernateTemplate 完成。

  3、統(tǒng)一的事務(wù)管理。無(wú)論是編程式事務(wù),還是聲明式事務(wù), Spring 都提供一致的編程模型,無(wú)須煩瑣的開(kāi)始事務(wù)、顯式提交及回滾。

  建議使用聲明式事務(wù)管理,Spring 的聲明式事務(wù)以 Spring 的 AOP 為基礎(chǔ)?蓪⑹聞(wù)管理邏輯與代碼分離。代碼中無(wú)須實(shí)現(xiàn)任何事務(wù)邏輯,程序開(kāi)發(fā)者可以更專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。聲明式事務(wù)不與任何事務(wù)策略藕合,采用聲明式事務(wù)可以方便地在全局事務(wù)和局部事務(wù)之間切換。

  Spring聲明性事務(wù)有兩種配置方法,一種是xml配置:

  另一種是通過(guò)注解,在需要添加事務(wù)的類(lèi)上注明 @Transactional

  Spring2.0之前事務(wù)的寫(xiě)法

  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

  abstract="true">

  PROPAGATION_REQUIRED,readOnly

  PROPAGATION_REQUIRED

  12、 談?wù)凷pring對(duì)事務(wù)的支持

  1、聲明式事務(wù)管理:

  1.流程:由客戶(hù)端訪(fǎng)問(wèn)----aop監(jiān)控----調(diào)用advice來(lái)追加事務(wù)

  2.做法:

  2.1 在配置文件的頭中引入xmlns:tx 和schema的文件

  2.2

  2.3 注入數(shù)據(jù)源

  2.4 由spring實(shí)現(xiàn)的事務(wù)管理,但需要注入數(shù)據(jù)源

  2.5 事務(wù)監(jiān)控所有的方法(事務(wù)加強(qiáng))

  2.6 定義切入點(diǎn)

  expression="execution(* com.javakc.spring.schemaaop.api.*.*(..))"/>

  2、使用注解實(shí)現(xiàn)事務(wù)管理:

  1.注解@Transcational

  (可以在類(lèi)上,也可以在方法上)

  2.在配置文件中同樣需要注入dataSource和spring的事務(wù)管理

  3.使用注解的方法來(lái)追加事務(wù) 注解驅(qū)動(dòng)

  如何在Spring中使用Hibernate的事務(wù):

  如何在Spring中使用JTA的事務(wù):

  13、

  事務(wù)

  1、 ACID

  (1)原子性(A):一系列的操作具有不可分割性,要么成功,要么失敗

  (2)一致性 :操作的前后滿(mǎn)足同樣的規(guī)則,保持平衡。

  (3)隔離性 :在事務(wù)運(yùn)行的過(guò)程中。事務(wù)內(nèi)的數(shù)據(jù)對(duì)外的可見(jiàn)性和可操作性(必需由數(shù)據(jù)庫(kù)的支持)

  (4)穩(wěn)定性 :保證數(shù)據(jù)在事務(wù)的操作的過(guò)程中不會(huì)遭到破壞,而且是永久性存儲(chǔ)的

  2、 事務(wù)模型

  (1)經(jīng)典事務(wù)模型又叫平面事務(wù)模型(JDBC) 事務(wù)不允許嵌套

  (2)嵌套事務(wù)模型

  3、 事務(wù)的兩種方式

  (1)聲明式

  在配置文件中設(shè)置以下6項(xiàng)

  (1).required

  如果客戶(hù)端沒(méi)有事務(wù) 在bean中新起一個(gè)事務(wù)

  如果客戶(hù)端有事務(wù)bean 中就加進(jìn)去

  (2)、 requiresNew

  不管客戶(hù)端有沒(méi)有事務(wù)服務(wù)器段都新起一個(gè)事務(wù)

  如果客戶(hù)端有事務(wù)就將事務(wù)掛起

  (3)、supports

  如果客戶(hù)端沒(méi)有事務(wù)服務(wù)端也沒(méi)有事務(wù)

  如果客戶(hù)端有事務(wù)服務(wù)端就加一個(gè)事務(wù)

  (4)、mandatcry

  如果客戶(hù)端沒(méi)有事務(wù)服務(wù)端就會(huì)報(bào)錯(cuò)

  如果客戶(hù)端有事務(wù)服務(wù)端就加事務(wù)

  (5)、notSupported

  不管客戶(hù)端有沒(méi)有事務(wù)服務(wù)端都沒(méi)有事務(wù)

  如果客戶(hù)端有事務(wù)服務(wù)端就掛起

  (6)、never

  不管客戶(hù)端有沒(méi)有事務(wù)服務(wù)端都沒(méi)有事務(wù)

  如果客戶(hù)端有事務(wù)就報(bào)錯(cuò)

  (2)編程式事務(wù)

  Javax.transaction.UserTranscation

  JTA 事務(wù)可以精確到事務(wù)的開(kāi)始和結(jié)束

  4、 事務(wù)的隔離性

  Read-uncommited

  讀取未提交的數(shù)據(jù)(基本上沒(méi)有鎖)臟讀,存在不當(dāng)讀取的問(wèn)題。

  Read-commited

  讀取已提交的數(shù)據(jù)(行級(jí)鎖)

  無(wú)法讀取已經(jīng)寫(xiě)入,但沒(méi)有被提交的數(shù)據(jù)。

  Repeatable_read

  讀取的數(shù)據(jù)不允許修改或刪除

  不可重復(fù)讀(行級(jí)鎖+不允許修改/刪除)

  Serializable

  幻影讀(表級(jí)鎖)

  struts

  開(kāi)發(fā)流程

  1、創(chuàng)建表單

  2、從表單中獲得輸入

  3、處理輸入(業(yè)務(wù)邏輯)

  4、根據(jù)動(dòng)態(tài)輸入改變輸入流

  要完成上述四步,我們需要?jiǎng)?chuàng)建

  1、一個(gè)ActionForm

  2、一個(gè)action

  3、一個(gè)配置文件struts-config.xml

  4、創(chuàng)建頁(yè)面

  創(chuàng)建ActionForm

  1、寫(xiě)一個(gè)類(lèi)繼承ActionForm

  2、私有的屬性

  3、相應(yīng)的get、set方法

  4、重寫(xiě)tostring、equals、hashcode三個(gè)方法

  創(chuàng)建action

  1、寫(xiě)一個(gè)類(lèi)繼承Action

  2、實(shí)現(xiàn)一個(gè)公有的方法(回調(diào)方法)

  public ActionForward execute(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response)

  {

  //1.收集參數(shù)

  MyActionForm myForm = (MyActionForm)form;

  //2.組織參數(shù)

  //3.調(diào)用邏輯層

  boolean flag = true;

  //4.根據(jù)返回值來(lái)跳轉(zhuǎn)到相應(yīng)的頁(yè)面

  ActionForward af = new ActionForward();

  if(flag){

  af = mapping.findForward("1");

  }else{

  af = mapping.findForward("2");

  }

  return af;

  }

  配置struts-config.xml文件

  1.

  2.

  name="myActionForm"

  type="全路徑.MyAction"

  scope="session"

  input="錯(cuò)誤返回的頁(yè)面">

  步驟:

  1.創(chuàng)建一個(gè)空的web應(yīng)用

  2.將struts的包放到lib文件夾下

  3.將.tld文件文件和struts-config.xml、web.xml放到WEB-INF的跟目錄下

  4.配置struts-config.xml文件和web.xml文件

  5.在頁(yè)面引入tag文件uri

  STRUTS運(yùn)行機(jī)制

  1、界面點(diǎn)擊產(chǎn)生請(qǐng)求

  2、容器接到請(qǐng)求

  3、匹配web.xml文件中的*.do來(lái)調(diào)用ActionServlet

  4、ActionServlet的處理

  4.1 讀struts-congfig.xml文件形成ActionMapping

  4.2 通過(guò)path 來(lái)匹配Action類(lèi),通過(guò)Action的name屬性來(lái)匹配ActionForm類(lèi)

  4.3 通過(guò)反射機(jī)制來(lái)給Form添數(shù)據(jù)

  4.4 由ActionServlet轉(zhuǎn)調(diào)Action的execute方法

  4.5 得到execute方法的返回值,跳轉(zhuǎn)頁(yè)面

  4.5.1 RequestDispatcher

  4.5.2 response.sendRedirect("list.jsp");

【Java代碼的基本知識(shí)】相關(guān)文章:

如何讓JAVA代碼更高效03-20

java證書(shū)的加密與解密代碼02-26

Java中的動(dòng)態(tài)代碼編程03-05

在Java中執(zhí)行JavaScript代碼04-01

java非對(duì)稱(chēng)加密的源代碼(rsa)03-30

關(guān)于Java源代碼折行的規(guī)則03-20

過(guò)濾HTML代碼08-29

jquery提交按鈕的代碼03-30

電腦藍(lán)屏代碼大全02-28