2019年Java面試題(一) css和Java基礎(chǔ) 2019-04-27

一.? CSS

1.?? 引入的方式有哪些?

1)外聯(lián):<link>標(biāo)簽

2)內(nèi)聯(lián):<style>標(biāo)簽

3)元素內(nèi)嵌:元素的style屬性


2.? CSS選擇符有哪些?

標(biāo)簽選擇符、類選擇符、id選擇符、組合選擇符


3.?$(this)??this?關(guān)鍵字在?jQuery?中有何不同?

前者是jQuery對(duì)象,使用jQuery方法和屬性;后者是JavaScript對(duì)象,使用JavaScript方法和屬性。


4.? 列舉常用的幾種jQuery選擇器

1)基本選擇器:包括id選擇器、class選擇器和元素選擇器。

2)層次選擇器:也叫做路徑選擇器,可以根據(jù)路徑層次來(lái)選擇相應(yīng)的DOM元素。

3)過(guò)濾選擇器:在前面的基礎(chǔ)上過(guò)濾相關(guān)條件,得到匹配的dom元素:如屬性選擇器、表單選擇器等等


二.? JAVA基礎(chǔ)?

1.? 什么是java序列化,如何實(shí)現(xiàn)java序列化?(寫一個(gè)實(shí)例)

序列化:處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化??梢詫?duì)流化后的對(duì)象進(jìn)行讀寫操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象進(jìn)行多謝操作時(shí)所引發(fā)的問題

序列化的實(shí)現(xiàn)(簡(jiǎn)單的講):

????? 實(shí)現(xiàn)接口Serializable

????? 實(shí)現(xiàn)接口Externalizable


2.?java==eqauls()的區(qū)別

1)對(duì)于==,比較的是值是否相等

????????????如果作用于基本數(shù)據(jù)類型的變量,則直接比較其存儲(chǔ)的“值”是否相等;

    如果作用于引用類型的變量,則比較的是所指向的對(duì)象的地址

2)對(duì)于equals方法,注意:equals方法不能作用于基本數(shù)據(jù)類型的變量,equals繼承Object類,比較的是是否是同一個(gè)對(duì)象

    如果沒有對(duì)equals方法進(jìn)行重寫,則比較的是引用類型的變量所指向的對(duì)象的地址;

    諸如String、Date等類對(duì)equals方法進(jìn)行了重寫的話,比較的是所指向的對(duì)象的內(nèi)容。


3.?hashCode()equals()是什么?

hashCode()方法和equals()方法的作用其實(shí)一樣,在Java里都是用來(lái)對(duì)比兩個(gè)對(duì)象是否相等一致。


4.?equals()hashcode的區(qū)別

1).? ? 性能

重寫的equals()里一般比較的比較全面比較復(fù)雜,這樣效率就比較低,而利用hashCode()進(jìn)行對(duì)比,則只要生成一個(gè)hash值進(jìn)行比較就可以了,效率很高。

2).? ? 可靠性

①? equals()相等的兩個(gè)對(duì)象他們的hashCode()肯定相等,也就是用equals()對(duì)比是絕對(duì)可靠的。

②? hashCode()相等的兩個(gè)對(duì)象他們的equals()不一定相等,也就是hashCode()不是絕對(duì)可靠的。


5.?java==、equals()hashcode()區(qū)別

1).==運(yùn)算符是判斷兩個(gè)對(duì)象是不是同一個(gè)對(duì)象,即他們的地址是否相等

2).object類中equals與==是等效的

3).覆寫equals更多的是追求兩個(gè)對(duì)象在邏輯上的相等,你可以說(shuō)是值相等,也可說(shuō)是內(nèi)容相等。(覆蓋以后,覆蓋equals時(shí)總要覆蓋hashCode )

4).hashCode用于返回對(duì)象的hash值,主要用于查找的快捷性,因?yàn)閔ashCode也是在Object對(duì)象中就有的,所以所有Java對(duì)象都有hashCode,在HashTable和HashMap這一類的散列結(jié)構(gòu)中,都是通過(guò)hashCode來(lái)查找在散列表中的位置的。


6.?動(dòng)態(tài)代理的兩種方式,以及區(qū)別

  答:jdk動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理;

  JDK動(dòng)態(tài)代理只能對(duì)實(shí)現(xiàn)了接口的類生成代理,而不能針對(duì)類;cglib是針對(duì)類實(shí)現(xiàn)代理,主要是對(duì)指定的類生成一個(gè)子類,覆蓋其中的方法,因?yàn)槭抢^承,所以該類或方法最好不要聲明稱final,final可以阻止繼承和多態(tài);


