java寶典

轉載自@http://www.cnblogs.com/wangyayun/p/3809950.html
@https://blog.csdn.net/riverflowrand/article/details/54974521

1.&和&&之間的區別

        &和&&  都可以做邏輯運算符

        &還可以做位運算,

        &&具有短路的功能   &要兩邊爲true時才爲true

例如,對於if(str != null    &&     !str.equals(“”))表達式,當str 爲null 時,後面的表達式不會執行,所以不會出現NullPointerException
如果將&&改爲&,則會拋出NullPointerException 異常。

2.左位移   3<<2  相當於3*2^2=12       右位移20>>2  相當於 20除以2^2=5     取商 、 -20>>2   就是補位+1 加負號 -6

注:<< , >> , ,>>> , 運算符只針對int型和long型,byte ,short ,char型需要轉換成Int型在進行操作。 

2.1   Java支持多繼承麼?

java  中  類只支持單繼承
          接口支持多繼承,也就是多實現


3.        ==    比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符

    equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同

                   String a=new String("foo");

		  String b=new String("foo");

		  System.out.println(a.equals(b));//true
		  System.out.println(a==b);//false
		  
		  int a1 = 3;
		  int b1 = 3;		  System.out.println(a1==b1);//true 基本數據類型沒有equals方法

                          String a1 = "3";
		         String b1 = "3";
		         System.out.println(a1==b1);//true
		  System.out.println(a1.equals(b1));//true   引用數據類型有equals方法

4 。靜態變量和實例變量的區別?                                              靜態變量可以通過類名來使用,實例變量必須要創建對象才能使用

  靜態變量要加static 關鍵字  實例變量不加

                   String a=new String("foo");

 實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,

                static int d;

        靜態變量屬於整個類,


5.Integerint的區別

int是八種基本數據類型(byte short int long float double char boolean)

 java爲每個基本數據類型都提供了封裝類  integer就是int的封裝類

    int的默認值0  integer的默認值null

    Integer 是一個對象,需要存儲對象的元數據。所以他比int佔用更多的空間
    但是 int 是一個原始類型的數據,所以佔用的空間更少。
Java 中,int 類型變量的長度是一個固定值,與平臺無關,都是 32 位或者4個字節。意思就是說,在 32 位 和 64 位 的Java 虛擬機中,int 類型的長度是相同的。



6.    ceil 想上取整 floor 向下取整   round 分情況

                   System.out.println(Math.round(-11.6));//-12
		  System.out.println(Math.round(-11.5));//-11
正數  四捨五入
負數  五舍六入

7.  域的作用區域

作用域    當前類 同一package 子孫類 其他package 

public    √     √          √       √ 

protected  √     √          √      × 

default   √     √          ×      × 

private    √     ×          ×      × 

8.overload  區別   override

  重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。編譯時的多態性

  重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,(在不同的類中)。子類重寫父類的方法時,只能拋出比父類更少的異常,
    子類的訪問權限只能比父類的更大,如果父類是private類型的,那麼子類是擁有自己的一個方法,不再是重寫。   運行時的多態性

  重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回值類型作爲重載函數的區分標準。

9.分層設計的好處

    各個功能按照流程進行模塊化,模塊化的好處就是能進行隨意組合……便於進行分工,便於維護,便於功能的拓展,便於用戶需求的不斷變化。

10.序列化接口ID的作用

    如果根據現在的需要我們要新增一個新的版本的方法,我們就可以通過修改ID號進行修改

,不僅取決於類路徑和功能代碼是否一致,一個非常重要的一點是兩個類的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)

11.    hashcode的作用

     hashCode()方法和equal()方法的作用其實一樣,在java裏都是用來對比兩個對象是否相等一致,但是equals()方法裏面的比較複雜,效率比較低,而hashcode是根據他們的hash值來進行比較的,效率較高。

         1.equal()相等的兩個對象他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。

         2.hashCode()相等的兩個對象他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。

12.構造器Constructor是否可被override? 

