天天看點

亞信安全測評試題java題庫_亞信筆試題

(一)

1.String str=new String("abc") 在記憶體中是怎麼配置設定的?

答:在運作時才在記憶體建立一個記憶體空間。

2.String str1="abc" 和 String str1=new String("abc"); 這兩個的差別是什麼?

答:String str1="abc"在編譯時已經在一個常量池中生成一個拷貝,其中str1中的"abc"是字元串常量。而對于String str1=new String("abc")的話,它是在運作時才建立。這兩句在内在中所産生的對象并不是同一個對象。

3.GC是什麼?有幾種算法實作?(這題到現在也不大明白..如果GC是垃圾回收的話.後面為什麼要問有幾種算法實作呢?)

答:垃圾回收.可實作的算法有引用計數,标記回收,複制回收等.

4.Java Server Page 和 servlet 的聯系與差別

5.collection和collections的差別?

答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.

Collections是針對集合類的一個幫助類,他提供一系列靜态方法實作對各種集合的搜   索、排序、線程安全化等操作。

=====================================================

6.ArrayList和Vector的差別,HashMap和HashTable的差別?

答: Vector是同步的。這個類中的一些方法保證了Vector中的對象是線程安全的。而ArrayList則是異步的,是以ArrayList中的對象并 不是線程安全的。因為同步的要求會影響執行的效率,是以如果你不需要線程安全的集合那麼使用ArrayList是一個很好的選擇,這樣可以避免由于同步帶 來的不必要的性能開銷。

Hashtable和HashMap的差別:

1.Hashtable是Dictionary的子類,HashMap是Map接口的一個實作類;

2.Hashtable中的方法是同步 的,而HashMap中的方法在預設情況下是非同步的。即是說,在多線程應用程式中,不用專門的操作就安全地可以使用Hashtable了;而對于 HashMap,則需要額外的同步機制。但HashMap的同步問題可通過Collections的一個靜态方法得到解決:

Map Collections.synchronizedMap(Map m)

這個方法傳回一個同步的Map,這個Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環境中也是安全的。

3. 在HashMap中,null可以作為鍵,這樣的鍵隻有一個;可以有一個或多個鍵所對應的值為null。當get()方法傳回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。是以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

HashMap是Hashtable的輕量級實作(非線程安全的實作),他們都完成了Map接口,主要差別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。

HashMap允許将null作為一個entry的key或者value,而Hashtable不允許。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實作。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程通路Hashtable時,不需要自己為它的方法實作同步,而HashMap 就必須為之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一樣,是以性能不會有很大的差異。

================================================

7.overload和override的差別?

override(重寫)

1、方法名、參數、傳回值相同。

2、子類方法不能縮小父類方法的通路權限。

3、子類方法不能抛出比父類方法更多的異常(但子類方法可以不抛出異常)。

4、存在于父類和子類之間。

5、方法被定義為final不能被重寫。

overload(重載)

1、參數類型、個數、順序至少有一個不相同。

2、不能重載隻有傳回值不同的方法名。

3、存在于父類和子類、同類中。

8.char能不能存儲漢字?

答:java char型變量是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個位元組,是以放一個中文是沒問題的

(二)

1.interface 和 abstract 的差別?

(1)關于抽象類和接口,我想還是看具體的要求,什麼模式之類的東西

都是有了應用才出現的,需求才是第一位的。

它們之間的差別是:

1. 在抽象類中可以實作某些方法,而接口不行

2. 抽象類是用來extends的,而繼承有一定的局限性,隻能繼承一個類

而接口就不同,可以同時實作多個接口

這兩者也可以聯合使用。看具體的要求了。如果有共同方法的那些類

它們的共同的方法的實作是一樣的,那麼可以考慮用抽象類,把方法

在抽象類中實作,如果還有一些方法定義相同而實作不同,那麼可以

考慮定義一個接口,讓抽象類來implements這個接口

然後各個子類隻用繼承抽象類即可。

(2)接口是“like a ”象一個什麼東西、或是具備什麼功能

抽象類是 “ is a ”是一個什麼東西。

一個帶鎖的門,那麼一定是 “somthing extends 門 impliment 鎖 ”

決不能說 “帶門的鎖”

(3)經過自己寫代碼的測試結果:I代表interface,A代表abstract

I implemets I     錯

I extends I        對

I extends A       錯

(4)一個是接口,一個是虛函數 java中的接口相當C++中純虛函數

也就是一個也不實作,具體是在子類中實作,這展現了多态性

同時java接口也是java實作多重繼承的一個方法

1.interface的所有函數都是abstract的;

2.interface的資料成員預設都是public static final的;

3.Interface可以被多繼承,abstract class單繼承

interface是接口,abstract class是抽象類 主要差別:

