面試題

面試題:
一、請(qǐng)簡(jiǎn)述jdk、jre和jvm
* a: JRE為Java的運(yùn)行時(shí)環(huán)境,是運(yùn)行Java程序依賴的。如果僅僅是運(yùn)行已經(jīng)存在的Java程序,只安裝JRE即可
* 包括Java虛擬機(jī)(JVM Java Virtual Machine)和Java程序所需的核心類庫等,如果想要運(yùn)行一個(gè)開發(fā)好的Java程序,計(jì)算機(jī)中只需要安裝JRE即可
* JRE:JVM+類庫
* b: JDK為Java的開發(fā)環(huán)境,是開發(fā)時(shí)依賴的。包含JRE
* JDK是提供給Java開發(fā)人員使用的,其中包含了java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就不用在單獨(dú)安裝JRE了。
* 其中的開發(fā)工具:編譯工具(javac.exe) 打包工具(jar.exe)等
* JDK:JRE+JAVA的開發(fā)工具
* 為什么JDK中包含一個(gè)JRE呢?
* 開發(fā)完的程序,需要運(yùn)行一下看看效果

二、goto和const是關(guān)鍵字嗎?
* goto與const是Java中的保留字,即沒有賦予特殊含義卻仍被Java占用的單詞,類似Editplus這樣的高級(jí)記事本,針對(duì)關(guān)鍵字有特殊的顏色標(biāo)記,非常直觀

三、基本數(shù)據(jù)類型各占用多少字節(jié)?
* a: 整數(shù)型(精確)
* int 占用4個(gè)字節(jié) (整數(shù)的默認(rèn)值)
* byte 占用1個(gè)字節(jié)
* short 占用2個(gè)字節(jié)
* long 占用8個(gè)字節(jié)
* long類型在賦值時(shí),需要在值后加入字母l(L)區(qū)分其是一個(gè)長(zhǎng)整型
如 int i = 100; short s = 66; long l = 100L;
* 2:浮點(diǎn)型(小數(shù)型,非精確,為近似值)
* double 占用8個(gè)字節(jié) (小數(shù)的默認(rèn)值)
* float 占用4個(gè)字節(jié)
* float類型在賦值時(shí),需要在值后加入字母f(F)區(qū)分其是一個(gè)長(zhǎng)整型
如 double d = 100.0; double d2 = 10.1; float f = 100F;

    * b:字符型
        * 占用2個(gè)字節(jié),必須使用’’包裹,且不能為空,如 char   c = ‘a(chǎn)’; char  c2 = ‘中’; char  c3 = ‘ (空格)’; char c4 = ‘$’
        * 字符存儲(chǔ)原理
            * 每一個(gè)值在存儲(chǔ)時(shí),均存儲(chǔ)的為值對(duì)應(yīng)的數(shù)字,每一個(gè)英文字符都有其固定的數(shù)字對(duì)應(yīng),英文字符與數(shù)字的對(duì)應(yīng)關(guān)系組成了一張編碼表,該表名稱為ASCII表('A':65,'a':97,'0':48)
        * 轉(zhuǎn)義字符
            * 有時(shí)無法直接給出一個(gè)字符,需要使用轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義。轉(zhuǎn)義字符也為一個(gè)字符,由轉(zhuǎn)義符號(hào)與被轉(zhuǎn)義字符組成轉(zhuǎn)義符號(hào):\
            * \t    制表符
            * \’        單引號(hào)
            * \”        雙引號(hào)
            * \\        反斜杠
    * c: 布爾型
        * 代表一些條件成立與不成立的判斷。只有兩個(gè)值true與false
        * boolean占用1個(gè)字節(jié),如 boolean  b = true; boolean  b2 = false;

Day02面試題:
1、第一題:
byte b1=3,b2=4,b;
b=b1+b2; 錯(cuò): bi和b2會(huì)自動(dòng)提升int類型,在賦值給byte類型會(huì)損失精度
b=3+4; 對(duì): 常量?jī)?yōu)化機(jī)制 , 編譯是會(huì)算出7,然后在byte范圍內(nèi)
哪句是編譯失敗的呢?為什么呢?
第二題:
byte b = 10;
b++; 對(duì),系統(tǒng)自動(dòng)強(qiáng)制轉(zhuǎn)換
b = b + 1; 不對(duì),損失精度
哪句是編譯失敗的呢?為什么呢?