因爲構造器Constructor不能被繼承,所以他是不能被重寫的,但是他可以被重載  如有參和無參的構造器

13.java實現多態的機制

                Java實現多態有三個必要條件:繼承、重寫、向上轉型 

      指向子類的父類引用由於向上轉型了,它只能訪問父類中擁有的方法和屬性,而對於子類中存在而父類中不存在的方法,該引用是不能使用的,儘管是重載該方法。若子類重寫了父類中的某些方法,在調用該些方法的時候,必定是使用子類中定義的這些方法(動態連接、動態調用)。

    在Java中有兩種形式可以實現多態:繼承和接口


  14.    servler的生命週期

    Servlet 通過調用 init () 方法進行初始化。
    Servlet 調用 service() 方法來處理客戶端的請求。
    Servlet 通過調用 destroy() 方法終止(結束)。
    最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。


servlet 在web.xml 中的配置參數
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!-- ... -->
<servlet>
        <servlet-name>PageName</servlet-name>
        <jsp-file>  路徑  </jsp-file>
</servlet>
<!-- ... -->
<servlet-mapping>
        <servlet-name> PageName </servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- ... -->

《過濾器的配置  Struts2》
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
</web-app>

15 在oracle數據庫中需要查詢出前8條記錄的sql語句怎麼寫

select * from table order by columName where romNum<=8;

mysql  select * from table orber by colunName limit 0,8;


16 string 是一個不可變類,所以它賦值的對象的內容不可改變  若果重新定義了一個string類,那麼說明指向的是一個新的對象,原來的那個對象還是保留在棧裏面,沒有被改變

    由於string類是final 類型的,所以它不可繼承

17  String 和 StringBuffer 的區別

    string 表示內容不可變,stringBuffer內容可以被修改的字符串。而且,stringBuffer的執行效率要比string要快。string裏面有equals方法,但是stringBuffer裏面沒有equals方法

stringbuffer 和stringbuilder 都表示字符可以被修改的字符串。只是stringBuiler是線程不安全的(因爲build是建築,是高危行業。所以他是不安全的),由於他是線程不安全的,所以他的運行效率會快點

18    如何把一段逗號分割的字符串轉換成一個數組?

 public static void main(String[] args) {
        String orgStr="a,b,c,d,e,f";
        String [] result = orgStr.split(",");//用正則表達式的方法

        for(int a = 0;a<result.length;a++){
            System.out.print(result[a]);
        }
    }
                結果:abcdef

String ont = "a,b,c,d";
String [] result = ont.split ( "," );

 System.out.println (Arrays.toString ( result ));

結果:[a, b, c, d]




19  數組只有length的屬性,string有length()方法

20  try{  return語句 } catch{} finally{    }

