天天看點

Java面試題總結

  1. JAVA 的基本資料類型有哪些 ? String 是不是基本資料類型 ?

Java 有 8 種基本資料類型: byte int short long double float Boolean char

byte int short long 都屬于整數類型.

Double float 屬于浮點類型.

Boolean 為布爾類型

Char 為字元型

String 不是基本資料類型.它定義的為對象

  1. 一個".java"源檔案中是否可以包括多個類(不是内部類)?有什麼限

制?

可以有多個類,但隻能有一個public 的類,并且 public 的類名必須與檔案名相一緻。

  1. Java 有沒有 goto?

java 中的保留字,現在沒有在 java 中使用。

  1. 說說&和&&的差別

&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為 true 時,整個運算結果才為 true,否則,隻要有一方為 false,則結果為 false。

&&還具有短路的功能,即如果第一個表達式為 false,則不再計算第二個表達式,例如,對if(str != null && !str.equals(“”))表達式,當 str 為null 時,後面的表達式不會執行,是以不會出現 NullPointerException 如果将&&改為&,則會抛出 NullPointerException 異常。

5.在 JAVA 中如何跳出目前的多重嵌套循環?

在Java 中,要想跳出多重循環,可以在外面的循環語句前定義一個标号,然後在裡層循環體的代碼中使用帶有标号的 break 語句,即可跳出外層循環。例如,

ok:

for(int i=0;i<10;i++){

for(int j=0;j<10;j++){

System.out.println(“i=” + i + “,j=” + j);

if(j == 5) break ok;

}

  1. switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?

在 switch(expr1)中,expr1 隻能是一個整數表達式或者枚舉常量(更大字型),整數表達式可以是 int 基本類型或 Integer 包裝類型,由于,byte,short,char 都可以隐含轉換為 int,是以,這些類型以及這些類型的包裝類型也是可以的。顯然,long 和 String 類型都不符合 switch 的文法規定,并且不能被隐式轉換成 int 類型,是以,它們不能作用于 swtich 語句中。

  1. short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

對于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 運算時會自動提升表達式的類型,是以結果是 int 型,再指派給 short 類型 s1 時,編譯器将報告需要強制轉換類型的錯誤。

對于 short s1 = 1; s1 += 1;由于 += 是 java 語言規定的運算符,java 編譯器會對它進行特殊處理,是以可以正确編譯。

  1. char 型變量中能不能存貯一個中文漢字?為什麼?

char 型變量是用來存儲 Unicode 編碼的字元的,unicode 編碼字元集中包含了漢字,是以, char 型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在 unicode 編碼字元集中,那麼,這個 char 型變量中就不能存儲這個特殊漢字。補充說明:unicode 編碼占用兩個位元組,是以,char 類型的變量也是占用兩個位元組。

  1. 用最有效率的方法算出 2 乘以 8 等於幾?

2 << 3,因為将一個數左移 n 位,就相當于乘以了 2 的 n 次方,那麼,一個數乘以 8 隻要将其左移 3 位即可,而位運算 cpu 直接支援的,效率最高,是以,2 乘以 8 等於幾的最效率的方法是 2 << 3。

  1. 請設計一個一百億的電腦?

首先要明白這道題目的考查點是什麼,一是大家首先要對計算機原理的底層細節要清楚、要知道加減法的位運算原理和知道計算機中的算術運算會發生越界的情況,二是要具備一定的面向對象的設計思想。

首先,計算機中用固定數量的幾個位元組來存儲的數值,是以計算機中能夠表示的數值是有一定的範圍的,為了便于講解和了解,我們先以 byte 類型的整數為例,它用 1 個位元組進行存儲,表示的最大數值範圍為-128 到+127。-1 在記憶體中對應的二進制資料為 11111111,如果兩個-1 相加,不考慮 Java 運算時的類型提升,運算後會産生進位,二進制結果為 1,11111110,由于進位後超過了 byte 類型的存儲空間,是以進位部分被舍棄,即最終的結果為 11111110,也就是-2,這正好利用溢位的方式實作了負數的運算。-128 在記憶體中對應的二進制資料為10000000,如果兩個-128 相加,不考慮 Java 運算時的類型提升,運算後會産生進位,二進制結果為 1,00000000,由于進位後超過了 byte 類型的存儲空間,是以進位部分被舍棄,即最終的結果為 00000000,也就是 0,這樣的結果顯然不是我們期望的,這說明計算機中的算

術運算是會發生越界情況的,兩個數值的運算結果不能超過計算機中的該類型的數值範圍。由于 Java 中涉及表達式運算時的類型自動提升,我們無法用 byte 類型來做示範這種問題和現象的實驗,大家可以用下面一個使用整數做實驗的例子程式體驗一下:

int a = Integer.MAX_VALUE;

int b = Integer.MAX_VALUE;

int sum = a + b;

System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

先不考慮 long 類型,由于 int 的正數範圍為 2 的 31 次方,表示的最大數值約等于210001000*1000,也就是 20 億的大小,是以,要實作一個一百億的電腦,我們得自己設計一個類可以用于表示很大的整數,并且提供了與另外一個整數進行加減乘除的功能,大概功能如下:

(1)這個類内部有兩個成員變量,一個表示符号,另一個用位元組數組表示數值的二進制數(2)有一個構造方法,把一個包含有多位數值的字元串轉換到内部的符号和位元組數組中(3)提供加減乘除的功能

public class BigInteger{

int sign;

byte[] val;

public Biginteger(String val){

sign = ;

val = ;

public BigInteger add(BigInteger other){

public BigInteger subtract(BigInteger other){

public BigInteger multiply(BigInteger other){

public BigInteger divide(BigInteger other){

備注:要想寫出這個類的完整代碼,是非常複雜的,如果有興趣的話,可以參看 jdk 中自帶的 java.math.BigInteger 類的源碼。面試的人也知道誰都不可能在短時間内寫出這個類的完整代碼的,他要的是你是否有這方面的概念和意識,他最重要的還是考查你的能力,是以,你不要因為自己無法寫出完整的最終結果就放棄答這道題,你要做的就是你比别人寫得多,證明你比别人強,你有這方面的思想意識就可以了,畢竟别人可能連題目的意思都看不懂,什麼都沒寫,你要敢于答這道題,即使隻答了一部分,那也與那些什麼都不懂的人差別出來,拉開了距離,算是矮子中的高個,機會當然就屬于你了。另外,答案中的架構代碼也很重要,展現了一些面向對象設計的功底,特别是其中的方法命名很專業,用的英文單詞很精準,這也是能力、經驗、專業性、英語水準等多個方面的展現,會給人留下很好的印象,在程式設計能力和其他方面條件差不多的情況下,英語好除了可以使你獲得更多機會外,薪水可以高出一千元。

本文出自: Java程式設計社群

原文連結:

https://mp.weixin.qq.com/s?__biz=MzI1ODMxMDk1Mg%3D%3D&mid=2247484249&idx=1&sn=981f4b7f226a8e2ea1cfe593b3477af1&chksm=ea0b551edd7cdc08c2d2031ba18dd3e8f3ec788cb7f73699624aaba4d5be5457ae2991a4a86f