java面試知識點總結(一)

1,多線程有幾種實現方法?同步有幾種實現方法?
答:多線程有兩種實現方法:分別是繼承Thread方法和實現Runnable方法。同步的實現方面有兩種,分別是synchronized,wait與notify

thread和runnable的區別?
如果一個類繼承Thread,則不適合資源共享。但是如果實現了Runable接口的話,則很容易的實現資源共享。
thread是類,runnable爲接口,建議使用runable實現多線程。

2,hashmap和hashtable有什麼區別?
繼承方式不同:hashmap繼承AbstractMap,hashtable繼承dictionary

線程安全不同:hashmap非線程安全,hashtable線程安全,支持多線程。

對null值得處理不同:hashmap的key和value都可以爲null
hashtable的key和value都不可以爲null

支持遍歷的種類不同:hashmap 只支持iterator遍歷
hashtable支持iterator和enumeration枚舉器兩種方式

通過迭代器遍歷時遍歷的順序不同:
hashmap是從前向後的遍歷數組
hashtable是從後向前的遍歷數組

容量的初始值和增加方式不一樣:
hashmap默認容量大小是16,增加容量時,每次將容量變爲原始容量2
hashtable默認容量大小是11,增加容量時,每次將容量變爲原始容量
2+1;

添加key-value時hash值算法不同:
hashmap添加元素時使用的是自定義的哈希算法
hashtable沒有自定義哈希算法,而是直接採用的key的hashcode()

部分apI不同:
hashtable重寫了tostring()方法,hashmap沒有重寫tostring()方法

3,String,StringBuffer,StringBuilder的區別?

1,可變與不可變 string不可變,stringbuilder和stringBuffer都繼承了AbstractStringBuilder類,可變的
2,是否線程安全 string安全 ,stringbuffer可以加同步鎖是安全的,stringbuilder是不安全的
3,stringbuffer和stringbuilder共同點
都繼承了抽象類,最後,如果程序不是多線程的,那麼使用StringBuilder效率高於StringBuffer。

4,jsp和servlet的區別?
jsp經過編譯後就變成了servlet,jsp的本質就是servlet。jsp更擅長頁面顯示,servlet更擅長邏輯控制。jsp是servlet技術的擴展。

5,抽象類和接口有什麼區別?
抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用作子類的超類。抽象類是被用來創建繼承層級裏子類的模板

接口是抽象方法的集合。如果一個類實現了某個接口,那麼它就繼承了這個接口的抽象方法。這就像契約模式,如果實現了這個接口,那麼就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情

抽象類:可以有默認的方法實現,接口完全是抽像的。不存在方法的實現。可以使用exteds關鍵字來繼承抽象類,子類可以用implements來實現接口。抽像類可以有構造器,接口不能有構造器。

6,用到過的集合有哪些?
set,無序,不能重複
list:有序,可重複。
map:鍵值對,鍵唯一,值不唯一

7,數據庫union的關鍵字的作用?
union和union all的區別?
union稱爲聯合的作用是將多個結果合在一起並且顯示出來
union all和union的區別是:union會自動壓縮多個結果集中的重複結果,而union all則將所有的結果都展示出來,不管是不是重複的
union對兩個結果集進行並集操作,不包括重複行,同時進行默認規則的排序
union all 對兩個結果集進行集合操作,包括重複行,不進行排序

8,try和catch和fianlly的執行順序?
對於try{}catch{}finally{}而言,,它們的執行順序很簡單,如果在try{}中捕獲相應的異常,中斷當前代碼的執行,轉而去執行catch{}中的內容,最後去執行。
finally{}中方法,一般來說finally中的方法都是會被執行的,其中finally中很大程度上用於資源的釋放。

9,ioc和aop解決了什麼問題?
spring的核心是IOC控制反轉和AOP面向切面編程。IOC控制反轉主要強調的是程序之間的關係是由容器控制的,容器控制對象,控制了對外部資源的獲取。而反轉即爲,在傳統的編程中都是由我們創建對象獲取依賴對象,而在IOC中是容器幫我們創建對象並注入依賴對象,

