部分java相關問題

2021-08-19 07:43:01 字數 4262 閱讀 6301

1:arraylist和linkedlist的區別?

arraylist、linkedlist、vector和stack是list的四個實現類,其中vector是基於jdk1.0,雖然實現了同步,但是效率低,已經不用了,stack繼承vector

區別: - arraylist是實現了基於動態陣列的資料結構,而linkedlist是基於鍊錶的資料結構

- 對於隨機訪問get和set,arraylist要優於linkedlist,linkedlist不支援高效的隨機訪問

- arraylist適合查詢,linkedlist適合增刪

2:過載與重寫有什麼區別?

override(重寫)

1.方法名、引數、返回值相同。

2.子類方法不能縮小父類方法的訪問許可權。

3.子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。

4.存在於父類和子類之間。

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

overload(過載)

1.引數型別、個數、順序至少有乙個不相同。

2.不能過載只有返回值不同的方法名。

3.存在於父類和子類、同類中。

3:&和&&有什麼區別?

&按位與----a&b是把a和b都轉換成二進位制數然後再進行與的運算

不管前面的條件是否正確,後面都執行

&&邏輯與---a&&b就是當且僅當兩個運算元均為 true時,其結果才為 true;(短路功能)

前面條件正確時,才執行後面,不正確時,就不執行,效率高

4:介面和抽象類有什麼區別?

抽象類(abstract class):

1:abstract 關鍵字修飾,並且沒有方法體

2:抽象類不能直接建立例項

3:抽象類只能被繼承,乙個具體類繼承乙個抽象類,必須實現所有抽象方法

介面(inte***ce):

1:實現介面的一定要實現介面裡定義的所有方法

2:介面可以實現多重繼承

區別: 1:抽象類和介面都不能夠例項化,但可以定義抽象類和介面型別的引用

2:乙個類如果繼承了某個抽象類或者實現了某個介面都需要對其中的抽象方法全部進行實現,否則該類仍然需要被宣告為抽象類

3:介面比抽象類更加抽象,因為抽象類中可以定義構造器,可以有抽象方法和具體方法,而介面中不能定義構造器而且其中的方法全部都是抽象方法

4:抽象類中的成員可以是private、預設、protected、public的,而介面中的成員全都是public的

5:抽象類中可以定義成員變數,而介面中定義的成員變數實際上都是常量。有抽象方法的類必須被宣告為抽象類,而抽象類未必要有抽象方法

5:寫出jdbc運算元據庫的步驟?

1:載入驅動

class.forname("oracle.jdbc.driver.oracledriver");

2:建立連線

connection con = drivermanager.getconnection("jdbc:oracle:thin:@localhost:1521:orcl", "1111", "1111");

3:建立語句

preparedstatement ps = con.preparestatement("select * from user");

4:執行語句

resultset rs = ps.executequery();

5:處理結果

while(rs.next())

6:關閉資源

finally catch (sqlexception e)

}

}

1:hashtable和hashmap有什麼區別?

- hashmap是hashtable的輕量級實現(非執行緒安全的實現),他們都完成了map介面

- 主要區別在於hashmap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高hashtable

- hashmap允許將null作為乙個entry的key或者value,而hashtable不允許

- 最大的不同是,hashtable的方法是synchronize的,而hashmap不是

2:建立多執行緒的方式有幾種?分別是什麼?執行緒死鎖是如何產生的?如何防止執行緒死鎖現象?

方式:

繼承thread、實現 runnable 介面

產生: - 乙個資源每次只能被乙個程序使用

- 乙個程序因請求發生阻塞時,依然對已獲得的資源保持不放

- 程序已經獲得資源使用權,但是一直未使用

- 同乙個程序,頻繁的獲取資源的優先使用權,一直未釋放

防止: 加鎖順序(執行緒按照一定的順序加鎖)

加鎖時限(執行緒嘗試獲取鎖的時候加上一定的時限,超過時限則放棄對該鎖的請求,並釋放自己占有的鎖)

死鎖檢測(一般是將所有的鎖存放於map物件中,檢測map中的鎖)

3:string, stringbuffer, stringbuilder 的區別?

- 執行速度快慢為:stringbuilder > stringbuffer > string

- (string為字串常量,而stringbuilder和stringbuffer均為字串變數,即string物件一旦建立之後該物件是不可更改的)

- stringbuilder是執行緒不安全的,而string、stringbuffer是執行緒安全的

4:tcp和udp的區別?哪個是三次握手協議?

tcp穩定性較高,但效率低

udp通訊相反,效率較高,但穩定性較差

5:jsp的常用指令有哪些?

三個編譯指令為:page、include、taglib

七個動作指令為:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:usebean、jsp:setproperty、jsp:getproperty

1:di有幾種方式、分別是什麼,你常用的是哪種方式?

1:setter方法

2:構造器

3:介面注入

註解實現注入(常用)

2:mybatis中$和#在xml中取值有什麼不同?

mybatis 為我們提供了兩種支援動態 sql 的語法:#{} 以及 ${}

#方式能夠很大程度防止sql注入,$方式無法防止sql注入

$方式一般用於傳入資料庫物件,例如傳入表名

#{}將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號

一般能用#的就別用$

3:session和cookie有什麼區別?

cookie存在客戶端、session資料放在伺服器上

cookie不是很安全,別人可以分析存放在本地的cookie並進行修改

session會在一定時間內儲存在伺服器上。當訪問增多,會比較占用你伺服器的效能

單個cookie在客戶端的限制是3k,就是說乙個站點在客戶端存放的cookie不能大於3k

4:get和post請求的區別?

get:

1:從伺服器上獲取資料,一般不能使用在寫操作介面

2:由url所限制,get方式傳輸的資料大小有所限制,傳送的資料量不超過2kb

3:請求的資料會附加在url之後,以?分隔url和傳輸資料,多個引數用&連線

4:安全性差

post:

1:向伺服器提交資料,一般處理寫業務

2:post方式傳送的資料量比較大,一般被預設為沒有限制

3:安全性高

4:請的求的資料內容放置在html header中

5:**(forward)和重定向(redirect)的區別?

1:效率上

**(forward) > 重定向(redirect)

2:顯示上

重定向(redirect):顯示新的url

**(forward):位址列不變

3:資料上

**(forward):可以共享request裡面的資料

重定向(redirect):不能

4:請求次數

重定向(redirect)是兩次

**(forward)是一次

java執行緒相關問題1

一.thread.sleep 1.thread.sleep 函式就是幹這種事的,他告訴作業系統 在未來的多少毫秒內我不參與cpu競爭 2.而thread.sleep 0 的作用,就是 觸發作業系統立刻重新進行一次cpu競爭 競爭 的結果也許是當前執行緒仍然獲得cpu控制權,也許會換成別的執行緒獲得c...

java面試基礎 集合相關問題

1 hashmap linkedhashmap concurrenthashmap arraylist linkedlist的底層實現。hashmap 執行緒非安全 實現了map介面,雜湊表儲存鍵值對,entry物件hash陣列預設大小16,2的指數次擴充 位運算增速,查詢效率高 允許鍵值對為nul...

JAVA關於異常的相關問題

異常處理是程式的重要組成部分。runtimeexception 點這裡 ioexception io異常 nullpoiterexception 空指標異常 classcastexception 型別轉換異常 arrayindexoutofbound ception 陣列越界異常 numberfor...