static int test(){
        int i = 1;
        try {
            System.out.println("try裏面的i : " + i);
            return i;//結果1
        }finally{
            System.out.println("進入finally...");
            ++i;//結果2
            System.out.println("fianlly裏面的i : " + i);
        }

        如果存在finally代碼塊,try中的return語句不會立馬返回調用者,而是記錄下返回值待finally代碼塊執行完畢之後再向調用者返回其值,
然後如果在finally中修改了返回值,就會返回修改後的值

21 final, finally, finalize的區別。

    1.final 用於聲明屬性, 方法和類, 分別表示屬性不可變, 方法不可覆蓋, 類不可繼承。
        內部類要訪問局部變量, 局部變量必須定義成 final 類型, 例如, 一段代碼……

    2.finally 是異常處理語句結構的一部分, 表示總是執行。
    如果存在finally代碼塊,try中的return語句不會立馬返回調用者,而是記錄下返回值待finally代碼塊執行完畢之後再向調用者返回其值,
然後如果在finally中修改了返回值,就會返回修改後的值。顯然,在finally中返回或者修改返回值會對程序造成很大的困擾
    3.finalize 是 Object 類的一個方法, 在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收, 例如關閉文件等。 JVM 不保證此方法總被調用 所有object都繼承了finalize()方法    final,finally,finalize的區別。final表示不可變,final表示必須執行的語句,finalize表示垃圾回收時執行的代碼。

22 error 和 exception 有什麼區別?

1.error指恢復不是不可能但非常困難的情況下的一種嚴重錯誤.比如內存溢出,不指望程序可以處理這樣的情況. 程序只有死了的份了

2.exception表示一種設計或者實現問題,如果程序正常運行,則從不會發生. 程序能夠克服的問題,又分爲普通異常和系統異常  如:arrayindexoutofboundsexception
        ClassCastException,NullPointerException,AirthmeticException(算數異常,如:除數爲0),systemException,SqlException;

23 Java特性

四大特性   封裝、繼承、抽象、多態
        封裝:在面向對象的語言中,封裝特性是由類來體現的,其中包括(屬性和方法)。
        抽象:就是將一類實體的共同特性抽象出來,將它封裝在一個抽象類中,因爲抽象出來的實體不是一個真正的對象。所以在抽象類中不能實例化對象
        繼承:就好比我們現實生活中的父子關係,在面向對象中就是一個類可以繼承另一個類的一些特性,從而提高代碼的複用程度
        多態:就是通過傳遞給父類對象引用不同的子類對象從而表現出不同的行爲

24  單列模式 singleton

public class SingletonDemo {
    private static SingletonDemo instance=new SingletonDemo();        //靜態實例對象
    private SingletonDemo(){
                                                                       //私有方法
    }
    public static SingletonDemo getInstance(){
        return instance;                                                //靜態方法  return  實例變量
    }
}

單列模式是可以被繼承和重寫的,而靜態類是不能的

25  JSP九大隱式對象

out:輸出對象                                 作用域:page
request:請求對象   作用域:request
response:響應對象                            作用域:page
page:頁面                                    作用域:page
pageContext:頁面上下文對象                     作用域page
application:作用域對象      作用域:application
session:會話對象           作用域:session
config:配置對象                              作用域:page
exception:例外對象                            作用域:page

動作類(六大動作類)
include
userbean:
getproperty:
setproperty:
forword:
plugn:

26 兩大跳轉方式

forward(轉發):轉發是在服務器端完成的,轉發地址欄不會發生變化,轉發的速度快,轉發必須是在同一服務器端完成的


redirect(重定向):重定向是在客戶端完成的,重定向地址欄會發生變化,重定向的速度慢,重定向是在不同服務器上完成的

27 迴文數

  Scanner sc = new Scanner ( System.in );
        while (true){
            System.out.println ("輸入一個數字或字符");
            /* String str = "ABCD";*/
            String str = sc.next ();
            for (int i = 0; i < str.length(); i++)
                System.out.print("" + str.charAt(str.length() - i - 1));  //如果不減掉本身的話  就會出現 下標越界的一場
        }

28   排序

  // Collator 類是用來執行區分語言環境的 String 比較的,這裏選擇使用CHINA
        Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
        
         String[] arrStrings = {"usa","china","amerucan","canada"};

        // 使根據指定比較器產生的順序對指定對象數組進行排序。
        Arrays.sort(arrStrings, comparator);
        for (int i = 0; i < arrStrings.length; i++)
        {

            System.out.print(  arrStrings[i]  );
        }

結果:amerucan,canada,china,usa,

29  三層架構思想  及  作用

劃分爲:表現層:展現給用戶的界面(view)
業務邏輯層:對數據層的操作,對數據業務邏輯處理()
數據訪問層:直接操作數據庫,也就是對數據進行增刪改查的處理

體現了:高內聚,低耦合   思想


30  HTML   XML 的區別

同:   他們兩者都是標記語言    HTML是超文本標記語言   XML 是擴展標記語言
異:    語法要求不同,  標記不同  作用不同
          在HTML中不嚴格區分大小寫   XML中嚴格區分大小寫
           HTML不要求必須有結束標籤   XML中必須要有結束標籤
            HTML是用來顯示數據的,xml是用來描述數據和存放數據的 

31   OOA  OOP  OOD
OOA    是面向對象分析  analysis
OOD      是面向對象設計   design
OOP          是面向對象編程  program

32  內部類

    public class Outer {
        private int size;
        public class Inner {
            private int counter = 10;
            public void doStuff() {
                size++;
            }
        }
        public static void main(String args[]) {
            Outer outer = new Outer();
            Inner inner = outer.new Inner();//創建INNER 對象
            inner.doStuff();
            System.out.println(outer.size);
            System.out.println(inner.counter);
            // 編譯錯誤,外部類不能訪問內部類的變量
            System.out.println(counter);
        }
    }


關鍵字  new class 等都不能作爲標識符
保留字  保留字goto也不能作爲標識符
數字   數字12345都不能作爲標識符

內部類的編譯名        class com.xingxue.mybatis.test.Outer$Inner

33  class.forName 的作用

    Class.forName(xxx.xx.xx)的作用是要求JVM查找並加載指定的類,也就是說JVM會執行該類的靜態代碼段。

34  常用  類 包  接口

類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integerjava.util.Date System Class List HashMap

包:java.lang   java.io  java.util  java.sql javax.servlet org.apache.strtuts.action org.hibernate

接口:Remote  List  Map  Document  NodeList Servlet HttpServletRequest HttpServletResponse Transaction(Hibernate)、
Session(Hibernate) HttpSession  
 Runnable    LIst Map   Set Servlet Session  Hibernate

35  String s = new String ("xyz")

1.如果String常理池中,已經創建"xyz",則不會繼續創建,此時只創建了一個對象new String("xyz");
2.如果String常理池中,沒有創建"xyz",則會創建兩個對象,一個對象的值是"xyz",一個對象new String("xyz")==s。

        補充一個面試題:String str = "aaa" + new String("bbb")創建了幾個String對象?

 "aaa"一個對象   new Sring()一個對象  "bbb"一個對象 "aaa" + new String("bbb")==str一個對象

36     HTTP請求的GETPOST方式的區別

   GET請求能夠被緩存

·        GET請求會保存在瀏覽器的瀏覽記錄中

·        以GET請求的URL能夠保存爲瀏覽器書籤

·        GET請求有長度限制

·        GET請求主要用以獲取數據


  POST請求不能被緩存下來

·        POST請求不會保存在瀏覽器瀏覽記錄中

·        以POST請求的URL無法保存爲瀏覽器書籤

·        POST請求沒有長度限制

37 說一說Servlet的生命週期?  

        Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法
(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。

            先加載這個servlet 》》init 》》service(doget   dopost)》》destroy

38  forward() redirect()的區別?

1. 從地址欄顯示來說
        forward:它的地址欄還是原來的地址.
        redirect:新的地址.

2. 從數據共享來說
        forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.(能共享數據)
        redirect:不能共享數據.

3. 從運用地方來說
        forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.(用戶登錄)
        redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等(用戶註銷)

4. 從效率來說
        forward:高.
        redirect:低.

                                    轉發是服務器行爲,重定向是客戶端行爲。                                

39 MVC的各個部分都有那些技術來實現?如何實現?
M>>model  業務邏輯層(javabean)
V》view  表示層面(jsp技術)
C》controller 過程控制(servlet)
  將他們分成不同的組件進行實現,這些組件之間可以相互調用,提高了代碼的複用度

 40  局部變量前不能放任何修飾符

 void doSomething () {
       private String s = "";
       int l = s.length();
   }注意:這是在方法裏面  不是在類裏面  如果在類class裏面就是正確的
   局部變量前  不能有任何修飾符
   

41  抽象類的方法不能爲private

abstract class Something {
   private abstract String doSomething ();
}
     這好像沒什麼錯吧?
     答案: 錯。abstract的methods不能以private修飾。abstract的methods就是讓子類implement(實現)具體細節的,怎麼可以用private把abstract
method封鎖起來呢? (同理,abstract method前不能加final)。

42 final  的用法

class Something {
    final int i;    因爲final是最終的,所以不能是變量
finalinstant variable沒有default value,必須在constructor (構造器)結束之前被賦予一個明確的值。
可以修改爲"final int i = 0;"
        
private  final  String name = new String ();  這是正確的
    
final int i = 0;也是正確的
public void doSomething() { System.out.println("i = " + i); }}

43 靜態方法 不能調用非靜態的方法

public class App {
    public static void main(String[] args) {
        App s = new App ();
        System.out.println("s.doSomething() returns " + doSomething ()
);正確的做法:s.doSomething()
    }
    public String doSomething() {
        return "Do something ...";
    }

44  C/S   B/S 的區別

1.硬件環境不同C(client)/S 局域網裏面(一般建立在專用的網絡上)B(bromine)/S 廣域網裏面(只要有操作系統和瀏覽器就行)

2.安全要求不同C/S 面對相對固定的用戶羣,安全係數較高B/S 因爲運用在廣域網裏面,所以安全性係數較低3.用戶接口不同C/S 是建立在window窗口上的B/S 是建立在瀏覽器上的

45  應用服務器與WEB SERVER的區別?

       嚴格意義上Web服務器只負責處理HTTP協議,只能發送靜態頁面的內容。
而JSP,ASP,PHP等動態內容需要通過CGI、FastCGI、ISAPI等接口交給其他程序去處理。這個其他程序就是應用服務器。

1。應用服務器處理業務邏輯,web服務器則主要是讓客戶可以通過瀏覽器進行訪問。 
2。應用服務器處理業務邏輯,web服務器是用於處理HTML文件的。web服務器通常比應用服務器簡單,如apache就是web服務器,Jboss就是EJB應用服務器。 
應用服務器:Weblogic、Tomcat、Jboss 
WEB SERVER:IIS、 Apache

46  統計字符個數

 String str = "我a愛中華abc我愛傳智def123";
        int num=0;//數字個數    給他個初始值0 然後統計
        int hanzi=0;//漢字個數
        int zimi=0;//字母個數
        for(int i=0;i<str.length ();i++)
        {
            char c = str.charAt (i);//取出字符串裏面的每個元素進行判斷
            if(c>='0' && c<='9')
            {
                num++;
            }else if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            {
                hanzi++;
            }else
            {
                zimi++;
            }
        }
        System.out.println (num+"shu"+hanzi+"han"+zimi+"zimu" );
47  遞歸算法
 public static void main(String[] args) {
        doubleNum (1237);
    }
    public static void doubleNum(int n)
    {
        System.out.println(n);
        if(n<=5000)
            doubleNum(n*2);
        System.out.println(n);
    }

結果:1237,2474,4948,9896,9896,4948,2474,1237,


package com.xingxue.spring.test;

import com.xingxue.spring.beans.A;
import com.xingxue.spring.beans.B;
import com.xingxue.spring.web.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Arrays;

public class App {
    public static void main(String [] args)
    {
        System.out.println(computeAge(8));
    }

    public static int computeAge(int n)
    {
        if(n==1) return 10;
        return computeAge(n-1) + 2;
    }
}

48  金額轉換

package com.xingxue.spring.test;

import com.xingxue.spring.beans.A;
import com.xingxue.spring.beans.B;
import com.xingxue.spring.web.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Arrays;
public class App {
    private static final char[] data = new char{
            '零','壹','貳','叄','肆','伍','陸','柒','捌','玖'
    };

    private static final char[] units = new char[]{
            '元','拾','佰','仟','萬','拾','佰','仟','億'
    };
   
    public static String convert(int money)
    {
        StringBuffer sbf = new StringBuffer();
        int unit = 0;
        while(money!=0)
        {
            sbf.insert(0,units[unit++]);
            int number = money%10;
            sbf.insert(0, data[number]);
            money /= 10;
        }
        return sbf.toString();
    }
 public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(convert(12345));
    }
}

49 JSP中動態INCLUDE與靜態INCLUDE的區別?

動態INCLUDE用jsp:include動作實現 它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。
靜態INCLUDE用include   僞碼  實現,定不會檢查所含文件的變化,適用於包含靜態頁面

50 當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?

   是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。
對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
51  工廠模式

[java] view plain copy

    package demo8;  
    /** 
     * 工廠接口 
     * 
     */  
    interface IFactory {  
        Operation CreateOperation();  
    }  
      
      
    package demo8;  
    /** 
     * 具體工廠(Concrete Creator)角色:加法類工廠 
     * 
     */  
    public class AddFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {  
            return new OperationAdd();  
        }     
    }  
      
      
    package demo8;  
    /** 
     * 具體工廠(Concrete Creator)角色:減法類工廠 
     * 
     */  
    public class SubFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationSub();  
        }  
    }  
      
      
    package demo8;  
    /** 
     * 具體工廠(Concrete Creator)角色:乘法類工廠 
     * 
     */  
    public class MulFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationMul();  
        }  
    }  
      
      
    package demo8;  
    /** 
     * 具體工廠(Concrete Creator)角色:除法類工廠 
     * 
     */  
    public class DivFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationDiv();  
        }  
    }
