1:什么是注釋?注釋分為幾種?注釋有什么作用?
注釋就是對代碼的解釋說明性文字,分為三種:單行注釋、多行注釋、文檔注釋。注釋可以對程序進行說明,給人看,還可以對程序進行排錯。
2:什么是關(guān)鍵字?有什么特點?
關(guān)鍵字就是被java語言賦予了特殊含義的單詞。特點就是所有的關(guān)鍵字都是小寫。
3:什么是標(biāo)識符?由哪些部分組成?常見的命名規(guī)則有哪些?
標(biāo)識符就是給類、接口、方法、變量名起的名字。常見的規(guī)則有:有數(shù)字、字母、_以及$符號組成,不能以數(shù)字開頭,不能是java中的關(guān)鍵字。
4:什么是常量?常量的分類?字面值常量表現(xiàn)形式有哪些?
在程序的運行過程中其值不發(fā)生改變的量。
字面值常量: 1 14
自定義常量: int MAX = 100;
5:什么是變量?變量的定義格式?要使用變量需要注意什么?
在程序運行過程中,其值是可以在某個范圍內(nèi)發(fā)生改變的量。
變量其實就是內(nèi)存中一小塊區(qū)域。
由3部分組成:
1,數(shù)據(jù)類型: 限定變量的取值
2,變量名:方便使用。
3,值: 如果沒有值就沒有意義。
6:Java中的數(shù)據(jù)類型分幾類?基本數(shù)據(jù)類型有哪些?
基本類型:4類8種?;緮?shù)據(jù)類型有:
整數(shù)(byte,short,int,long)、浮點數(shù)(float,double)、字符(char)、布爾(boolean)。
7:算術(shù)運算有哪些,各自的作用?
有:+,-,*,/,%,++,--。
+:正號,加法,字符串連接符
%:取得余數(shù)
++,--:
單獨使用:在操作數(shù)據(jù)的前后效果一致。
參與操作使用:
在操作數(shù)據(jù)的前面,是先++或者--,然后參與操作。
在操作數(shù)據(jù)的后面,是先參與操作,后++或者--。
8:+運算符需要注意的問題?
當(dāng)把+號作為加法和字符串連接符一起使用的時候,注意把運算的地方()起來。
9:賦值運算符常見的有哪些,各自的作用?
=:把右邊的內(nèi)容賦值給左邊
+=,-=,*=,/=,%=:把左邊的和右邊的操作后賦值給左邊。
注意:
+=隱含了強制類型轉(zhuǎn)換。
x+=y;等價與:x = (x的數(shù)據(jù)類型)(x + y);
10:邏輯運算符有哪些都有什么作用?
&:有false則false
|:有true則true
^:相同為false,不同為true。通過情侶關(guān)系來理解。
!:非false則true,非true則false。偶數(shù)次不改變以前的真假。
&&:和&的結(jié)果一樣,但是具有短路效果。左邊有false,右邊不執(zhí)行。
||:和|的結(jié)果一樣,但是具有短路效果。左邊有true,右邊不執(zhí)行。
11:位移運算符有什么不同?
要想操作,就必須把所有的數(shù)據(jù)轉(zhuǎn)換為二進制。然后操作。
<<:把數(shù)據(jù)向左移動,后邊補0。其實相當(dāng)與乘以2的移動位數(shù)次冪。
>>:把數(shù)據(jù)向右移動,左邊補是最高位的值。其實相當(dāng)與除以2的移動位數(shù)次冪。
>>>:把數(shù)據(jù)向右移動,左邊補0。其實相當(dāng)于除以2的移動位數(shù)次冪。
12:什么是函數(shù)重載?
函數(shù)名相同,參數(shù)列表不同,跟返回值不關(guān),就是函數(shù)重載。
13:類是什么?類的組成是哪些?
類是抽取了同類對象的共同屬性和行為形成的對象或?qū)嶓w的"模版".
類是由成員變量,成員方法,構(gòu)造函數(shù)組成
14:對象是什么?什么時候需要使用對象?
對象是現(xiàn)實世界中實體的描述,是其自身所具有的狀態(tài)特征及可以對這些狀態(tài)施加的操作結(jié)合在一起所
構(gòu)成的獨立實體.
需要描繪具體事物的時候要使用對象.
15:封裝是什么?自己概述
隱藏對象的屬性和具體的實現(xiàn)細(xì)節(jié),僅對外提供公共的訪問方式.
類、方法其實也是封裝的體現(xiàn)。
16:繼承是什么?自己概述
概念:把多個類中相同的內(nèi)容抽取出來,單獨定義到一個類(父類)中,再定義其他類(子類)的時候,繼承父類即可.
好處:1.提高了代碼的復(fù)用性,降低了代碼的重復(fù)率.2.提高了代碼的維護性3.讓類與類之間產(chǎn)生了關(guān)系,是多態(tài)的前提.
17:匿名對象是什么?應(yīng)用場景是什么?
匿名對象就是沒有名字的對象,由于沒有指向,所以效率較高一些。
應(yīng)用場景:A:調(diào)用方法。但是僅僅只限調(diào)用一次而已。B:匿名對象用作實際參數(shù)傳遞。
18:構(gòu)造方法的作用是什么?構(gòu)造方法的特點是什么?構(gòu)造方法的注意事項是什么?
構(gòu)造方法的作用是初始化數(shù)據(jù)。特點是:名稱和類名一致,并且沒有返回值類型的修飾和返回值。
注意:如果我們沒有給構(gòu)造方法,系統(tǒng)將給出一個無參構(gòu)造方法。如果我們給出了構(gòu)造方法,系統(tǒng)將不再提供構(gòu)造方法。
19:給成員變量賦值有幾種方式?
1,通過set/get方法。
2,通過帶參構(gòu)造。
20:方法重寫和方法重載的區(qū)別?重載可以改變返回值類型嗎?(*面試題)?
方法重寫:
子類中出現(xiàn)和父類中一模一樣的方法聲明的方法。
方法重載:
同一個類中,出現(xiàn)方法名相同,參數(shù)列表不同的方法。
跟返回值無關(guān)。
重載可以改變返回值類型,因為他跟返回值無關(guān)。
21:static關(guān)鍵字是什么?有什么特點?什么時候用呢?
static關(guān)鍵字:是靜態(tài)的意思,可以修飾類中成員變量和成員方法。
靜態(tài)的特點:隨著類的加載而加載、優(yōu)先與對象而存在、被所有對象所共享、可以通過類名.靜態(tài)的內(nèi)容調(diào)用。
22:this和super的區(qū)別,以及應(yīng)用場景? (*面試題)? ?
this:當(dāng)前類的引用對象。誰調(diào)用代表誰。
super:父類的存儲空間標(biāo)識。可以理解為父類對象,誰調(diào)用代表誰父親。
應(yīng)用場景:
A:成員變量
this.成員變量 本類的成員變量
super.成員變量? 父類的成員變量
B:構(gòu)造方法
this(...) 本類的構(gòu)造方法
super(...) 父類的構(gòu)造方法
C:成員方法
this.成員方法() 本類的成員方法
super.成員方法() 父類的成員方法
23:代碼塊是什么?代碼塊的分類有哪些及每種代碼塊的作用是什么?
用{}括起來的代碼,就叫代碼快。
分為:
A:局部代碼快: 就是在方法中用{}括起來的代碼。作用是限定變量的生命周期,提高效率。
B:構(gòu)造代碼快:在類中,方法外。用{}括起來的代碼。作用是把所有構(gòu)造方法中相同的內(nèi)容抽取出來,
定義到構(gòu)造代碼塊中,將來在調(diào)用構(gòu)造方法的時候,會去自動調(diào)用構(gòu)造代碼塊。構(gòu)造代碼快優(yōu)先于構(gòu)造方法。
C:靜態(tài)代碼快:在類中、方法外。用{}括起來的代碼。只不過加了static修飾。
作用是:隨著類的加載而加載,而且只加載一次的代碼。
24:一個類的實例化過程有哪些步驟?(*面試題)
Student s = new Student(); 在內(nèi)存中到底執(zhí)行了哪些步驟。
1,加載Sutdent.class文件進內(nèi)存(類加載器)
2,在棧內(nèi)存為 s 變量申請一個空間
3,在堆內(nèi)存為Student對象申請空間
4,對類中的成員變量進行默認(rèn)初始化
5,對類中的成員變量進行顯示初始化
6,有構(gòu)造代碼塊就先執(zhí)行構(gòu)造代碼塊,如果沒有,則省略
7,執(zhí)行構(gòu)造方法,通過構(gòu)造方法對對對象數(shù)據(jù)進行初始化
8,堆內(nèi)存中的數(shù)據(jù)初始化完畢,把內(nèi)存值復(fù)制給 s 變量
26:繼承是什么?繼承的好處是什么?Java中的繼承特點是什么?
繼承就是:把多個類中相同的內(nèi)容提取出來,定義到一個類中。
? 然后讓這多個類和這個類產(chǎn)生一個關(guān)系,這多個類就具備該類的數(shù)據(jù)了。
? 這種關(guān)系叫:繼承。
繼承的好處是:提高代碼的復(fù)用性,提高了代碼的維護性,讓類與類之間產(chǎn)生了一個關(guān)系,是多態(tài)的前提。
繼承的特點是:Java中類只能夠單繼承,但是可以多層繼承。
27:方法重寫和重載有什么區(qū)別?重載可以改變返回值類型嗎?(*面試題)
方法重寫:子類中出現(xiàn)和父類一模一樣的方法聲明的方法。
方法重載:同一個類中,出現(xiàn)的方法名相同,參數(shù)列表不同的方法。
重載可以改變返回值類型,因為跟返回值無關(guān)。
28:子父類中構(gòu)造方法的執(zhí)行有什么特點?為什么要這樣?
子類構(gòu)造方法的執(zhí)行,首先會去執(zhí)行父類的構(gòu)造方法。
因為子類中可能直接訪問了父類的數(shù)據(jù),父類的數(shù)據(jù)要優(yōu)先于子類的數(shù)據(jù)進行初始化。
29:靜態(tài)代碼塊,構(gòu)造代碼塊,構(gòu)造方法的執(zhí)行順序是什么?
靜態(tài)代碼塊 -- 構(gòu)造代碼塊 -- 構(gòu)造方法
30:final關(guān)鍵字是什么,可以修飾什么,有什么特點?
final關(guān)鍵字:是最終意思,可以修飾類、方法、變量。
修飾類:類不可以被繼承。
修飾方法:方法不可被重寫
修飾變量:變量為常量。
31:多態(tài)是什么,前提是什么?
多態(tài):對象在不同時刻表現(xiàn)出來的多種狀態(tài)。是一種編譯時期狀態(tài)和運行時期狀態(tài)不一致的現(xiàn)象。
成員變量:編譯看左邊,運行看左邊。
成員方法:編譯看左邊,運行看右邊。因為,普通成員方法可以重寫,變量不可以。
靜態(tài)方法:編譯看左邊,運行看左邊。
前提:類與類之間要有繼承關(guān)系。要有方法的重寫。父類引用指向子類對象。
32:多態(tài)的好處及弊端?如何解決多態(tài)的弊端。
;
好處:提高了程序的可維護性(前提要有繼承保證),和擴展性。
弊端:不能使用子類的特有功能。
33:什么是抽象類?抽象類的特點和好處是什么?
相同的方法,有相同方法的聲明,但是方法體不一樣,只抽取方法聲明的方法,叫做抽象方法,有抽象方法的類,叫做抽象類。
特點:
A:類或者方法必須用abstract修飾。
B:具體類在繼承抽象類的時候,要么本身也是抽象類,要么實現(xiàn)抽象類中的所有抽象方法。
C:抽象類不能被實例化。要想使用,必須按照多態(tài)的方式使用。
D:成員特點:
a:成員變量
可以是變量,也可以是常量。
b:構(gòu)造方法
有構(gòu)造方法,但是不能實例化。
用于子類訪問父類數(shù)據(jù)的初始化。
c:成員方法
可以有抽象方法也可以有非抽象方法。
好處:
A:限定子類必須實現(xiàn)某些功能。
B:提高代碼的復(fù)用性。
抽象類的幾個問題:
A:抽象類不能實例化,構(gòu)造方法有什么用。
用于子類訪問父類數(shù)據(jù)的初始化。
B:抽象類沒有抽象方法,有什么意義?
限制創(chuàng)建對象。
C:abstract不能和哪些關(guān)鍵字共存?
final: 沖突
private: 沖突
static: 無意義
34:什么是接口? 接口的特點?
如果一個抽象類中的方法全部是抽象方法,那么java就針對這種類型的抽象類,給出了一個更抽象的表達式:接口。
特點:
A:所有的方法,都是抽象方法。
B:類實現(xiàn)接口
要么本身是抽象類,要么重寫接口中的抽象方法。
C:接口不能被實例化,要想使用,用多態(tài)。
D:成員特點
a:成員變量
只有常量,并且是靜態(tài)常量。默認(rèn)修飾符:public static final
b:構(gòu)造方法
沒有構(gòu)造方法,子類數(shù)據(jù)的初始化默認(rèn)走的是Ojbect類的構(gòu)造方法
c:成員方法
全部是抽象的,有默認(rèn)修飾符:public abstract
35:抽象類和接口的區(qū)別? (*面試題)
A:成員區(qū)別
抽象類:
成員變量:可以是變量,也可以是常量。
構(gòu)造方法:有。
成員方法:有,可以是抽象的,也可以是非抽象的。
接口:
成員變量:只能是常量。默認(rèn)修飾符:publci static final
構(gòu)造方法:沒有,子類數(shù)據(jù)的初始化默認(rèn)走的是Ojbect類的構(gòu)造方法。
成員方法:只能是抽象的,默認(rèn)修飾符是:public abstract
B:類與接口的關(guān)系區(qū)別
類與類:
繼承關(guān)系,單繼承。
類與接口:
實現(xiàn)關(guān)系,單實現(xiàn)、多實現(xiàn)。
接口與接口:
繼承關(guān)系,單繼承、多繼承。
C:設(shè)計理念的區(qū)別
抽象類被繼承體現(xiàn)的是:is a的關(guān)系。抽象類中一般定義的是整個繼承結(jié)構(gòu)的共性功能。
接口被實現(xiàn)體現(xiàn)的是:like a的關(guān)系。接口中一般定義的是整個繼承結(jié)構(gòu)的擴展功能。
36,什么是內(nèi)部類?有什么特點?
把類定義在其他類的內(nèi)部,就被稱為內(nèi)部類。
內(nèi)部類的訪問特點:
A:內(nèi)部類可以直接訪問外部類的成員,包括私有。
B:外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象。
37,為什么內(nèi)部類訪問局部變量必須加final修飾?(*面試題)
A: 防止在使用后數(shù)據(jù)發(fā)生改變。
B: 延長變量的生命周期。
38,什么是匿名內(nèi)部類?本質(zhì)是什么?
匿名內(nèi)部類就是沒有名字的內(nèi)部類。
格式:
new 類名或者接口名() {
重寫方法;
};
本質(zhì):是繼承類或者實現(xiàn)接口的子類匿名對象。
39,==和equals()的區(qū)別? (*面試題)
A:==
a:基本類型 比較的是基本類型的值
b:引用類型 比較的是引用類型的地址值
B:equals()
只能比較引用類型。
默認(rèn)比較地址值。
40,什么是字符串?字符串的特點是什么?
字符串:由多個字符組成的一串?dāng)?shù)據(jù)。
特點:一旦被賦值就不能被改變。(*面試題)
注意:這里指的是字符串的內(nèi)容不能發(fā)生改變。而字符串的引用是可以再次賦值的。
41:String s1 = new String("hello");和String s2 = "hello";的區(qū)別?(*面試題)
有區(qū)別,區(qū)別是:前者創(chuàng)建了兩個對象,后者創(chuàng)建了一個對象。
42:String、StringBuffer、StringBuilder的區(qū)別?(*面試題)
String:字符長度是固定的。
StringBuffer/StringBuilder:字符長度是可變的。
StringBuffer:安全的,但效率較低一些。
StringBuilder:不安全的,但效率較高一些。
StringBuffer和StringBuilder兼容。
43:什么是基本數(shù)據(jù)包裝類?
為了對基本類型的數(shù)據(jù)進行更多的操作的,java就針對每種基本類型的數(shù)據(jù)提供了對應(yīng)的包裝類類型。
對應(yīng)的類型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
44:什么是正則表達式?
正則表達式就是符合一定規(guī)則的字符串。
45:集合和數(shù)組有什么區(qū)別?(*面試題)
集合:
長度可以發(fā)生改變。
只能存儲對象類型,引用類型。
可以存儲任意類型的對象。
數(shù)組:
長度固定。
可以存儲基本類型,也可以存儲引用數(shù)據(jù)類型。
只能存儲同一種類型的元素。
46:集合有多少種? 各自的特點是什么?
Collection
|--List 有序(存入和取出的順序一致),元素可重復(fù)
|--ArrayList
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
線程不安全,效率高。
|--Vector
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
線程安全,效率低。
|--LinkedList
底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。
線程不安全,效率高。
|--Set 無序的 元素唯一
|--HashSet
|--TreeSet
47:泛型是什么?有什么用?在哪里用?泛型有什么好處和弊端?
泛型是一種把明確數(shù)據(jù)類型的工作推遲到創(chuàng)建對象或者調(diào)用方法的時候才去明確的特殊的數(shù)據(jù)類型。
能優(yōu)化程序設(shè)計,解決了黃色警告線問題。
把運行時期的異常提前到了編譯時間。
避免了強制類型轉(zhuǎn)換。
好處:
優(yōu)化了程序的設(shè)計,解決了黃色警告線的問題。
把運行時期的問題提前到了編譯時期間解決了。
避免了強制類型轉(zhuǎn)換。
弊端:讓類型統(tǒng)一了,不能存儲不同的數(shù)據(jù)類型了。
48:用迭代器遍歷集合的時候,用集合修改集合有沒有問題?如果有,怎么解決?(*面試題)
有問題,因為會出現(xiàn)并發(fā)修改異常。
解決方法有多種,比如,我們可以不通過集合來修改集合,而使用迭代器來修改集合。
像ListIterator迭代器就有添加方法。
49、HashSet如何保證元素唯一性的呢?
底層數(shù)據(jù)結(jié)構(gòu)是哈希表(散列表)。具體的是由一個元素是單向鏈表的數(shù)組組成。
它依賴于兩個方法:hashCode()和equals()方法。
執(zhí)行順序:
先判斷hashCode()是否相同,
如果相同
繼承執(zhí)行equals()方法,看其返回值:
true:元素重復(fù),不存儲。
false:元素不重復(fù),存儲。
如果不同
存儲。
記?。?/p>
看到HashXxx結(jié)構(gòu)的集合,就要知道,被該集合存儲的元素要重寫hashCode()和equals()方法。
而且,是自動生成的。
50、TreeSet底層數(shù)據(jù)結(jié)構(gòu)是什么?如何保證元素的唯一性的呢?
底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。
根據(jù)比較的返回值是否是0來決定。
如何保證元素的排序的呢?
A:自然排序 元素具備比較性
讓集合中被存儲的元素所屬的類實現(xiàn)Comparable接口。
B:比較器排序 集合具備比較性
在創(chuàng)建集合對象的時候,讓構(gòu)造方法接收一個Comparator接口的子類對象。
自然排序和比較器排序的區(qū)別:
TreeSet構(gòu)造函數(shù)什么都不傳, 默認(rèn)按照Comparable(接口,compareTo(T))的順序(沒有實現(xiàn)Comparable就報錯ClassCastException)
TreeSet如果傳入Comparator(接口compare(T1,T2)), 就優(yōu)先按照Comparator
51、LinkedHashSet底層數(shù)據(jù)結(jié)構(gòu)是什么?如何保證元素的唯一性的呢?
底層由鏈表和哈希表組成。
由鏈表保證有序。
由哈希表保證唯一。
52、什么是可變參數(shù)?
針對在寫一個方法的時候,不知道具體要有多少個形式參數(shù)的時候。
? java提供了可變參數(shù)的用法。
注意:
A:變量其實是該數(shù)據(jù)類型的一個數(shù)組。
B:形式參數(shù)如果有多個的話,可變參數(shù)只能是最后一個。
C:數(shù)據(jù)類型要一致。
53、Map和Collection集合的區(qū)別?(*面試題)
A:Map集合存儲的是鍵值對形式的元素。
? Collection集合存儲的是單個的元素。
B:Map集合的鍵是唯一的。
? Collection的子接口Set集合元素是唯一的。
C:Map集合的值是可以重復(fù)的。
? Collection的子接口List集合的元素是可以重復(fù)的。
D:Map集合的數(shù)據(jù)結(jié)構(gòu)僅對鍵有效,對值無效.
? Collection的數(shù)據(jù)結(jié)構(gòu)是針對元素有效的
54、Hashtable和HashMap的區(qū)別?(面試題)
A:HashMap 線程不安全,效率高。允許null鍵和null值。
B:Hashtable 線程安全,效率低。不允許null鍵和null值。
55、Collection和Collections有什么區(qū)別?
Collection:是集合的頂層接口,定義了集合的通用方法。
Collections:是一個工具類,里面定義了對集合進行操作的一些常見方法。
56、什么是異常?異常有哪幾種?各有什么特點?
程序出現(xiàn)了不正常的情況,就是異常。
異常的繼承體系結(jié)構(gòu):
Throwable
|--Error 嚴(yán)重的問題,一般我們解決不了。
|--Exception
|--RuntimeException 運行時期異常,這種問題一般要修正代碼。
|--非RuntimeException 編譯時期異常,必須進行處理,否則代碼不能夠通過。
57、throws和throw的區(qū)別? (*面試題)
throws
位置:在方法()后面,跟的是類名,后面可以跟多個異常類名,并且用逗號隔開
表示拋出異常,交給調(diào)用者去處理
如果后面根據(jù)的是RuntimeException及其子類,那么,該方法可以不用處理。
如果后面根據(jù)的是Exception及其子類,那么,必須要編寫代碼進行處理,或者調(diào)用的時候拋出。
throw
位置:在方法中,跟的對象名稱。后面只能跟一個異常對象
表示拋出異常,由方法體內(nèi)語句處理
如果方法中,有throw拋出RuntimeException及其子類,那么,聲明上可以沒有throws。
如果方法中,有throw拋出Exception及其子類,那么,聲明上必須有throws。
58、final、finally、finalize的區(qū)別?(*面試題)
final:是最終的意思,用于修飾類、變量、和方法。修飾類的時候,類是最終類,不可以被繼承。
修飾變量的時候,變量為常量,不可以被改變。修飾方法的時候,方法不能被重寫。
finally:是異常處理的一部分,它里面的代碼永遠(yuǎn)會執(zhí)行(前提:jvm沒退出),一般用于釋放資源。
finalize:是object類的一個方法,用于垃圾處理。
59、什么是遞歸?使用遞歸需要注意哪些?
遞歸就是方法定義中調(diào)用方法本身的現(xiàn)象。
A:遞歸一定要有出口,否則就是死遞歸。
B:遞歸的次數(shù)不能太多,否則內(nèi)存溢出。
C:構(gòu)造方法不能遞歸使用。
60、基本的IO流有哪些?(*面試題)
字節(jié)流:InputStream、OutputStream、FileInputStream、FileOutputStream、
字符流:Writer、Reader、FileWriter、FileReader、
高效字節(jié)流:BufferedInputStream、BufferedOutputStream
高效字符流:BufferedWriter、BufferedReader
最開始的時候,只有字節(jié)流,但是后來由于中文字符或者其他字符的出現(xiàn),用兩個字節(jié)才能表示。
如果用字節(jié)流也是可以讀寫字符文件的數(shù)據(jù)的,但是比較麻煩。為了簡化這種操作,就提供了字符流。
61、flush()和close()的區(qū)別?(*面試題)
flush():刷新緩沖區(qū),流對象還可以繼續(xù)使用。
close():釋放流資源,但是會先刷新一次緩沖區(qū),操作完畢后,流對象不可以再使用。
62、什么是多線程?進程和線程的區(qū)別是什么?
多線程就是應(yīng)用程序的多條執(zhí)行路徑。
進程:正在運行的應(yīng)用程序,每個進程的具備獨立的運行空間。
線程:是進程的執(zhí)行單元,執(zhí)行路徑。如果是多個線程,那么,這多個線程共享同一個進程資源。
63、啟動線程調(diào)用的是run()還是start()方法?run()和start()的區(qū)別是什么?(*面試題)
啟動線程調(diào)用的是start()
run()封裝了被線程執(zhí)行的代碼,start()是啟動線程并調(diào)用run()方法。
64、多線程有幾種實現(xiàn)方案?分別是什么?如何操作?(*面試題)
多線程有兩種實現(xiàn),分別是:
1,繼承Thread類
自定義類繼承Thread類,在類中重寫run()方法,測試類中創(chuàng)建自定義類對象,并調(diào)用start()方法
2,實現(xiàn)Runnable接口
自定義類實現(xiàn)Runnable接口,重寫run()方法,測試類中創(chuàng)建自定義對象,
創(chuàng)建Thread對象,把自定義對象作為構(gòu)造參數(shù)傳遞。調(diào)用Thread類的start()方法。
65、線程的生命周期? (*面試題)
新建: 創(chuàng)建線程對象
就緒: 具備cup執(zhí)行資格,沒有執(zhí)行權(quán),隨時準(zhǔn)備執(zhí)行
運行: 具備執(zhí)行資格,執(zhí)行權(quán),執(zhí)行run()中的代碼
堵塞: 是當(dāng)線程運行到符合某個我們定義的條件時,它會停止下來等待喚醒
死亡: run()結(jié)束了
66、多線程為什么會出現(xiàn)安全問題?怎么解決呢?(*面試題)
如果滿足以下條件,那么就會出現(xiàn)安全問題:
A:是多線程程序。
B:有共享的數(shù)據(jù)。
C:針對共享數(shù)據(jù)有多條語句操作。
只要我們把多線程環(huán)境中,把操作共享數(shù)據(jù)的操作,變成單線程就沒有問題了。
Java針對這種情況,就提供了同步技術(shù):
A:同步代碼塊
B:同步方法
C:JDK5以后的Lock鎖
67、同步的鎖對象分別是?(*面試題)
代碼塊:任意對象
方法:this
靜態(tài)方法:類名.class
68、sleep()和wait()的區(qū)別?(*面試題)
sleep():必須指定時間,不釋放鎖對象。
wait():可以指定時間,也可以不指定。釋放鎖對象。
69、線程死鎖是什么,為什么有死鎖,怎么解決死鎖?(*面試題)
? ? ? ? 為了解決程序因占用資源,出現(xiàn)資源爭搶,而出現(xiàn)的程序進入等待的狀態(tài)(死鎖)。
? ? ? ? 舉例:有A和B兩個線程,有CD 兩把鎖, A和B嵌套CD鎖,A線程中有C,D鎖,B線程中有D C兩把鎖,當(dāng)兩個線程運行時,就可能會出現(xiàn)死鎖導(dǎo)致
程序停滯的情況。
? ? ? ? 怎么解決:真正意義上來說,死鎖是不能被解決的,死鎖是多線程中的一個需要避免的重大的問題,當(dāng)我們在編寫程序時,可以給共享的資源加上另外一
個把鎖,控制資源的動態(tài),同時可以設(shè)置線程的優(yōu)先級使線程之間協(xié)調(diào)合理的利用CPU的時間。
70、線程間的通信是什么?
不同種類的線程針對同一個資源的操作。
71、什么是網(wǎng)絡(luò)編程?
用編程語言來實現(xiàn)計算機的資源共享和信息傳遞,就叫做網(wǎng)絡(luò)編程。
72、網(wǎng)絡(luò)通信三要素是什么? (*面試題)
A:IP地址
計算機在網(wǎng)絡(luò)中的唯一標(biāo)識。
現(xiàn)在使用的是:"點分十進制"
B:端口
應(yīng)用程序的的標(biāo)記。
C:協(xié)議
通信的規(guī)則。
73、UDP和TCP的區(qū)別? (*面試題)
UDP:不建立連接,數(shù)據(jù)打包傳輸,數(shù)據(jù)有限制,數(shù)據(jù)不可靠,速度快。
TCP:建立連接,數(shù)據(jù)無限制,數(shù)據(jù)可靠,速度慢。
74、反射是什么?反射獲取字節(jié)碼文件的三種方式?反射的好處?(*面試題)
? ? ? ? 在運行狀態(tài)下,通過class文件對象(Class的對象),去使用構(gòu)造方法,成員變量,成員方法。就是反射。
? ? ? ? 3種方法:
? ? ? ? ? ? ? ? A.用Object類的getClass方法得到。
? ? ? ? ? ? ? ? B.用任意數(shù)據(jù)類型的靜態(tài)class屬性可以得到
? ? ? ? ? ? ? ? C.用Class類的靜態(tài)方法forName(String className)方法得到
? ? ? ? 好處:只要有一個類或者一個類的對象,就可以得到這個類或?qū)ο蟮乃袑傩院头椒?。包括私有的?/p>