java面試題的解析方式(思路如下):
超過10年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站設(shè)計、成都做網(wǎng)站,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,重慶小程序開發(fā)公司,微信開發(fā),成都App制作,同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!
public static void main(String[] args) {
// TODO Auto-generated method stub
int up = 8;
int down = 8;
while(up=20){
if((up == 20-6) (up == 20-6)){
System.out.println("在"+up+"時到達同一地點");
break;
}
up += 1;
down += 1;
}
}
微軟面試題的背后
微軟的奇葩面試題答案并不重要,重要的是思考過程,而思考過程體現(xiàn)了你是否擁有公司所看重的能力,不僅是微軟,其他公司的面試也是為了測試你的某種能力,如果你提前培養(yǎng)了這種能力,相當(dāng)于知道了面試的“考綱”,在面試中自然就從容不迫,游刃有余了。
平時要知道轉(zhuǎn)化能力是看透問題,然后找到解決方案的能力。所以轉(zhuǎn)化能力最重要的是如何看透問題,也就是你思考問題的方式。
下面是10道java基礎(chǔ)面試題,后附答案
1.什么是 Java 虛擬機?為什么 Java 被稱作是“平臺無關(guān)的編程語言”?
Java 虛擬機是一個可以執(zhí)行 Java 字節(jié)碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執(zhí)行的字節(jié)碼文件。
Java 被設(shè)計成允許應(yīng)用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java 虛擬機讓這個變?yōu)榭赡?,因為它知道底層硬件平臺的指令長度和其他特性。
2.“static”關(guān)鍵字是什么意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
“static”關(guān)鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基于運行時動態(tài)綁定的,而 static 方法是編譯時靜態(tài)綁定的。static 方法跟類的任何實例都不相關(guān),所以概念上不適用。
3.JDK 和 JRE 的區(qū)別是什么?
Java 運行時環(huán)境(JRE)是將要執(zhí)行 Java 程序的 Java 虛擬機。它同時也包含了執(zhí)行 applet 需要的瀏覽器插件。Java 開發(fā)工具包 (JDK)是完整的 Java 軟件開發(fā)包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行 Java 應(yīng)用程序。
4.是否可以在 static 環(huán)境中訪問非 static 變量?
static 變量在 Java 中是屬于類的,它在所有的實例中的值是一樣的。當(dāng)類被 Java 虛擬機載入的時候,會對 static 變量進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變量,編譯器會報錯,因為這些變量還沒有被創(chuàng)建出來,還沒有跟任何實例關(guān)聯(lián)上。
5.Java 支持的數(shù)據(jù)類型有哪些?什么是自動拆裝箱?
Java 語言支持的 8 中基本數(shù)據(jù)類型是:
?byte
?short
?int
?long
?float
?double
?boolean
?char
自動裝箱是 Java 編譯器在基本數(shù)據(jù)類型和對應(yīng)的對象包裝類型之間做的一個轉(zhuǎn)化。比如:把 int 轉(zhuǎn)化成 Integer,double 轉(zhuǎn)化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現(xiàn)多個接口。
7.Java 中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對象被創(chuàng)建的時候,構(gòu)造函數(shù)會被調(diào)用。每一個類都有構(gòu)造函數(shù)。在程序員沒有給類提供構(gòu)造函數(shù)的情況下,Java 編譯器會為這個類創(chuàng)建一個默認的構(gòu)造函數(shù)。
Java 中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€類創(chuàng)建多個構(gòu)造函數(shù)。每一個構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java 不支持像 C++中那樣的復(fù)制構(gòu)造函數(shù),這個不同點是因為如果你不自己寫構(gòu)造函數(shù)的情況下,Java 不會創(chuàng)建默認的復(fù)制構(gòu)造函數(shù)。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
Java 中的方法重載發(fā)生在同一個類里面兩個或者是多個方法的方法名相同但是參數(shù)不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.接口和抽象類的區(qū)別是什么?
Java 提供和支持創(chuàng)建抽象類和接口。它們的實現(xiàn)有共同點,不同點在于:
?接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
?類可以實現(xiàn)很多個接口,但是只能繼承一個抽象類
?類如果要實現(xiàn)一個接口,它必須要實現(xiàn)接口聲明的所有方法。但是,類可以不實現(xiàn)抽象類聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。
?抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。
?Java 接口中聲明的變量默認都是 final 的。抽象類可以包含非 final 的變量。
?Java 接口中的成員函數(shù)默認是 public 的。抽象類的成員函數(shù)可以是 private, protected 或者是 public。
?接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調(diào)用的。
10.什么是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的并不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最后祝你面試順利!
public
class
ThreadCaseDemo01
{
/**
*
*
*
采用Java
*
多線程技術(shù),設(shè)計實現(xiàn)一個符合生產(chǎn)者和消費者問題的程序。對一個對象(槍膛)進行操作,其最大容量是12顆子彈。
*
生產(chǎn)者線程是一個壓入線程
*
它不斷向槍膛中壓入子彈;消費者線程是一個射出線程,它不斷從槍膛中射出子彈。
*/
public
static
void
main(String[]
args)
{
Gun
i
=
new
Gun();
Producter
pro
=
new
Producter(i);
Consumer
con
=
new
Consumer(i);
new
Thread(pro).start();
new
Thread(con).start();
}
}
//////////////////////////////////////////////
public
class
Gun
{
private
String
name;
private
String
content;
private
boolean
flag
=
false;
public
synchronized
void
set(String
name,
String
content)
{
if
(flag)
{
try
{
super.wait();
}
catch
(InterruptedException
e)
{
e.printStackTrace();
}
}
this.setName(name);
this.setContent(content);
flag
=
true;//保證生產(chǎn)者進入等待狀態(tài)
super.notify();
}
public
synchronized
void
get()
{
if
(!flag)
{
try
{
super.wait();
}
catch
(InterruptedException
e)
{
e.printStackTrace();
}
}
System.out.println(this.getName()
+
"--"
+
this.getContent());
flag
=
false;//保證消費者進入等待狀態(tài)
super.notify();
}
public
String
getName()
{
return
name;
}
public
void
setName(String
name)
{
this.name
=
name;
}
public
String
getContent()
{
return
content;
}
public
void
setContent(String
content)
{
this.content
=
content;
}
}
//////////////////////////////////////
public
class
Consumer
implements
Runnable
{
private
Gun
gun=null;
public
Consumer
(Gun
gun)
{
this.gun=gun;
}
public
void
run()
{
for(int
i=0;i12;i++)
{
this.gun.get();
}
}
}
///////////////////////////////////////
public
class
Producter
implements
Runnable
{
private
Gun
gun=null;
public
Producter(Gun
gun)
{
this.gun=gun;
}
public
void
run()
{
boolean
flag=false;
for(int
i=0;i12;i++)
{
if(flag)
{
this.gun.set("樓主",
"給槍上了一發(fā)子彈");
flag=false;
}
else
{
this.gun.set("我","給了樓主一槍");
flag=true;
}
}
}
}
總的來說,其作用就是統(tǒng)計該文件中包含word關(guān)鍵字的個數(shù)。
實際運行情況,擬定關(guān)鍵字word就是“word”,1.txt中的內(nèi)容為:
輸出結(jié)果: