前言
這幾天找了很多面試資料,發(fā)現(xiàn)這50道面試題都是面試官問的最多的。我分享出來希望那些剛出來找工作或者是要跳槽的小伙伴們給到一些幫助,因?yàn)槲乙彩强磩e人給我的面試題過來的。

1.short s1 = 1? s1 = s1 + 1?有什么錯(cuò)? short s1 = 1? s1 += 1?有什么錯(cuò)?
第一種情況,s1是short類型,在計(jì)算s1=s1+1時(shí),前邊是short型,后邊是int型,不能自動(dòng)轉(zhuǎn)換。由于沒有強(qiáng)轉(zhuǎn),要報(bào)類型錯(cuò)誤。
第二種情況,使用了+=這個(gè)java自帶的運(yùn)算符,java內(nèi)部會(huì)對(duì)其進(jìn)行處理,所以編譯通過,不會(huì)報(bào)錯(cuò)。
2.String s = new String("xyz");創(chuàng)建了幾個(gè)String Object
創(chuàng)建了倆個(gè)對(duì)象或一個(gè)對(duì)象,如果常量池中沒有“xyz”第一次=在常量池中創(chuàng)建了一個(gè)字符串對(duì)象,第二次new又創(chuàng)建了一個(gè)字符串引用對(duì)象;如果常量池中有“xyz”,那就只是new的時(shí)候創(chuàng)建了一個(gè)對(duì)象。
3.說說&和&&的區(qū)別。
&和&&都表示與的意思,既表達(dá)式倆邊都成立,結(jié)果才成立。
&&是邏輯運(yùn)算符,&&有短路作用,既當(dāng)表達(dá)式左邊為假時(shí),不需要計(jì)算右邊,整個(gè)的結(jié)果直接為假;&沒有
&是位運(yùn)算符,&的左右倆邊可以是布爾類型,也可以是數(shù)值;&&倆邊只能是布爾類型
4.==與equals的區(qū)別
從表面上看,對(duì)于基本數(shù)據(jù)類型==是判斷的值是否相等;對(duì)于引用數(shù)據(jù)類型是判斷是否為同一個(gè)對(duì)象
5.Integer與int的區(qū)別
int是八大基本數(shù)據(jù)類型之一,Integer是int的封裝類。
int的默認(rèn)值是0,Integer的默認(rèn)值是null,此時(shí)的0代表這個(gè)數(shù)賦值0,而null代表沒接收到這個(gè)值
Integer提供了與整數(shù)相關(guān)的操作,int沒有
從本質(zhì)上看,是看是否為一個(gè)引用地址
equals是判斷值是否相等
6.接口與抽象類的區(qū)別
抽象類是用abstract修飾的類,抽象類不能new對(duì)象。
接口是比抽象類還抽象的“類”
普通類:具體實(shí)現(xiàn)
抽象類:規(guī)范(抽象方法),具體實(shí)現(xiàn)
接口:規(guī)范(抽象方法)
區(qū)別:
(1).抽象類中可以有抽象方法也可以有非抽象方法,接口中只能有抽象方法
(2).抽象類中可以有成員變量,接口中只能有常量,用public static final修飾,默認(rèn)可不寫
(3).抽象類有構(gòu)造方法,接口沒有構(gòu)造方法
(4).抽象類中的方法的訪問修飾符可以是public,protected,默認(rèn);接口中方法的訪問修飾符只能是public,并且默認(rèn)值是public abstract
(5).抽象類中可以有靜態(tài)方法,接口中不能有靜態(tài)方法(JDK1.8之后接口中增加了靜態(tài)方法和默認(rèn)方法)。(static是類名直接調(diào)用,abstract是子類實(shí)現(xiàn)創(chuàng)建對(duì)象調(diào)用,如果一起修飾,自相矛盾了)
(6).一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,只能繼承一個(gè)抽象類
7.JDK,JRE,JVM的聯(lián)系與區(qū)別
JDK是java開發(fā)工具包,JDK包括JRE,類庫,java工具
JRE是java運(yùn)行環(huán)境,JRE包括JVM,JRE里有運(yùn)行.class的java.exe
JVM是java虛擬機(jī),java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)的機(jī)器指令執(zhí)行,這也是java語言跨平臺(tái)的根源,是“一次編譯,到處運(yùn)行”的原因
聯(lián)系:JDK下的jre文件夾下有倆個(gè)文件夾lib和bin;在這里可以理解為bin就是jvm,lib就是類庫;所以JRE=JVM+類庫
我們利用JDK開發(fā)屬于自己的java程序,javac編譯成字節(jié)碼,在JRE上運(yùn)行這些字節(jié)碼,JVM解析這些字節(jié)碼,最終映射到CPU指令集或OS的系統(tǒng)調(diào)用
區(qū)別:
JDK與JRE的區(qū)別:
(1).JDK有javac.exe;JRE沒有
(2).JDK是開發(fā)環(huán)境,JRE是運(yùn)行環(huán)境
JRE與JVM的區(qū)別:
JVM執(zhí)行.class需要JRE下lib類庫的支持(尤其是rt.jar)
8.override(重寫)和overload(重載)的區(qū)別
重載是在一個(gè)類中,方法名相同,參數(shù)列表不同(參數(shù)類型和參數(shù)個(gè)數(shù))的一種現(xiàn)象
(1).重載與返回值類型無關(guān)
(2).不能通過訪問修飾符進(jìn)行重載
如下是重載:
public void a(int x){
x++;
}
public int a(int x,int y){
return x+y;
}
protected double a(double d){
return d;
}
重寫是在父子類中,子類重寫父類的方法,要求方法名與參數(shù)列表,返回值類型完全相同。子類重寫父類規(guī)范要在子類的方法前加注解@Override
(1).重寫的返回值類型可以改,但只能是父子類
例如:
public Father a(Father f){
System.out.println("aaaaa");
return f;
}
@Override
public Son a(Father f){
System.out.println("bbbbbb");
Son s=(Son)f;
return s;
}
(2).重寫的訪問修飾符得大于等于原來的
(3).不能重寫私有方法
(4).參數(shù)列表的順序與類型必須一樣,變量名可不同
9,""空字符串的作用
如下所示:
package com.neuedu.nineteen;
public class Test {
public static void main(String[] args) {
String s="";
for (char i = 'a'; i < 'd'; i++) {
s=s+i;//輸出abc
// s=i+s;//輸出cba
}
System.out.println(s);
}
}
如題所示,當(dāng)進(jìn)行s=s+i的時(shí)候,s在前和s在后輸出的結(jié)果是相反的。空字符串在前時(shí)是正著輸出,空字符串在后是逆著輸出
10.在java中如何跳出多層循環(huán)
利用“打標(biāo)簽”的形式,方法如下:
ok: for (int i = 0; i <3 ; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 5; k++) {
break ok;
}
}
}
11.Java有沒有g(shù)oto?
java中的保留字,現(xiàn)在在java中沒有使用
12.switch語句能否作用在byte上,能否作用在long上,能否作用在String上?
可以作用在byte上,因?yàn)閎yte能自動(dòng)轉(zhuǎn)為int;不能作用在long上,long轉(zhuǎn)int不能自動(dòng)轉(zhuǎn),需要強(qiáng)轉(zhuǎn);在jdk1.7以后可以作用在String上
13.使用final關(guān)鍵字修飾一個(gè)變量時(shí),是引用不能變,還是引用的對(duì)象不能變?
是引用不能變,即對(duì)象的指向不能變,但引用的對(duì)象即引用里的值是可以變得,因?yàn)樗譀]有用final修飾
14.構(gòu)造器Constructor是否可被override?
構(gòu)造器不能被重寫,因?yàn)闃?gòu)造器不能被繼承,但它可以重載
15.啟動(dòng)一個(gè)線程是用run()還是start()
用start()方法,start方法內(nèi)調(diào)用了run方法,如果直接調(diào)用run方法,那么就相當(dāng)于沒有開啟線程而直接調(diào)用的run方法。
16.靜態(tài)變量和實(shí)例變量的區(qū)別?
(1).靜態(tài)變量用static修飾,實(shí)例變量不需要
(2).靜態(tài)變量是屬于類的,實(shí)例變量是屬于對(duì)象的
(3).當(dāng)一個(gè)對(duì)象把靜態(tài)變量的值改了,其他對(duì)象調(diào)用時(shí)它的值也跟著變了;實(shí)例變量是獨(dú)立的,一個(gè)對(duì)象修改它的值不會(huì)影響另一個(gè)對(duì)象調(diào)用它的值
17.Java中的String,StringBuilder,StringBuffer三者的區(qū)別?
(1).String是不可變字符串,StringBuilder和StringBuffer是可變字符串
(2).從運(yùn)行效率看,StringBuilder>StringBuffer>String
(3).StringBuilder非線程安全,StringBuffer線程安全
總結(jié):String適合少量字符串的操作
StringBuilder適合單線程大量數(shù)據(jù)的操作
StringBuffer適合多線程大量數(shù)據(jù)的操作
18.final, finally, finalize的區(qū)別
final修飾屬性,方法,類;分別表示屬性不可變,方法不可覆蓋,類不可繼承
finally是異常中的關(guān)鍵字,始終要執(zhí)行的代碼放在finally塊中
finalize是Object的一個(gè)方法,是垃圾回收機(jī)制,重寫此方法可以回收其他資源,如文件關(guān)閉。JVM不保證此方法總被調(diào)用
19.try {}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally {}里的code會(huì) 不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
會(huì)執(zhí)行,首先明確一點(diǎn)是“finally塊中的代碼始終要執(zhí)行”,也就是說不管怎樣,它都會(huì)執(zhí)行。并且在return前執(zhí)行,執(zhí)行finally后通過return退出??聪逻叺睦樱?/p>
public class Test {
public static String output="";
public static void foo(int i){
try{
if(i==1){
throw new Exception();
}
output+="1";
}catch(Exception e){
output+="2";
return;
}finally{
output+="3";
}
output+="4";
}
public static void main(String[] args) {
foo(0);
foo(1);
System.out.println(output);//13423
}
}
20.Vector和ArrayList的區(qū)別
ArrayList和Vector是基于數(shù)組的,有下標(biāo),有序,元素可重復(fù)。
Vector就是把ArrayList中的所有方法加了synchronized
所以,Vector是線程安全的,ArrayList是線程不安全的,但Collections下有靜態(tài)方法,synchronizedList來代替Vector,Vector在日常中很少使用。
21.System.out.println()分別代表什么?
System.out.println()是我們?nèi)粘J褂米疃嗟妮敵稣Z句,其中System是一個(gè)類,out是這個(gè)類中的一個(gè)靜態(tài)常量對(duì)象,是PrintStream類型的,println()是PrintStream類的方法,用于輸出。
22.比較throw和throws
throws是聲明異常的關(guān)鍵字,其后是一個(gè)異常類,比如throws IOException
throw是拋出異常的關(guān)鍵字,其后跟著一個(gè)異常對(duì)象,比如throw new IOException()
23.垃圾回收的原理和優(yōu)點(diǎn)
垃圾回收是一個(gè)低級(jí)別的線程運(yùn)行,在不知情的情況下對(duì)堆內(nèi)存中的閑置的或者長期沒使用的對(duì)象進(jìn)行回收。
優(yōu)點(diǎn):
(1).不需要考慮內(nèi)存管理;
(2).防止內(nèi)存泄漏,有效的管理內(nèi)存;
(3).對(duì)象不再有作用域的問題,只有對(duì)象的引用存在作用域;
(4).程序員不能實(shí)時(shí)的對(duì)某個(gè)對(duì)象或所有對(duì)象調(diào)用垃圾回收器
24.線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
線程是執(zhí)行和調(diào)度的基本單位,是進(jìn)程中一個(gè)執(zhí)行過程,一個(gè)進(jìn)程有多個(gè)線程,線程間共享內(nèi)存,如果是單核CPU,那么CPU一會(huì)訪問a線程,一會(huì)訪問b線程,線程之間切換很快,給人的感覺是他們?cè)谕綀?zhí)行。
線程的基本狀態(tài)分為:新生狀態(tài),就緒狀態(tài),運(yùn)行狀態(tài),阻塞狀態(tài),死亡狀態(tài)
關(guān)系:調(diào)用start()方法線程轉(zhuǎn)為就緒狀態(tài)
調(diào)用wait()方法線程轉(zhuǎn)為就緒狀態(tài)
調(diào)用sleep()方法線程轉(zhuǎn)為阻塞狀態(tài)
就緒,運(yùn)行之間是相互轉(zhuǎn)換的
25.Collection 和 Collections的區(qū)別
Collection是集合的最頂層接口,這個(gè)接口下有List和Set倆個(gè)子接口
Collections是針對(duì)集合的一個(gè)幫助類,里邊有很多靜態(tài)方法,用于集合的搜索排序等
26.兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
如果是在hashMap中不對(duì),反之這句話是對(duì)的。
如果對(duì)象保存在hashMap或hashSet中,那么她們的值相等,hashCode也一定相等
如果沒有保存在hashMap或hashSet中,那么與hashCode沒什么關(guān)系了,她們的hashCode值可以不等
27.super.getClass()方法調(diào)用
方法如下:
import java.util.Date?
public class Test extends Date {
public static void main(String[] args) {
new Test().test()?
}
public void test() {
System.out.println(super.getClass().getName())?
}
}
輸出的結(jié)果是Test
原因:由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,所以,在 test方法中調(diào)用super.getClass().getName()方法,等效于調(diào)用getClass().getName()方法,所以,super.getClass().getName()方法返回的也應(yīng)該是Test。
如果想得到父類的名稱,應(yīng)該用如下代碼:
getClass().getSuperClass().getName()?
28.sleep() 和 wait() 有什么區(qū)別?
(1).sleep是Thread類下的方法;wait是Object下的方法
(2).sleep是使線程休眠,不釋放鎖;wait是使線程等待,釋放鎖
sleep讓出的是cpu,如果此時(shí)代碼是加鎖的,那么即使讓出了CPU,其他線程也無法運(yùn)行,因?yàn)闆]有得到鎖;wait是讓自己暫時(shí)等待,讓出同步鎖,等待其他線程執(zhí)行完了,再來執(zhí)行自己
(3).調(diào)用sleep進(jìn)入阻塞狀態(tài);調(diào)用wait進(jìn)入就緒狀態(tài)
29.說出一些常用的類,包,接口,請(qǐng)各舉5個(gè)
常用的類:String,Arrays,Collections,System,Integer,BufferedReader,BufferedWriter,
常用的包:util,io,sql,awt,list,lang
常用的接口:List,Map,Set,Serializable,Comparable,Runnable
30.線程的sleep()方法和yield()方法有什么區(qū)別?
(1).sleep()會(huì)給比它優(yōu)先級(jí)低的線程機(jī)會(huì),yield()方法只會(huì)給跟它同等級(jí)或比它優(yōu)先級(jí)高的線程機(jī)會(huì)
(2).執(zhí)行sleep后進(jìn)入阻塞狀態(tài),執(zhí)行yield后進(jìn)入就緒
(3).sleep方法聲明拋出InterruptedException異常,yield沒有聲明拋出任何異常
(4).sleep比yield方法具有更好的移植性
31.什么是序列化,如何實(shí)現(xiàn)序列化?
序列化機(jī)制(包括序列化和反序列化)的本質(zhì)是用流將對(duì)象讀到內(nèi)存和寫入外存。
序列化機(jī)制的意義就是將對(duì)象脫離程序運(yùn)行獨(dú)立存在
應(yīng)用場(chǎng)景是在RMI(遠(yuǎn)程方法調(diào)用)中應(yīng)用,即通過網(wǎng)路或跨平臺(tái)傳輸對(duì)象,而RMI是javaEE開發(fā)基礎(chǔ),所以javaEE要求傳遞的參數(shù)與返回值都實(shí)現(xiàn)序列化機(jī)制
序列化是用流將java對(duì)象轉(zhuǎn)成二進(jìn)制寫入硬盤或網(wǎng)絡(luò)
反序列化是用流將二進(jìn)制數(shù)據(jù)轉(zhuǎn)為java對(duì)象寫入內(nèi)存
實(shí)現(xiàn)序列化需要實(shí)現(xiàn)Serializable或Externalizable接口,如果某個(gè)成員變量是引用數(shù)據(jù)類型,那么要求該引用類也是可序列化的。如果類中每個(gè)成員變量不想被序列化,可以用transient關(guān)鍵字修飾。
序列化通常與IO中的ObjectInputStream(readObject方法)和ObjectOutputStream(writeObject方法)搭配使用
32.PreparedStatement與Statement的區(qū)別
PreparedStatement是預(yù)編譯語句執(zhí)行者,數(shù)據(jù)庫對(duì)sql語句進(jìn)行預(yù)編譯;Statement是執(zhí)行時(shí)對(duì)sql語句進(jìn)行編譯
Statement存在sql注入的問題,PreparedStatement解決了這個(gè)問題
PreparedStatement的執(zhí)行效率比Statement高
PreparedStatement中使用?占位符,設(shè)置參數(shù)更方便
33.Java中的HashMap的工作原理是什么?
HashMap的原理是:數(shù)組+鏈表。
HashMap類有一個(gè)叫Entry的內(nèi)部類。這個(gè)Entry類包含了key-value作為實(shí)例變量。根據(jù)key的hashcode方法計(jì)算出hash值來決定具體在哪個(gè)位置,如果這個(gè)位置有值,則調(diào)用equals方法進(jìn)行判斷,如果equals相等則替換,如果equals不等則追加到鏈表后。
34.什么是單例模式?
單例模式是指一個(gè)類只創(chuàng)建一個(gè)實(shí)例。
單例模式是經(jīng)常用到的一種設(shè)計(jì)模式,它分為餓漢式、懶漢式、靜態(tài)內(nèi)部類、枚舉
餓漢式:在類加載時(shí)就創(chuàng)建本類對(duì)象為私有靜態(tài)常量,構(gòu)造方法寫成私有的,使用共有靜態(tài)方法代替構(gòu)造方法獲取到這個(gè)單例
懶漢式:在餓漢式的基礎(chǔ)上給靜態(tài)方法加synchronized,在方法里判斷本類對(duì)象是否為空,為空時(shí)創(chuàng)建。
靜態(tài)內(nèi)部類:將單例放在靜態(tài)內(nèi)部類中,避免在類加載的時(shí)候就創(chuàng)建對(duì)象,然后用靜態(tài)方法代替私有構(gòu)造
35.JVM內(nèi)存結(jié)構(gòu)
JVM內(nèi)存結(jié)構(gòu)包括:堆、虛擬機(jī)棧、本地方法棧、程序計(jì)數(shù)器、方法區(qū)
堆:存放new的對(duì)象,是內(nèi)存中最大的一塊區(qū)域
虛擬機(jī)棧:就是我們平時(shí)所說的棧,用來存放基本數(shù)據(jù)類型和對(duì)象的引用
本地方法棧:與虛擬機(jī)棧相同,只不過是為native方法服務(wù)的
程序計(jì)數(shù)器:用來標(biāo)記程序運(yùn)行到哪一行
方法區(qū)也叫永久代,存放類的信息。在jdk1.6及以前,常量池在方法區(qū)里,常量池用于存放靜態(tài)變量和字面量;在jdk1.7,常量池從方法區(qū)中分離出來,在內(nèi)存中開辟了一段空間作為常量池;在jdk1.8,取消了方法區(qū),取而代之的是元數(shù)據(jù)區(qū)。
36.面向?qū)ο蟮奶卣?/p>
面向?qū)ο笥腥筇卣鳎悍庋b、繼承、多態(tài)
封裝是將重復(fù)利用的代碼包裝起來,以便其他處引用,提高了代碼的可重用性
繼承是發(fā)生在父子類之間的,子類繼承父類開放權(quán)限的所有代碼,其實(shí)繼承破壞了封裝性
多態(tài)是在不改變程序的代碼的情況下,在程序運(yùn)行時(shí)動(dòng)態(tài)的綁定代碼,使程序出現(xiàn)多種狀態(tài)
37.對(duì)象的深拷貝與淺拷貝
對(duì)象的深拷貝是在拷貝時(shí)把這個(gè)對(duì)象復(fù)制一份,如果這個(gè)對(duì)象所屬的類中有引用數(shù)據(jù)類型,也會(huì)將引用該類復(fù)制一份,以達(dá)到深度克隆,這樣的話,一個(gè)改變了它的值不會(huì)影響另一個(gè)
實(shí)現(xiàn)深拷貝的方法:
覆蓋Object的clone方法
通過序列化方式實(shí)現(xiàn)深拷貝
對(duì)象的淺克隆是在拷貝時(shí)把這個(gè)對(duì)象復(fù)制一份,但如果這個(gè)對(duì)象所屬的類中有引用數(shù)據(jù)類型,這個(gè)引用還指向原來的引用。
例如:從A拷貝一份B,如果是深克隆,A和B是倆個(gè)獨(dú)立的對(duì)象,只不過一模一樣。如果是淺克隆,如果A中有引用類型,那么B中此引用類型和A中此引用類型指向的是同一塊地址。
38.java8新特性有哪些?
lambda表達(dá)式
函數(shù)式接口
重復(fù)注解
接口中的默認(rèn)方法和靜態(tài)方法
39.什么是反射
反射是在運(yùn)行時(shí)動(dòng)態(tài)的獲取類的信息,獲取Class對(duì)象有三種方法:類名.class、對(duì)象名.getClass()、Class.forName(“權(quán)限定名”)
獲取到類對(duì)象后可以用newInstance()創(chuàng)建對(duì)象,Class類中API提供了獲取屬性、方法、構(gòu)造器的方法。
40.String下有哪些方法?
substring():截取字符串
split():分割字符串
valueOf():將其他類型轉(zhuǎn)為字符串類型
trim():去掉字符串前后空格
indexOf():返回第一次出現(xiàn)該字符的索引
length():長度
concat():拼接
startsWith():以……開始
endsWith():以什么結(jié)束
……
41.如何避免死鎖?
(1).避免給同一線程多次加鎖
(2).主副線程的加鎖順序一致
(3).使用定時(shí)鎖
死鎖檢測(cè)
42.樂觀鎖與悲觀鎖的區(qū)別?
悲觀鎖是將鎖給一個(gè)線程,其他線程等待這個(gè)線程釋放鎖
樂觀鎖是先進(jìn)行業(yè)務(wù)處理,最后一步更新數(shù)據(jù)時(shí)再加鎖
(1).悲觀鎖適合于寫頻繁;樂觀鎖適合于讀取頻繁
(2).悲觀鎖是先加鎖后進(jìn)行業(yè)務(wù)邏輯;樂觀鎖是先進(jìn)行業(yè)務(wù)邏輯再加鎖
43.Lock與synchronized的區(qū)別?
(1).synchronized是關(guān)鍵字;Lock是接口
(2).synchronized在發(fā)生異常后會(huì)自動(dòng)釋放鎖;Lock不會(huì)
(3).Lock有trylock方法看是否獲得鎖;synchronized沒有
(4).synchronized是修飾代碼塊、方法獲得鎖的;Lock是通過ReetrantLock類加鎖的
(5).synchronized是悲觀鎖;Lock是樂觀鎖
44.靜態(tài)方法有什么缺點(diǎn)?
靜態(tài)方法是屬于類的,可以直接利用類名.直接調(diào)用,但靜態(tài)方法不能自動(dòng)銷毀,它的執(zhí)行效率比實(shí)例化要高。
45.hashCode相等,equals一定相等嗎?
不一定。hashCode相等是指哈希值相等,而值不一定相等。
比如1和5這倆個(gè)數(shù)都在0這個(gè)位置上,那么它們的哈希值相等,但這倆個(gè)數(shù)不相等。
46.ArrayList刪除指定的元素怎么刪?
(1).用普通for循環(huán),并且在循環(huán)中i--
//加入刪除元素b
for (int i = 0; i < al.size(); i++) {
if (al.get(i) == "b") {
al.remove(i);
i--; //一定要記著i--,因?yàn)槊看蝿h除完一個(gè)元素,后邊的元素會(huì)往前挪
}
}
(2).用一個(gè)List 記錄要?jiǎng)h除的數(shù)據(jù),最后在原集合中removeAll(List);
(3).用迭代器自帶的remove方法
47.List與Set的區(qū)別
List和Set都是Collection接口下的接口。
(1).List中元素可重復(fù),有序,有下標(biāo);Set中元素?zé)o序,不可重復(fù)
(2).List的查找快,增刪慢;Set的查找慢,增刪快
48.成員變量與局部變量的區(qū)別?
(1).成員變量的作用域是在類中;局部變量的作用域是在方法中
(2).成員變量可以不賦初值;局部變量必須賦初值
49.Java是如何實(shí)現(xiàn)多線程的?
(1).繼承Thread類,重寫run方法
(2).實(shí)現(xiàn)Runnable接口
50.Iterator與ListIterator的區(qū)別
(1).Iterator遍歷set和list;ListIterator只能遍歷list
(2).Iterator只能向后遍歷,ListIterator既能向前遍歷,也能向后遍歷
(3).ListIterator比Iterator方法多,比如增加元素
—————————————————————











資料太多所以沒辦法一次性全部分享出來。。。
——————————————————————————
資料領(lǐng)取方式:私聊小編:資料,免費(fèi)領(lǐng)取
在這里也祝愿讀者們都可以拿到自己心儀的offer哦!