7.? 排序都有哪幾種方法?請(qǐng)列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序?

排序的方法有:插入排序(直接插入排序、希爾排序)、交換排序(冒泡排序、快速排序)、選擇排序(直接選擇排序、堆排序)、歸并排序、分配排序(箱排序、基數(shù)排序)


8.? OverloadOverride的區(qū)別。Overloaded的方法是否可以改變返回值的類型?

不同:

Override:方法的重寫:子類覆蓋父類的方法,將子類傳與父類的引用,調(diào)用的還是子類的方法

Overload:方法的重載:一個(gè)類多個(gè)方法,名稱相同,參數(shù)個(gè)數(shù)類型不同

相同:

兩者都是Java多態(tài)性的不同表現(xiàn)

Overload的方法時(shí)可以改變返回值的類型

9.?????&&&的區(qū)別?

&是位運(yùn)算符,表示按位與運(yùn)算;&&是邏輯運(yùn)算符,表示邏輯與(and)

10.?????final類有什么特點(diǎn)?

1:這個(gè)關(guān)鍵字是一個(gè)修飾符,可以修飾類,方法,變量。

2:被final修飾的類是一個(gè)最終類,不可以被繼承。

3:被final修飾的方法是一個(gè)最終方法,不可以被覆蓋。

4:被final修飾的變量是一個(gè)常量,只能賦值一次。


11.?????final, finally, finalize的區(qū)別?

final用于聲明屬性、方法和類,分別表示屬性不可變,方法不可被覆蓋,類不可繼承

finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行

finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,如關(guān)閉文件等

?

12.?????Anonymous Inner Class(匿名內(nèi)部類)是否可以extends(繼承)其他類,是否可以implements(實(shí)現(xiàn))interface(接口)

可以繼承其他累或完成其他接口,在swing編程中常用此方式

?

13.?????Static Nested Class Inner Class的不同?

Static nested class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。


14.?????static局部變量與全局變量的區(qū)別,編譯后映射文件是否包含此類變量的地址。

? static全局變量只初使化一次,防止在其他文件單元中被引用;

 static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;

 static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝;


15.?????String and StringBuffer的區(qū)別?

他們都可以儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。

String類提供數(shù)值不可改變的字符串

StringBuffer類提供字符串進(jìn)行修改

?

16.?????String、StringBufferStringBuilder的相同點(diǎn)與區(qū)別--線程安全性體現(xiàn)

1.? ? ? String是不可改變的字符串;StringBuffer和StringBuilder是可改變的字符串

2.? ? ? StringBuilder是線程非安全,速度快,StringBuffer是線程安全

? ? ? ? ? ? 單線程操作字符串緩沖區(qū),操作大量數(shù)據(jù)使用StringBuilder。

? ? ? ? ? ? 多線程操作字符串緩沖區(qū),操作大量數(shù)據(jù)使用 StringBuffer。

3.? ? ? String是final類,StringBuffer不是

4.? ? ? String重寫equals()和hashCode(),StringBuffer沒有


17.?????面向?qū)ο蟮?/b>7大設(shè)計(jì)原則

里氏原則,依賴倒置,迪米特法則,單一職責(zé),接口隔離,開閉原則,缺少(聚合復(fù)用)


18.?????抽象類的特點(diǎn):

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關(guān)鍵字修飾(可以描述類和方法,不可以描述變量)。

2:抽象方法只定義方法聲明,并不定義方法實(shí)現(xiàn)。

3:抽象類不可以被創(chuàng)建對(duì)象(實(shí)例化)。

4:只有通過(guò)子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實(shí)例化。否則,該子類還是一個(gè)抽象類。

5:?抽象類只能單繼承。


19.?????抽象類和接口的區(qū)別?

1:抽象類只能被繼承,而且只能單繼承。

接口需要被實(shí)現(xiàn),而且可以多實(shí)現(xiàn)。

2:抽象類中可以定義非抽象方法,子類可以直接繼承使用。

接口中都有抽象方法,需要子類去實(shí)現(xiàn)。

3:抽象類使用的是? is a 關(guān)系。

接口使用的 like a 關(guān)系。

4:抽象類的成員修飾符可以自定義。

接口中的成員修飾符是固定的。全都是public的。


20.?????java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。


21.?????構(gòu)造器Constructor是否可被override?

構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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