53  代理模式

public interface Subject {
    void visit();
}

public class RealSubject implements Subject {

    private String name = "byhieg";
    @Override
    public void visit() {
        System.out.println(name);
    }
}

public class ProxySubject implements Subject{

    private Subject subject;

    public ProxySubject(Subject subject) {
        this.subject = subject;
    }

    @Override
    public void visit() {
        subject.visit();
    }
}

public class Client {

    public static void main(String[] args) {
        ProxySubject subject = new ProxySubject(new RealSubject());
        subject.visit();
    }
}

51  存在兩個類,B 繼承 A,C 繼承 B,我們能將 B 轉換爲 C 麼?如 C = (C) B;

            可以,向下轉型。但是不建議使用,容易出現類型轉型異常。

52  .Java 中 ++ 操作符是線程安全的嗎?

不是線程安全的操作。它涉及到多個指令,如讀取變量值==》》增加==》》存儲回內存,這個過程可能會出現多個線程交差。

53    filter 和 servlet 的生命週期

Filter和Servlet的生命週期:
1.Filter在web服務器啓動時初始化
2.如果某個Servlet配置了 1 ,該Servlet也是在Tomcat(Servlet容器)啓動時初始化。
3.如果Servlet沒有配置1 ,該Servlet不會在Tomcat啓動時初始化,而是在請求到來時初始化。
4.每次請求, Request都會被初始化,響應請求後,請求被銷燬。
5.Servlet初始化後,將不會隨着請求的結束而註銷。
6.關閉Tomcat時,Servlet、Filter依次被註銷。