1、接口可以多重implement(實作),抽象類隻能單一extends(繼承)

2、接口内隻能是功能的定義,抽象類中可以包括功能的定義和功能的實作。

3、接口字段定義預設為public static final,而抽象類的則預設為friendly。

3.GC是什麼?常用的兩種方法是什麼?

(1)GC是垃圾收集的意思(Garbage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導緻程式或系統的不穩定甚至崩潰,Java提供的GC功能可以 自動監測對象是否超過作用域進而達到自動回收記憶體的目的,Java語言沒有提供釋放已配置設定記憶體的顯示操作方法。

(2)答案:System.gc()用來強制立即回收垃圾,即釋放記憶體。

java 對記憶體的釋放采取的垃圾自動回收機制,在程式設計的時候不用考慮變量不用時釋放記憶體,java虛拟機可以自動判斷出并收集到垃圾,但一般不會立即釋放它們的内 存空間,當然也可以在程式中使用System.gc()來強制垃圾回收,但是要注意的是,系統并不保證會立即進行釋放記憶體.

gc首先要判斷該對象是否是時候可以收集。兩種常用的方法是引用計數和對象引用周遊。

==========================================================

4. 線程常用的方法是什麼?

Thread類的常用方法:

static Thread currentThread() //靜态方法,通過這個方法可以獲得主線程的引用,進而達到操作主線程的目的。

static int activeCount()      //靜态方法,獲得目前活動線程數量

long getId()                  //獲得目前線程id

String getName()        //獲得目前線程名字

int getPriority()    //獲得優先級

boolean isAlive()    //目前線程是否處于活動狀态。

boolean isDaemon()   //是否為守護線程

void run()  //run()方法,我們用線程,主要就是對run()方法的重寫

void start()   // 使該線程開始執行;Java 虛拟機調用該線程的run() 方法。

void sleep()   //使目前線程休眠,以執行其他線程,如Thread.sleep(1000) 休眠1秒

5. Sleep()和wait()的差別?

搞線程的最愛sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢複執行。這是因為在那個時刻,其它線程可能正在運作而且沒有被排程為放棄執行,除非(a)"醒來"的線程具有更高的優先 級,(b)正在運作的線程因為其它原因而阻塞。wait()是線程互動時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀态,直到被喚醒或等待時間到。

6. Servlet中forward()和redirct()的差別?

答:前者僅是容器中控制權的轉向,在用戶端浏覽器位址欄中不會顯示 出轉向後的位址;後者則是完全的跳轉,浏覽器将會得到跳轉的位址,并重新發送請求連結。這樣,從浏覽器的位址欄中可以看到跳轉後的連結位址。是以,前者更 加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隐藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的 資源,則必須使用sendRedirect()方法。

7. EJB和JavaBean都是什麼?

答案:

javabean是用戶端元件,EJB是伺服器端元件。

其實ejb與javaBean的最根本差別是:分布性。這是關鍵!!!

Java Bean 是可複用的元件,對Java Bean并沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由于Java Bean是被容器所建立(如Tomcat)的,是以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實作Serializable接口用于實作Bean的持久性。Java Bean實際上相當于微軟COM模型中的本地程序内COM元件,它是不能被跨程序通路的。Enterprise Java Bean 相當于DCOM,即分布式元件。它是基于Java的遠端方法調用(RMI)技術的,是以EJB可以被遠端通路(跨程序、跨計算機)。但EJB必須被布署在 諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接通路真正的EJB元件,而是通過其容器通路。EJB容器是EJB元件的代 理,EJB元件由容器所建立和管理。客戶通過容器來通路真正的EJB元件。

8. EJB都有哪些構成?

答案:Session Bean, Entity Bean, Message Driven Bean.

9. Servlet的生命周期,比CGI有什麼優點?

web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用 service()方法實作,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

Servlet是Java平台上的CGI技術。Servlet在伺服器端運作,動态地生成Web頁面。與傳統的CGI和許多其它類似CGI的技術相 比,Java Servlet具有更高的效率并更容易使用。對于Servlet,重複的請求不會導緻同一程式的多次轉載,它是依靠線程的方式來支援并發通路的。

14. 存儲過程和函數的差別?

本質上沒差別。隻是函數有如:隻能傳回一個變量的限制。而存儲過程可以傳回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過 程不行。執行的本質都一樣。 函數限制比較多,比如不能用臨時表,隻能用表變量.還有一些函數都不可用等等.而存儲過程的限制相對就比較少。

智力題:

分三部份:

oracle:存儲過程,觸發器,資料庫的優化,PL\SQL。

java:比較基礎,java的交換兩個整數的值

智力題:一個皇帝,有四個兒子。有三種顔色的帽子

三升的水,五升的水,八升的水