2、自增和自減 放在數(shù)值的前后各有什么區(qū)別?
a:?jiǎn)为?dú)使用:
* 放在操作數(shù)的前面和后面效果一樣。(這種用法是我們比較常見的)
b:參與運(yùn)算使用:
* 放在操作數(shù)的前面:先產(chǎn)生副作用,把原值先自增或自減,然后在參與運(yùn)算
* 放在操作數(shù)的后面:先使用原值參與運(yùn)算,然后再把原值自增或自減。

3、除以0可以嗎?會(huì)報(bào)什么錯(cuò)誤?
/(除法)和%(取模)的注意事項(xiàng)
* a: 整數(shù)做被除數(shù),0不能做除數(shù),否則報(bào)錯(cuò)
* b: 小數(shù)做被除數(shù),整除0結(jié)果為Infinity,對(duì)0取模結(jié)果為NaN //Infinity:無窮大

4、&&和&有什么區(qū)別?
&& 短路與,即并且,有假則假,同時(shí)滿足兩個(gè)條件
特點(diǎn):&&具有短路效果。左邊是false,右邊不執(zhí)行

5、||和|有什么區(qū)別?
同上

6、三元運(yùn)算符的格式?
b: 使用格式
* (條件表達(dá)式)?表達(dá)式1:表達(dá)式2;

==========================================

Day04面試題:
1、數(shù)組常見的異常?
* 空指針異常(NullPointerException)
舉例:int[] arr = null;
* 數(shù)組索引越界異常(ArrayIndexOutOfBoundsException)
舉例:int[] arr = new int[5]; 獲取arr[6]的時(shí)候就會(huì)出現(xiàn)索引越界

2、什么是方法的重載?方法的定義格式和使用方式
A:定義
* 在同一個(gè)類中,出現(xiàn)方法名相同而參數(shù)列表不同,這樣定義方法叫做方法重載。
B:注意事項(xiàng):
* 和返回值類型無關(guān)
* 方法名必須一樣
* 參數(shù)不一樣
C:方法重載舉例
* public int add(int a,int b) {邏輯} //兩個(gè)數(shù)加法
* public int add(int a,int b,int c) {邏輯} //三個(gè)數(shù)加法
* public int add(int a,int b,int c,int d) {邏輯} //四個(gè)數(shù)加法

3、什么是成員變量?
2、成員變量
A:什么時(shí)候使用成員變量:
當(dāng)類中所有的方法都需要使用的時(shí)候,就要把這些變量定義在成員位置
B:定義位置
* 直接定義在類中方法外的變量,叫做成員變量。
C:作用域
* 定義在方法內(nèi),變量只在方法內(nèi)起作用,而定義在類中,可以被本類中的所有方法訪問

3、成員變量知識(shí)補(bǔ)充
    A:如果很多方法都要訪問某個(gè)數(shù)據(jù),就需要將這些數(shù)據(jù)定義在成員位置
    B:前面的代碼中所有變量都是用static修飾的為什么呢?
        因?yàn)閙ain方法是static修飾的。這樣main方法調(diào)用其它方法時(shí)也必須是靜態(tài)的,而靜態(tài)方法訪問屬性時(shí),屬性也必須是靜態(tài)的
        總而言之:靜態(tài)的只能訪問靜態(tài)的

=========================================