54  抽象類和接口的區別

a.一個類只能繼承單個類,但是可以實現多個接口

b.抽象類中可以有構造方法  實列變量,接口中不能有構造方法  實列變量

c.抽象類中的所有方法並不一定要是抽象的,你可以選擇在抽象類中實現一些基本的方法。而接口要求所有的方法都必須是抽象的

d.抽象類中可以包含靜態(static)方法,接口中不可以

e.抽象類中可以有普通成員變量(int i;),接口中不可以有成員變量


55 堆和棧的區別
a.基本數據類型的變量和對象的引用都是在棧分配的

b.堆內存用來存放由new創建的對象和數組

通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用JVM中的棧空間;
而通過new關鍵字創建的對象和數組   和      構造器創建的對象則放在堆空間,堆是垃圾收集器管理的主要區域
String str = new String("hello");
上面的語句中變量str放在棧上,用new創建出來的字符串對象放在堆上,而"hello"這個字面量是放在方法區的。
56   Java 中會存在內存泄漏嗎,請簡單描述。 
理論上Java因爲有垃圾回收機制(GC)不會存在內存泄露問題(這也是Java被廣泛使用於服務器端編程的一個重要原因);
然而在實際開發中,可能會存在無用但可達的對象,這些對象不能被GC回收,因此也會導致內存泄露的發生。
例如Hibernate的Session(一級緩存)中的對象屬於持久態,垃圾回收器是不會回收這些對象的,
然而這些對象中可能存在無用的垃圾對象,如果不及時關閉(close)或清空(flush)一級緩存就可能導致內存泄露