.AOP:面向切面編程,主要是管理系統層的業務
這個模塊被命名爲切面(aspect),切面將那些與業務邏輯無關,卻被業務模塊共同調用的邏輯提取並封裝起來,減少了系統中的重複代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。

10,string是基本數據類型嗎?
string是引用類型。底層是char數組實現的

11,list的三個子類的特點?
Arraylist底層結構是數組,底層查詢快,增刪慢
linkedlist底層結構是鏈表型,增刪快,查詢慢
voctor 底層結構是數組,線程是安全的。增刪慢,查詢快

list和map,set的區別?
list和set是存儲單列數據的集合,
map是存儲鍵和值這樣的雙列數據的集合。
list中存儲的數據是是有順序。並且允許重複。
map中存儲的數據是沒有順序的。其建是不能重複的。值是可以重複的。
set中存儲的數據是無序的。且不允許有重複。

list接口有三個實現類,linkedlist,arraylist,vector
map接口有三個實現類,hashmap,hashtable,linkedHashMap
set接口有兩個實現類,hashSet和linkedHashSet

12,redis的端口號是多少?6379
zookeeper端口號?2181 3888 2888

13,如何遍歷map集合?
keyset,values,entryset,
三種方式得到set之後,都可以使用foreash或者iterator

14,如何刪除list元素?
for循環,增強for循環,iterator遍歷,

15,heap和stack有什麼區別?
棧是一種線性集合,其添加元素和刪除元素都在同一段完成。
棧是先進後出方式處理,堆是棧的一個組成元素。

16,BS和CS的區別?
CS是client/server的縮寫,是客戶機和服務器結構的應用程序,必須是電腦本地安裝程序,cs開發成本高。

BS是brower/serve的縮寫,是瀏覽器和服務器結構的應用程序,用瀏覽器打開系統,bs開發成本低

17,spring有幾種注入方式?
三種,構造,屬性,接口

18,事務的四大特性?
原子性,一致性,隔離性,持久性

19,javac命令和java命令做什麼事情呢?
javac:負責的是編譯,當執行javac的時候,會執行java的編譯程序,會對指定的.java文件進行編譯,生成了jvm可以執行的字節碼文件,也就是class文件。

java負責運行部分,會啓動jvm,加載運行所需要的類庫,執行.class文件,一個文件要執行,必須要有執行的起始點,就是main函數。

20,構造函數和一般函數有什麼區別?
兩個函數的定義結構不同。
構造函數是在函數被創建時,就被調用,用於初始化,而且初始化動作只執行一次。
一般函數實在函數創建後,需要調用才被執行,可以被調用多次。

21,super()和this()是否可以同時出現在構造函數中?
兩個只能有一個定義在第一行,不能同時出現。

爲什麼一定要定義在第一行?
因爲super和this都是調用構造函數,構造函數用於初始化,所以初始化的動作要先完成。

22,throw 和throws關鍵字的區別:
throw用於拋出異常對象,後面跟的是異常對象;throw用在函數內。
throws用於拋出異常類,後面跟的異常類名,可以跟多個,用逗號隔開。throws用在函數上。

23,線程狀態:
被創建:start()
運行:具備執行資格,同時具備執行權;
凍結:sleep(time),wait()—notify()喚醒;線程釋放了執行權,同時釋放執行資格;
臨時阻塞狀態:線程具備cpu的執行資格,沒有cpu的執行權;
消亡:stop()

24,wait和sleep區別: 分析這兩個方法:從執行權和鎖上來分析:
wait:可以指定時間也可以不指定時間。不指定時間,只能由對應的notify或者notifyAll來喚醒。
sleep:必須指定時間,時間到自動從凍結狀態轉成運行狀態(臨時阻塞狀態)。
wait:線程會釋放執行權,而且線程會釋放鎖。
Sleep:線程會釋放執行權,但不是不釋放鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章