Day05面試題:
1、ArrayList的定義格式和使用
ArrayList的使用
A:導(dǎo)包:import java.util.ArrayList;
B:創(chuàng)建對(duì)象:
類名<集合內(nèi)元素類型> 變量 = new 類名<集合內(nèi)元素類型>();
ArrayList<Integer> list = new ArrayList<>();
例如:?
介紹菱形泛型?
* 注意:基本類型需要存放對(duì)應(yīng)的引用類型
ArrayList<Integer> yyYY = new ArrayList<Integer>();
ArrayList<Double> zzZZ = new ArrayList<Double>();
C:調(diào)用方法:
* 直接向集合添加元素:add(元素);
* 在指定索引處向集合添加元素:add(索引,元素);
* 刪除指定索引位置的元素:remove(索引);
* 修改指定索引位置的元素:set(索引,元素);
* 獲取集合長(zhǎng)度:size();
* 根據(jù)指定索引獲取集合元素:list.get(索引);

2、ArrayList集合與數(shù)組的區(qū)別
A:為什么使用ArrayList
* 雖然數(shù)組容器效率最快,但是開發(fā)中我們使用的數(shù)組并不多。因?yàn)樗拈L(zhǎng)度不可變!
* 而使用ArrayList集合,它的底層也是數(shù)組實(shí)現(xiàn)的,效率一樣,但是ArrayList的長(zhǎng)度是可變的。
* 并且可以調(diào)用功能強(qiáng)大的方法來滿足不同需求
B:ArrayList集合與數(shù)組的區(qū)別
* 數(shù)組長(zhǎng)度不可變,可以存儲(chǔ)任意類型,有索引
* 集合長(zhǎng)度可變,只能存儲(chǔ)引用數(shù)據(jù)類型(存儲(chǔ)基本數(shù)據(jù)類型時(shí)會(huì)自動(dòng)轉(zhuǎn)成對(duì)應(yīng)的引用數(shù)據(jù)類型),也有索引
* 數(shù)組并沒有提供操作其元素的方法,而集合提供了很多方法操作其元素
* int->Integer
* double->Double
* float->Float
* char->Character

=============================================

面試題:
1、Scanner類的next()方法和nextLine()方法的區(qū)別?

=============================================

Day07面試題:
1、什么是面向?qū)ο螅?br> 面向?qū)ο笫擒浖_發(fā)過程中使用的一種思維方式.將功能封裝進(jìn)對(duì)象,強(qiáng)調(diào)具備了功能的對(duì)象.不關(guān)注過程.
是一種更符合人們思考習(xí)慣的思想,可以將復(fù)雜的事情簡(jiǎn)單化,將程序的執(zhí)行者轉(zhuǎn)換成為指揮者.

2、面向?qū)ο蟮娜笏枷胩卣魇鞘裁矗?br> 封裝
繼承
多態(tài)

3、成員變量和局部變量的區(qū)別有哪些?
* 成員變量
* 定義位置:類中,整個(gè)類中均可以訪問。
* 內(nèi)存:成員變量隨著對(duì)象的建立而建立,存在于對(duì)象所在的堆內(nèi)存中。
* 默認(rèn)值:成員變量有默認(rèn)值。
* 回收:隨著對(duì)象的回收而回收。
* 局部變量
* 定義位置:定義在局部范圍,如方法內(nèi),語句內(nèi)等。
* 內(nèi)存:局部變量存在于棧內(nèi)存中。
* 默認(rèn)值:沒有默認(rèn)值。
* 回收:隨著作用域結(jié)束而回收,通常為語句或方法范圍。
* 變量訪問原則
* 就近原則
* c: 注意
* 成員變量的訪問不再使用從前的方式,而使用調(diào)用屬性對(duì)應(yīng)的get/set方法的方式。即類的使用不再包含直接使用對(duì)象訪問屬性,均是在調(diào)用方法。

4、什么是封裝?封裝的好處,原則分別是什么?
* 把數(shù)據(jù)和方法包裝進(jìn)類中,以及具體實(shí)現(xiàn)的隱藏,常共同被稱作是封裝。
* 封裝的結(jié)果是一個(gè)同時(shí)帶有特征和行為的數(shù)據(jù)類型。
* 我們前邊所完成的水果項(xiàng)類的定義就是封裝的一部分。同樣,成員變量與成員方法以及對(duì)應(yīng)的private修飾,公共的get/set方法均為封裝的一部分。

最后編輯于
?著作權(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)容