57 如何實現克隆
    1). 實現Cloneable接口並重寫Object類中的clone()方法; 
      2). 實現Serializable接口,通過對象的序列化和反序列化實現克隆,


58  如何取得年月日、小時分鐘秒? 
 Calendar cal = Calendar.getInstance ();
        int i = cal.get (Calendar.YEAR);
        System.out.println (i );
        int i1 = cal.get (Calendar.MONTH)+1;//月是從0-11 的  所以要加上1
        System.out.println (i1);
        int i2 = cal.get (Calendar.DATE);
        System.out.println (i2 );


如期格式化
  SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
        Date date1 = new Date();
        System.out.println(oldFormatter.format(date1));

59  攔截器和過濾器的區別

兩者都是AOP思想的體現,都能實現權限檢查,r日誌記錄等

Filter  是Servlet規定的,只能作用於web程序中,。而攔截器interceptor既能作用於servlet中,也能作用於application,spring中,
攔截器是spring中支持的,而過濾器是servlet中支持的,在spring框架中  優先使用攔截器
攔截器只能對action請求起作用,而servlet對所有請求都起作用。
攔截器可以使用多次,而過濾器只能在初始化的時候使用一次

攔截器不依賴servlet容器,而過濾器依賴servlet容器
攔截器是基於java反射機制的,而過濾器是基於函數回調的

