基礎(chǔ)

1、抽象類和接口的區(qū)別
抽象類用來捕捉子類的公共特性,不能被實(shí)例化,只能用作被子類繼承的超類。
接口是抽象方法的集合,若一個(gè)類實(shí)現(xiàn)了某接口,就必須實(shí)現(xiàn)接口中的所有抽象方法。

參數(shù) 抽象類 接口
默認(rèn)方法實(shí)現(xiàn) 可以有默認(rèn)方法 無默認(rèn)方法,JAVA1.8之后有默認(rèn)方法
實(shí)現(xiàn)方式 extends implement
繼承性態(tài) 單繼承 多實(shí)現(xiàn)
構(gòu)造器 可以有構(gòu)造器 無構(gòu)造器

2、java的異常有哪幾類?分別怎么使用?
編譯時(shí)異常:

IOException
SQLException
parseException
CloneNotSupportException

運(yùn)行時(shí)異常:

NullpointerException
ArrayIndexOutOfBoundsException
NoClassDefFoundException
ClassCastException
OutOfMemoryException
ArithmeticException
IllegalArgumentException: 非法參數(shù)異常
IllegalThreadStateException: 非法線程狀態(tài)異常
NumberFormatException: 數(shù)據(jù)格式異常
PatternSyntaxException:

使用:

1、throws
2、try{}catch(Exception e){}

3、常用的集合類有哪些?比如List如何排序?
Collection:

List:
      ArrayList
      LinkedList
Set:
      HashSet
      LinkedHashSet
      SortedSet

Map:

HashMap
LinkedHashMap
ConcourrentHashMap

List如何排序:
要排序的對(duì)象實(shí)現(xiàn)Comparable接口
Collections.sort()方法

4、內(nèi)存溢出是怎么回事?請(qǐng)舉一個(gè)例子?
OutOfMemroyException:PermGen space

啟動(dòng)程序時(shí)加載信息過大,超過Permanment Generation space空間大小

OutOfMemoryException:Java heap space

程序運(yùn)行過程中,很多對(duì)象沒有被垃圾回收機(jī)制回收

StackOverFlowError

棧中保存對(duì)象過多,可能出現(xiàn)在遞歸方法調(diào)用過多的情況

5、hashCode方法的作用
在不允許重復(fù)的集合中,比如set、hashTable、HashMap中,在put過程中,保證數(shù)據(jù)不重復(fù),先通過比較hashcode,若hashcode不同,則兩個(gè)對(duì)象肯定不一樣,若hashcode相同,才調(diào)用equals方法,一定程度上提高put的速率。


public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }
 
        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

先判斷key是否為空
不為空的話,生成hashcode
根據(jù)hashcode找到對(duì)應(yīng)桶的位置
對(duì)應(yīng)位置上若有key相同的數(shù)據(jù),則覆蓋原數(shù)據(jù)
添加數(shù)據(jù)到對(duì)應(yīng)的位置
6、保證hashmap的線程安全

1、使用hashTable,相應(yīng)的方法都加了鎖
2、java.util.Collections.synchronizedMap(Map)對(duì)map進(jìn)行封裝
3、使用concurrentHashMap

7、創(chuàng)建一個(gè)類的實(shí)例都有哪些辦法?
new
反射
類實(shí)現(xiàn)克隆接口,克隆一個(gè)實(shí)例
實(shí)現(xiàn)序列化接口的類,通過IO流反序列化讀取一個(gè)類,獲得實(shí)例。

8、Servlet的生命周期

1、加載和實(shí)例化
2、初始化
3、調(diào)用service方法
4、銷毀

9、如何用Java分配一段連續(xù)的1G的內(nèi)存空間?需要注意些什么?
ByteBuffer.allocateDirect(102410241024)

10、什么是java序列化,如何實(shí)現(xiàn)java序列化?(寫一個(gè)實(shí)例)?
序列化是java處理對(duì)象流的一種機(jī)制,可對(duì)序列化后的對(duì)象進(jìn)行讀寫操作,也可在網(wǎng)路進(jìn)行傳輸。
實(shí)現(xiàn)java序列化,對(duì)象要實(shí)現(xiàn)serializable接口,該對(duì)象的類名、簽名、字段、數(shù)值都會(huì)被編碼

11、java使用jdbc連接數(shù)據(jù)庫的步驟
獲得數(shù)據(jù)庫連接驅(qū)動(dòng)Driver
獲得數(shù)據(jù)庫連接Connection
獲得statement對(duì)象
用statement對(duì)象執(zhí)行數(shù)據(jù)庫操作
處理執(zhí)行結(jié)果
若有異常,進(jìn)行異常處理
不管是否有異常都要關(guān)閉JDBC對(duì)象,以釋放JDBC資源,requestSet、statement、connection

12、select count(),count(1), count(col_name) from dual 區(qū)別
1)、count(col_name),統(tǒng)計(jì)的col_name中不會(huì)統(tǒng)計(jì)null,其他兩者會(huì)統(tǒng)計(jì)null
2)、有主鍵,count(主鍵)比較快
3)、一般情況下count(1)比count(
)快,但是表中只有一個(gè)列,count(*)比較快
4)、在InnoDb中執(zhí)行select count(1) from table 會(huì)做行數(shù)的統(tǒng)計(jì),而MyISAM中,會(huì)直接讀取已存取好的總數(shù)。但是select count(1) from table where col='' ,加了篩選條件之后二者是一樣的去統(tǒng)計(jì)行數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容