(一)
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的交換兩個整數的值
智力題:一個皇帝,有四個兒子。有三種顏色的帽子
三升的水,五升的水,八升的水