》》總結    過濾器包含着servlet,servlet包含着攔截器

                過濾器只能作用在servlet中,攔截器都可以作用
TomCat容器》》Filter(過濾器)》》Servlet》》Interceptor(攔截器)》》Controller

60  java  javaScript  區別

java  是Sun公司推出的   面向對象的語言,基於程序的設計   在執行前必須經過編譯才能執行
JavaScript  是 NetScape(網景)推出的    腳本語言,用來製作與網站無關的,與用戶交互的複雜的軟件,不需要經過編譯,直接在瀏覽器上執行

61  斷言 assert

        當軟件正式發佈後,可以取消斷言部分的代碼。java中使用assert作爲斷言的一個關鍵字,這就可以看出java對斷言還是很重視的,
因爲如果不是很重要的話,直接開發個類就可以了,沒必要新定義一個關鍵字。

 

62  常見異常

- ArithmeticException(算術異常) 
- ClassCastException (類轉換異常) 
- IllegalArgumentException (非法參數異常) 
- IndexOutOfBoundsException (下標越界異常) 
- NullPointerException (空指針異常) 
- SecurityException (安全異常)

63  List、Map、Set三個接口存取元素時,各有什麼特點?

List可存放相同元素的集合
    Set不能存放相同元素的集合
        Map保存鍵值對的映射,鍵不能重複,值可以重複。可以是一對一,一對多的集合

64 實現多線程有兩種方法

繼承Thread類
實現Runnable接口。
    這兩種方法都要通過重寫run()方法來定義線程的行爲,因爲在Java中是單繼承的,一個類只能繼承另一個類,如果繼承了Thread類之後,
就不能繼承其他的類了,所以,實現Runnable接口是比較靈活的。也推薦使用這種方式

65  同步  異步

同步  也成爲  阻塞式操作
異步  也成爲  非阻塞式操作
如果你想在寫這個程序的時候,另外一個程序也能讀取這個程序,那麼久採用異步編程。否則,採用同步編程,異步編程的效率要比同步的大

66   啓動一個線程是調用run()還是start()方法?

      啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM 調度並執行,
