1 Java面向對象 2 1. super()與this()的區別? 3 This():當前類的對象,super父類對象。 4 5 Super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束 6 7 而this他表明當前對象,固然全部的資源均可以訪問. 8 9 在構造函數中,若是第一行沒有寫super(),編譯器會自動插入.可是若是父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,由於它自己就進行實例化的構造. 10 而在方法中super和this使用的方法就差很少了.只不過super 要考慮是否能訪問其父類的資源. 11 12 13 14 2. 做用域public,protected,private,以及不寫時的區別? 15 ? Public:不一樣包、同一包、類內均可用 16 17 ? Private:類內 18 19 ? Protected: 不一樣包的子類、同一包、類內均可用 20 21 ? 不寫時:同一包內、類內 22 23 3. 編程輸出以下圖形。 24 * * * * * 25 26 * * * * 27 28 * * * 29 30 * * 31 32 * 33 34 代碼以下: 35 36 public class Print { 37 38 public static void main(String[] args) { 39 40 for (int i = 0; i < 5; i++) { 41 42 for (int j = 5; j > i; j--) { 43 44 System.out.print("*"); 45 46 } 47 48 System.out.println(); 49 50 } 51 52 } 53 54 } 55 56 4. JAVA的事件委託機制和垃圾回收機制 57 java 事件委託機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。 58 59 垃圾回收機制 垃圾收集是將分配給對象但再也不使用的內存回收或釋放的過程。若是一個對象沒有指向它的引用或者其賦值爲null,則次對象適合進行垃圾回收 60 61 62 63 5. 在JAVA中,如何跳出當前的多重嵌套循環? 64 用break; return 方法。 65 66 6. 什麼是java序列化,如何實現java序列化?(寫一個實例) 67 序列化: 68 69 能夠將一個對象保存到一個文件,因此能夠經過流的方式在網絡上傳輸,能夠將文件的內容讀取,轉化爲一個對象。 70 71 72 73 74 75 處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。 76 77 序列化的實現: 78 79 將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。 80 81 82 83 7. 一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制? 84 能夠。若是這個類的修飾符是public,其類名與文件名必須相同。 85 86 8. 排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序? 87 排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序) 88 89 快速排序的僞代碼。 90 91 9. Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型? 92 方法的 93 94 重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的仍是子類的方法。 95 96 重載Overloading 一個類多個方法,名稱相同,參數個數類型不一樣。 97 98 二者都是Java多態性的不一樣表現。 99 100 Overloaded的方法是能夠改變返回值的類型。 101 102 103 104 1, public class Ctest() 105 106 { 107 108 Public static void main() 109 110 { 111 112 System.out.prinln(8+8+」88」+8+8); 113 114 } 115 116 } 117 118 119 120 168888 121 122 10. Final類有什麼特色? 123 屬性常量 124 125 方法不能夠overridding 126 127 類不能夠繼承 128 129 11. 繼承時候類的執行順序問題,通常都是選擇題,問你將會打印出什麼? 130 答:父類: 131 132 package test; 133 134 public class FatherClass 135 136 { 137 138 public FatherClass() 139 140 { 141 142 System.out.println("FatherClass Create"); 143 144 } 145 146 } 147 148 子類: 149 150 package test; 151 152 import test.FatherClass; 153 154 public class ChildClass extends FatherClass 155 156 { 157 158 public ChildClass() 159 160 { 161 162 System.out.println("ChildClass Create"); 163 164 } 165 166 public static void main(String[] args) 167 168 { 169 170 FatherClass fc = new FatherClass(); 171 172 ChildClass cc = new ChildClass(); 173 174 } 175 176 } 177 178 輸出結果: 179 180 C:>java test.ChildClass 181 182 FatherClass Create 183 184 FatherClass Create 185 186 ChildClass Create 187 188 12. 內部類的實現方式? 189 答:示例代碼以下: 190 191 package test; 192 193 public class OuterClass 194 195 { 196 197 private class InterClass 198 199 { 200 201 Public Interlass() 202 203 { 204 205 System.out.println("InterClass Create"); 206 207 } 208 209 } 210 211 public OuterClass() 212 213 { 214 215 InterClass ic = new InterClass(); 216 217 System.out.println("OuterClass Create"); 218 219 } 220 221 public static void main(String[] args) 222 223 { 224 225 OuterClass oc = new OuterClass(); 226 227 } 228 229 } 230 231 輸出結果: 232 233 C:>java test/OuterClass 234 235 InterClass Create 236 237 OuterClass Create 238 239 13. 用JAVA實現一種排序,JAVA類實現序列化的方法(二種)? 240 14. 如在COLLECTION框架中,實現比較要實現什麼樣的接口? 241 15. 用插入法進行排序代碼以下 242 package test; 243 244 import java.util.*; 245 246 class InsertSort 247 248 { 249 250 ArrayList al; 251 252 public InsertSort(int num,int mod) 253 254 { 255 256 al = new ArrayList(num); 257 258 Random rand = new Random(); 259 260 System.out.println("The ArrayList Sort Before:"); 261 262 for (int i=0;i<num ;i++ ) 263 264 { 265 266 al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); 267 268 System.out.println("al["+i+"]="+al.get(i)); 269 270 } 271 272 } 273 274 public void SortIt() 275 276 { 277 278 Integer tempInt; 279 280 int MaxSize=1; 281 282 for(int i=1;i<al.size();i++) 283 284 { 285 286 tempInt = (Integer)al.remove(i); 287 288 if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) 289 290 { 291 292 al.add(MaxSize,tempInt); 293 294 MaxSize++; 295 296 System.out.println(al.toString()); 297 298 } else { 299 300 for (int j=0;j<MaxSize ;j++ ) 301 302 { 303 304 if 305 306 307 308 (((Integer)al.get(j)).intValue()>=tempInt.intValue()) 309 310 { 311 312 al.add(j,tempInt); 313 314 MaxSize++; 315 316 System.out.println(al.toString()); 317 318 break; 319 320 } 321 322 } 323 324 } 325 326 } 327 328 System.out.println("The ArrayList Sort After:"); 329 330 for(int i=0;i<al.size();i++) 331 332 { 333 334 System.out.println("al["+i+"]="+al.get(i)); 335 336 } 337 338 } 339 340 public static void main(String[] args) 341 342 { 343 344 InsertSort is = new InsertSort(10,100); 345 346 is.SortIt(); 347 348 } 349 350 } 351 352 353 354 355 356 JAVA類實現序例化的方法是實現java.io.Serializable接口 357 358 Collection框架中實現比較要實現Comparable 接口和 Comparator 接口 359 360 361 362 16. 編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。 363 答:代碼以下: 364 365 public static void split(String source,int num) throws Exception 366 367 { 368 369 int k=0; 370 371 String temp=""; 372 373 for (int i = 0; i <source.length(); i++) 374 375 { 376 377 byte[] b=(source.charAt(i)+"").getBytes(); 378 379 k=k+b.length; 380 381 if(k>num) 382 383 { 384 385 break; 386 387 } 388 389 temp=temp+source.charAt(i); 390 391 } 392 393 System.out.println(temp); 394 395 } 396 397 398 399 15、Java編程,打印昨天的當前時刻 400 public class YesterdayCurrent{ 401 402 public void main(String[] args){ 403 404 Calendar cal = Calendar.getInstance(); 405 406 cal.add(Calendar.DATE, -1); 407 408 System.out.println(cal.getTime()); 409 410 } 411 412 } 413 414 16、文件讀寫,實現一個計數器 415 public int getNum(){ 416 417 int i = -1; 418 419 try{ 420 421 String stri=""; 422 423 BufferedReader in = new BufferedReader(new FileReader(f)); 424 425 while((stri=in.readLine())!=null){ 426 427 i = Integer.parseInt(stri.trim()); 428 429 } 430 431 in.close(); 432 433 }catch(Exception e){ 434 435 e.printStackTrace(); 436 437 } 438 439 return i; 440 441 } 442 443 public void setNum(){ 444 445 int i = getNum(); 446 447 i++; 448 449 try{ 450 451 PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false))); 452 453 out.write(String.valueOf(i)); //多是編碼的緣由,若是直接寫入int的話,將出現java編碼和windows編碼的混亂,所以此處寫入的是String 454 455 out.close() ; 456 457 }catch(Exception e){ 458 459 e.printStackTrace(); 460 461 } 462 463 } 464 465 466 467 17、指出下面程序的運行結果。 468 class A{ 469 static{ 470 System.out.print("1"); 471 } 472 public A(){ 473 System.out.print("2"); 474 } 475 } 476 class B extends A{ 477 static{ 478 System.out.print("a"); 479 } 480 public B(){ 481 System.out.print("b"); 482 } 483 } 484 public class Hello{ 485 public static void main(String[] ars){ 486 A ab = new B(); //執行到此處,結果: 1a2b 487 ab = new B(); //執行到此處,結果: 1a2b2b 488 } 489 } 490 491 注:類的static 代碼段,能夠看做是類首次加載(被虛擬機加載)執行的代碼,而對於類的加載,首先要執行其基類的構造,再執行其自己的構造 492 493 18、抽象類和接口的區別? 494 (1)接口能夠被多重implements,抽象類只能被單一extends 495 496 (2)接口只有定義,抽象類能夠有定義和實現 497 498 (3)接口的字段定義默認爲:public static final, 抽象類字段默認是"friendly"(本包可見) 499 500 當功能須要累積時用抽象類,不須要累積時用接口。 501 502 1九、什麼是類的返射機制? 503 經過類(Class對象),能夠得出當前類的fields、method、construtor、interface、superClass、modified等,同是能夠經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的返射進行開發的。 504 505 20、類的返射機制中的包及核心類? 506 ? java.lang.Class 507 508 ? java.lang.refrection.Method 509 510 ? java.lang.refrection.Field 511 512 ? java.lang.refrection.Constructor 513 514 ? java.lang.refrection.Modifier 515 516 ? java.lang.refrection.Interface 517 518 2一、獲得Class的三個過程是什麼? 519 對象.getClass() 520 521 類.class或Integer.type(int) Integer.class(java.lang.Integer) 522 523 Class.forName(); 524 525 22、如何喚起類中的一個方法? 526 產生一個Class數組,說明方法的參數 527 528 經過Class對象及方法參數獲得Method 529 530 經過method.invoke(實例,參數值數組)喚醒方法 531 532 23、如何將數值型字符轉換爲數字(Integer,Double)? 533 Integer.parseInt(「1234」) 534 535 Double.parseDouble(「123.2」) 536 537 24、如何將數字轉換爲字符? 538 1+」」 539 540 1.0+」」 541 542 25、如何去小數點前兩位,並四捨五入。 543 double d=1256.22d; 544 545 d=d/100; 546 547 System.out.println(Math.round(d)*100); 548 549 26、如何取得年月日,小時分秒? 550 Calendar c=Calendar.getInstance(); 551 552 c.set(Calendar.YEAR,2004); 553 554 c.set(Calendar.MONTH,0); 555 556 c.set(Calendar.DAY_OF_MONTH,31); 557 558 System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH)); 559 560 27、如何取得從1970年到如今的毫秒數 561 Java.util.Date dat=new Date(); 562 563 long now=dat.getTime(); 564 565 28、如何獲取某個日期是當月的最後一天? 566 當前日期加一天,若當前日期與結果的月份不相同,就是最後一天。 567 568 569 570 取下一個月的第一天,下一個月的第一天-1 571 572 573 574 public static void main(String[] args) 575 576 { 577 578 Calendar c=Calendar.getInstance(); 579 580 c.set(Calendar.YEAR,2004); 581 582 c.set(Calendar.MONTH,0); 583 584 c.set(Calendar.DAY_OF_MONTH,30); 585 586 Calendar c1=(Calendar)c.clone(); 587 588 System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH)); 589 590 591 592 c.add(Calendar.DAY_OF_MONTH,1); 593 594 if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH)) 595 596 { 597 598 System.out.println("是最後一天"); 599 600 } 601 602 else 603 604 { 605 606 System.out.println("不是取後一天"); 607 608 609 610 } 611 612 } 613 614 29、如何格式化日期? 615 Import java.text. SimpleDateFormat; 616 617 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 618 619 Date dat=new Date(); 620 621 //把日期轉化爲字符串 622 623 String str=sdf.format(dat); 624 625 System.out.println(str); 626 627 //將字符串轉化爲日期 628 629 Java.util.Date d1=sdf.parse(「yyyy-mm-dd」); 630 631 30、編碼轉換,怎樣實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。 632 String a=new String("中".getBytes("gb2312"),"iso-8859-1"); 633 634 635 636 637 638 String a=new String("中".getBytes("iso-8859-1")); 639 640 641 642 3二、String s = new String("xyz");建立了幾個String Object? 643 New了一個,」XYZ」原本又是一個 644 645 兩個 646 647 3三、float型float f=3.4是否正確? 648 ? 報錯,應當是float f=3.4f 649 650 ? 若是是float f=3(整數)正確 651 652 35、說出一些經常使用的類,包,接口,請各舉5個 653 經常使用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer 654 655 經常使用的包:java.lang java.awt java.io java.util java.sql javax.xml javax.sevlet javax.ejb. java.net javax.faces 656 657 經常使用的接口: List Map Document NodeList EjbObject EjbHome SessionBean EntityBean 658 659 36、java中會存在內存泄漏嗎,請簡單描述。 660 會。如:int i,i2; return (i-i2); //when i爲足夠大的正數,i2爲足夠大的負數。結果會形成溢位,致使錯誤。 661 662 37、java中實現多態的機制是什麼? 663 靜態的多態:方法名相同,參數個數或類型不相同。(overloading) 664 665 動態的多態: 666 667 子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法 668 669 實現接口的實例傳與接口的引用調用的實現類的方法。 670 671 38、垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收? 672 動態內存 673 674 存放類實例 675 676 靜態內存 677 678 類自己 679 680 垃圾收集主要針對的是動態內存,通常當內存不夠用時會進行垃圾收集。 681 682 或經過System.gc()手動收集,但不保證必定執行。 683 684 39、靜態變量和實例變量的區別? 685 static i = 10; //常量 686 687 class A a; a.i =10;//可變 688 689 靜態方法能夠調用靜態變量。 690 691 實現方法能夠調用靜態變量、實例變量 692 693 41、是否能夠從一個static方法內部發出對非static方法的調用? 694 不能夠,若是其中包含對象的method();不能保證對象初始化. 695 696 42、寫clone()方法時,一般都有一行代碼,是什麼? 697 Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。 698 699 4三、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別表明什麼意義?在try塊中能夠拋出異常嗎? 700 Try:執行部分,產生異常 701 702 Catch:捕捉異常 703 704 Finally:無論有沒有異常都執行 705 706 Throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。 707 708 Throw:拋出一個異常 709 710 711 712 在try中能夠拋出異常,通常與聲明的異常相同。 713 714 715 716 自定義異常要繼承於Exception或Exception的子類 717 718 45、冒泡排序法 719 //相鄰兩個數比較,將最小或最大的放到後面,最後面數的不參與比較 720 721 public class BubbleSort { 722 723 private static int al[] = new int[10]; 724 725 public BubbleSort() { 726 727 al[0]=2; 728 729 al[1]=3; 730 731 al[2]=23; 732 733 al[3]=45; 734 735 al[4]=1; 736 737 al[5]=67; 738 739 al[6]=23; 740 741 al[7]=80; 742 743 al[8]=35; 744 745 al[9]=72; 746 747 } 748 749 public static void main(String[] args) { 750 751 BubbleSort bs = new BubbleSort(); 752 753 System.out.println("排序前:"); 754 755 display(al); 756 757 758 759 for(int i=0;i<al.length;i++) { 760 761 762 763 for (int j = 0; j < al.length-i-1; j++) { 764 765 766 767 if(al[j]>al[j+1]) { 768 769 swap(j,j+1); 770 771 } 772 773 } 774 775 } 776 777 System.out.println(); 778 779 System.out.println("排序後:"); 780 781 display(al); 782 783 } 784 785 private static void display(int[] al2) { 786 787 for (int i = 0; i < al2.length; i++) { 788 789 System.out.print(al2[i]+" "); 790 791 } 792 793 } 794 795 private static void swap(int i, int j) { 796 797 int temp = al[i]; 798 799 al[i]= al[j]; 800 801 al[j] = temp; 802 803 } 804 805 } 806 807 46、String and StringBuffer的區別? 808 String:長度給定不可變,當多個字符串聯合時要先轉爲StringBuffer,再聯合,速度慢。 809 810 StringBuffer:長度可變,能夠將多個字符串值直接聯合,效率高 811 812 47、用java代碼編寫堆棧 813 public class Stack { 814 815 816 817 int[] data; 818 819 int maxSize; 820 821 int top; 822 823 public Stack(int maxSize) { 824 825 this.maxSize = maxSize; 826 827 data = new int[maxSize]; 828 829 top = -1; 830 831 } 832 833 834 835 /** 836 837 * 依次加入數據 838 839 * @param data 要加入的數據 840 841 * @return 添加是否成功 842 843 */ 844 845 public boolean push(int data) { 846 847 if(top+1== maxSize) { 848 849 System.out.println("棧已滿!"); 850 851 return false; 852 853 } 854 855 this.data[++top] = data; 856 857 return true; 858 859 } 860 861 862 863 /** 864 865 * 從棧中取出數據 866 867 * @return 取出的數據 868 869 */ 870 871 public int pop() throws Exception{ 872 873 if(top==-1) { 874 875 throw new Exception("棧已空!"); 876 877 } 878 879 return this.data[top--]; 880 881 } 882 883 884 885 public static void main(String[] args) throws Exception { 886 887 Stack stack=new Stack(1000); 888 889 stack.push(1); 890 891 stack.push(2); 892 893 stack.push(3); 894 895 stack.push(4); 896 897 stack.push(5); 898 899 while(stack.top>=0) 900 901 { 902 903 System.out.println(stack.pop()); 904 905 } 906 907 } 908 909 } 910 911 4八、集合的做用是什麼? 912 數據的傳送 增、刪、改、查、constainsAll,能夠存放不一樣類型的對象。 913 914 4九、集合的通用方法有那些?通用方法是什麼?(操做) 915 集合List 的遍歷方法有: 916 917 Iterator: 918 919 Enumeration 920 921 For 922 923 Get 924 925 set 926 927 Collection的通用方法有: 928 929 Iterator() 930 931 Add() 932 933 Clear(); 934 935 remove() 936 937 938 939 50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMap和Hashtable的區別 940 ArrayList Vector:以數組的方式存儲,增、刪慢,查、改快 941 942 ArrayList:線程不安全,速度快 943 944 ArrayList:線程安全,速度慢(synchoronized) 945 946 LikedList: 以單鏈表的方式存儲,增、刪快,查、改慢 947 948 949 950 HashMap與Hashtable都實現的Map接口,HashTable線程安全,HashMap線程不安全。 951 952 51、Collection 和 Collections的區別。 953 Collection是集合的根接口,其下有set及list 954 955 Collections是集合的算法。 956 957 5二、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?用contains來區分是否有重複的對象。仍是都不用。 958 959 960 在比較時先調用hashCode方法,若是不相同,證實不相等。 961 962 若是相同,再調用equals方法,若是equals方法相同,證實相等,不相同,證實不相等。 963 964 965 966 ==:主要用在基本數據類型及引用 967 968 Equals:主要是對象或對象引用的比較。 969 970 971 972 集合中是否包含某一個元素用contains來判斷。 973 974 5三、List, Set, Map是否繼承自Collection接口? 975 List,set繼承於Collection 976 977 Map沒有繼承於Collection,其相對是獨立的。 978 979 屬於Collection類型的對象,能夠經過構造函數將一個集合構形成另一個集合。
附加javascript
1 1 什麼是Java、Java二、JDK?JDK後面的1.三、1.4.2版本號又是怎麼回事? 2 3 答:Java是一種通用的,併發的,強類型的,面向對象的編程語言(摘自Java規範第二版) JDK是Sun公司分發的免費Java開發工具,正式名稱爲J2SDK(Java2 Softw are Develop Kit)。 4 5 6 7 2 什麼是JRE/J2RE? 8 9 答:J2RE是Java2 Runtime Environment, 即Java運行環境,有時簡稱JRE。 10 11 若是你只須要運行Java程序或Applet, 下載並安裝它便可。若是你要自行開發Java軟件,請下載JDK。在JDK中附帶有J2RE。 12 13 注意因爲Microsoft對Java的支持不徹底,請不要使用IE自帶的虛擬機來運行Applet,務必安裝一個J2RE或JDK。 14 15 16 17 3 學習Java用什麼工具比較好? 18 19 答:做者建議首先使用JDK+文本編輯器,這有助你理解下列幾個基礎概念:path,classpath,package並熟悉基本命令:javac和java。而且下載和你的JDK版本一致的API幫助。 20 21 若是你不肯定類或函數的用法,請先查閱API而不是發貼求助。 22 23 當你熟悉Java以後,你能夠考慮換一個IDE。不少人推薦Jcreator,實際上Jcreator的功能還 是很弱的。 24 25 做者推薦eclipse,下載網址http://www.eclipse.org ;。因eclispe是免費的. 26 27 28 29 4 學習Java有哪些好的參考書? 30 31 答:做者首先推薦Thinking in Java,中文名《Java編程思想》,有中文版。該書第一章介紹了不少面向對象的編程思想,做爲新手應當認真閱讀。除此之外,O′relly出版社和Wrox出版社的書也不錯。做者本人不喜歡大陸做者的書。也許你以爲英文太難,可是網上大多數資料都是英文的。另外,你須要常常查閱API,而那也是英文的。 32 33 34 35 5 Java和C++哪一個更好? 36 37 答:這個問題是一個很不恰當的問題。你應該問:Java和C++哪一個更適用於個人項目? 若是你不須要跨平臺,不須要分佈式,要強調程序的運行速度,C++更爲適用。反之?你應當考慮Java。 38 39 40 41 6 什麼是J2SE/J2EE/J2ME? 42 43 答:J2SE就是通常的Java。 44 45 J2ME是針對嵌入式設備的,好比Java手機,它有本身的SDK。而J2EE使用J2SE的SDK。 46 47 J2EE規範更多的是對J2EE服務器的要求和開發人員的約束。詳情見後繼《J2EE FAQ》。 48 49 7 我寫了第一個Java程序,應該如何編譯/運行? 50 51 答:首先請將程序保存爲xxx.java文件, 52 53 而後在dos窗口下使用javac xxx.java命令,你會發現該目錄下多了一個xxx.class文件,再使用java xxx命令,你的java程序就開始運行了。 54 55 56 57 8 我照你說的作了,可是出現什麼"′javac′ 不是內部或外部命令,也不是可運行的程序或批處理文件。"。 58 59 答:你遇到了path問題。操做系統在必定的範圍(path)內搜索javac.exe,可是沒能找到。 60 61 請編輯你的操做系統環境變量,新增一個JAVA_HOME變量,設爲你JDK的安裝目錄, 62 63 再編輯Path變量,加上一項 %JAVA_HOME%bin。 64 65 而後關掉並新開一個dos窗口,你就能夠使用javac和java命令了。 66 67 68 69 9 環境變量怎麼設置? 70 71 答:請向身邊會設的人諮詢。 java初學者必讀-經驗總結 這篇文章中比較詳細的講到 jdk開發中系統環境變量設置 以及相關 服務器配置等開發環境配置。 72 73 74 75 10 javac xxx.java順利經過了,可是java xxx的時候顯示什麼"NoClassDefFoundError" 76 77 答:你遇到了classpath問題。java命令在必定的範圍(classpath)內搜索你要用的class文件,可是未能找到。 78 79 首先請確認你沒有錯敲成java xxx.class, 80 81 其次,檢查你的CLASSPATH環境變量,若是你設置了該變量又沒有包含.(表明當前目錄)你就會遇到這個問題。請在你的CLASSPATH環境變量中加入一項. 。另 82 83 外參見15。 84 85 86 87 11 我在java xxx的時候顯示"Exception in thread "main" java.lang.NoSuchMethodError: main"。 88 89 答:首先,在你的程序中每一個java文件有且只能有一個public類, 90 91 這個類的類名必須和文件名的大小寫徹底同樣。 92 93 其次,在你要運行的類中有且只能有一個public static void main(String[] args)方法,這個方法就是你的主程序。 94 95 96 97 12 package是什麼意思?怎麼用? 98 99 答:爲了惟一標識每一個類並分組,java使用了package的概念。 100 101 每一個類都有一個全名,例如String的全名是java.lang.String,其中java.lang是包名,String是短名。 102 103 這樣,若是你也定義了String,你能夠把它放在mypackage中, 104 105 經過使用全名mypackage.String和java.lang.String來區分這兩個類。 106 107 同時,將邏輯上相關的類放在同一個包中,能夠使程序結構更爲清楚。 108 109 110 111 你要作的就是在java文件開頭加一行"package mypackage;"。 112 113 注意包沒有嵌套或包含關係,A包和A.B包對java命令來講是並列的兩個包 114 115 116 117 13 我沒有聲明任何package會怎麼樣? 118 119 答:你的類被認爲放在默認包中。這時全名和短名是一致的。 120 121 122 123 14 在一個類中怎麼使用其餘類? 124 125 答:若是你使用java.lang包中的類,不用作任何事。 126 127 若是你使用其餘包中的類,使用import package1.class1; 或 import package2.*; 128 129 這裏.*表示引入這個包中的全部類。而後在程序中你能夠使用其餘類的短名。 130 131 若是短名有衝突,使用全名來區分。 132 133 134 135 15 我用了package的時候顯示"NoClassDefFoundError",可是我把全部package去掉的時候能正常運行。 136 137 答:將你的java文件按包名存放。 138 139 好比你的工做目錄是/work,你的類是package1.class1,那麼將它存放爲/work/package1/class1.java。 140 141 若是沒有聲明包,那麼直接放在/work下。 142 143 在/work下執行javac package1/class1.java,再執行java package1.class1,你會發現 144 145 一切正常。 146 147 另外,你能夠考慮開始使用IDE。 148 149 150 151 16 我想把java編譯成exe文件,該怎麼作? 152 153 答:JDK只能將java源文件編譯爲class文件。 154 155 class文件是一種跨平臺的字節碼,必須依賴平臺相關的JRE來運行。Java以此來實現跨平臺,有些開發工具能夠將java文件編譯爲exe文件。做者反對這種作法,由於這樣就取消了跨平臺性。 156 157 若是你確信你的軟件只在Windows平臺上運行,你能夠考慮使用C++/C#來編程。 158 159 160 161 17 我在編譯的時候遇到什麼"deprecated API",是什麼意思? 162 163 答:所謂deprecated是指已經?時,可是爲了向前兼容起見仍然保留的方法?這些方法可能會在之後取消支持。你應當改用較新的方法。 164 165 通常在API裏面會說明你應當用什麼方法來代替之。 166 167 168 169 Java環境變量設置 170 171 18 我怎麼給java程序加啓動參數,就像dir /p/w那樣? 172 173 答:還記得public static void main(String[] args)嗎?這裏的args就是你的啓動參數。 174 175 在運行時你輸入java package1.class1 -arg1 -arg2,args中就會有兩個String,一個是arg1,另外一個是arg2。 176 177 178 179 19 我怎麼從鍵盤輸入一個int/double/字符串? 180 181 答:java的I/O操做比C++要複雜一點。若是要從鍵盤輸入,樣例代碼以下: 182 183 BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) ) ; 184 185 String s = cin.readLine(); 186 187 這樣你就得到了一個字符串,若是你須要數字的話再加上: 188 189 int n = Integer.parseInt( s ); 或者 double d = Double.parseDouble( s ); 190 191 192 193 20 我怎麼輸出一個int/double/字符串? 194 195 答:在程序開始寫: 196 197 PrintWriter cout = new PrintWriter( System.out ); 須要時寫:cout.print(n); 或者 out.println("hello")等等。 198 199 200 201 21 我發現有些書上直接用System.in和System.out輸入輸出,比你要簡單得多。 202 203 答:java使用unicode,是雙字節。而System.in和System.out是單字節的stream。 204 205 若是你要輸入輸出雙字節文字好比中文,請使用做者的作法。 206 207 208 209 22 我怎麼從文件輸入一個int/double/字符串? 210 211 答:相似於從鍵盤輸入,只不過換成 212 213 BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) ); 214 215 PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) ); 216 217 另外若是你還沒下載API,請開始下載並閱讀java.io包中的內容。 218 219 220 221 23 我想讀寫文件的指定位置,該怎麼辦? 222 223 答:你確定沒有認真看API。java.io.RandomAccessFile能夠知足你的須要。 224 225 226 227 24 怎麼判斷要讀的文件已經到了盡頭? 228 229 答:你確定沒有認真看API。在Reaer的read方法中明確說明返回-1表示流的結尾。 230 231 25 java裏面怎麼定義宏? 232 233 答:java不支持宏,由於宏代換不能保證類型安全。 234 235 若是你須要定義常量,能夠將它定義爲某個類的static final成員。參見26和30。 236 237 238 239 26 java裏面無法用const。 240 241 答:你能夠用final關鍵字。例如 final int m = 9。被聲明爲final的變量不能被再次賦值?final也能夠用於聲明方法或類,被聲明爲final的方法或類不能被繼承 。 242 243 注意const是java的保留字以備擴充。 244 245 246 247 27 java裏面也不能用goto。 248 249 答:甚至在面向過程的語言中你也能夠徹底不用goto。請檢查你的程序流程是否合理。 250 251 若是你須要從多層循環中迅速跳出,java加強了(和C++相比)break和continue的功能,支持label。 252 253 254 255 例如: 256 257 outer : 258 259 while( ... ) 260 261 { 262 263 inner : 264 265 for( ... ) 266 267 { 268 269 ... break inner; ... 270 271 ... continue outer; ... 272 273 } 274 275 } 276 277 和const同樣,goto也是java的保留字以備擴充。 278 279 280 281 28 java裏面能不能重載操做符? 282 283 答:不能。String的+號是惟一一個內置的重載操做符。你能夠經過定義接口和方法來實現類 284 285 似功能。 286 287 288 289 29 我new了一個對象,可是無法delete掉它。 290 291 答:java有自動內存回收機制,即所謂Garbarge Collector。你不再用擔憂指針錯誤 292 293 294 295 30 我想知道爲何main方法必須被聲明爲public static? 296 297 答:聲明爲public是爲了這個方法能夠被外部調用,詳情見面向對象篇37。 298 299 static是爲了將某個成員變量/方法關聯到類(class)而非實例(instance)。 300 301 你不須要建立一個對象就能夠直接使用這個類的static成員, 302 303 在A類中調用B類的static成員能夠使用B.staticMember的寫法。 304 305 注意一個類的static成員變量是惟一的,被全部該類對象所共享的。 306 307 308 309 31 throw和throws有什麼不一樣? 310 311 答:throws用於聲明一個方法會拋出哪些異常。而throw是在方法體中實際執行拋出異常 312 313 的動做。 314 315 若是你在方法中throw一個異常,卻沒有在方法聲明中聲明之,編譯器會報錯。 316 317 注意Error和RuntimeException的子類是例外,無需特別聲明。 318 319 320 321 32 什麼是異常? 322 323 答:異常最先在Ada語言中引入,用於在程序中動態處理錯誤並恢復。 324 325 你能夠在方法中攔截底層異常並處理之,也能夠拋給更高層的模塊去處理。 326 327 你也能夠拋出本身的異常指示發生了某些不正常狀況。常見的攔截處理代碼以下: 328 329 try 330 331 { 332 333 ...... //如下是可能發生異常的代碼 334 335 ...... //異常被拋出,執行流程中斷並轉向攔截代碼。 336 337 ...... 338 339 } 340 341 342 343 344 345 catch(Exception1 e) //若是Exception1是Exception2的子類並要作特別處理,應排在 346 347 前面 348 349 { 350 351 //發生Exception1時被該段攔截 352 353 } 354 355 catch(Exception2 e) 356 357 { 358 359 //發生Exception2時被該段攔截 360 361 } 362 363 finally //這是可選的 364 365 { 366 367 //不管異常是否發生,均執行此段代碼 368 369 } 370 371 372 373 33 final和finally有什麼不一樣? 374 375 答:final請見26。finally用於異常機制,參見32。 376 377 34 extends和implements有什麼不一樣? 378 379 答:extends用於(單)繼承一個類(class),而implements用於實現一個接口(interface)。 380 381 interface的引入是爲了部分地提供多繼承的功能。 382 383 在interface中只需聲明方法頭,而將方法體留給實現的class來作。 384 385 這些實現的class的實例徹底能夠看成interface的實例來對待。 386 387 有趣的是在interface之間也能夠聲明爲extends(單繼承)的關係。 388 389 390 391 35 java怎麼實現多繼承? 392 393 答:java不支持顯式的多繼承。 394 395 由於在顯式多繼承的語言例如c++中,會出現子類被迫聲明祖先虛基類構造函數的問題, 396 397 398 399 而這是違反面向對象的封裝性原則的。 400 401 java提供了interface和implements關鍵字來部分地實現多繼承。參見34。 402 403 404 405 36 abstract是什麼? 406 407 答:被聲明爲abstract的方法無需給出方法體,留給子類來實現。 408 409 而若是一個類中有abstract方法,那麼這個類也必須聲明爲abstract。 410 411 被聲明爲abstract的類沒法實例化,儘管它能夠定義構造方法供子類使用。 412 413 414 415 37 public,protected,private有什麼不一樣? 416 417 答:這些關鍵字用於聲明類和成員的可見性。 418 419 public成員能夠被任何類訪問, 420 421 protected成員限於本身和子類訪問, 422 423 private成員限於本身訪問。 424 425 Java還提供了第四種的默承認見性,當沒有任何public,protected,private修飾時,成員是包內可見 426 427 類能夠用public或默認來修飾。 428 429 430 431 38 Override和Overload有什麼不一樣? 432 433 答:Override是指父類和子類之間方法的繼承關係,這些方法有着相同的名稱和參數類型。 434 435 Overload是指同一個類中不一樣方法(能夠在子類也能夠在父類中定義)間的關係,這些方法有着相同的名稱和不一樣的參數類型。 436 437 438 439 39 我繼承了一個方法,但如今我想調用在父類中定義的方法。 440 441 答:用super.xxx()能夠在子類中調用父類方法。 442 443 444 445 40 我想在子類的構造方法中調用父類的構造方法,該怎麼辦? 446 447 答:在子類構造方法的第一行調用super(...)便可。 448 449 450 451 41 我在同一個類中定義了好幾個構造方法而且想在一個構造方法中調用另外一個。 452 453 答:在構造方法第一行調用this(...)。 454 455 456 457 42 我沒有定義構造方法會怎麼樣? 458 459 答:自動得到一個無參數的構造方法。 460 461 462 463 43 我調用無參數的構造方法失敗了。 464 465 答:若是你至少定義了一個構造方法,就再也不有自動提供的無參數的構造方法了。 466 467 你須要顯式定義一個無參數的構造方法。 468 469 470 471 44 我該怎麼定義相似於C++中的析構方法(destructor)? 472 473 答:提供一個void finalize()方法。在Garbarge Collector回收該對象時會調用該方法。 474 475 注意實際上你很難判斷一個對象會在何時被回收。做者從未感到須要提供該方法。 476 477 478 479 45 我想將一個父類對象轉換成一個子類對象該怎麼作? 480 481 答:強制類型轉換。如 482 483 public void meth(A a) 484 485 { 486 487 B b = (B)a; 488 489 } 490 491 若是a實際上並非B的實例,會拋出ClassCastException。因此請確保a確實是B的實例 . 492 493 494 495 46 其實我不肯定a是否是B的實例,能不能分狀況處理? 496 497 答:能夠使用instanceof操做符。例如 498 499 if( a instanceof B ) 500 501 { 502 503 B b = (B)a; 504 505 } 506 507 else 508 509 { 510 511 ... 512 513 } 514 515 516 517 47 我在方法裏修改了一個對象的值,可是退出方法後我發現這個對象的值沒變! 518 519 答:極可能你把傳入參數重賦了一個新對象,例以下列代碼就會形成這種錯誤: 520 521 public void fun1(A a) //a是局部參數,指向了一個外在對象。 522 523 { 524 525 a = new A(); //a指向了一個新對象,和外在對象脫鉤了。若是你要讓a做爲傳 526 527 出變 528 529 量,不要寫這一句。 530 531 a.setAttr(attr);//修改了新對象的值,外在對象沒有被修改。 532 533 } 534 535 基本類型也會出現這種狀況。例如: 536 537 public void fun2(int a) 538 539 { 540 541 a = 10;//只做用於本方法,外面的變量不會變化。 542 543 } 544 545 48 java能動態分配數組嗎? 546 547 答:能夠。例如int n = 3; Language[] myLanguages = new Language[n]; 548 549 550 551 49 我怎麼知道數組的長度? 552 553 答:用length屬性。如上例中的 myLanguages.length 就爲 3。 554 555 556 557 50 我還想讓數組的長度能自動改變,可以增長/刪除元素。 558 559 答:用順序表--java.util.List接口。 560 561 你能夠選擇用ArrayList或是LinkedList,前者是數組實現,後者是鏈表實現。 562 563 例如: List list = new ArrayList(); 或是 List list = new LinkedList(); 。 564 565 566 567 51 什麼是鏈表?爲何要有兩種實現? 568 569 答:請補習數據結構。 570 571 572 573 52 我想用隊列/棧。 574 575 答:用java.util.LinkedList。 576 577 578 579 53 我但願不要有重複的元素。 580 581 答:用集合--java.util.Set接口。例如:Set set = new HashSet()。 582 583 584 585 54 我想遍歷集合/Map。 586 587 答:用java.util.Iterator。參見API。 588 589 590 591 55 我還要可以排序。 592 593 答:用java.util.TreeSet。例如:Set set = new TreeSet()。放進去的元素會自動排序。 594 595 你須要爲元素實現Comparable接口,還可能須要提供equals()方法,compareTo()方法,hashCode()方法。 596 597 598 599 56 可是我想給數組排序。 600 601 答:java.util.Arrays類包含了sort等實用方法。 602 603 604 605 57 我想按不一樣方法排序。 606 607 答:爲每種方法定義一個實現了接口Comparator的類並和Arrays綜合運用。 608 609 610 611 58 Map有什麼用? 612 613 答:存儲key-value的關鍵字-值對,你能夠經過關鍵字來快速存取相應的值。 614 615 616 617 59 set方法沒問題,可是get方法返回的是Object。 618 619 答:強制類型轉換成你須要的類型。參見45。 620 621 622 623 60 我要得到一個隨機數。 624 625 答:使用java.util.Random類。 626 627 628 629 61 我比較兩個String老是false,可是它們明明都是"abc" ! 630 631 答:比較String必定要使用equals或equalsIgnoreCase方法,不要使用 == ! 632 633 ==比較的是兩個引用(變量)是否指向了同一個對象,而不是比較其內容。 634 635 個人一個客戶不知道該選用Struts仍是JSF。就像你預料的那樣,我一般會問:這2中框架之間有什麼區別?固然,除了個人這個客戶外不少人都面臨這樣的選擇。 636 637 638 639 總的來講,我建議在新項目中優先考慮JSF。雖然經常有一些商業上的因素迫使咱們爲現有的項目選擇了Struts,並且那些解決方案還有待考驗,可是,讓咱們面對一個事實:JSF比Struts好多了。 640 641 642 643 下面是我選擇JSF而不選Struts的十大理由: 644 645 646 647 1.Components(組件) 648 649 2.Render Kits 650 651 3.Renderers 652 653 4.Value Binding Expressions(值綁定表達式) 654 655 5.Event Model(事件模型) 656 657 6.Extensibility(可擴展性) 658 659 7.Managed Beans(Dependency Injection 依賴注入) 660 661 8.POJO Action Methods 662 663 9.JSF is the standard Java-based web app framework (JSF是java web應用程序的標準框架) 664 665 10.There's only one Struts(只有一個Struts) 666 667 668 669 10.There's only one Struts(只有一個Struts) 670 671 Struts 是一個開源產品,然而JSF是一個標準。這個細節經常被新的JSF學習者忽略,其實這是顯而易見的,由於咱們有多個JSF的實現。雖然JSF還很不成熟,可是咱們已經有了2個優秀的JSF實現能夠選擇:Sun的參考實現和Apache的MyFaces。另外一方面,咱們只有一個Struts。 672 673 674 675 9.JSF is the standard(JSF是標準) 676 677 J2EE 5.0要提供一個JSF的實現,這代表JSF不久將會無處不在。這可能與你無關,可是和工具供應商密切相關。如今大概有50個java web應用程序框架,工具供應商不會情願去支持一個特別的框架,可是他們會絕不猶豫的去支持一個標準。並且不止供應商,開源項目也會迅速的彙集在JSF的四周,爭先恐後的去實現相同的功能。好比說,直到咱們去實現本質上和Shale的Tapestry差很少的視圖的時候,我才知道Facalets。(從長遠來看,我相信這種冗餘是件好事,會給咱們帶來好處) 678 679 680 681 8.POJO Action Methods 682 683 Struts的行爲是和 Struts的API綁定在一塊兒的,可是JSF的行爲方法能夠在POJPO中實現。這意味着你不用在表單和模型對象之間實現一個多餘的行爲層。順便說一下,在JSF裏面沒有行爲對象,行爲在模型對象中實現。可是也請注意一點:若是你願意你也能夠生成與JSF獨立的行爲對象。在Struts裏面,你有 Form Bean和Action Bean。Form Bean包含數據而Action Bean包含邏輯。OO狂會想去合併前2者,在Struts你辦不到。可是在JSF中,你能夠分開數據和邏輯,也能夠合併到一個對象中,一切由你決定。 684 685 686 687 7.Managed Beans(Dependency Injection 依賴注入) 688 689 和Spring同樣,JSF也使用了依賴注入(DJ)(或控制反轉(IoC))去實例化和初始化Bean。Struts的確爲你生成了Form Bean和Action Bean,可是JSF能夠爲你生成各類各樣的Managed Bean。 690 691 692 693 6.Extensibility(可擴展性) 694 695 這個很重要。JSF有6個對象實現了這個框架的大部分功能,並且你能夠很容易的用你本身的實現代替原有實現。好比你想加一個自定義參數在JSF表達式語言裏面,或是添加一個本身的視圖控制器以便於區分組件和HTML。事實上Shale實現了上面的功能。若是你尚未知足,JSF提供了幾個地方你能夠輕鬆的控制JSF的生命週期。Shale給你的會更多。 696 697 698 699 5.Event Model(事件模型) 700 701 JSF的事件模型使你能夠對值改變,動做,JSF生命週期階段變換等做出反應。在JSF1.1中,那些事件都是在服務器端處理的,這確定是一個缺陷,好在JSF2.0計劃支持客戶端事件,拭目以待吧。 702 703 704 705 4.Value Binding Expressions(值綁定表達式) 706 707 在Struts 中,你負責把數據從Form傳遞到模型對象。你實現的Action的execute方法是把Form做爲一個參數。而後你再手動的把數據從Form Bean裏面取出放到模型對象裏面。你要爲應用裏面的每一個Form作這些事情,然而在JSF裏面,你只需像這樣:#{model.property} 就夠了,其餘的交給JSF來處理。 708 709 710 711 3.Renderers 712 713 你有看過Struts的標籤的源代碼嗎?它直接生成HTML。JSF組件標籤什麼都不生成,它和服務器上的一對component-renderer對應。Component維護組件狀態,rendered負責得到視圖。重點是renderers是可插拔的,即你能夠根據本身需求實現而後替代掉默認實現。好比說我在NFJS上面的Felix談話中舉例說明了怎麼去實現一個自定義的label renderer。你只須要配置你的renderer,JSF就會自動在你的應用程序裏面使用他。 714 715 716 717 2.Render Kits 718 719 在幾年前我曾經有份Struts諮詢工做,咱們必須同時支持瀏覽器和無線設備,很是痛苦。可是用JSF來完成那個任務很是容易,由於你能夠生成你本身的render kit-爲一種特定顯示技術的renderers的集合-而後配置到JSF裏面。 720 721 722 723 1.Components(組件) 724 725 組件是Struts和JSF之間最大的區別。就像Swing同樣,JSF提供豐富的底層構件去開發組件而後添加到標準的組件集。那些底層構件讓你很容易的生成本身的組件而且和別人共享。如今咱們處處都能看到自定義組件跳出來,好比說Oracle的ADF和MyFaces,二者都提供了豐富的組件集,就像 javascript日曆,tree等等。固然,組件只是一部分。典型的是,組件都和一個獨立的renderer對應,這給咱們帶來了真正的好處(看第3 條)。可是和JSF中的不少東西同樣,你不必定要墨守成規。只要你願意,你能夠實現render本身的組件,雖然這樣你會失去給組件加入別的 renderer的能力。 726 727 728 729 java版本的escape和unescape函數 730 731 大 | 中 | 小 [2006/02/27 15:33 | 分類: Java,J2EE | by NetFetch ] 732 733 Ad0.cn整理 734 735 736 737 java.net.URLDecoder / java.net.URLEncoder 738 739 對應:javascript的 encodeURI/decodeURI 和encodeURIComponent/decodeURIComponent 740 741 742 743 java版本的escape和unescape函數 744 745 對應:javascript 的escape/unescape 746 747 748 749 http://blog.ad0.cn 750 751 752 753 754 755 756 757 class EscapeUnescape{ 758 759 public static String escape (String src) { 760 761 int i; 762 763 char j; 764 765 StringBuffer tmp = new StringBuffer(); 766 767 tmp.ensureCapacity(src.length()*6); 768 769 for (i=0;i j = src.charAt(i); 770 771 if(Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) 772 773 tmp.append(j); 774 775 else 776 777 if(j<256){ 778 779 tmp.append(\"%\"); 780 781 if(j<16) 782 783 tmp.append(\"0\"); 784 785 tmp.append(Integer.toString(j,16)); 786 787 } 788 789 else{ 790 791 tmp.append(\"%u\"); 792 793 tmp.append(Integer.toString(j,16)); 794 795 } 796 797 } 798 799 return tmp.toString(); 800 801 } 802 803 804 805 public static String unescape (String src) { 806 807 StringBuffer tmp = new StringBuffer(); 808 809 tmp.ensureCapacity(src.length()); 810 811 int lastPos=0,pos=0; 812 813 char ch; 814 815 while (lastPos pos = src.indexOf(\"%\",lastPos); 816 817 if(pos == lastPos) { 818 819 if(src.charAt(pos+1)=='u') { 820 821 ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16); 822 823 tmp.append(ch); 824 825 lastPos = pos+6; 826 827 } 828 829 else{ 830 831 ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16); 832 833 tmp.append(ch); 834 835 lastPos = pos+3; 836 837 } 838 839 } 840 841 else{ 842 843 if(pos == -1){ 844 845 tmp.append(src.substring(lastPos)); 846 847 lastPos=src.length(); 848 849 } 850 851 else{ 852 853 tmp.append(src.substring(lastPos,pos)); 854 855 lastPos=pos; 856 857 } 858 859 } 860 861 } 862 863 return tmp.toString(); 864 865 } 866 867 868 869 public static void main(String[] args) { 870 871 String tmp=\"~!@#$%^&*()_+|=-,./?><;'][{}\"\"; 872 873 System.out.println(\"testing escape : \"+tmp); 874 875 tmp =escape(tmp); 876 877 System.out.println(tmp); 878 879 System.out.println(\"testing unescape :\"+tmp); 880 881 System.out.println(unescape(tmp)); 882 883 } 884 885 } 886 887 888 889 Struts+Spring+Hibernate練習(完整) 890 891 大 | 中 | 小 [2006/03/04 17:18 | 分類: Java,J2EE | by NetFetch ] 892 893 Struts+Spring+Hibernate練習(完整) 894 895 更多 Struts+Spring+Hibernate 相關的文章: 896 897 選擇JSF不選Struts的十大理由 898 899 Struts+Spring+Hibernate練習(完整) 900 901 struts+spring+hibernate之間的關係與差異(轉) 902 903 史上最簡單的struts+spring+hibernate配置實例(修訂版) 904 905 906 907 Struts+Spring+Hibernate練習 工具: 908 909 Eclipse3.一、MyEclipse4.0三、Tomcat5.5.九、Properties Editor插件、MySql4.1.13 910 911 新建工程:名稱爲 login 912 913 建立Struts框架 914 915 916 917 建立 index.jsp,增長一連接指向 login.jsp 918 919 按下Ctrl + N,建立 login.jsp、LoginAction,使用MyEclipse的嚮導就能夠了,記得選對正確的版本 920 921 922 923 在ActionForm配置頁中選擇類型爲動態Form,並繼承於DynaValidatorForm,新增兩個屬性:username、password,在建立jsp文件打上鉤,將路徑改成/login.jsp,而後下一步,改LoginAction的Input source改成/login.jsp,點擊完成 924 925 926 927 按下Ctrl + N 建立一個forwards,記得選對正確的版本 928 929 name 輸入 indexGo 930 931 路徑選擇 /index.jsp 932 933 934 935 配置validator 936 937 先添加Struts插件,使用嚮導 938 939 Plugin class : org.apache.struts.validator.ValidatorPlugIn 940 941 Property : pathnames 942 943 Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml 944 945 這裏須要兩個xml文件 946 947 如今建立「validation.xml」 文件 948 949 950 951 在這裏說明一點,我使用MyEclipse建立的Struts框架中缺乏了validator-rules.xml文件,須要動拷貝到WEB-INF目錄中 952 953 此文件能夠到http://struts.apache.org/下載 954 955 956 957 文件內容以下: 958 959 960 961 編輯資源文件「ApplicationResources.properties」 962 963 增長如下內容 964 965 prompt.username=User Name 966 967 prompt.password=User Password 968 969 errors.required={0} is required. 970 971 再建立中文件資源文件「ApplicationResources_zh_CN.properties」 972 973 增長如下內容 974 975 prompt.username=用戶名稱 976 977 prompt.password=登陸密碼 978 979 errors.required={0} 必需填寫! 980 981 修改struts-config.xml文件 982 983 在如下位置增長綠色字體部份 984 985 986 987 attribute="loginForm" 988 989 input="/login.jsp" 990 991 name="loginForm" 992 993 path="/login" 994 995 scope="request" 996 997 validate="true" 998 999 type="com.test.struts.action.LoginAction" /> 1000 1001 這裏說明提交的數據必需通過驗證,而驗證則是經過validator框架進行的。 1002 1003 1004 1005 修改LoginAction.java文件的execute方法,內容以下 1006 1007 public ActionForward execute( 1008 1009 ActionMapping mapping, 1010 1011 ActionForm form, 1012 1013 HttpServletRequest request, 1014 1015 HttpServletResponse response) { 1016 1017 DynaValidatorForm loginForm = (DynaValidatorForm) form; 1018 1019 String username=loginForm.getString("username"); 1020 1021 String password=loginForm.getString("password"); 1022 1023 if(username.equals("test")||password.equals("test")){ 1024 1025 return mapping.findForward("indexGo"); 1026 1027 }else{ 1028 1029 return mapping.getInputForward(); 1030 1031 } 1032 1033 } 1034 1035 如今再修改一下login.jsp 1036 1037 增長如下綠色字體部份: 1038 1039 其中charset=UTF-8 是使用UTF-8的字符編碼,這也是爲了支持國際化而使用的。 1040 1041 1042 1043 好了,如今能夠啓動Tomcat進行測試了 1044 1045 http://localhost/login/ 這裏說明一下,個人Tomcat已經裝端口號改成80了,因此就沒必要使用http://localhost:8080/login/這樣的方法了。 1046 1047 1048 1049 若是不輸入任何數據而直接提交表單的話就能夠看到效果了。 1050 1051 1052 1053 好了,若是沒有什麼問題的話就繼續往下看吧,若是有問題的話就得往上看了^_^ 1054 1055 1056 1057 如今建立Spring框架了,在這裏我將Spring全部的包所有加載進去,由於我還不知道具體用到哪些類,所有加進去方便點 1058 1059 1060 1061 單選框選第二個,這樣的話全部的類庫和標籤等都將拷貝到項目中去,這樣方便之後的佈署 1062 1063 下一步後是建立配置文件,將文件放到「WebRoot/WEB-INF」目錄下,文件名稱爲「applicationContext.xml」 1064 1065 1066 1067 1068 1069 配置struts-config.xml文件,添加(spring)的插件 1070 1071 1072 1073 修改LoginAction配置 1074 1075 1076 1077 原: 1078 1079 attribute="loginForm" 1080 1081 input="/login.jsp" 1082 1083 name="loginForm" 1084 1085 path="/login" 1086 1087 scope="request" 1088 1089 validate="true" 1090 1091 type="com.test.struts.action.LoginAction" /> 1092 1093 改成: 1094 1095 attribute="loginForm" 1096 1097 input="/login.jsp" 1098 1099 name="loginForm" 1100 1101 path="/login" 1102 1103 scope="request" 1104 1105 validate="true" 1106 1107 type="org.springframework.web.struts.DelegatingActionProxy" /> 1108 1109 綠色字體部份爲修改內容 1110 1111 這裏將使用spring的代理器來對Action進行控制 1112 1113 1114 1115 當提交到/login.do是將控制權交給了spring,而後由spring來決定是否轉回到struts的Action 1116 1117 如今來配置spring 1118 1119 綠色字體是關於轉交控制權的配置內容 1120 1121 1122 1123 屬性singleton="false",指明瞭Action 的實例獲取方式爲每次從新建立。解決了Struts中使人詬病的線程安全問題(Struts中,由一個Action實例處理全部的請求,這就致使了類公用資源在併發請求中的線程同步問題。)(摘自spring開發指南) 1124 1125 1126 1127 這時若是你要進行測試也是能夠的,不過爲了省點時間就不進行測試了。 1128 1129 1130 1131 創建數據庫在 這裏我使用的是mysql4.1.13 1132 1133 1134 1135 Create TABLE `user` ( 1136 1137 `ID` int(11) NOT NULL auto_increment, 1138 1139 `USERNAME` varchar(50) NOT NULL default '', 1140 1141 `PASSWORD` varchar(50) NOT NULL default '', 1142 1143 PRIMARY KEY (`ID`) 1144 1145 ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 1146 1147 1148 1149 添加記錄 insert into user (USERNAME,PASSWORD) values ('test','test') 1150 1151 1152 1153 建立Hibernate框架 1154 1155 在配置界面中配置數據庫的鏈接部份,重要的是點擊連接將jdbc拷貝到lib目錄中 1156 1157 使用MyEclipse的數據Database Explorer工具建立User.hmb.xml、AbstractUser.java、User.java映射文件 1158 1159 建立完成後能夠將自動生成的hibernate.cfg.xml刪除 1160 1161 1162 1163 建立UserDAO.java、UserDAOImp.java 1164 1165 UserDAO.java 1166 1167 1168 1169 public interface UserDAO { 1170 1171 1172 1173 public abstract boolean isValidUser(String username, String password); 1174 1175 1176 1177 } 1178 1179 1180 1181 1182 1183 UserDAOImp.java 1184 1185 import java.util.List; 1186 1187 import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 1188 1189 import com.test.Hibernate.SessionFactory; 1190 1191 public class UserDAOImp extends HibernateDaoSupport implements UserDAO { 1192 1193 private SessionFactory sessionFactory; 1194 1195 private static String hql = "from User u where u.username=? "; 1196 1197 public boolean isValidUser(String username, String password) { 1198 1199 List userList = this.getHibernateTemplate().find(hql, username); 1200 1201 if (userList.size() > 0) { 1202 1203 return true; 1204 1205 } 1206 1207 1208 1209 return false; 1210 1211 } 1212 1213 1214 1215 } 1216 1217 1218 1219 1220 1221 修改LoginAction.java文件,使用userDao的方法來進行用戶驗證 1222 1223 package com.test.struts.action; 1224 1225 1226 1227 import javax.servlet.http.HttpServletRequest; 1228 1229 import javax.servlet.http.HttpServletResponse; 1230 1231 1232 1233 import org.apache.struts.action.Action; 1234 1235 import org.apache.struts.action.ActionForm; 1236 1237 import org.apache.struts.action.ActionForward; 1238 1239 import org.apache.struts.action.ActionMapping; 1240 1241 import org.apache.struts.validator.DynaValidatorForm; 1242 1243 1244 1245 import com.test.UserDAO; 1246 1247 1248 1249 public class LoginAction extends Action { 1250 1251 private UserDAO userDAO; 1252 1253 public UserDAO getUserDAO() { 1254 1255 return userDAO; 1256 1257 } 1258 1259 1260 1261 public void setUserDAO(UserDAO userDAO) { 1262 1263 this.userDAO = userDAO; 1264 1265 } 1266 1267 1268 1269 public ActionForward execute(ActionMapping mapping, ActionForm form, 1270 1271 HttpServletRequest request, HttpServletResponse response) { 1272 1273 DynaValidatorForm loginForm = (DynaValidatorForm) form; 1274 1275 // TODO Auto-generated method stub 1276 1277 String username = (String) loginForm.get("username"); 1278 1279 String password = (String) loginForm.get("password"); 1280 1281 loginForm.set("password", null); 1282 1283 if (userDAO.isValidUser(username,password)) { 1284 1285 return mapping.findForward("indexGo"); 1286 1287 } else { 1288 1289 return mapping.getInputForward(); 1290 1291 } 1292 1293 } 1294 1295 } 1296 1297 綠色字體爲修改部份 1298 1299 1300 1301 如今剩下最後的spring配置了 1302 1303 1304 1305 com.mysql.jdbc.Driver 1306 1307 1308 1309 jdbc:mysql://localhost/test 1310 1311 1312 1313 root 1314 1315 1316 1317 root 1318 1319 1320 1321 com/test/Hibernate/User.hbm.xml 1322 1323 1324 1325 org.hibernate.dialect.MySQLDialect 1326 1327 true 1328 1329 1330 1331 PROPAGATION_REQUIRED 1332 1333 PROPAGATION_REQUIRED,readOnly 1334 1335 PROPAGATION_REQUIRED,readOnly
1 54、面向對象的特徵有哪些方面 2 1.抽象: 3 4 找共性,將共有的屬性、方法放到父類中 5 6 2.繼承: 7 8 子類繼承於父類,具備父類的全部屬性與方法,能夠重用,也能夠覆蓋。 9 10 3.封裝: 11 12 一個類包括多個屬性及方法。 13 14 4. 多態性: 15 16 動態: 17 18 靜態: 19 20 5五、String是最基本的數據類型嗎? 21 基本數據類型包括byte、int、char、long、float、double、boolean和short。 22 23 24 25 java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類 26 27 5六、int 和 Integer 有什麼區別? 28 Int是基本數據類型,不是對象,佔一個內存空間,沒有方法。與其同類的有long,char,doble 29 30 Integer是封裝類,具備方法及屬性。與其同類的有Long,Double.Float 31 32 57、運行時異常與通常異常有何異同? 33 運行時異常:java JVM拋出的異常,代碼中不用處理。 34 35 36 37 通常異常:用戶拋出的異常,若是用throws 聲明瞭,調用這個方法的代碼必須對其處理。 38 39 5八、&和&&的區別? 40 &:與: 左邊若爲false右邊還執行。 41 42 &&:短路與,左邊若爲false右邊不執行。 43 44 5九、final, finally, finalize的區別? 45 final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 46 47 finally是異常處理語句結構的一部分,表示老是執行。 48 49 finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。 50 51 算符能夠用來決定某對象的類是否實現了接口。 52 53 62、heap和stack有什麼區別? 54 棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。 55 56 堆是棧的一個組成元素 57 58 59 60 63、Static Nested Class 和 Inner Class的不一樣? 61 Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。 62 63 64、何時用assert? 64 assertion (斷言)在軟件開發中是一種經常使用的調試方式,不少開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個 boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;若是該值爲false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。通常來講,assertion用於保證程序最基本、關鍵的正確性。assertion檢查一般在開發和測試時開啓。爲了提升性能,在軟件發佈後,assertion檢查一般是關閉的。 65 66 6五、GC是什麼? 爲何要有GC? 67 GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。 68 69 6六、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? 70 short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型) short s1 = 1; s1 += 1;(能夠正確編譯) 71 72 6七、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 73 Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回與參數最接近的長整數,參數加1/2後求其floor. 74 75 76 77 6八、Java有沒有goto? 78 java中的保留字,如今沒有在java中使用。 79 80 81 82 69、給我一個你最多見到的runtime exception 83 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 84 85 86 87 通常異常: 88 89 IOException 90 91 FileNotFoundException 92 93 SqlException 94 95 96 97 70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? 98 接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類。 99 100 7一、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized? 101 都不能 102 103 7二、數組有沒有length()這個方法? String有沒有length()這個方法? 104 數組沒有length()這個方法,有length這個屬性 105 106 String有length()這個方法. 107 108 7三、構造器Constructor是否可被override? 109 構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。 110 111 7四、是否能夠繼承String類? 112 String類是final類故不能夠繼承。 113 114 7五、swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上? 115 switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。 116 117 7六、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後? 118 會執行,在return前執行。 119 120 7七、編程題: 用最有效率的方法算出2乘以8等於幾? 121 2 << 3 122 123 7八、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對? 124 對,有相同的hash code。 125 126 7九、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞? 127 是引用傳遞 128 129 基本數據類型:值 130 131 對象: 引用 132 133 80、四種會話跟蹤技術 134 Cookie 135 136 Session 137 138 Hidden 139 140 url 重寫 141 142 81、編程題: 寫一個Singleton出來。 143 Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。 144 145 通常Singleton模式一般有幾種種形式: 146 147 第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。 148 149 public class Singleton { 150 151 private Singleton(){} 152 153 //在本身內部定義本身一個實例,是否是很奇怪? 154 155 //注意這是private 只供內部調用 156 157 private static Singleton instance = new Singleton(); 158 159 //這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問 160 161 public static Singleton getInstance() { 162 163 return instance; 164 165 } 166 167 } 168 169 第二種形式: 170 171 public class Singleton { 172 173 private static Singleton instance = null; 174 175 public static synchronized Singleton getInstance() { 176 177 //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次 178 179 //使用時生成實例,提升了效率! 180 181 if (instance==null) 182 183 instance=new Singleton(); 184 185 return instance; } 186 187 } 188 189 其餘形式: 190 191 定義一個類,它的構造函數爲private的,全部方法爲static的。 192 193 通常認爲第一種形式要更加安全些 194 195 83、Java中的異常處理機制的簡單原理和應用。 196 原理 197 198 有錯直接轉到異常處理部分或向上拋出。 199 200 應用: 201 202 JAVA的異常就是錯誤,有兩種一種是運行時,編碼能夠不用捕捉。一種是通常異常,若是throws聲明瞭,必須進行處理。 203 204 84、垃圾回收的優勢和原理。並考慮2種回收機制。 205 優勢: 206 207 程序員不用管內存,jvm自動完成,開發方便。運行優先很是低,程序沒法清楚實例何時被消毀。 208 209 210 211 8五、描述一下JVM加載class文件的原理機制? 212 JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。 213 214 8六、char型變量中能不能存貯一箇中文漢字?爲何? 215 可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的 216 217 218 219 88、寫一個程序,從文件(c:\test.txt)中查出字符串」mobnet」出現的次數? 220 221 222 223 224 225 226 java基礎類庫(io流,集合類,線程,Socket,AWT,Swing,sql) 227 1、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類? 228 字節流,字符流。字節流繼承於InputStream OutputStream,字符流繼承於Reader Writer。在java.io包中還有許多其餘的流,低層流與調層流,高層流主要是爲了提升性能和使用方便。 229 230 二、啓動一個線程是用run()仍是start()? 231 啓動一個線程是調用start()方法,啓動線程並調用run方法。 232 233 3、線程的基本概念、線程的基本狀態以及狀態之間的關係 234 線程是進程內的併發,沒有自已內存空間,共享進程的,線程間的通訊成本較低。 235 236 Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。 237 238 四、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼關鍵字修飾同步方法? stop()和suspend()方法爲什麼不推薦使用? 239 Extends Thread 240 241 Implements Runnable 242 243 同步 244 245 Public synchronized aa() 246 247 { 248 249 250 251 } 252 253 254 255 256 257 Public void cc(object aa) 258 259 { 260 261 synchronized(aa) 262 263 { 264 265 } 266 267 } 268 269 270 271 用synchoronized修飾同步方法。 272 273 274 275 答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口 276 277 同步的實現方面有兩種,分別是synchronized,wait與notify 278 279 反對使用stop(),是由於它不安全。它會解除由線程獲取的全部鎖定,並且若是對象處於一種不連貫狀態,那麼其餘線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其餘任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來講,若是它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()從新啓動線程。 280 281 五、集合框架有什麼? 282 Collection Map 283 284 List set HashMap 285 286 ArrayList linkedList HashSet TreeSet 287 288 289 290 12、設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。寫出程序 291 292 293 public class TestThread 294 295 { 296 297 private int j; 298 299 public synchronized void inc() 300 301 { 302 303 j++; 304 305 System.out.println(Thread.currentThread().getName() + "-inc:" + j); 306 307 } 308 309 public synchronized void dec() 310 311 { 312 313 j--; 314 315 System.out.println(Thread.currentThread().getName() + "-dec:" + j); 316 317 } 318 319 public static void main(String[] args) 320 321 { 322 323 TestThread t=new TestThread(); 324 325 for (int i = 0; i < 2; i++) 326 327 { 328 329 Thread inc=new Thread(new Inc(t)); 330 331 Thread dec=new Thread(new Dec(t)); 332 333 inc.start(); 334 335 dec.start(); 336 337 } 338 339 } 340 341 } 342 343 344 345 class Inc implements Runnable 346 347 { 348 349 private TestThread obj; 350 351 public Inc(TestThread obj) 352 353 { 354 355 this.obj=obj; 356 357 } 358 359 public void run() 360 361 { 362 363 // for (int i = 0; i < 100; i++) 364 365 // { 366 367 this.obj.inc(); 368 369 // } 370 371 } 372 373 } 374 375 class Dec implements Runnable 376 377 { 378 379 private TestThread obj; 380 381 public Dec(TestThread obj) 382 383 { 384 385 this.obj=obj; 386 387 } 388 389 public void run() 390 391 { 392 393 // for (int i = 0; i < 100; i++) 394 395 // { 396 397 this.obj.dec(); 398 399 // } 400 401 } 402 403 } 404 405 406 407 13、同步和異步有和異同,在什麼狀況下分別使用他們?舉例說明。 408 同步:上一段代碼沒的完成,下一段必須等到上一段代碼完成後才能夠執行。如買票排隊 409 410 異步:上一段代碼沒的完成,下一段沒必要等到上一段代碼完成就能夠執行。如手機發送短信。 411 412 1四、sleep() 和 wait() 有什麼區別? 413 Sleep是指休眠給定的時間,當這個時間達到以後,線程會再次醒來。 414 415 Wait是等待狀態,多長時間不清楚,由另外一個線程將其喚醒。 416 417 418 419 1五、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法? 420 如只其它方法是同步方法,不能夠進入。若是不是能夠進入。 421 422 17、輸入輸出流的理解: 423 在java使用流的機制進行數據的傳送,從文件到內存是輸入流,從內存到文件是輸出流,輸入流能夠經過 read讀取,輸出流以write或print寫入,對於流能夠是分爲高層流和低層流,低層以一個字節或字符爲單位進行處理,高層流以一批數據爲單位進行處理。 424 425 FileInputStream(System.in)至InputSteamReader至BufferReader 426 427 OutputSteam(System.out)至printStream 428 429 FileReader至BufferedReader 430 431 FileWriter 至 PrintWriter或bufferWriter 432 433 分類: 434 435 字節(二進制) 436 437 FileInputStream(低層輸入流) 438 439 FileOutputStream(低層輸出流) 440 441 442 443 PrintStream(高層流) System.out.println() 444 445 字符(一個char) 446 447 FileReader 448 449 FileWriter 450 451 452 453 18、請寫一個程序的讀寫,要求用兩種方式一種是低層流另外一種是高層流。 454 455 456 import java.io.FileWriter; 457 458 import java.io.InputStream; 459 460 import java.io.BufferedWriter; 461 462 import java.io.InputStreamReader; 463 464 import java.io.BufferedReader; 465 466 import java.io.FileReader; 467 468 469 470 471 472 public class Untitled1 { 473 474 public static void writeFileChar() throws Exception { 475 476 FileWriter f = new FileWriter("c:\\aa.txt"); 477 478 InputStream is = System.in; 479 480 int c = is.read(); 481 482 while (((char) c) != 'x') { 483 484 f.write(c); 485 486 c = is.read(); 487 488 } 489 490 f.close(); 491 492 is.close(); 493 494 } 495 496 497 498 public static void writeFileString() throws Exception { 499 500 FileWriter f = new FileWriter("c:\\aa.txt"); 501 502 BufferedWriter bwr=new BufferedWriter(f); 503 504 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 505 506 String c = bf.readLine(); 507 508 while (!c.equals("stop")) { 509 510 bwr.write(c+"\r\n"); 511 512 c = bf.readLine(); 513 514 } 515 516 bwr.close(); 517 518 f.close(); 519 520 bf.close(); 521 522 } 523 524 525 526 public static void readFileChar() throws Exception { 527 528 FileReader f = new FileReader("c:\\aa.txt"); 529 530 int c = f.read(); 531 532 while (c!=-1) { 533 534 System.out.print((char)c); 535 536 c=f.read(); 537 538 } 539 540 f.close(); 541 542 } 543 544 545 546 public static void readFileString() throws Exception { 547 548 BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt")); 549 550 String c = bf.readLine(); 551 552 while (c!=null) 553 554 { 555 556 System.out.println(c); 557 558 c=bf.readLine(); 559 560 } 561 562 bf.close(); 563 564 } 565 566 567 568 569 570 public static void main(String[] args) throws Exception { 571 572 readFileString(); 573 574 } 575 576 } 577 578 19、如何列出某個目錄下的全部文件 579 Import java.io.File; 580 581 File f=new File("C:\\"); 582 583 File[] f1=f.listFiles(); 584 585 for(int i=0;i<f1.length;i++) 586 587 { 588 589 if(f1[i].isDirectory()) 590 591 { 592 593 System.out.println("dirctory is"+f1[i].getName()); 594 595 } 596 597 else 598 599 { 600 601 System.out.println("file is"+f1[i].getName()); 602 603 } 604 605 } 606 607 } 608 609 1. 如何列出某個目錄下的全部子目錄 610 611 public static void main(String[] args) throws Exception 612 613 { 614 615 getFile(new File("C:\\entityBean"),"\t"); 616 617 } 618 619 public static void getFile(File f,String sem) throws Exception 620 621 { 622 623 System.out.println(sem+f.getName()); 624 625 File fl[]=f.listFiles(); 626 627 if(fl.length>=1) 628 629 { 630 631 for(int i=0;i<fl.length;i++) 632 633 { 634 635 if(fl[i].isDirectory()) 636 637 { 638 639 getFile(fl[i],sem+"\t"); 640 641 } 642 643 } 644 645 } 646 647 } 648 649 2. 判斷一個文件或目錄是否存在 650 651 File f=new File("C:\\entityBean"); 652 653 if(f.exists()) 654 655 { 656 657 System.out.println("exist"); 658 659 } 660 661 else 662 663 { 664 665 System.out.println("not exist"); 666 667 } 668 669 Socket 670 671 20、用socket通信寫出客戶端和服務器端的通信,要求客戶發送數據後可以回顯相同的數據? 672 public class ServerSocket_1 673 674 { 675 676 public static void main(String[] args) 677 678 throws Exception 679 680 { 681 682 ServerSocket ss = new ServerSocket(4001); 683 684 Socket s = ss.accept(); 685 686 BufferedReader br = new BufferedReader(new InputStreamReader(s. 687 688 getInputStream())); 689 690 PrintStream ps=new PrintStream(s.getOutputStream()); 691 692 String temp = br.readLine(); 693 694 while (true) 695 696 { 697 698 System.out.println("客戶端:"+temp); 699 700 ps.println(temp); 701 702 if (temp.equals("stop")) 703 704 { 705 706 break; 707 708 } 709 710 temp = br.readLine(); 711 712 } 713 714 br.close(); 715 716 ps.close(); 717 718 ss.close(); 719 720 } 721 722 } 723 724 725 726 public class ClientSocket 727 728 { 729 730 public static void main(String[] args) throws Exception 731 732 { 733 734 Socket s = new Socket("localhost", 4001); 735 736 PrintStream ps = new PrintStream(s.getOutputStream()); 737 738 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 739 740 BufferedReader br_server = new BufferedReader(new InputStreamReader(s. 741 742 getInputStream())); 743 744 String temp = br.readLine(); 745 746 while (true) 747 748 { 749 750 ps.println(temp); 751 752 temp = br_server.readLine(); 753 754 System.out.println("服務器的信息:" + temp); 755 756 if (temp.equals("stop")) 757 758 { 759 760 break; 761 762 } 763 764 temp = br.readLine(); 765 766 } 767 768 s.close(); 769 770 br.close(); 771 772 br_server.close(); 773 774 } 775 776 } 777 778 779 780 2三、介紹JAVA中的Collection FrameWork(包括如何寫本身的數據結構)? 781 答:Collection FrameWork以下: 782 783 Collection 784 785 ├List 786 787 │├LinkedList 788 789 │├ArrayList 790 791 │└Vector 792 793 │ └Stack 794 795 └Set 796 797 Map 798 799 ├Hashtable 800 801 ├HashMap 802 803 └WeakHashMap 804 805 Collection是最基本的集合接口,一個Collection表明一組Object,即Collection的元素(Elements) 806 807 Map提供key到value的映射 808 809 810 811 24、請說出你所知道的線程同步的方法 812 HashTable中的put,get,remove 813 814 Vector的相關方法。 815 816 817 818 jdbc數據訪問技術 819 1、JDBC如何作事務處理? 820 Con.setAutoCommit(false) 821 822 Con.commit(); 823 824 Con.rollback(); 825 826 2、寫出幾個在Jdbc中經常使用的接口 827 preparedStatement,callableStatement,statement,Connection,ResultSet 828 829 3、簡述你對Statement,PreparedStatement,CallableStatement的理解 830 statement用於執行靜態 SQL 語句並返回它所生成結果的對象,在執行時肯定sql。 831 832 833 834 835 836 837 838 PreparedStatement表示預編譯的 SQL 語句的對象。 SQL 語句被預編譯而且存儲在 PreparedStatement 對象中。而後能夠使用此對象高效地屢次執行該語句,能夠傳參數,在獲得PreparedStatement對象時肯定sql. 839 840 CallableStatement用於執行 SQL 存儲過程的接口。若是有輸出參數要註冊說明是輸出參數。 841 842 843 844 4、Java中訪問數據庫的步驟? 845 1鏈接Oracle數據庫 846 847 Class.forName(「oracle.jdbc.driver.OracleDriver」); 848 849 Connection con=DriverManager.openConnection(「jdbc:oracle:thin:@localhost:1521:DataBase 」,」 UserName」,」Password 」) 850 851 1. 利用JDBC檢索出表中的數據 852 853 Class.forName(「」); 854 855 Connection con=DriverManager.openConnection(「 」,」 」,」 」) 856 857 preparedStatment ps=Con.preparedStatment(「select * from [table]」); 858 859 ResultSet rs=ps.executeQuery(); 860 861 While(rs.next) 862 863 { 864 865 Rs.getString(1) 或rs.getString(「字段名」) 866 867 } 868 869 五、JDBC中的核心類及其做用是什麼? 870 DriverManager 871 872 Class.forName(); 873 874 DriverManager.openConnection(「」,」sa」,」」) 875 876 Connection 877 878 PreparedStatement(Statement) 879 880 ResultSet rs=executeQuery() dql 881 882 While(rs.next()) 883 884 { 885 886 887 888 } 889 890 executeUpdate() dml ddl 891 892 六、執行存儲過程用那一個類,如何操做輸出參數?(操做) 893 CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}"); 894 895 c.setString(1,"1"); 896 897 c.registerOutParameter(2,java.sql.Types.VARCHAR); 898 899 c.execute(); 900 901 c.getString(2); 902 903 8、可能會讓你寫一段Jdbc連Oracle的程序. 904 Class.forName("oracle.jdbc.driver.OracleDriver"); 905 906 Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system","system"); 907 908 九、Class.forName的做用?爲何要用? 909 註冊一個數據庫驅動,將驅動加載到當前的JVM中。 910 911 十、Jdo是什麼? 912 JDO是Java對象持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,所以對開發人員來講,存儲數據對象徹底不須要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工做已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,由於它能夠在任何數據底層上運行。JDBC只是面向關係數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,好比關係數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。(o/rMapping工具 集合處理) 913 914 11、在ORACLE大數據量下的分頁解決方法。通常用截取ID方法,還有是三層嵌套方法 915 create or replace package myPack 916 917 is 918 919 type c_type is ref cursor; 920 921 procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type); 922 923 end; 924 925 926 927 create or replace package body myPack 928 929 is 930 931 procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type) 932 933 is 934 935 pageTotal int:=0; 936 937 pageFirstRow int:=0; 938 939 pageLastRow int:=0; 940 941 rowTotal int:=0; 942 943 begin 944 945 execute immediate 'select count(*) from ('||v_sql||')' into rowTotal; 946 947 pageTotal:=ceil(rowTotal/pageSize); 948 949 if(pageIndex<1) then 950 951 raise_application_error(-20001,'頁數不能小於1'); 952 953 end if; 954 955 if(pageIndex>pageTotal) then 956 957 raise_application_error(-20001,'頁數太大,不能讀取'); 958 959 end if; 960 961 pageFirstRow:=(pageIndex-1)*pageIndex+1; 962 963 pageLastRow:=pageFirstRow+pageSize; 964 965 open c for ' select * from '||v_sql||' where rownum<'|| 966 967 pageLastRow||'minus select * from '||v_sql 968 969 ||' where rownum<'||pageFirstRow; 970 971 end; 972 973 end;
1 1、簡單說說tomcat的配置? 2 JAVA_HOME=JDK的根目錄 3 4 CATALINA_HOME=tomcat的根目錄 5 6 7 8 CATALINA-HOME\conf\server.xml:能夠配置tomcat的端口,能夠配置tomcat中下鏈接池。 9 10 CATALINA-HOME\common\lib:存放公用的類包 11 12 13 14 在My eclipse中如何配置tomcat 15 16 在eclipse中,選擇windows->preference->MyEclipse->ApplicationServer->Tomcat 17 18 選擇Tomcat 的安裝目錄,並選擇TomCat所需的jdk,選擇enable,肯定便可。 19 20 2、JSP中動態INCLUDE與靜態INCLUDE的區別? 21 jsp:include:在運行時調用另外一個頁面,變量是能夠重複的。 22 23 <%@include file=」」%>:在轉譯時合在一塊兒,會成爲同一個類,變量不能夠重複。 24 25 3、forward和redirect的區別? 26 forward: 轉發,在下一個頁面中,request保留上一個頁面中的request的全部值 27 28 29 30 redirect: 跳轉,不傳遞request對象。 31 32 四、Servlet的體系結構是什麼? 33 Servlet 34 35 GenericServlet 36 37 HttpServlet 38 39 自定義 40 41 五、如何實現一個自定義的servlet? 42 extends HttpServlet 並覆蓋doPost或doGet方法 43 44 45 46 在web.xml中進行部署 47 48 六、Servlet的生命週期是什麼? 49 Init 50 51 屢次執行doGet或doPost 52 53 destroy 54 55 七、jsp就是一個servlet是否正確? 56 對 57 58 八、請羅列jsp中的腳本、指令及動做? 59 腳本 60 61 <%%> <%=%> <%!%> <%----%> 62 63 指令 64 65 <%@page contentType=」text/html;charset=utf-8」 language=」java」 import=」」%> 66 67 <%@include file=」」%> 68 69 <%@taglib uri=」」 prefix=」」%> 70 71 動做: 72 73 <jsp:useBean class=」」 id=」」 scope=」」> 在scope中若是沒有實例化一個對象,若是有直接用之前的。 74 75 <jsp:getProperty name=」」 property=」」> 向一個bean中設置屬性值 76 77 <jsp:forward > jsp頁的轉發 78 79 <jsp:include page=」」> 導入一個jsp頁面 80 81 9、JSP的內置對象及方法 82 Request request表示HttpServletRequest對象。取客戶端表單域信息及cookie, header, 和session 83 84 response response表示HttpServletResponse對象,對客戶端的響應返回文本、寫cookies。 85 86 out out 向客戶端打印html文本. 87 88 pageContext :當前jsp頁面的上下文環境,能夠獲得session、request、application等內置對象,在自定義標籤中使用的不少。 89 90 session session表示一個請求的javax.servlet.http.HttpSession對象。Session一個用戶多個頁面共享同一變量。 91 92 application applicaton 表示一個javax.servle.ServletContext對象。存放容器級的變量。 93 94 config config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。 95 96 page page表示從該頁面產生的一個servlet實例 97 98 exception:異常,當iserrorpage=true 99 100 十、說出在JSP頁面裏是怎麼分頁的? 101 頁面須要保存如下參數:(數據庫的分頁及比較) 102 103 總行數:根據sql語句獲得總行數 104 105 每頁顯示行數:設定值 106 107 當前頁數:請求參數 108 109 頁面根據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對結果集取出每頁顯示行數的行便可。 110 111 112 113 數據庫: 114 115 Sqlserver: 116 117 SELECT TOP 頁大小 * 118 119 FROM TestTable 120 121 122 123 WHERE (ID NOT IN 124 125 (SELECT TOP 頁大小*(頁數-1) id 126 127 FROM 表 128 129 ORDER BY id)) 130 131 ORDER BY ID 132 133 134 135 136 137 --pageSize=5 頁大小 138 139 --pageIndex=2 所要的頁 140 141 --若是有主鍵能夠,沒以及鍵不行 142 143 select top 5 * 144 145 from aa where a1 not in 146 147 (select top 5 a1 from aa order by a1) 148 149 order by a1; 150 151 152 153 oracle: 154 155 select * from '||v_sql||' where rownum<'|| 156 157 pageLastRow||'minus select * from '||v_sql 158 159 ||' where rownum<'||pageFirstRow; 160 161 162 163 164 165 Session 166 167 先取出數據中的全部信息封裝到對象並保存在session中,轉發到jsp頁面作以下處理。 168 169 <table border="1"> 170 171 <tr> 172 173 <td>a1</td> 174 175 <td>a2</td> 176 177 </tr> 178 179 <% 180 181 List l=(List)session.getAttribute("as"); 182 183 //一頁顯示多少行 184 185 int pageSize=3; 186 187 //總頁數 188 189 int pageCount=0; 190 191 int currentPage=1; 192 193 if(l!=null && l.size()>0) 194 195 { 196 197 pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1); 198 199 if(request.getParameter("page")!=null) 200 201 { 202 203 currentPage=Integer.parseInt(request.getParameter("page")); 204 205 } 206 207 if(currentPage<1) 208 209 { 210 211 currentPage=1; 212 213 } 214 215 if(currentPage>pageCount) 216 217 { 218 219 currentPage=pageCount; 220 221 } 222 223 for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++) 224 225 { 226 227 if(i>=l.size()) 228 229 { 230 231 break; 232 233 } 234 235 Aa aa=(Aa)l.get(i); 236 237 %> 238 239 <tr> 240 241 <td><%=aa.getA1()%></td> 242 243 <td><%=aa.getA2()%></td> 244 245 </tr> 246 247 <% 248 249 } 250 251 } 252 253 %> 254 255 <tr> 256 257 <td colspan="2"> 258 259 <% 260 261 if(currentPage!=1) 262 263 { 264 265 %> 266 267 <a href="page.jsp?page=1">首頁</a> 268 269 <a href="page.jsp?page=<%=currentPage-1%>">上一頁</a> 270 271 <% 272 273 } 274 275 if(currentPage!=pageCount) 276 277 { 278 279 %> 280 281 <a href="page.jsp?page=<%=currentPage+1%>">下一頁</a> 282 283 <a href="page.jsp?page=<%=pageCount%>">最後一頁</a> 284 285 <% 286 287 } 288 289 %> 290 291 </td> 292 293 </tr> 294 295 </table> 296 297 298 299 十一、include的兩種實現方式的區別? 300 <@include file>:在將jsp生成servlet類前將兩個文件和在一塊兒,生成一個java類,一塊兒運行的。因此是一家子,當中的變量名不能重名。 301 302 <jsp:include page>:是兩個類,是一個調用關係,在運行時動態的調用,不是一家子,能夠重複變量。 303 304 十二、jsp頁面中兩種跳轉方式分別是什麼?有什麼區別? 305 轉發: 保留上次的request 306 307 <jsp:forward> 308 309 actionMapping.findForWard(「」); 310 311 pageContext.forward(); 312 313 request.getRequestDispacher(「a.jsp」).forward(request,response) 314 315 跳轉:不保留上次的request 316 317 Response.setRedirect(「」) 318 319 13、描述JSP和Servlet的區別、共同點、各自應用的範圍 320 Jsp主要在於頁面的顯示動態生成頁面,能夠與html標記一塊兒使用,其仍是要生成爲一個servlet。 321 322 Servlet:主要是控制的處理,如調用業務層,跳轉不一樣的jsp頁面。 323 324 Mvc: 325 326 Jsp:v 327 328 Servlet:c 329 330 14、在JSP中如何讀取客戶端的請求,如何肯定某個Jsp文件的真實路徑? 331 Request.getparameter(「」) 332 333 <%=application.getRealPath("aa.jsp") %> 334 335 15、描述Cookie和Session的做用,區別和各自的應用範圍,Session工做原理。 336 Cookie:主要用在保存客戶端,其值在客戶端與服務端之間傳送,不安全,存儲的數據量有限。 337 338 Session:保存在服務端,每個session在服務端有一個sessionID做一個標識。存儲的數據量大,安全性高。佔用服務端的內存資源。 339 340 16、說明Jsp中errorPage的做用,應用範圍。 341 正常頁面中 342 343 %@page erropage=」error.jsp」% 344 345 錯誤頁面 346 347 <%@page iserrorpage=」true」%> 348 349 有一內置對象:exception 350 351 17、介紹在Jsp中如何使用JavaBeans 352 <jsp:useBean class=」」 id=」」 scope=」」/> 353 354 <% 355 356 New 類(); 357 358 %> 359 360 19、簡單介紹JSP的標記庫 361 作一個標記處理類 extends TagSupport 362 363 經過tld說明標記處理的類的前綴及後綴 364 365 在web.xml中說明tld文件 366 367 <taglib> 368 369 <taglib-uri> 370 371 <taglib-location> 372 373 <taglib> 374 375 在jsp頁面是引用tld<%@taglib uri=」」 prefix=」」%> 376 377 20、Servlet中的核心類有那些,各有什麼特色? 378 ServletContext:容器,放置全局變量 379 380 setAtribute() 381 382 getAttribute() 383 384 ServletConfig:一個servlet的配置 385 386 getInitParameter(」名稱」) 387 388 HttpServletRequest:封裝的全部的請求 389 390 getParameterValue(」名稱」) 391 392 getParameterValues(」稱」) 393 394 getSession(); 395 396 getAttribute(」 名稱」); 397 398 getRequestDispatch(」a.jsp」).forward(request,response) 399 400 HttpServletResponse:響應 401 402 getOut(); 403 404 sendRedirect(」」) 405 406 HttpSession:一個用戶多個頁面共享同一變量 407 408 setAttribute(」」,」」) 409 410 2一、Servlet中重要的包有那些,有什麼區別? 411 javax.servlet.*;javax.servlet.http.*; 412 413 22、說出Servlet的生命週期,並說出Servlet和CGI的區別? 414 Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。 415 416 417 418 與cgi的區別在於servlet處理服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。 419 420 23、什麼狀況下調用doGet()和doPost()? 421 Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。 422 423 25、如何現實servlet的單線程模式 424 在doGet及doPost方法前加入synchoronized 425 426 JSP: 427 428 <%@ page isThreadSafe="true"%> 429 430 27、Request對象的主要方法: 431 setAttribute(String name,Object):設置名字爲name的request的參數值 432 433 getAttribute(String name):返回由name指定的屬性值 434 435 getAttributeNames():返回request對象全部屬性的名字集合,結果是一個枚舉的實例 436 437 getCookies():返回客戶端的全部Cookie對象,結果是一個Cookie數組 438 439 getCharacterEncoding():返回請求中的字符編碼方式 440 441 getContentLength():返回請求的Body的長度 442 443 實例 444 445 getInputStream():返回請求的輸入流,用於得到請求中的數據 446 447 getMethod():得到客戶端向服務器端傳送數據的方法 448 449 getParameter(String name):得到客戶端傳送給服務器端的有name指定的參數值 450 451 getParameterNames():得到客戶端傳送給服務器端的全部參數的名字,結果是一個枚舉的實例 452 453 getParameterValues(String name):得到有name指定的參數的全部值 454 455 getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱 456 457 getQueryString():得到查詢字符串 458 459 getRequestURI():獲取發出請求字符串的客戶端地址 460 461 getRemoteAddr():獲取客戶端的IP地址 462 463 getRemoteHost():獲取客戶端的名字 464 465 getSession([Boolean create]):返回和請求相關Session 466 467 getServerName():獲取服務器的名字 468 469 getServletPath():獲取客戶端所請求的腳本文件的路徑 470 471 getServerPort():獲取服務器的端口號 472 473 removeAttribute(String name):刪除請求中的一個屬性 474 475 2八、咱們在web應用開發過程當中常常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串? 476 Public String translate (String str) { 477 478 String tempStr = ""; 479 480 try { 481 482 tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); 483 484 tempStr = tempStr.trim(); 485 486 } 487 488 catch (Exception e) { 489 490 System.err.println(e.getMessage()); 491 492 } 493 494 return tempStr; 495 496 } 497 498 499 500 30、Servlet執行時通常實現哪幾個方法? 501 public void init(ServletConfig config) 502 503 public ServletConfig getServletConfig() 504 505 public String getServletInfo() 506 507 public void service(ServletRequest request,ServletResponse response) 508 509 public void destroy()
1 5 Hibernate持久層技術 2 一、在myeclipse加入hibernate環境的全過程是什麼? 3 Db-browers加入配置鏈接 4 5 新建工程 6 7 加入hibernate環境,指定*.hbm.xml及HibernateSessionFactory文件所在的位置 8 9 二、hibernate的核心配置文件是什麼及其做用? 10 Hibernate.cfg.xml:數據庫鏈接、指定相關的映射文件 11 12 *.hbm.xml:具體的o/r mapping說明 13 14 三、hibernate的核心類是什麼,它們的相互關係是什麼?重要的方法是什麼? 15 Configuration 16 17 SessionFactory 18 19 Session以下方法 20 21 Save 22 23 load 24 25 Update 26 27 Delete 28 29 Query q=CreateQuery(「from Customer where customerName=:customerName」) 30 31 beginTransaction 32 33 close 34 35 Transaction 36 37 Commit() 38 39 4、關聯: 40 one-to-many 41 42 inverse:主控方,外鍵的關係有誰控制 43 44 inverse=false 是主控方,外鍵是由它控制的 45 46 inverse=true 是被控方,外鍵與它不要緊 47 48 要想實現主控方的控制必須將被控方做爲主控方的屬性 49 50 cascade:級聯 51 52 主表增從表增 53 54 主表修從表修 55 56 主表刪從表刪 57 58 lazy:延遲 59 60 lazy=false:一下將全部的內容取出,不延時(經常使用) 61 62 lazy=true:取出部份內容,其他內容動態去取 63 64 經過get能夠取出對方的全部內容 65 66 五、hibernate中的one-to-many或many-to-one中經常使用的方式是什麼? 67 主控方在many這邊,不及連刪除 68 69 六、Criteria 的做用? 70 Criteria c=session.createCriteria(Customer.class); 71 72 //設置條件 73 74 c.add(Expression.ge(「字段名」,」值對象」)) 75 76 ge:>= 77 78 gt:> 79 80 le:<= 81 82 lt:< 83 84 eq:= 85 86 //排序 87 88 c.addOrder(Order.asc(「字段名」)) 89 90 //分頁 91 92 c.setFirstResult(1)//從第2行開始提取 93 94 c.setMaxResults(5)//返回5行 95 96 7、DetachedCriteria的做用? 97 產生時不須要session 98 99 DetachedCriteria dc= DetachedCriteria.forClass(Customer.class) 100 101 Criteria c=Dc.getExecutableCriteria(session) 102 103 8、Query 104 1 個或多個屬性查詢: 105 106 Query query=session.createQuery(」select customername,customerid from Customer」) 107 108 List l=query.list(); 109 110 For(int i=0;i<l.size();i++) 111 112 { 113 114 Obejct[] object=(Object[])l.get(i); 115 116 Object[0] object[1] 117 118 } 119 120 } 121 122 分組: "select count(*),productname from Product group by productname order by productname" 123 124 取值與屬性同樣 125 126 配置的查詢,在*.hbm.xml中 127 128 <query name="sql"> 129 130 <![CDATA[ 131 132 from Product where productid=:productid 133 134 ]]> 135 136 </query> 137 138 Query query=session.getNamedQuery(sql); 139 140 聯接1 141 142 "from Customer as customer join fetch customer.buySet":將多的放到buySet屬性中,得出的結是Customer有一個,Buy有多個 143 144 聯接2 145 146 "from Customer as customer join customer.buySet":得出的對象,customer與buy是1對1 147 148 子查詢: 149 150 "from Customer as customer where (select count(*) from customer.buySet)>1" 151 152 9、繼承關係的實現 153 1、兩個表,子類重複父類的屬性。 154 155 2、一個表,子類父類共用一個表 156 157 <class name="Users" table="users" discriminator-value="Users"> 158 159 <discriminator column="DISCRIMINATOR_USERTYPE" type="string"/> 160 161 <subclass name="admin" discriminator-value="admin"> 162 163 <property name="adminRemark" column="admin_remark" type="string" /> 164 165 </subclass> 166 167 </class> 168 169 3、兩個表,子類引用父類的主鍵,享用公共的字段或屬性。 170 171 <class name="Users" table="users"> 172 173 <id name="userid" column="USERID" type="string"> 174 175 <generator class="assigned"/> 176 177 </id> 178 179 <property name="pwd" column="pwd" type="string" /> 180 181 <joined-subclass name="Guest" table="guest"> 182 183 <key column="USERID"/> 184 185 <property name="guestRemark" column="guest_remark" type="string" /> 186 187 </joined-subclass> 188 189 </class> 190 191 批量刪除 192 193 Query query=session.createQuery("update"或"delete"); 194 195 query.executeUpdate(); 196 197 198 199 10、tomcat鏈接池:在容器中預先產生了n個鏈接實例,客戶端不用從新實例化,能夠直接取。 200 6.一、在tomcat-5.0\conf\server.xml中</host>前面加入以下內容 201 202 <Context path="/app1" docBase="app1" debug="0" reloadable="true" crossContext="true"> 203 204 <Resource name="jdbc/sa" auth="Container" type="javax.sql.DataSource"/> 205 206 <ResourceParams name="jdbc/sa"> 207 208 <parameter> 209 210 <name>factory</name> 211 212 <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 213 214 </parameter> 215 216 <parameter> 217 218 <name>driverClassName</name> 219 220 <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 221 222 </parameter> 223 224 <parameter> 225 226 <name>url</name> 227 228 <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev;SelectMethod=cursor</value> 229 230 </parameter> 231 232 <parameter> 233 234 <name>username</name> 235 236 <value>sa</value> 237 238 </parameter> 239 240 <parameter> 241 242 <name>password</name> 243 244 <value></value> 245 246 </parameter> 247 248 <parameter> 249 250 <name>maxActive</name> 251 252 <value>20</value> 253 254 </parameter> 255 256 <parameter> 257 258 <name>maxIdle</name> 259 260 <value>10</value> 261 262 </parameter> 263 264 <parameter> 265 266 <name>maxWait</name> 267 268 <value>-1</value> 269 270 </parameter> 271 272 </ResourceParams> 273 274 </Context> 275 276 6.二、將sql-server包拷貝到C:\tomcat-5\common\lib 277 278 6.3、jdbc測試代碼 279 280 Context initCtx = new InitialContext(); 281 282 Context envCtx = (Context)initCtx.lookup("java:comp/env"); 283 284 ds = (DataSource)envCtx.lookup("jdbc/sa"); 285 286 Connection conn = ds.getConnection(); 287 288 6.4、hibernate經過鏈接池實現鏈接 289 290 <session-factory name="foo"> 291 292 <property name="connection.datasource">java:comp/env/jdbc/sa</property> <!--指定tomcat鏈接池--> 293 294 <property name="show_sql">true</property> <!--是否顯示sql--> 295 296 <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--hibernate的驅動管理器--> 297 298 <mapping resource="com/accp/t15/Customer.hbm.xml"/> 299 300 </session-factory> 301 302 303 304 11、對象的三大狀態 305 自由(transient) 306 307 與session無關 308 309 持久(persistent) 310 311 由session來管理 312 313 在持久狀態中經過get方法取出對方 314 315 遊離(detached) 316 317 被session拋棄 318 319 12、hibernate常見優化策略 320 用最新版本的hibernate 321 322 制定合理的緩存策略 323 324 採用合理的session管理機制 325 326 儘可能使用延遲加載 327 328 many 329 330 大文本、大文件 331 332 設定合理的批處理參數(batch-size) 333 334 若有可能,選用uuid做爲主鍵生成器 335 336 若有可能,選用基於version的樂觀鎖替代悲觀鎖 337 338 開發過程當中,打開hibernate的SQl日誌輸出(hibernate.show_sql=true),經過觀察hibernate生成的sql語句進一步瞭解其實現原理,從而指事實上更好的實現策略。 339 340 6. iBatis持久層技術 341 342 343 用ibatis的緣由: 344 只對開發團隊提供幾條Select SQL(或存儲過程)以獲取所需數據,具體的表結構不予公開。 345 346 開發規範中要求,全部牽涉到業務邏輯部分的數據庫操做,必須在數據庫層由存儲過程實現 347 348 系統數據處理量巨大,性能要求極爲苛刻,這每每意味着咱們必須經過通過高度優化的SQL語句 349 350 (或存儲過程)才能達到系統性能設計指標。 351 352 jdbc、hibernate、ibatis的區別 353 jdbc:手動 354 355 手動寫sql 356 357 delete、insert、update要將對象的值一個一個取出傳到sql中,不能直接傳入一個對象。 358 359 select:返回的是一個resultset,要從ResultSet中一行一行、一個字段一個字段的取出,而後封裝到一個對象中,不直接返回一個對象。 360 361 ibatis的特色:半自動化 362 363 sql要手動寫 364 365 delete、insert、update:直接傳入一個對象 366 367 select:直接返回一個對象 368 369 hibernate:全自動 370 371 不寫sql,自動封裝 372 373 delete、insert、update:直接傳入一個對象 374 375 select:直接返回一個對象 376 377 ibatis的核心配置文件: 378 sqlmapclient.xml:數據庫鏈接及相關o/rMapping的映射文件(hibernate.cfg.xml) 379 380 sqlmapBuy.xml:具體的o/rmapping映射(*.hbm.xml) 381 382 四大標記: 383 384 select 385 386 update 387 388 delete 389 390 insert 391 392 procedure 393 394 ibatis的核心類: 395 SqlMapClientBuilder:加載配置文件,返回一個會話。 396 397 SqlMapClient:具體的會話 398 399 List list=queryForList("標籤名",object); 400 401 Object obj=queryForObject("標籤名",object); 402 403 delete("標籤名",object) 404 405 update("標籤名",object) 406 407 insert("標籤名",object) 408 409 工程的使用: 410 411 將ibatisfactory拷貝到工程目錄下 412 413 將ms的3個包及ibatis的三個包拷貝到/WEB-INF/lib下 414 415 修改ibatisfactory中的abatorConfig.xml文件 416 417 進入ibatisfactory目錄運行java -jar abator.jar abatorConfig.xml true 418 419 將sql標記、select、update、insert、delete的副本刪除 420 421 spring&ibatis: 422 423 dataSource 424 425 sqlMapClient:SqlMapClientFactoryBean 426 427 configLocation 428 429 classpath:sqlMapClient.xml 430 431 /WEB-INF/sqlMapClient.xml 432 433 dataSource 434 435 transactionManager:DataSourceTransactionManager 436 437 dataSource 438 439 customerDao extends SqlMapClientDaoSupport 440 441 sqlMapClient 442 443 buyDao 444 445 sqlMapClient 446 447 Facade 448 449 buyDao 450 451 customerDao 452 453 abstractProxy:TransactionProxyFactoryBean 454 455 transactionManager 456 457 transactionAttributes 458 459 facadeProxy 460 461 target:fa?ade 462 463 7 Structs界面控制層技術 464 1、請說出struts框架的幾大組件? 465 1、MVC 466 467 2、標籤庫 468 469 3、校驗框架 470 471 4、國際化 472 473 5、tiles 474 475 3、struts的核心類有那些,在MVC模式中其對應的關係是什麼? 476 C 477 478 ActionServlet 479 480 RequestProcessor 481 482 Action 483 484 actionMapping(struts-config.xml) 485 486 actionFormard 487 488 V 489 490 ActionForm 491 492 Jsp 493 494 M 495 496 Dao 497 498 Manager(facade) 499 500 四、Struts的處理請求的全過程是什麼? 501 url-> ActionServlet(process)-> RequestProcessor(process)->實例化form ->填充form值->進行校驗->實例化action->調用execute 502 503 五、在struts中如何經過一個url找到一個action,它的核心配置文件是什麼? 504 配置文件是struts-config.xml 505 506 六、爲何使用MVC,其主要目的是什麼? 507 讓v與M強制解耦,提升可重用性(旅館的服務員(C)) 508 509 七、對於MVC在action中對應有類有幾種,各有什麼做用? 510 ? Action: 511 512 1) 基本的 513 514 ? DispatchAction: 515 516 2) 存在多個方法,根據頁面傳入的表單域的值調用不一樣的方法,表單域的名稱在<action param=」」/>標記中進行配置 517 518 ? LookupDispatchAction 519 520 3) 多個按鈕用同一個action的不一樣方法。實現getMap方法,說明每個按鈕在*.properties中的鍵名及鍵值,在struts-config.xml經過parameter說明按鈕的名稱,按鈕的值對應*.properties的值,經過值找鍵名,經過鍵名找Map中的鍵名找到值就是相應的方法。 521 522 ? MappingDispatchAction:未知 523 524 ? forwordAction:直接跳轉到不一樣頁面不執行邏輯(???) 525 526 ? 類所在的包:org.apache.struts.actions.ForwardAction 527 528 八、struts的標記有幾類,請列舉並說明其做用? 529 Bean: 530 531 <bean:define scope=」」 name=」」 property=」」 id=」」/> 532 533 <bean:write name=」customer」 property=」customerName」/> 534 535 <bean:message key=」」/>國際化 536 537 Logic: 538 539 <logic:iteator> //將集合的內容取出 540 541 <logic:present> // 542 543 <logic:equals> // 544 545 Html: 546 547 <html:file>上傳文件 548 549 <html:select property=」sex」> 550 551 <html:options collection=」」 property=」」 labelProperty=」」/> 552 553 </html:select> 554 555 九、如何在struts中配置數據源在,什麼文件?用什麼標籤?如何取出DataSource? 556 Struts-config.xml 557 558 559 560 <data-sources> 561 562 <data-source key="data" type="org.apache.commons.dbcp.BasicDataSource"> 563 564 <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" /> 565 566 <set-property property="url" value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=t23" /> 567 568 <set-property property="username" value="sa" /> 569 570 <set-property property="password" value="" /> 571 572 </data-source> 573 574 </data-sources> 575 576 577 578 DataSource ds=(DataSource)this.getServlet().getServletContext().getAttribute("data"); 579 580 Connection con=ds.getConnection(); 581 582 十、如何在jbuilder中開發struts? 583 ? 工程 584 585 ? Web模型(選中struts1.2.8,會自加在web –inf中生成tld及struts-config.xml,並加載相關的類包) 586 587 ? 建一個ActionForm 588 589 ? 建一個Action 590 591 ? 修改struts-config.xml文件 592 593 11、如何實現struts的validator框架? 594 ? 手動: 595 596 ? public class myForm extends ActionForm 597 598 ? { 599 600 ? public ActionErrors validate() 601 602 ? { 603 604 actionErrors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("properties中的鍵名")); 605 606 ? } 607 608 ? } 609 610 ? struts-config.xml中修改action的標籤validate=true 611 612 ? input="錯誤頁面" 613 614 ? 若是validate方法中的ActionErrors不爲空且size>0時 615 616 ? 會回到input頁面。 617 618 ? 自動 619 620 ? public class myForm extends ValidateForm 621 622 ? { 623 624 ? 不能覆蓋validate方法。 625 626 ? //public void validate() 627 628 ? //{ 629 630 ? 631 632 ? //} 633 634 ? } 635 636 ? 在struts-config.xml文件中加入插件 637 638 ? <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 639 640 ? <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> 641 642 ? </plug-in> 643 644 ? 修改validation.xml中的內容 645 646 ? errors.required={0} is required. 647 648 ? errors.minlength={0} can not be less than {1} characters. 649 650 651 652 ? <formset> 653 654 ? <form name="loginForm"> 655 656 ? <field property="userName" depends="required"> 657 658 ? <arg0 key="userName" /> 659 660 ? </field> 661 662 ? <field property="pwd" depends="required,minlength"> 663 664 ? <arg0 key="pwd" /> 665 666 ? <arg1 key="${var:minlength}" resource="false"/> 667 668 ? <var> 669 670 ? <var-name>minlength</var-name> 671 672 ? <var-value>6</var-value> 673 674 ? </var> 675 676 ? </field> 677 678 ? </form> 679 680 ? </formset> 681 682 ? struts-config.xml中修改action的標籤validate=true 683 684 ? input="/錯誤頁面" 685 686 1三、如何實現國際化? 687 國際化:不用修改代碼,就適用於不一樣的語言國家 688 689 本地化:若是要適應一個國家,要修改源代碼 690 691 實現過程: 692 693 在struts-config.xml中用以下標籤說明資源文件名,注意其只是文件名,沒有語言_國家 694 695 <message-resources parameter="struts.ApplicationResources" /> 696 697 在資源文件對應的目錄struts中加入適應不一樣語言、國家的properties文件 698 699 ApplicationResources_zh_CN.properties 中國 700 701 ApplicationResources_en_US.properties us 702 703 若是不是英語要轉碼 704 705 native2ascii -encoding gb2312 源 ApplicationResources_zh_CN.properties 706 707 在jsp頁面中用 708 709 <bean:message key=""/>取出信息 710 711 8 JSF界面控制層技術 712 一、Jsf中的核心類用那些?有什麼做用? 713 核心類 714 715 FacesServlet 716 717 LiftCycle FacesContext 718 719 720 721 二、Jsf中的LiftCycle六大生命週期是什麼? 722 恢復視圖->應用請求值->校驗->更新模型->調用應用程序->呈現響應 723 724 三、如何管量web層中的Bean,用什麼標籤。如何經過jsp頁面與Bean綁定在一塊兒進行處理? 725 <managed-bean> 726 727 <managed-bean-name>checkNumber</managed-bean-name> 728 729 <managed-bean-class>jsf1.CheckNumber</managed-bean-class> 730 731 <managed-bean-scope>session</managed-bean-scope> 732 733 </managed-bean> 734 735 四、Jsf中導航的標籤是什麼? 736 <navigation-rule> 737 738 <from-view-id>/main.jsp</from-view-id> 739 740 <navigation-case> 741 742 <from-outcome>success</from-outcome> 743 744 <to-view-id>/result.jsp</to-view-id> 745 746 </navigation-case> 747 748 </navigation-rule> 749 750 五、jsf中用戶界面組件模型有幾類,各表明什麼? 751 UI組件、事件監聽、顯示、類型轉換、驗證 752 753 6、表格處理及取值 754 import javax.faces.model.DataModel; 755 756 import javax.faces.model.ListDataModel; 757 758 DataModel:表明一個表格,其能夠從客戶端傳上來。 759 760 實例化: 761 762 DataModel dm=new ListDataModel(); 763 764 將一個list值放入到DataModel中. 765 766 dm.setWrappedData(list) 767 768 將客戶端當前行取出 769 770 (LogsVO) dm.getRowData() 771 772 對於多條的查詢及增刪改在模型中加入了以下屬性: 773 774 模型的名稱是bean,其下的屬性是 775 776 DataModel dm:表明返有的行數據 777 778 VO vo:表明一行數據。 779 780 取一行: 781 782 vo=(VO) dm.getRowData(); 783 784 通#{bean.vo.屬性名},若是修改對應信息自動修改。 785 786 增長一行: 787 788 this.vo=new VO(); 789 790 通#{bean.vo.屬性名},顯示確定無值,但客戶輸入值提交後會將值勤寫入 791 792 7、jsf的標籤庫有哪些? 793 核心:f 794 795 校驗 796 797 <f:validateDoubleRange> 798 799 <f:validateLength> 800 801 轉化 802 803 <f:convertDateTime pattern="yyyy-MM-dd"/> 804 805 <f:convertNumber type="currency"/> 806 807 選擇框: 808 809 <f:selectItem/> 810 811 <f:selectItems/> 812 813 814 815 html:h 816 817 選擇控件: 818 819 <h:selectOneRadio>:一個string 820 821 <h:selectManyCheckBox>:一個String數組 822 823 <h:selectOneMenu>:組合框架選擇一個 824 825 <h:selectManyMenu>:組合框架選擇多個 826 827 <h:selectOneList>:下拉列表選擇一個 828 829 <h:selectManyList>:下拉列表選擇多個 830 831 表格: 832 833 <h:dataTable value="集合" var="集合中的一個"> 834 835 <h:column> 836 837 <!--頭--> 838 839 <f:facet name=」header」> 840 841 <h:outputText > 842 843 </f:facet> 844 845 <!--具體的行值--> 846 847 <h:outputText value=""/> 848 849 <h:column> 850 851 </h:dataTable> 852 853 9 Spring 應用框架技術 854 1、Spring和Struts的區別? 855 strusts:是一種基於MVC模式的一個web層的處理。 856 Spring:提供了通用的服務,ioc/di aop,關心的不只僅web層,應當j2ee總體的一個服務,能夠很容易融合不一樣的技術struts hibernate ibatis ejb remote springJDBC springMVC 857 858 二、什麼是aop,aop的做用是什麼? 859 Oop:縱向的業務 860 861 Aop:oop的一個橫向的服務,是對oop進一步的補充,提供安全、事務、日誌等的集中式處理,相關的裝備before、around、after exception 862 863 三、aop中的關鍵名詞有些那些,相互關係是什麼? 864 攔截器: 代理 865 866 裝備(advice) 867 868 目標對象 869 870 關切點:條件 871 872 鏈接點:方法、屬性 873 874 四、依賴注入的方式有幾種,各是什麼? 875 Setter 876 877 Interface 878 879 constructor 880 881 五、spring中的核心類有那些,各有什麼做用? 882 BeanFactory:產生一個新的實例,能夠實現單例模式 883 884 BeanWrapper:提供統一的get及set方法 885 886 ApplicationContext:提供框架的實現,包括BeanFactory的全部功能 887 888 6、ApplicationContext的做用 889 beanFactory 890 891 國際化(getMesage) 892 893 資源管理:能夠直接讀取一個文件的內容(getResource) 894 895 加入web框架中(加入一個servlet或監聽器) 896 897 事件處理 898 899 7、如何實現資源管理 900 使用 901 902 applicationContext.getResource(「classpath:文件名」):在src根目錄下,在類路徑下 903 904 applicationContext.getResource(「classpath:/chap01/文件名」): 以src根目錄下的基準往下走。 905 906 applicationContext.getResource(「file:c:/a.properties」):在系統文件目錄下。 907 908 8、如何實現加入web框架中 909 在web.xml中加入以下同容,在啓動web服務器時加載/WEB-INF/applicationContext.xml中的內容。 910 911 <servlet> 912 913 <servlet-name>context</servlet-name> 914 915 <servlet-class> 916 917 org.springframework.web.context.ContextLoaderServlet 918 919 </servlet-class> 920 921 <load-on-startup>1</load-on-startup> 922 923 </servlet> 924 925 經過以下類獲得ApplicationContext實例 926 927 WebApplicationContextUtils.getWebApplicationContext 928 929 9、如何實現事件處理 930 事件 931 932 Extends ApplicationEvent 933 934 監聽器 935 936 Implements ApplicationListener 937 938 事件源 939 940 Implements ApplicationContextAware 941 942 在applicationContext.xml中配置事件源、監聽器 943 944 先獲得事件源,調用事件源的方法,通知監聽器。 945 946 十、spring的ioc及di表明什麼意思? 947 Ioc:程序在運行過程當中,根據配置文件動態加載所依賴的配置類 948 949 、如何在spring中實現國際化? 950 ? 在applicationContext.xml加載一個bean 951 952 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 953 954 <property name="basename"> 955 956 <value>message</value> 957 958 </property> 959 960 </bean> 961 962 ? 在src目錄下建多個properties文件 963 964 ? 對於非英文的要用native2ascii -encoding gb2312 源 目轉化文件相關內容 965 966 ? 其命名格式是message_語言_國家。 967 968 ? 頁面中的中顯示提示信息,鍵名取鍵值。 969 970 ? 當給定國家,系統會自動加載對應的國家的properties信息。 971 972 ? 經過applictionContext.getMessage(「鍵名」,」參數」,」區域」)取出相關的信息。 973 974 975 976 十二、spring的配置的主要標籤是什麼?有什麼做用? 977 <beans> 978 979 <bean id=」」 class=」」 init=」」 destroy=」」 singleton=」」> 980 981 <property name=」」> 982 983 <value></value> 984 985 </property> 986 987 <property name=」」> 988 989 <ref local></ref> 990 991 </property> 992 993 </bean> 994 995 </beans> 996 997 1三、spring與ejb2.0的事務管理比較的優缺點? 998 測試: 999 1000 Spring:pojo 1001 1002 Ejb:二個接口一個類,一堆配置文件 1003 1004 事務類型 1005 1006 Spring:jdbc jta hibernate 1007 1008 Ejb:jta 1009 1010 成本 1011 1012 Spring:普通容器(tomcat jboss) 1013 1014 Ejb:weblogic jboss 1015 1016 開發的週期: 1017 1018 Spring遠比ejb快. 1019 1020 1四、spring的jdbc與傳統的jdbc有什麼區別,其核心類有那些? 1021 Spring的jdbc:節省代碼,無論鏈接(Connection),無論事務、無論異常、無論關閉(con.close() ps.close ) 1022 1023 1024 1025 JdbcTemplate(dataSource):增、刪、改、查 1026 1027 TransactionTemplate(transactionManager):進行事務處理 1028 1029 1五、在spring中有幾種事務管理,分別是什麼? 1030 代碼管理的事務處理 1031 1032 TransactonTemplate的execute方法中的內部類TransactionCallback中的doInTransaction方法中使用。 1033 1034 public void make() 1035 1036 { 1037 1038 TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager()); 1039 1040 jtm.execute(new myClass1()); 1041 1042 } 1043 1044 public class myClass1 implements TransactionCallback 1045 1046 { 1047 1048 1049 1050 public Object doInTransaction(TransactionStatus trans) 1051 1052 { 1053 1054 JdbcTemplate jdbc=new JdbcTemplate(dataSource); 1055 1056 jdbc.execute("insert into customer(customerName) values('b')"); 1057 1058 jdbc.execute("insert into customer(customerName) values('b')"); 1059 1060 return null; 1061 1062 } 1063 1064 } 1065 1066 容器管理的事務處理 1067 1068 1六、在spring中如何配代碼的事務管理? 1069 Datasouce 1070 1071 transactionManager 1072 1073 userDao要注入 1074 1075 Datasouce 1076 1077 transactionManager 1078 1079 經過以下類實現 1080 1081 TransactionTemplate 1082 1083 JdbcTemplate 1084 1085 1七、在spring中如何配容器的事務管理,相關的類有那些? 1086 Datasouce 1087 1088 transactionManager 1089 1090 userDao要注入 1091 1092 Datasouce 1093 1094 Proxy代理 1095 1096 Target:userDao:代理對象(目標對象) 1097 1098 transactionAttributes(那些方法須要事務處理) 1099 1100 transactionManager(事務處理服務) 1101 1102 1八、若是spring與hibernate結合在一塊兒能夠不須要hibernate.cfg.xml文件是否正確? 1103 不須要 1104 1105 1九、spring+hibernate的配置文件中的主要類有那些?如何配置? 1106 在myeclipse中先加入spring環境再加入hibernate環境。 1107 1108 若是spring與hibernate結合在一塊兒能夠不須要hibernate.cfg.xml文件是否正確? 1109 1110 spring+hibernate的配置文件中的主要類有那些?如何配置? 1111 1112 dataSource 1113 1114 sessionFactory:hibernate.cfg.xml 1115 1116 transactionManager 1117 1118 userDao (extends HibernateDaoSupport) 1119 1120 sessionFactory 1121 1122 facade 1123 1124 proxy 1125 1126 sessionFactory 1127 1128 transactionManager 1129 1130 facade 1131 1132 1133 1134 20、spring+hibernate的代碼實現中,對於實現類必定繼承於一個類是那一個,它有什麼做用。 1135 extends HibernateDaoSupport,能夠節省代碼。 1136 1137 2一、如何配置spring+struts? 1138 ? 在struts-config.xml加入一個插件,經過它加載applicationContext.xml 1139 1140 ? 在struts-config.xml修改action-mapping標記,具體action交給了DelegateActionProxy 1141 1142 ? 經過DelegateActionProxy進入一spring的環境。 1143 1144 ? 在spring的applicationContext.xml加入<bean name="/login" class="" singleton="false"/> 1145 1146 2二、如何在web環境中配置applicationContext.xml文件? 1147 <listener> 1148 1149 <listener-class> 1150 1151 org.springframework.web.context.ContextLoaderListener 1152 1153 </listener-class> 1154 1155 </listener> 1156 1157 或: 1158 1159 <servlet> 1160 1161 <servlet-name>context</servlet-name> 1162 1163 <servlet-class> 1164 1165 org.springframework.web.context.ContextLoaderServlet 1166 1167 </servlet-class> 1168 1169 <load-on-startup>1</load-on-startup> 1170 1171 </servlet> 1172 1173 經過以下方法取出applicationContext實例: 1174 1175 ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext); 1176 1177 2四、Jsf和spring的區別? 1178 jsf:是一種基於MVC模式的一個web層的處理,粒度較struts較細。 1179 Spring:提供了通用的服務,ioc/di aop,關心的不只僅web層,應當j2ee總體的一個服務,能夠很容易融合不一樣的技術struts hibernate ibatis ejb remote springJDBC springMVC 1180 1181 1182 1183 Ejb技術 1184 1、weblogic的熱發佈 1185 將ear、jar、war拷到C:\bea\user_projects\domains\mydomain\applications目錄 1186 1187 weblogic會自動發佈 1188 1189 經過jbuilder將ear或jar或war部署到服務器上。 1190 1191 二、在ejb中實現one-to-many 1192 1、在many中的將外鍵字段屬性刪除 1193 1194 2、在刪除many中的值時要將Collection轉化爲ArrayList, 1195 1196 並反向遍歷ArrayList,先刪除ArrayList中值,根據 1197 1198 ArrayList刪除反回的對象轉化爲many的遠程接口,經過 1199 1200 遠程接口將many刪除 1201 1202 3、ejb所用的技術: 1203 Jndi:java naming directory inferface 1204 1205 Rmi: remote method invoke 1206 1207 四、實現ejb幾個接口,幾個類? 1208 兩個接口一個類 1209 1210 extends EJBHome 1211 1212 經過jndi獲得home接口 1213 1214 create方法調用服務端的ejbCreate方法,在服務端產生一個EntityBean或SessionBean實例,向客戶端返回一個遠程接口。 1215 1216 經過find方法在從服務端找到一個EntityBean實例,向客戶端返回一個遠程接口。 1217 1218 extends EJBObject 1219 1220 在客戶端經過rmi調用遠程服務端方法。 1221 1222 經過remove方法調用服務端的ejbRemove方法,將EnityBean刪除 1223 1224 implements SessionBean 1225 1226 在服務端實現真正的處理,實現核心業務 1227 1228 五、實現ejb相關的配置文件是什麼? 1229 ejb-jar.xml:說明ejb的兩個接口一個類的。 1230 1231 weblogic-ejb-jar.xml:說明ejb的JNDI名 1232 1233 weblogic-rdbms-ejb.xml:o-rMapping實現數據庫表、字段與ejb屬性對應的關係。 1234 1235 ejb2.0的開發 1236 1237 1、用jbuilder集成環境 1238 1239 2、能夠用eclipse開發,用源代碼註釋說明,用ant執行xdoclet,xdoclet通 1240 1241 過源代碼註釋自動生相關的配置、兩個接口一個類。 1242 1243 /** 1244 1245 * @stateLess 1246 1247 * @remote 1248 1249 */ 1250 1251 六、ejb的分類?區別 1252 sessionBean 1253 1254 stateless:方法間不保留(1..1) 1255 1256 statefull:方法間保留(1..n) 1257 1258 entityBean:持久化 1259 1260 cmp:增刪改容器 1261 1262 bmp:增刪改手動jdbc 1263 1264 message driver bean 1265 1266 異處的消息處理 1267 1268 7、本地接口與遠程接口的區別。 1269 EJBHome(在不一樣的進程或主機間調用,即不一樣的jvm) 1270 1271 EJBObjet 1272 1273 EJBLocalHome(在同一進程,同是jvm中) 1274 1275 EJBLocalObject 1276 1277 八、請求處理的過程? 1278 會話 1279 1280 url 1281 1282 factory 1283 1284 經過jndi獲得一個home實例 1285 1286 在客戶端經過home實例在服務端產生一個sessionBean,客戶端返回一個接口 1287 1288 客戶端經過遠程接口調用方法。 1289 1290 9、statefull的生命週期 1291 不存在 1292 1293 setSessionContext 1294 1295 create--->ejbcreate 1296 1297 就緒:能夠調用remove方法將sessionBean刪除、能夠調用服務端的任何方法。 1298 1299 ejbPassivate(從就緒到掛起) 1300 1301 ejbActivate(從掛起到就緒) 1302 1303 掛起 1304 1305 若是超時自動刪除 1306 1307 10、stateless的生命週期 1308 不存在 1309 1310 setSessionContext 1311 1312 create--->ejbcreate 1313 1314 remove-->ejbremove 1315 1316 就緒 1317 1318 11、entityBean的生命週期: 1319 不存在 1320 1321 setEntityContext 1322 1323 create--->ejbcreate 1324 1325 入池 1326 1327 空房子,沒加載數據 1328 1329 ejbActivate 1330 1331 ejbPassivate 1332 1333 就緒 1334 1335 remove-->ejbRemove 1336 1337 加載了數據庫的數據 1338 1339 1340 1341 12、EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。 1342 遠程接口和Home接口不須要直接實現, 1343 1344 他們的實現代碼是由服務器產生的, 1345 1346 程序運行中經過接口調用服務端產生的實例。 1347 1348 1349 1350 13、EJB的激活機制 1351 以Stateful Session Bean 爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,實例在就緒和掛起狀態之間遷移。 1352 1353 1354 1355 就緒:從文件到內存,調用ejbActivate方法 1356 1357 掛起:從內存到文件,調用ejbPassivate方法 1358 1359 14、EJB是基於哪些技術實現的?並說 出SessionBean和EntityBean的區別, 1360 EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JTA等技術實現. 1361 1362 SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操做。例如訪問數據庫、調用其餘EJB組件. 1363 1364 EntityBean被用來表明應用系統中用到的數據.對於客戶機, 1365 1366 SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯; 1367 1368 EntityBean是一種持久性對象,它表明一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體. 1369 1370 Session Bean 還能夠再細分爲 Stateful Session Bean 與 Stateless Session Bean .這兩種的 Session Bean均可以將系統邏輯放在 method之中執行,不一樣的是 Stateful Session Bean 能夠記錄呼叫者的狀態,所以一般來講,一個使用者會有一個相對應的 Stateful Session Bean 的實體.Stateless Session Bean 雖然也是邏輯組件,可是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 並不會找尋特定的 Stateless Session Bean 的實體來執行這個 method.換言之,極可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行.從內存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優點卻在於他能夠維持使用者的狀態. 1371 1372 1373 1374 1五、EJB的分類是什麼?各有什麼特色? 1375 sessionBean:主機重起消失 1376 1377 Stateless:不記憶 1378 1379 StateFull:一個用戶多個操做可記憶 1380 1381 EntityBean:持久的數據庫中 1382 1383 Cmp:容器經過o/r mapping實現數據的持久化,不寫sql,實現方便,在速度慢。 1384 1385 Bmp:經過jdbc實現持久化,實現複雜,速度快 1386 1387 messageBean:提供異步處理。 1388 1389 1390 1391 十、EJB中主要的配置文件及做用是什麼? 1392 EJB部署時須要三個文件: 1393 1394 ? Ejb-jar.xml: 1395 1396 ? 將二個接口一個類打包在一塊兒,給EJB一個名稱。 1397 1398 ? 說明當前的sessionBean的事務是由容器處理的。 1399 1400 ? 其在全部的服務器上是通用的。 1401 1402 ? Weblogic-ejb-jar.xml: 1403 1404 ? 將一個EJB名稱,對應一個JNDI,在僅對weblogic服務器 1405 1406 ? Weblogic-rdbms-jar.xml: 1407 1408 ? 實現o/r mapping的說明,至關於*.hbm.xml 1409 1410 1五、說出數據鏈接池的工做機制是什麼? 1411 容器或相關的應用程序在其池中實例化多個邊接,當應用程序在使用時,容器直接將池中的鏈接取出應用程序直接使用,同時當應用程序使用完後,容器還能夠將鏈接收回。從而提升系統的效率。 1412 1413 1六、EJB2.0有哪些內容?分別用在什麼場合? EJB2.0和EJB1.1的區別? 1414 sessionBean:是一個過程 1415 1416 entityBean:是持久化,表明的是一個業務實體,有主鍵。 1417 1418 Struts+sessionBean+entityBean 1419 1420 EJB2.0加入的本地接口及本地home 1421 1422 EJB1.1中只有遠程接口及遠程home 1423 1424 1425 1426 1427 1428 18、EJB與JAVA BEAN的區別? 1429 Java Bean 是可複用的組件,任何一個Java類均可以是一個Bean。但一般狀況下,Java Bean是被容器所建立(如Tomcat)的,因此Java Bean具備以下特色: 1430 1431 1432 1433 一個無參的構造器 1434 1435 實現Serializable接口 1436 1437 私有屬性 1438 1439 公有get set方法 1440 1441 1442 1443 Enterprise Java Bean 是一個分佈式組件,其特色是 1444 1445 基於(RMI)技術的,能夠被遠程訪問(跨進程、跨計算機)。 1446 1447 EJB必須被佈署在Webspere、WebLogic容器中,不能直接訪問ejb,而是經過容器訪問ejb,容器是ejb訪問的一個代理。 1448 1449 19、EJB的角色和三個對象 1450 六個角色組成,分別是 1451 1452 EJB組件開發者(Enterprise Bean Provider):sun 1453 1454 應用組合者(Application Assembler)真正的開發商 1455 1456 部署者(Deployer): 1457 1458 EJB 服務器提供者(EJB Server Provider):sun ibm 小機 1459 1460 EJB 容器提供者(EJB Container Provider):weblogic jboss 1461 1462 系統管理員(System Administrator):維護員 1463 1464 三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類 1465 1466 20、EJB容器提供的服務 1467 主要提供 1468 1469 安全 1470 1471 事務管理 1472 1473 分佈式 1474 1475 jts 1476 1477 聲明週期管理 1478 1479 代碼產生 1480 1481 持續性管理 1482 1483 鎖和併發行管理等服務。 1484 1485 21、EJB規範規定EJB中禁止的操做有哪些? 1486 1.不能操做線程和線程API(線程API指非線程對象的方法如notify,wait等), 1487 1488 2.不能操做awt, 1489 1490 3.不能實現服務器功能, 1491 1492 4.不能對靜態屬生存取, 1493 1494 5.不能使用IO操做直接存取文件系統, 1495 1496 6.不能加載本地庫., 1497 1498 7.不能將this做爲變量和返回, 1499 1500 8.不能循環調用。 1501 1502 26、EJB的基本架構 1503 答:一個EJB包括三個部分: 1504 1505 1506 1507 Remote Interface 接口的代碼 1508 1509 package Beans; 1510 1511 import javax.ejb.EJBObject; 1512 1513 import java.rmi.RemoteException; 1514 1515 public interface Add extends EJBObject 1516 1517 { 1518 1519 //some method declare 1520 1521 } 1522 1523 Home Interface 接口的代碼 1524 1525 package Beans; 1526 1527 import java.rmi.RemoteException; 1528 1529 import jaax.ejb.CreateException; 1530 1531 import javax.ejb.EJBHome; 1532 1533 public interface AddHome extends EJBHome 1534 1535 { 1536 1537 //some method declare 1538 1539 } 1540 1541 1542 1543 EJB類的代碼 1544 1545 1546 1547 package Beans; 1548 1549 1550 1551 import java.rmi.RemoteException; 1552 1553 import javax.ejb.SessionBean; 1554 1555 import javx.ejb.SessionContext; 1556 1557 public class AddBean Implements SessionBean 1558 1559 { 1560 1561 //some method declare 1562 1563 } 1564 1565 30、如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置 1566 缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現SSL,須要配置服務器使用Enable SSL,配置其端口,在產品模式下須要從CA獲取私有密鑰和數字證書,建立identity和trust keystore,裝載得到的密鑰和數字證書。能夠配置此SSL鏈接是單向仍是雙向的。 1567 1568 31如何查看在weblogic中已經發布的EJB? 1569 能夠使用管理控制檯,在它的Deployment中能夠查看全部已發佈的EJB
1 一、什麼是Web Service? 2 Web Service就是爲了使原來各孤立的站點之間的信息可以相互通訊、共享而提出的一種接口。 3 4 使用的技術: 5 6 HTTP、XML、SOAP(簡單對象訪問協議)、WSDL 7 8 優勢: 9 10 跨平臺、跨語言、跨系統 11 12 SOAP協議: 13 14 SOAP協議(Simple Object Access Protocal,簡單對象訪問協議) 15 16 Tcp/ipàhttp->soap,soap 經過xml文件傳送信息 17 18 缺點: 19 20 (1).WebService使用了XML對數據封裝,會形成大量的數據要在網絡中傳輸。 21 22 (2).WebService規範沒有規定任何與實現相關的細節,包括對象模型、編程語言,這一點,它不如CORBA。 23 24 二、什麼是Web容器? 25 實現J2EE規範中web協議的應用.該協議定義了web程序的運行時環境,包括:併發性,安全性,生命週期管理等等. 26 27 就是在tomcat、weblogic下運行jsp、servlet、struts 28 29 3、應用服務器有那些? 30 BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat 31 32 五、如何給weblogic指定大小的內存? 33 在啓動Weblogic的腳本中(位於所在Domian對應服務器目錄下的startServerName),增長set MEM_ARGS=-Xms32m -Xmx200m,能夠調整最小內存爲32M,最大200M 34 35 六、如何設定的weblogic的熱啓動模式(開發模式)與產品發佈模式? 36 能夠在管理控制檯中修改對應服務器的啓動模式爲開發或產品模式之一。或者修改服務的啓動文件或者commenv文件,增長set PRODUCTION_MODE=true。 37 38 七、如何啓動時不需輸入用戶名與密碼? 39 修改服務啓動文件,增長 WLS_USER和WLS_PW項。也能夠在boot.properties文件中增長加密過的用戶名和密碼. 40 41 八、在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件中? 42 保存在此Domain的config.xml文件中,它是服務器的核心配置文件。 43 44 九、說說weblogic中一個Domain的缺省目錄結構?好比要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入 http://主機:端口號//helloword.jsp就能夠看到運行結果了? 又好比這其中用到了一個本身寫的javaBean該如何辦? 45 Domain 目錄服務器目錄applications,將應用目錄放在此目錄下將能夠做爲應用訪問,若是是Web應用,應用目錄須要知足Web應用目錄要求,jsp文件能夠直接放在應用目錄中,Javabean須要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將能夠實如今瀏覽器上無需輸入應用名。 46 47 十二、CORBA是什麼?用途是什麼? 48 CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。其目的爲:用不一樣的程序設計語言書寫在不一樣的進程中運行,爲不一樣的操做系統開發。 49 50 1三、說說在weblogic中開發消息Bean時的persistent與non-persisten的差異 51 persistent方式的MDB能夠保證消息傳遞的可靠性,也就是若是EJB容器出現問題而JMS服務器依然會將消息在此MDB可用的時候發送過來,而non-persistent方式的消息將被丟棄。 52 53 14、WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。 54 Web ServiceWeb Service是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範,這些規範使得Web Service能與其餘兼容的組件進行互操做。 55 56 JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你須要改變具體的實現時候也不須要修改代碼。 57 58 JAXM(Java API for XML Messaging) 是爲SOAP通訊提供訪問方法和傳輸機制的API。 59 60 WSDL是一種 XML 格式,用於將網絡服務描述爲一組端點,這些端點對包含面向文檔信息或面向過程信息的消息進行操做。這種格式首先對操做和消息進行抽象描述,而後將其綁定到具體的網絡協議和消息格式上以定義端點。相關的具體端點即組合成爲抽象端點(服務)。 61 62 SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換XML編碼信息的輕量級協議。 63 64 UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。 65 66 j2ee模式(MVC模式、Model1,Model2) 67 1、j2ee經常使用的設計模式?說明工廠模式。 68 Java中的23種設計模式: 69 70 Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式), 71 72 Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式), 73 74 Adapter(適配器模式), Bridge(橋樑模式), Composite(合成模式), 75 76 Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式), 77 78 Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式), 79 80 Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式), 81 82 Observer(觀察者模式), State(狀態模式), Strategy(策略模式), 83 84 Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式) 85 86 工廠模式:工廠模式是一種常常被使用到的模式,根據工廠模式實現的類能夠根據提供的數據生成一組類中某一個類的實例,一般這一組類有一個公共的抽象父類而且實現了相同的方法,可是這些方法針對不一樣的數據進行了不一樣的操做。首先須要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後須要定義一個工廠類,工廠類能夠根據條件生成不一樣的子類實例。當獲得子類的實例後,開發人員能夠調用基類中的方法而沒必要考慮到底返回的是哪個子類的實例。 87 88 二、說說你所熟悉或據說過的j2ee中的幾種經常使用模式?及對設計模式的一些見解 89 Session Facade Pattern:使用SessionBean訪問EntityBean 90 91 Message Facade Pattern:實現異步調用 92 93 EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問 94 95 Data Transfer Object Factory:經過DTO Factory簡化EntityBean數據提供特性 96 97 Generic Attribute Access:經過AttibuteAccess接口簡化EntityBean數據提供特性 98 99 Business Interface:經過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性 100 101 ejb架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。 102 103 3、解釋下面關於J2EE的名詞 104 (1)JNDI:Java Naming & Directory Interface,JAVA命名目錄服務.主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下本身的索引,從而知足快速查找和定位分佈式應用程序的功能. 105 106 (2)JMS:Java Message Service,JAVA消息服務.主要實現各個應用程序之間的通信.包括點對點和廣播. 107 108 (3)JTA:Java Transaction API,JAVA事務服務.提供各類分佈式事務服務.應用程序只需調用其提供的接口便可. 109 110 (4)JAF: Java Action FrameWork,JAVA安全認證框架.提供一些安全控制方面的框架.讓開發者經過各類部署和自定義實現本身的個性安全控制策略. 111 112 (5)RMI:Remote Method Interface,遠程方法調用 113 114 115 116 4、介紹J2EE、J2SE、J2ME的區別。 117 J2ee:企業級,主要的application server的web及應用服務 118 119 J2se:標準版, 沒有application server 120 121 J2me:手機、pda的嵌入式開發 122 123 124 125 五、開發中都用到了那些設計模式?用在什麼場合? 126 每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次地使用那些已有的解決方案,無需在重複相同的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。 127 128 6、J2EE是什麼? 129 J2EE 是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型 (enterpriese application model).在這樣的一個應用系統中,可按照功能劃分爲不一樣的組件,這些組件又可在不一樣計算機上,而且處於相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。 130 131 7、J2EE是技術仍是平臺仍是框架? 132 J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。 133 134 J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
1 一、當前主流的解析器有那些? 2 DOM:文檔對象模型(document object model) 3 4 SAX 5 6 二、Dom解析處理的過程是什麼? 7 package ss; 8 9 import javax.xml.parsers.DocumentBuilderFactory; 10 11 import javax.xml.parsers.DocumentBuilder; 12 13 import org.w3c.dom.Document; 14 15 import org.w3c.dom.Element; 16 17 import org.w3c.dom.Node; 18 19 import org.w3c.dom.Attr; 20 21 import org.w3c.dom.NodeList; 22 23 import javax.xml.transform.TransformerFactory; 24 25 import javax.xml.transform.Transformer; 26 27 import javax.xml.transform.dom.DOMSource; 28 29 import javax.xml.transform.stream.StreamResult; 30 31 32 33 public class XmlParser 34 35 { 36 37 public static void main(String[] args) 38 39 throws Exception 40 41 { 42 43 xmlwriter(); 44 45 } 46 47 48 49 public static void xmlparser() 50 51 throws Exception 52 53 { 54 55 DocumentBuilderFactory xdf = DocumentBuilderFactory.newInstance(); 56 57 DocumentBuilder db = xdf.newDocumentBuilder(); 58 59 Document d = db.parse("C:\\A1\\customer.xml"); 60 61 NodeList nl = d.getElementsByTagName("customer"); 62 63 for (int i = 0; i < nl.getLength(); i++) 64 65 { 66 67 68 69 Element e = (Element) nl.item(i); 70 71 Attr a = e.getAttributeNode("customerID"); 72 73 System.out.println(a.getNodeValue()); 74 75 NodeList nl1 = e.getElementsByTagName("customerName"); 76 77 System.out.println(nl1.item(0).getFirstChild().getNodeValue()); 78 79 } 80 81 } 82 83 public static void xmlwriter() throws Exception 84 85 { 86 87 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 88 89 DocumentBuilder db=dbf.newDocumentBuilder(); 90 91 Document d=db.parse("C:\\A1\\customer.xml"); 92 93 NodeList nl=d.getElementsByTagName("customerName"); 94 95 for(int i=0;i<nl.getLength();i++) 96 97 { 98 99 Element e=(Element) nl.item(i); 100 101 System.out.println(e.getFirstChild().getNodeValue()); 102 103 e.getFirstChild().setNodeValue(e.getFirstChild().getNodeValue()+"111111111111111"); 104 105 } 106 107 TransformerFactory tff=TransformerFactory.newInstance(); 108 109 Transformer tf=tff.newTransformer(); 110 111 tf.transform(new DOMSource(d),new StreamResult("c:\\aa.xml")); 112 113 } 114 115 } 116 117 118 119 DocumentBuilderFactory 120 121 DocumentBuiler db 122 123 Document d=db.parse(「具體文件路徑」); 124 125 NodeList nl=d.getElementsByTagName(「節點名」) 126 127 三、Sax解析處理的過程是什麼? 128 import org.xml.sax.helpers.DefaultHandler; 129 130 import org.xml.sax.SAXException; 131 132 import org.xml.sax.Attributes; 133 134 import javax.xml.parsers.SAXParser; 135 136 import javax.xml.parsers.SAXParserFactory; 137 138 public class SaxParser extends DefaultHandler 139 140 { 141 142 public void characters(char[] ch, int start, int length) 143 144 throws SAXException 145 146 { 147 148 String temp=new String(ch,start,length); 149 150 System.out.println(temp); 151 152 } 153 154 155 156 public void endDocument() 157 158 throws SAXException 159 160 { 161 162 System.out.println("正在開始一個文檔"); 163 164 } 165 166 167 168 public void endElement(String namespaceURI, String localName, String qName) 169 170 throws SAXException 171 172 { 173 174 System.out.println("結束元素"+qName); 175 176 } 177 178 179 180 public void startDocument() 181 182 throws SAXException 183 184 { 185 186 System.out.println("開始文檔"); 187 188 } 189 190 191 192 public void startElement(String namespaceURI, String localName, 193 194 String qName, Attributes atts) 195 196 throws SAXException 197 198 { 199 200 System.out.println("開始元素"+qName); 201 202 } 203 204 public static void main(String[] args) throws Exception 205 206 { 207 208 SAXParserFactory spf=SAXParserFactory.newInstance(); 209 210 SAXParser sp=spf.newSAXParser(); 211 212 sp.parse("C:\\A1\\customer.xml",new SaxParser()); 213 214 } 215 216 } 217 218 四、Dom與Sax相比它們的優缺點是什麼? 219 DOM能夠訪問任何一個節點,要將全部資源所有加載,比較耗內存,能夠修改。 220 221 SAX只能順序讀,不可隨意訪問,不可寫,但速度快。 222 223 1. Dom中的核心接口有那些? 224 225 Node 226 227 TextNode 228 229 Element 230 231 Arr 232 233 NodeList 234 235 Document 236 237 五、如何將Dom對象寫入到文件中? 238 TransformerFactory 239 240 Transformer經過以下方法進行處理 241 242 Transformer(DOMSource(Document d),ResultStream(OutputStream o)) 243 244 六、用jdom解析xml文件時如何解決中文問題? 245 類文件是utf-8,xml文件頭也應是utf-8 如<?xml version="1.0" encoding="UTF-8" ?> 246 247 7、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式? 248 a: 兩種形式 dtd schema, 249 250 b: 本質區別:schema自己是xml的,能夠被XML解析器解析(這也是從DTD上發展schema的根本目的), 251 252 c:有DOM,SAX,STAX等 253 254 DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問 255 256 SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問 257 258 STAX:Streaming API for XML (StAX) 259 260 261 262 八、標準建模語言UML中的各類圖? 263 靜態圖 264 265 用例圖、類圖、對象圖、構件、部署, 266 267 動態圖(行爲圖) 268 269 活動圖,協做圖,狀態、時序 270 271 9、BS與CS的聯繫與區別。 272 C/S是Client/Server的縮寫。服務器一般採用高性能的PC、工做站或小型機,並採用大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端須要安裝專用的客戶端軟件。 273 274 B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這種結構下,用戶界面徹底經過WWW瀏覽器實現,一部分事務邏輯在前端實現,可是主要事務邏輯在服務器端實現。瀏覽器經過Web Server 同數據庫進行數據交互。 275 276 C/S 與 B/S 區別: 277 278 1.硬件環境不一樣: 279 280 C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門服務器提供鏈接和數據交換服務. 281 282 B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身管理. 有比C/S更強的適應範圍, 通常只要有操做系統和瀏覽器就行 283 284 2.對安全要求不一樣 285 286 C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很強. 通常高度機密的信息系統採用C/S 結構適宜. 能夠經過B/S發佈部分可公開信息. 287 288 B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。 289 290 3.對程序架構不一樣 291 292 C/S 程序能夠更加註重流程, 能夠對權限多層次校驗, 對系統運行速度能夠較少考慮. 293 294 B/S 對安全以及訪問速度的多重的考慮, 創建在須要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使 B/S更加成熟. 295 296 4.軟件重用不一樣 297 298 C/S 程序能夠不可避免的總體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好. 299 300 B/S 對的多重結構,要求構件相對獨立的功能. 可以相對較好的重用.就入買來的餐桌能夠再利用,而不是作在牆上的石頭桌子 301 302 5.系統維護不一樣 303 304 C/S 程序因爲總體性, 必須總體考察, 處理出現的問題以及系統升級. 升級難. 多是再作一個全新的系統 305 306 B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上本身下載安裝就能夠實現升級. 307 308 6.處理問題不一樣 309 310 C/S 程序能夠處理用戶面固定, 而且在相同區域, 安全要求高需求, 與操做系統相關. 應該都是相同的系統 311 312 B/S 創建在廣域網上, 面向不一樣的用戶羣, 分散地域, 這是C/S沒法做到的. 與操做系統平臺關係最小. 313 314 7.用戶接口不一樣 315 316 C/S 可能是創建的Window平臺上,表現方法有限,對程序員廣泛要求較高 317 318 B/S 創建在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 而且大部分難度減低,減低開發成本. 319 320 8.信息流不一樣 321 322 C/S 程序通常是典型的中央集權的機械式處理, 交互性相對低 323 324 B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。 325 326 十、Uml的概念是什麼?主要的工具是什麼 327 Uml:統一建模語言 328 329 工具:Rational Rose 330 331 十一、Uml的概念中的九大圖形是什麼?最重的三個圖是什麼?各有什麼特色? 332 類圖 333 334 繼承 335 336 關聯:(1..n n..1 n..n) 337 338 依賴 339 340 實現接口 341 342 彙集 343 344 組成 345 346 類圖的生命週期(開發的全部階段都使用) 347 348 整體設計 349 350 詳細設計 351 352 開發:以類圖進行開發 353 354 測試 355 356 Use-case圖 357 358 關係 359 360 用例與用例 361 362 包含(include):必須調用 363 364 擴展(extends):能夠調用也能夠不調用 365 366 角色與角色的關係 367 368 泛化 369 370 用例與角色的關係: 371 372 用例與角色:通知 373 374 角色與用例:調用 375 376 元素 377 378 用例 379 380 角色 381 382 系統邊界 383 384 Use-case圖的生命週期 385 386 需求 387 388 總體設計 389 390 測試(單元測試、集成測試、系統測試、用戶驗收) 391 392 時序 393 394 元素 395 396 橫座標:對象 397 398 縱座標: 時間 399 400 做用 401 402 找類 403 404 找方法 405 406 驗證系統的正確 407 408 生命週期 409 410 詳細設計 411 412 活動(流程圖) 413 414 做用 415 416 分析業務 417 418 構件圖 419 420 做用:說明組件與組件之間的關係,依賴關係 421 422 部署 423 424 做用:說明安裝軟件的主機之間的關係,系統運行時的性能的主要影響者。 425 426 協做 427 428 對象與對象之間的調用協做。 429 430 狀態 431 432 一個對象狀態在不一樣的動做下的變化。 433 434 對象 435 436 說明對象 437 438 1三、在類圖中如何找類? 439 找名詞
1 爲管理崗位業務培訓信息,創建3個表: 2 3 S (S#,SN,SD,SA) S#,SN,SD,SA 分別表明學號、學員姓名、所屬單位、學員年齡 4 5 C (C#,CN ) C#,CN 分別表明課程編號、課程名稱 6 7 SC ( S#,C#,G ) S#,C#,G 分別表明學號、所選修的課程編號、學習成績 8 9 1. 使用標準SQL嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名 10 11 12 13 --實現代碼: 14 15 16 17 Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Where C.[C#]=SC.[C#] AND CN=N'稅收基礎') 18 19 20 21 2. 使用標準SQL嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位 22 23 24 25 --實現代碼: 26 27 28 29 Select S.SN,S.SD FROM S,SC Where S.[S#]=SC.[S#] AND SC.[C#]='C2' 30 31 32 33 3. 使用標準SQL嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位 34 35 36 37 --實現代碼: 38 39 40 41 Select SN,SD FROM S Where [S#] NOT IN( Select [S#] FROM SC 42 43 Where [C#]='C5') 44 45 46 47 4. 使用標準SQL嵌套語句查詢選修所有課程的學員姓名和所屬單位 48 49 http://www.ad0.cn/netfetch/ 50 51 --實現代碼: 52 53 54 55 Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN 56 57 C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#])) 58 59 60 61 5. 查詢選修了課程的學員人數 62 63 64 65 --實現代碼: 66 67 68 69 Select 學員人數=COUNT(DISTINCT [S#]) FROM SC 70 71 72 73 6. 查詢選修課程超過5門的學員學號和所屬單位 74 75 76 77 --實現代碼: 78 79 Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5) 80 81 題目2 82 83 84 85 問題描述: 86 87 已知關係模式: 88 89 S (SNO,SNAME) 學生關係。SNO 爲學號,SNAME 爲姓名 90 91 C (CNO,CNAME,CTEACHER) 課程關係。CNO 爲課程號,CNAME 爲課程名,CTEACHER 爲任課教師 92 93 SC(SNO,CNO,SCGRADE) 選課關係。SCGRADE 爲成績 94 95 96 97 1. 找出沒有選修過「李明」老師講授課程的全部學生姓名 98 99 100 101 --實現代碼: 102 103 104 105 Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO) 106 107 108 109 2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績 110 111 112 113 --實現代碼: 114 115 116 117 Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE) FROM S,SC,( 118 119 Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME 120 121 122 123 3. 列出既學過「1」號課程,又學過「2」號課程的全部學生姓名 124 125 126 127 --實現代碼: 128 129 130 131 Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO 132 133 134 135 4. 列出「1」號課成績比「2」號同窗該門課成績高的全部學生的學號 136 137 138 139 --實現代碼: 140 141 Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO 142 143 144 145 5. 列出「1」號課成績比「2」號課成績高的全部學生的學號及其「1」號課和「2」號課的成績 146 147 148 149 --實現代碼: 150 151 152 153 Select S.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績] FROM S,( 154 155 Select SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE 156 157 )SC Where S.SNO=SC.SNO 158 159