一.? 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.? Overload和Override的區(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、StringBuffer與StringBuilder的相同點(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ù)用)
1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關(guān)鍵字修飾(可以描述類和方法,不可以描述變量)。
2:抽象方法只定義方法聲明,并不定義方法實(shí)現(xiàn)。
3:抽象類不可以被創(chuàng)建對(duì)象(實(shí)例化)。
4:只有通過(guò)子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實(shí)例化。否則,該子類還是一個(gè)抽象類。
5:?抽象類只能單繼承。
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。