這並不意味着線程就會立即運行。run()方法是線程啓動後要進行回調(callback)的方法。
67  Java 中的流

字節流和字符流。字節流繼承於InputStream、OutputStream,字符流繼承於Reader、Writer

68  事務ACID值得是?

A:(原子性),在事務中,要麼都完成,要麼都不完成。任何一項操作的失敗都會導致整個事務的失敗。
C:(一致性):事務結束後狀態是一致的
I;(隔離性):自己執行自己的,不予其他的相互關聯
D;(持久性):持久化數據庫

只有在併發數據訪問時,才需要事務的執行

69  獲得一個類的對象 有幾種方法?

  方法1:類型.class,例如:String.class 
- 方法2:對象.getClass(),例如:"hello".getClass() 
- 方法3:Class.forName(),例如:Class.forName("java.lang.String")

70 get和post請求的區別?

①get請求用來從服務器上  獲得資源,而post是用來向客戶端   提交數據; 

②get將表單中數據按照name=value的形式,添加到action 所指向的URL 後面,
並且兩者使用"?"連接,而各個變量之間使用"&"連接;  超鏈接的方式就是get方式
post是將表單中的數據放在HTTP協議的請求頭或消息體中,傳遞到action所指向URL; 
    
③get傳輸的數據要受到URL長度限制(1024字節);而post可以傳輸大量的數據,上傳文件通常要使用post方式; 

④使用get時參數會  顯示在地址欄上,如果這些數據不是敏感數據,那麼可以使用get;對於敏感數據還是應用使用post(不會顯示在地址欄上)

71    JSP和Servlet是什麼關係? 

JSP側重於視圖,Servlet更側重於控制邏輯,在MVC架構模式中,JSP適合充當視圖(view)而Servlet適合充當控制器(controller)。

72  web.xml文件中可以配置哪些內容? 

監聽器(listener)、過濾器(filter)、 Servlet、會話超時時間、錯誤頁面等


JSTL  標籤的內容:C:foreach  C:IF  c:choose

73   什麼是IoC和DI?

IoC叫控制反轉,是Inversion of Control的縮寫,也稱爲DI(Dependency Injection)叫依賴注入,是對IoC更簡單的詮釋。

IOC(Inversion of control):控制反轉,依賴注入:
對象的創建再也不需要程序員來管理,而是可以有spring容器來進行創建和銷燬,我們只需要關注業務邏輯 依賴IOC容器並管理bean,有兩種,一種是BeanFactory,另一種是ApplicationContext, 但是APPlicationContext extends BeanFactory.. AOP來說,他也可以理解爲一個面,在這個面裏面我們利用代理類來找目標對象是什麼,攔截那些方法, 然後在這些方法的前後也可以執行一些操作.

74   Spring中如何使用註解來配置Bean?有哪些相關的註解? 

首先需要在Spring配置文件中增加如下配置:

<context:component-scan base-package="org.example"/>  掃包

然後可以用@Component、@Controller、@Service、@Repository註解來標註需要由Spring IoC容器進行對象託管的類。這幾個註解沒有本質區別,
只不過@Controller通常用於控制器,@Service通常用於業務邏輯類,@Repository通常用於倉儲類(例如我們的DAO實現類),普通的類用@Component來標註。

75   jre  jdk  區別

JRE顧名思義是java運行時環境,包含了java虛擬機,java基礎類庫。
JDK顧名思義是java開發工具包,是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。
如果你需要運行java程序,只需安裝JRE就可以了。如果你需要編寫java程序,需要安裝JDK。

76 10!   階乘

 public static void main(String[] args) {
        int num=1;
        for(int i = 10;i>0;i++)
        {
            num= num*i;
            System.out.println ("10 的階乘="+num );
        }
    }

77  爲何Map接口不繼承Collection接口?

儘管Map接口和它的實現也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無意義,反之亦然。 














發佈了38 篇原創文章 · 獲贊 4 · 訪問量 7714
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章