java面試題選擇題3篇
java面試題選擇題1
(1)下列關(guān)于棧的描述中錯(cuò)誤的是( B)
A. 棧是先進(jìn)后出的線性表
B 棧只能順序存儲(chǔ)
C 棧具有記憶作用
D 對(duì)棧的插入弓刪除操作中,不需要改變棧底指針
正確答案: B
分析: 棧是鏈?zhǔn)酱鎯?chǔ)的
(2)對(duì)于長(zhǎng)度為n的線性表,在最壞情況下,下列各排序法所對(duì)應(yīng)的比較次數(shù)中正確的是( )
A 冒泡排序?yàn)閚/2
B 冒泡排序?yàn)閚
C 快速排序?yàn)閚
D 快速排序?yàn)閚(n-l)/2
正確答案: D
分析:
想想快速排序,每次都會(huì)選取線性表的軸值,隨后以此軸值劃分為兩個(gè)子線性表再分別進(jìn)行快排,在最壞情況下,也就是說(shuō)每次選出的線性表軸值完全不能將這個(gè)線性表劃分為兩個(gè)子線性表。那么此時(shí)快速排序退化為冒泡排序了。
那么第一趟排序時(shí),軸值(線性表的中間位置)被選出,這個(gè)值絕對(duì)是這個(gè)線性表中最大的(不然也不能是最壞情況),其他值都比他小,那么線性表現(xiàn)在分為完全不對(duì)等的兩段(一段是0,另一段是n - 1),一段是這個(gè)值,一段是其他值。同樣第二趟排序在剛才剩下的值中選中間值(剩余值中最大的那個(gè)),又分為不對(duì)等兩段,依次遞推。也就是說(shuō)每次都比較了N - 1個(gè)元素(軸值選出后都與它比較大小),那么肯定是比較了n - 1次(如第一次先挑了個(gè)軸值,然后剩下n - 1比較),n**當(dāng)前子線性表中元素個(gè)數(shù) 由此最白癡的數(shù)列問(wèn)題出現(xiàn)了,如下
1 + 2 + 3 + .......... + n - 2 + n - 1 = n(n - 1) / 2
還有一種投機(jī)取巧的方法,在最垃圾情況下既然快排變?yōu)槊芭,那由時(shí)間復(fù)雜度知其必為o(n ^ 2)的復(fù)雜度,答案中ABC都是線性時(shí)間復(fù)雜,顯然錯(cuò)誤
(3)下列對(duì)于線性鏈表的描述中正確的是( )
A 存儲(chǔ)空間間不一定是連續(xù),且各元素的存儲(chǔ)順序是任意的
B 存儲(chǔ)空間不一定是連續(xù),且前件元素一定存儲(chǔ)在后件元素的前面
C 存儲(chǔ)定間必須連續(xù),且前件元素一定存儲(chǔ)在后件元素的前面
D 存儲(chǔ)空間必須連續(xù),且各元素的存儲(chǔ)順序是任意的
答案是A, 分析 鏈接存儲(chǔ)并不要求存儲(chǔ)空間連續(xù),存儲(chǔ)位置也不用有序
(4)為了使模塊爆可能**,要求( )
A 模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量強(qiáng)
B 模塊的內(nèi)聚程度要盡量高,且各模塊間的耦合程度要盡量弱
C 模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量弱
D 模塊的內(nèi)聚程度要盡量低,且各模塊間的耦合程度要盡量強(qiáng) f
答案:B
分析:高內(nèi)聚,低耦合。
(5)下列敘述中,正確的是( )
A Java語(yǔ)言的`標(biāo)識(shí)符是區(qū)分大小寫的
B 源文件名與public類名可以不相同
C 源文件擴(kuò)展名為.jar
D 源文件中public類的數(shù)目不限
答案:A
java面試題選擇題2
(1)下列屬于合法的Java標(biāo)識(shí)符是( )
A _cat
B 5books
C +static
D -3.14159
答案:A
(2) 在Java中,表示換行符的轉(zhuǎn)義字符是( )
A n
B f
C ‘n’
D dd
答案:A
( 3)扯Java中,所有類的根類是( )
A. java.lang.Object
B.java.lang.Class
C.java.applet.Applet
D.java.awt.Frame
答案:A
(4).在Java+中,用Package語(yǔ)句說(shuō)明一個(gè)包時(shí),該包的層次結(jié)構(gòu)必須是( )
A 與文件的結(jié)構(gòu)相同
B 與文件目錄的層次相同 )
C 與文件類型相同
D 與文件大小相同
答案:A
(5)在讀字符文件Employee.dat時(shí),使用該文件作為參數(shù)的類是( )。
A BufferReader
B DatalnputStream
C DataOutoutStream
D FileInputStream
答案:D
java面試題選擇題3篇擴(kuò)展閱讀
java面試題選擇題3篇(擴(kuò)展1)
——java面試題3篇
java面試題1
1、&和&&的區(qū)別?
答:&運(yùn)算符有兩種用法:(1)按位與;(2)邏輯與。&&運(yùn)算符是短路與運(yùn)算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運(yùn)算符左右兩端的布爾值都是true整個(gè)表達(dá)式的值才是true。&&之所以稱為短路運(yùn)算是因?yàn)椋绻?&左邊的表達(dá)式的值是false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。很多時(shí)候我們可能都需要用&&而不是&,例如在驗(yàn)證用戶登錄時(shí)判定用戶名不是null而且不是空字符串,應(yīng)當(dāng)寫為:username != null &&!username.equals(""),二者的順序不能交換,更不能用&運(yùn)算符,因?yàn)榈谝粋(gè)條件如果不成立,根本不能進(jìn)行字符串的equals比較,否則會(huì)產(chǎn)生NullPointerException異常。注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。
補(bǔ)充:如果你熟悉JavaScript,那你可能更能感受到短路運(yùn)算的強(qiáng)大,想成為JavaScript的高手就先從玩轉(zhuǎn)短路運(yùn)算開始吧。
2、解釋內(nèi)存中的棧(stack)、堆(heap)和靜態(tài)區(qū)(static area)的用法。
答:通常我們定義一個(gè)基本數(shù)據(jù)類型的變量,一個(gè)對(duì)象的引用,還有就是函數(shù)調(diào)用的現(xiàn)場(chǎng)保存都使用內(nèi)存中的?臻g;而通過(guò)new關(guān)鍵字和構(gòu)造器創(chuàng)建的對(duì)象放在堆空間;程序中的字面量(literal)如直接書寫的100、"hello"和常量都是放在靜態(tài)區(qū)中。?臻g操作起來(lái)最快但是棧很小,通常大量的對(duì)象都是放在堆空間,理論上整個(gè)內(nèi)存沒(méi)有被其他進(jìn)程使用的空間甚至硬盤上的虛擬內(nèi)存都可以被當(dāng)成堆空間來(lái)使用。
String str = new String("hello");
上面的語(yǔ)句中變量str放在棧上,用new創(chuàng)建出來(lái)的字符串對(duì)象放在堆上,而"hello"這個(gè)字面量放在靜態(tài)區(qū)。
補(bǔ)充:較新版本的Java(從Java 6的某個(gè)更新開始)中使用了一項(xiàng)叫"逃逸分析"的技術(shù),可以將一些局部對(duì)象放在棧上以提升對(duì)象的操作性能。
3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數(shù)上加0.5然后進(jìn)行下取整。
4、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。從Java 5開始,Java中引入了枚舉類型,expr也可以是enum類型,從Java 7開始,expr還可以是字符串(String),但是長(zhǎng)整型(long)在目前所有的版本中都是不可以的。
java面試題2
1、數(shù)組有沒(méi)有l(wèi)ength()方法?String有沒(méi)有l(wèi)ength()方法?
答:數(shù)組沒(méi)有l(wèi)ength()方法,有l(wèi)ength 的屬性。String 有l(wèi)ength()方法。JavaScript中,獲得字符串的長(zhǎng)度是通過(guò)length屬性得到的,這一點(diǎn)容易和Java混淆。
2、在Java中,如何跳出當(dāng)前的多重嵌套循環(huán)?
答:在最外層循環(huán)前加一個(gè)標(biāo)記如A,然后用break A;可以跳出多重循環(huán)。(Java中**帶標(biāo)簽的break和continue語(yǔ)句,作用有點(diǎn)類似于C和C++中的goto語(yǔ)句,但是就像要避免使用goto一樣,應(yīng)該避免使用帶標(biāo)簽的break和continue,因?yàn)樗粫?huì)讓你的程序變得更優(yōu)雅,很多時(shí)候甚至有相反的作用,所以這種語(yǔ)法其實(shí)不知道更好)
3、構(gòu)造器(constructor)是否可被重寫(override)?
答:構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。
4、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
答:不對(duì),如果兩個(gè)對(duì)象x和y滿足x.equals(y) == true,它們的哈希碼(hash code)應(yīng)當(dāng)相同。Java對(duì)于eqauls方法和hashCode方法是這樣規(guī)定的:(1)如果兩個(gè)對(duì)象相同(equals方法返回true),那么它們的.hashCode值一定要相同;(2)如果兩個(gè)對(duì)象的hashCode相同,它們并不一定相同。當(dāng)然,你未必要按照要求去做,但是如果你違背了上述原則就會(huì)發(fā)現(xiàn)在使用容器時(shí),相同的對(duì)象可以出現(xiàn)在Set集合中,同時(shí)增加新元素的效率會(huì)**下降(對(duì)于使用哈希存儲(chǔ)的系統(tǒng),如果哈希碼頻繁的沖突將會(huì)造成存取性能急劇下降)。
java面試題3
問(wèn)題1:GregorianCalendar類是什么東西?
答案:GregorianCalendar提供了**傳統(tǒng)日歷的**。
問(wèn)題2:ResourceBundle類是什么?
答案:ResourceBundle用來(lái)存儲(chǔ)指定語(yǔ)言環(huán)境的資源,應(yīng)用程序可以根據(jù)運(yùn)行時(shí)的語(yǔ)言環(huán)境來(lái)加載這些資源,從而提供不同語(yǔ)言的展示。
問(wèn)題3:為什么Java里沒(méi)有全局變量?
答案:全局變量是全局可見(jiàn)的',Java不**全局可見(jiàn)的變量,因?yàn)椋喝肿兞科茐牧艘猛该餍栽瓌t。全局變量導(dǎo)致了命名空間的沖突。
問(wèn)題4:SimpleTimeZone類是什么?
答案:SimpleTimeZone提供公歷日期**。
問(wèn)題5:while循環(huán)和do循環(huán)有什么不同?
答案:while結(jié)構(gòu)在循環(huán)的開始判斷下一個(gè)迭代是否應(yīng)該繼續(xù)。do/while結(jié)構(gòu)在循環(huán)的結(jié)尾來(lái)判斷是否將繼續(xù)下一輪迭代。do結(jié)構(gòu)至少會(huì)執(zhí)行一次循環(huán)體。
問(wèn)題6:Locale類是什么?
答案:Locale類用來(lái)根據(jù)語(yǔ)言環(huán)境來(lái)動(dòng)態(tài)調(diào)整程序的輸出。
問(wèn)題7:面向?qū)ο缶幊痰脑瓌t是什么?
答案:主要有三點(diǎn),多態(tài),繼承和封裝。
問(wèn)題8:介紹下繼承的原則
答案:繼承使得一個(gè)對(duì)象可以獲取另一個(gè)對(duì)象的屬性。使用繼承可以讓已經(jīng)測(cè)試完備的功能得以復(fù)用,并且可以一次修改,所有繼承的地方都同時(shí)生效。
java面試題選擇題3篇(擴(kuò)展2)
——android面試題選擇題3篇
android面試題選擇題1
1. 下列哪些語(yǔ)句關(guān)于內(nèi)存回收的說(shuō)明是正確的? (b )
A、程序員必須創(chuàng)建一個(gè)線程來(lái)**內(nèi)存
B、內(nèi)存回收程序負(fù)責(zé)**無(wú)用內(nèi)存
C、內(nèi)存回收程序允許程序員直接**內(nèi)存
D、內(nèi)存回收程序可以在指定的時(shí)間**內(nèi)存對(duì)象
2. 下面異常是屬于Runtime Exception 的是( abcd)(多選)
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3. Math.round(11.5)等于多少()?Math.round(-11.5)等于多少(c).
A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12
4. 下列程序段的輸出結(jié)果是:(b)
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、trueB、 falseC、 1D、0
5. 對(duì)一些資源以及狀態(tài)的操作保存,最好是保存在Activity生命周期的哪個(gè)函數(shù)中進(jìn)行(d)
A、onPause() B、onCreate() C、onResume() D、onStart()
6. Intent傳遞數(shù)據(jù)時(shí),下列的數(shù)據(jù)類型哪些可以被傳遞( abcd)(多選)
A、Serializable B、charsequence C、Parcelable D、Bundle
(可序列化) (字符序列) (綁定)
7. android 中下列屬于Intent的作用的是(c)
A、實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享
B、是一段長(zhǎng)的生命周期,沒(méi)有用戶界面的程序,可以保持應(yīng)用在**運(yùn)行,而不會(huì)因?yàn)?切換頁(yè)面而消失
C、可以實(shí)現(xiàn)界面間的切換,可以包含動(dòng)作和動(dòng)作數(shù)據(jù),連接四大組件的紐帶
D、處理一個(gè)應(yīng)用程序整體性的工作
8. 下列屬于SAX解析xml文件的優(yōu)點(diǎn)的是(b)
A、將整個(gè)文檔樹在內(nèi)存中,便于操作,**刪除,修改,重新排列等多種功能(dom 解析優(yōu)點(diǎn))
B、不用事先**整個(gè)文檔,占用資源少(sax 解析優(yōu)點(diǎn))
C、整個(gè)文檔**內(nèi)存,浪費(fèi)時(shí)間和空間(dom 解析缺點(diǎn))
D、不是長(zhǎng)久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過(guò)后,若沒(méi)有保存數(shù)據(jù),數(shù)據(jù)就會(huì)
說(shuō)明:不需要像dom 解析那樣在內(nèi)存中建立一個(gè)dom 對(duì)象,占用內(nèi)存,sax 解析是逐行解析的,每次讀入內(nèi)存的只是一行xml,所以速度快,效率高點(diǎn)。不過(guò)sax 一般是處理固定格式的xml。
9. 在android中使用Menu時(shí)可能需要重寫的方法有( ac)。(多選)
A、onCreateOptionsMenu()
B、onCreateMenu()
C、onOptionsItemSelected()
D、onItemSelected()
說(shuō)明:
//當(dāng)客戶點(diǎn)擊MENU 按鈕的時(shí)候,調(diào)用該方法
public boolean onCreateOptionsMenu(Menu menu)
//當(dāng)客戶點(diǎn)擊菜單當(dāng)中的某一個(gè)選項(xiàng)時(shí),會(huì)調(diào)用該方法
public boolean onOptionsItemSelected(MenuItem item)
android面試題選擇題2
1. 在SQLServer Management Studio 中運(yùn)行下列T-SQL語(yǔ)句,其輸出值( c)。 SELECT @@IDENTITY
A、可能為0.1
B、可能為3
C、不可能為-100
D、肯定為0
@@identity 是表示的是最近一次向具有identity 屬性(即自增列)的表插入數(shù)據(jù)時(shí)對(duì)應(yīng)的自增列的值,是系統(tǒng)定義的全局變量。一般系統(tǒng)定義的全局變量都是以@@開頭,用戶自定義變 量以@開頭。比如有個(gè)表A,它的自增列是id ,當(dāng)向A 表插入一行數(shù)據(jù)后,如果插入數(shù)據(jù) 后自增列的值自動(dòng)增加至101,則通過(guò)select @@identity 得到的值就是101。使用@@identity的前提是在進(jìn)行insert 操作后,執(zhí)行select @@identity 的時(shí)候連接沒(méi)有關(guān)閉,否則得到的將是NULL 值。
2. 在SQLServer 2005中運(yùn)行如下T-SQL語(yǔ)句,假定SALES表中有多行數(shù)據(jù),執(zhí)行查詢之后的結(jié)果是(d)。
BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHERE qty<40
Update SALES Set qty=50 WHERE qty<50
Update SALES Set qty=60 WHERE qty<60
COMMITTRANSACTION B
COMMIT TRANSACTION A
A、SALES 表中qty 列最小值大于等于30
B、SALES 表中qty 列最小值大于等于40
C、SALES 表中qty 列的數(shù)據(jù)全部為50
D、SALES 表中qty 列最小值大于等于60
Update SALES Set qty=60 WHERE qty<60(關(guān)鍵在最后一句,執(zhí)行完數(shù)據(jù)就都是大于等于60了)
3. 在android中使用SQLiteOpenHelper這個(gè)輔助類時(shí),可以生成一個(gè)數(shù)據(jù)庫(kù),并可以對(duì)數(shù)據(jù)庫(kù)版本進(jìn)行管理的方法可以是(ab)
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
4. android 關(guān)于service生命周期的onCreate()和onStart()說(shuō)法正確的是(ad)(多選題)
A、當(dāng)?shù)谝淮螁?dòng)的時(shí)候先后調(diào)用onCreate()和onStart()方法
B、當(dāng)?shù)谝淮螁?dòng)的時(shí)候只會(huì)調(diào)用onCreate()方法
C、如果service 已經(jīng)啟動(dòng),將先后調(diào)用onCreate()和onStart()方法
D、如果service 已經(jīng)啟動(dòng),只會(huì)執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法
5. 下面是屬于GLSurFaceView特性的是(abc)(多選)
A、管理一個(gè)surface,這個(gè)surface 就是一塊特殊的內(nèi)存,能直接排版到android 的視圖 view 上。
B、管理一個(gè)EGL display,它能讓opengl 把內(nèi)容渲染到上述的surface 上。
C、讓渲染器在**的線程里運(yùn)作,和UI 線程分離。
D、可以直接從內(nèi)存或者DMA 等硬件接口取得圖像數(shù)據(jù)
說(shuō)明:
GLSurfaceView 是一個(gè)視圖,繼承至SurfaceView,它內(nèi)嵌的surface 專門負(fù)責(zé)OpenGL渲染。
GLSurfaceView 提供了下列特性:
1>管理一個(gè)surface,這個(gè)surface 就是一塊特殊的內(nèi)存,能直接排版到android 的視圖view 上。
2>管理一個(gè)EGL display,它能讓opengl 把內(nèi)容渲染到上述的surface上。 3>用戶自定義渲染器(render)。
4>讓渲染器在**的線程里運(yùn)作,和UI 線程分離。
5>**按需渲染(on-demand)和連續(xù)渲染(continuous)。
6>一些可選工具,如調(diào)試。
6. 下面在AndroidManifest.xml 文件中注冊(cè)BroadcastReceiver方式正確的(a)
A、android:name="android.provider.action.NewBroad"/>
B、android:name="android.provider.action.NewBroad"/>
C、android:name="android.provider.action.NewBroad"/>
D、android:name="android.provider.action.NewBroad"/>
java面試題選擇題3篇(擴(kuò)展3)
——java面試基礎(chǔ)選擇題3篇
java面試基礎(chǔ)選擇題1
1.Java是從(B )語(yǔ)言改進(jìn)重新設(shè)計(jì)。
A.Ada B.C++ C.Pasacal D.BASIC
答案:B
2.下列語(yǔ)句哪一個(gè)正確(B )
A. Java程序經(jīng)編譯后會(huì)產(chǎn)生machine code
B. Java程序經(jīng)編譯后會(huì)產(chǎn)生byte code
C. Java程序經(jīng)編譯后會(huì)產(chǎn)生DLL
D. 以上都不正確
答案:B
3.下列說(shuō)法正確的有( )
A. class中的constructor不可省略
B. constructor必須與class同名,但方法不能與class同名
C. constructor在一個(gè)對(duì)象被new時(shí)執(zhí)行
D. 一個(gè)class只能定義一個(gè)constructor
答案:C
4.提供Java存取數(shù)據(jù)庫(kù)能力的包是( )
A.java.sql B.java.awt C.java.lang D.java.swing 答案:A
5.下列運(yùn)算符合法的是( )
A.&& B.<> C.if D.:=
答案:A
6.執(zhí)行如下程序代碼
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是( )
A.0 B.1 C.-1 D.死循環(huán)
答案:C
7.下列哪一種敘述是正確的( )
A. abstract修飾符可修飾字段、方法和類
B. 抽象方法的body部分必須用一對(duì)大括號(hào){ }包住
C. 聲明抽象方法,大括號(hào)可有可無(wú)
D. 聲明抽象方法不可寫出大括號(hào)
答案:D
java面試基礎(chǔ)選擇題2
1、如下哪些不是java的關(guān)鍵字?
A)const B)NULL C) false D)this E) native
答:B
2、關(guān)于垃圾收集的哪些敘述是對(duì)的
A)程序開發(fā)者必須自己創(chuàng)建一個(gè)線程進(jìn)行內(nèi)存**的.工作
B)垃圾收集將檢查并**不在使用的內(nèi)存
C)垃圾收集允許程序開發(fā)者明確指定并立即**該內(nèi)存
D)垃圾收集能夠在期望的時(shí)間**被java對(duì)象使用的內(nèi)存
答:B
3、已知表達(dá)式 int m [ ] = {0,1,2,3,4,5,6}; 下面哪個(gè)表達(dá)式的值與數(shù)組下標(biāo)量總數(shù)相等?
A)m.length() B)m.length C)m.length()+1 D)m.length-1
答:D
4、已知如下代碼: public class Test { long a[] = new long [10]; public static void main(String arg[] ){ System.out.print(a[6]); } } 請(qǐng)問(wèn)哪個(gè)語(yǔ)句是正確的?
A)Output is null. B)Output is 0 C)When compile, some error will occur.
D)When running, some error will occur.
答:C
5、已知如下代碼: public class Test { public static void main(String arg[] ) { int i = 5; do{ System.out.print(i); }while(--i>5); System.out.print(“finished”); } } 執(zhí)行后的輸出是什么?
A)5 B)4 C)6 D)finished
答:AD
6、已知如下代碼:
switch (m) {
case 0: System.out.print(“Condition 0”);
case 1: System.out.print(“Condition 1”);
case 2: System.out.print(“Condition 2”);
case 3: System.out.print(“Condition 3”); default: System.out.print(“Other Condition ”); } 當(dāng)m的值為什么時(shí)能輸出“Condition 2”
A)0 B)1 C)2 D)3 E) 4 F)None
答:ABC
java面試題選擇題3篇(擴(kuò)展4)
——java經(jīng)典面試題目3篇
java經(jīng)典面試題目1
1、String 是最基本的數(shù)據(jù)類型嗎?
答:不是。Java中的基本數(shù)據(jù)類型只有8個(gè):byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
2、float f=3.4;是否正確?
答:不正確。3.4是雙精度數(shù),將雙精度型(double)賦值給浮點(diǎn)型(float)屬于下轉(zhuǎn)型(down-casting,也稱為窄化)會(huì)造成精度損失,因此需要**類型轉(zhuǎn)換float f =(float)3.4; 或者寫成float f =3.4F;。
3、short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎?short s1 = 1; s1 += 1;有錯(cuò)嗎?
答:對(duì)于short s1 = 1; s1 = s1 + 1;由于1是int類型,因此s1+1運(yùn)算結(jié)果也是int 型,需要**轉(zhuǎn)換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因?yàn)閟1+= 1;相當(dāng)于s1 = (short)(s1 + 1);***隱含的**類型轉(zhuǎn)換。
4、Java有沒(méi)有g(shù)oto?
答:goto 是Java中的保留字,在目前版本的Java中沒(méi)有使用。(根據(jù)James Gosling(Java之父)編寫的《The Java Programming Language》一書的附錄中給出了一個(gè)Java關(guān)鍵字列表,***goto和const,但是這兩個(gè)是目前無(wú)法使用的關(guān)鍵字,因此有些地方將其稱之為保留字,其實(shí)保留字這個(gè)詞應(yīng)該有更廣泛的意義,因?yàn)槭煜語(yǔ)言的程序員都知道,在系統(tǒng)類庫(kù)中使用過(guò)的有特殊意義的單詞或單詞的組合都被視為保留字)
java經(jīng)典面試題目2
1、&和&&的區(qū)別?
答:&運(yùn)算符有兩種用法:(1)按位與;(2)邏輯與。&&運(yùn)算符是短路與運(yùn)算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運(yùn)算符左右兩端的布爾值都是true整個(gè)表達(dá)式的值才是true。&&之所以稱為短路運(yùn)算是因?yàn),如?&左邊的表達(dá)式的值是false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。很多時(shí)候我們可能都需要用&&而不是&,例如在驗(yàn)證用戶登錄時(shí)判定用戶名不是null而且不是空字符串,應(yīng)當(dāng)寫為:username != null &&!username.equals(“”),二者的順序不能交換,更不能用&運(yùn)算符,因?yàn)榈谝粋(gè)條件如果不成立,根本不能進(jìn)行字符串的equals比較,否則會(huì)產(chǎn)生NullPointerException異常。注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。
補(bǔ)充:如果你熟悉JavaScript,那你可能更能感受到短路運(yùn)算的強(qiáng)大,想成為JavaScript的高手就先從玩轉(zhuǎn)短路運(yùn)算開始吧。
2、解釋內(nèi)存中的棧(stack)、堆(heap)和靜態(tài)區(qū)(static area)的用法。
答:通常我們定義一個(gè)基本數(shù)據(jù)類型的變量,一個(gè)對(duì)象的引用,還有就是函數(shù)調(diào)用的現(xiàn)場(chǎng)保存都使用內(nèi)存中的?臻g;而通過(guò)new關(guān)鍵字和構(gòu)造器創(chuàng)建的對(duì)象放在堆空間;程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態(tài)區(qū)中。棧空間操作起來(lái)最快但是棧很小,通常大量的對(duì)象都是放在堆空間,理論上整個(gè)內(nèi)存沒(méi)有被其他進(jìn)程使用的空間甚至硬盤上的虛擬內(nèi)存都可以被當(dāng)成堆空間來(lái)使用。
1String str = new String("hello");
上面的語(yǔ)句中變量str放在棧上,用new創(chuàng)建出來(lái)的字符串對(duì)象放在堆上,而”hello”這個(gè)字面量放在靜態(tài)區(qū)。
補(bǔ)充:較新版本的Java(從Java 6的某個(gè)更新開始)中使用了一項(xiàng)叫”逃逸分析”的技術(shù),可以將一些局部對(duì)象放在棧上以提升對(duì)象的操作性能。
3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的'原理是在參數(shù)上加0.5然后進(jìn)行下取整。
4、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。從Java 5開始,Java中引入了枚舉類型,expr也可以是enum類型,從Java 7開始,expr還可以是字符串(String),但是長(zhǎng)整型(long)在目前所有的版本中都是不可以的。
java面試題選擇題3篇(擴(kuò)展5)
——java常見(jiàn)面試題3篇
java常見(jiàn)面試題1
1.什么是Java虛擬機(jī)?為什么Java被稱作是“*臺(tái)無(wú)關(guān)的編程語(yǔ)言”?
Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。
Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的*臺(tái),而不需要程序員為每一個(gè)*臺(tái)單獨(dú)重寫或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡,因(yàn)樗赖讓佑布?臺(tái)的指令長(zhǎng)度和其他特性。
2.JDK和JRE的區(qū)別是什么?
Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開發(fā)工具包(JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序。
3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?
“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類的實(shí)例變量的情況下被訪問(wèn)。
Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。
4.是否可以在static環(huán)境中訪問(wèn)非static變量?
static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。
5.Java**的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?
Java語(yǔ)言**的8中基本數(shù)據(jù)類型是:
byte
short
int
long
float
double
boolean
char
自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
Java中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的情況。與此相對(duì),方法覆蓋是說(shuō)子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問(wèn)。
7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒(méi)有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。
Java中構(gòu)造函數(shù)重載和方法重載很相似?梢詾橐粋(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java不**像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩憳?gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。
8.Java**多繼承么?
不**,Java不**多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。
9.接口和抽象類的區(qū)別是什么?
Java提供和**創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:
接口中所有的方法隱含的都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法。
類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類
類如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類可以不實(shí)現(xiàn)抽象類聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。
Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。
Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。
接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。
也可以參考JDK8中抽象類和接口的區(qū)別
10.什么是值傳遞和引用傳遞?
對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響源對(duì)象的值。
對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。
java常見(jiàn)面試題2
1.進(jìn)程和線程的區(qū)別是什么?
進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級(jí)進(jìn)程。
2.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?
有三種方式可以用來(lái)創(chuàng)建線程:
繼承Thread類
實(shí)現(xiàn)Runnable接口
應(yīng)用程序可以使用Executor框架來(lái)創(chuàng)建線程池
實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的情況下,這需要多繼承(而Java不**多繼承),只能實(shí)現(xiàn)接口。同時(shí),線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。
3.概括的解釋下線程的幾種可用狀態(tài)。
線程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):
就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開始執(zhí)行。
運(yùn)行中(Running):進(jìn)程正在執(zhí)行線程的代碼。
等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結(jié)束。
睡眠中(Sleeping):線程被**睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待獲取鎖。
**(Dead):線程完成了執(zhí)行。
4.同步方法和同步代碼塊的區(qū)別是什么?
在Java語(yǔ)言中,每一個(gè)對(duì)象有一把鎖。線程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別(粗粒度鎖)或者是代碼塊級(jí)別(細(xì)粒度鎖)。
5.在**器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級(jí)別的同步?
**器和鎖在Java虛擬機(jī)中是一塊使用的。**器**一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)**器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。
6.什么是死鎖(deadlock)?
兩個(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。
7.如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?
使用多線程的時(shí)候,一種非常簡(jiǎn)單的避免死鎖的方式就是:指定獲取鎖的順序,并**線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和**鎖,就不會(huì)出現(xiàn)死鎖了。
java面試題選擇題3篇(擴(kuò)展6)
——java面試題庫(kù)3篇
java面試題庫(kù)1
1.forward 和redirect的區(qū)別
解答:forward是容器中**權(quán)的轉(zhuǎn)向,是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問(wèn)目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來(lái)的,所以它的地址欄中還是原來(lái)的地址。 redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來(lái)說(shuō)瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,并且從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。前者更加高效,在前者可以滿足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接;在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。
2.Java反射機(jī)制的作用?
解答:Java反射機(jī)制的作用是:
1)在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類。
2)在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。
3)在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。
4)在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法
3.你是怎么理解java的泛型的?
解答: 在Java SE 1.5之前,沒(méi)有泛型的情況的下,通過(guò)對(duì)類型Object的引用來(lái)實(shí)現(xiàn)參數(shù)的“任意化”,“任意化”帶來(lái)的缺點(diǎn)是要做顯式的**類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對(duì)實(shí)際參數(shù)類型可以預(yù)知的情況下進(jìn)行的。對(duì)于**類型轉(zhuǎn)換錯(cuò)誤的情況,編譯器可能不提示錯(cuò)誤,在運(yùn)行的時(shí)候才出現(xiàn)異常,這是一個(gè)安全隱患。
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。
泛型的好處是在編譯的時(shí)候檢查類型安全,并且所有的**轉(zhuǎn)換都是自動(dòng)和隱式的,提高代碼的重用率。
4.JAVA源文件中是否可以包括多個(gè)類,有什么限制
解答:一個(gè)java源文件中可以包含多個(gè)類,每個(gè)源文件中至多有一個(gè)public類,如果有的話,那么源文件的名字必須與之相同。如果源文件中沒(méi)有public類,則源文件用什么名字都可以,但最好還是具有特定的意義,免得自己都不記得里面寫的是什么了。
5.在一個(gè)千萬(wàn)級(jí)的數(shù)據(jù)庫(kù)查尋中,如何提高查詢效率?分別說(shuō)出在數(shù)據(jù)庫(kù)設(shè)計(jì)、SQL語(yǔ)句、java等層面的解決方案。
解答:
1)數(shù)據(jù)庫(kù)設(shè)計(jì)方面:
a. 對(duì)查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。
b. 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如: select id from t where num is null 可以在num上設(shè)置默認(rèn)值0,確保表中num列沒(méi)有null值,然后這樣查詢: select id from t where num=0
c. 并不是所有索引對(duì)查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來(lái)進(jìn)行查詢優(yōu)化的,當(dāng)索引列有大量數(shù)據(jù)重復(fù)時(shí),查詢可能不會(huì)去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex上建了索引也對(duì)查詢效率起不了作用。
d. 索引并不是越多越好,索引固然可以提高相應(yīng)的 select 的效率,但同時(shí)也降低了 insert 及 update 的效率,因?yàn)?insert 或 update 時(shí)有可能會(huì)重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個(gè)表的索引數(shù)最好不要超過(guò)6個(gè),若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。
e. 應(yīng)盡可能的避免更新索引數(shù)據(jù)列,因?yàn)樗饕龜?shù)據(jù)列的`順序就是表記錄的物理存儲(chǔ)順序,一旦該列值改變將導(dǎo)致整個(gè)表記錄的順序的調(diào)整,會(huì)耗費(fèi)相當(dāng)大的資源。若應(yīng)用系統(tǒng)需要頻繁更新索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為索引。
f. 盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對(duì)于數(shù)字型而言只需要比較一次就夠了。
g. 盡可能的使用 varchar/nvarchar 代替 char/nchar ,因?yàn)槭紫茸冮L(zhǎng)字段存儲(chǔ)空間小,可以節(jié)省存儲(chǔ)空間,其次對(duì)于查詢來(lái)說(shuō),在一個(gè)相對(duì)較小的字段內(nèi)搜索效率顯然要高些。
h. 盡量使用表變量來(lái)代替臨時(shí)表。如果表變量包含大量數(shù)據(jù),請(qǐng)注意索引非常有限(只有主鍵索引)。
i. 避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。
j. 臨時(shí)表并不是不可使用,適當(dāng)?shù)厥褂盟鼈兛梢允鼓承├谈行,例如,?dāng)需要重復(fù)引用大型表或常用表中的某個(gè)數(shù)據(jù)集時(shí)。但是,對(duì)于一次性事件,最好使用導(dǎo)出表。
k. 在新建臨時(shí)表時(shí),如果一次**入數(shù)據(jù)量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。
l. 如果使用到了臨時(shí)表,在存儲(chǔ)過(guò)程的最后務(wù)必將所有的臨時(shí)表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統(tǒng)表的較長(zhǎng)時(shí)間鎖定。
2)SQL語(yǔ)句方面:
a. 應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
b. 應(yīng)盡量避免在 where 子句中使用 or 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如: select id from t where num=10 or num=20 可以這樣查詢: select id from t where num=10 union all select id from t where num=20
c. in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,如: select id from t where num in(1,2,3) 對(duì)于連續(xù)的數(shù)值,能用 between 就不要用 in 了: select id from t where num between 1 and 3
d. 下面的查詢也將導(dǎo)致全表掃描: select id from t where name like ‘%abc%’
e. 如果在 where 子句中使用參數(shù),也會(huì)導(dǎo)致全表掃描。因?yàn)镾QL只有在運(yùn)行時(shí)才會(huì)解析局部變量,但優(yōu)化程序不能將訪問(wèn)計(jì)劃的選擇推遲到運(yùn)行時(shí);它必須在編譯時(shí)進(jìn)行選擇。然而,如果在編譯時(shí)建立訪問(wèn)計(jì)劃,變量的值還是未知的,因而無(wú)法作為索引選擇的輸入項(xiàng)。如下面語(yǔ)句將進(jìn)行全表掃描: select id from t where num=@num 可以改為**查詢使用索引: select id from t with(index(索引名)) where num=@num
f. 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如: select id from t where num/2=100 應(yīng)改為: select id from t where num=100*2
g. 應(yīng)盡量避免在where子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如: select id from t where substring(name,1,3)=’abc’–name以abc開頭的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 應(yīng)改為: select id from t where name like ‘a(chǎn)bc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′
h. 不要在 where 子句中的“=”左邊進(jìn)行函數(shù)、算術(shù)運(yùn)算或其他表達(dá)式運(yùn)算,否則系統(tǒng)將可能無(wú)法正確使用索引。
i. 不要寫一些沒(méi)有意義的查詢,如需要生成一個(gè)空表結(jié)構(gòu): select col1,col2 into #t from t where 1=0 這類代碼不會(huì)返回任何結(jié)果集,但是會(huì)消耗系統(tǒng)資源的,應(yīng)改成這樣: create table #t(?)
j. 很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇: select num from a where num in(select num from b) 用下面的語(yǔ)句替換: select num from a where exists(select 1 from b where num=a.num)
k. 任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。
l. 盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過(guò)1萬(wàn)行,那么就應(yīng)該考慮改寫。
m. 盡量避免向客戶端返回大數(shù)據(jù)量,若數(shù)據(jù)量過(guò)大,應(yīng)該考慮相應(yīng)需求是否合理。
n. 盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。
3)java方面:
a.盡可能的少造對(duì)象。
b.合理擺正系統(tǒng)設(shè)計(jì)的位置。大量數(shù)據(jù)操作,和少量數(shù)據(jù)操作一定是分開的。大量的數(shù)據(jù)操作,肯定不是ORM框架搞定的。,
c.使用jDBC鏈接數(shù)據(jù)庫(kù)操作數(shù)據(jù)
d.**好內(nèi)存,讓數(shù)據(jù)流起來(lái),而不是全部讀到內(nèi)存再處理,而是邊讀取邊處理;
e.合理利用內(nèi)存,有的數(shù)據(jù)要緩存
java面試題庫(kù)2
1.請(qǐng)解釋分布式事務(wù)管理?
解答:分布式事務(wù)是指事務(wù)的參與者、**事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。為了實(shí)現(xiàn)分布式事務(wù),需要使用下面將介紹的兩階段提交協(xié)議。 階段一:開始向事務(wù)涉及到的全部資源發(fā)送提交前信息。此時(shí),事務(wù)涉及到的資源還有最后一次機(jī)會(huì)來(lái)異常結(jié)束事務(wù)。如果任意一個(gè)資源決定異常結(jié)束事務(wù),則整個(gè)事務(wù)取消,不會(huì)進(jìn)行資源的更新。否則,事務(wù)將正常執(zhí)行,除非發(fā)生災(zāi)難性的失敗。為了防止會(huì)發(fā)生災(zāi)難性的失敗,所有資源的更新都會(huì)寫入到日志中。這些日志是永久性的,因此,這些日志會(huì)幸免遇難并且在失敗之后可以重新對(duì)所有資源進(jìn)行更新。 階段二:只在階段一沒(méi)有異常結(jié)束的時(shí)候才會(huì)發(fā)生。此時(shí),所有能被定位和單獨(dú)**的資源管理器都將開始執(zhí)行真正的數(shù)據(jù)更新。 在分布式事務(wù)兩階段提交協(xié)議中,有一個(gè)主事務(wù)管理器負(fù)責(zé)充當(dāng)分布式事務(wù)協(xié)調(diào)器的角色。事務(wù)協(xié)調(diào)器負(fù)責(zé)整個(gè)事務(wù)并使之與網(wǎng)絡(luò)中的其他事務(wù)管理器協(xié)同工作。 為了實(shí)現(xiàn)分布式事務(wù),必須使用一種協(xié)議在分布式事務(wù)的各個(gè)參與者之間傳遞事務(wù)上下文信息,IIOP便是這種協(xié)議。這就要求不同開發(fā)商開發(fā)的事務(wù)參與者必須**一種標(biāo)準(zhǔn)協(xié)議,才能實(shí)現(xiàn)分布式的事務(wù)。
2.請(qǐng)寫出5種常見(jiàn)到的runtime exception。
解答:
NullPointerException:當(dāng)操作一個(gè)空引用時(shí)會(huì)出現(xiàn)此錯(cuò)誤。
NumberFormatException:數(shù)據(jù)格式轉(zhuǎn)換出現(xiàn)問(wèn)題時(shí)出現(xiàn)此異常。
ClassCastException:**類型轉(zhuǎn)換類型不匹配時(shí)出現(xiàn)此異常。
ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界,當(dāng)使用一個(gè)不存在的數(shù)組下標(biāo)時(shí)出現(xiàn)此異常。
ArithmeticException:數(shù)*行錯(cuò)誤時(shí)出現(xiàn)此異常
3.數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法?String有沒(méi)有l(wèi)ength()這個(gè)方法?
解答:數(shù)組沒(méi)有l(wèi)ength()方法 它有l(wèi)ength屬性
String有l(wèi)ength()方法。
4.請(qǐng)寫出一個(gè)單例模式。
解答:?jiǎn)卫J?Singleton pattern):確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局的訪問(wèn)點(diǎn)
public class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默認(rèn)構(gòu)造子 */ private EagerSingleton() { } /** * 靜態(tài)工廠方法 */ public static EagerSingleton getInstance() { return m_instance; } }
5.在java中,List是個(gè)接口,那實(shí)現(xiàn)List接口的類有哪些,有什么區(qū)別?
解答: ArrayList是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,
LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。
6.char類型能否存儲(chǔ)一個(gè)中文字符?為什么
解答:可以。一個(gè)char是兩個(gè)字節(jié),而一個(gè)中文也是兩個(gè)字節(jié)。
java面試題選擇題3篇(擴(kuò)展7)
——華為面試題3篇
華為面試題1
Q1:請(qǐng)你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?
Q2:請(qǐng)你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,主要有什么作用? TCP與UDP呢?
Q3:請(qǐng)問(wèn)交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的?
Q4:請(qǐng)問(wèn)C++的類和C里面的struct有什么區(qū)別?
Q5:請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
Q6:全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
Q7:一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識(shí)。
Q8:8086是多少尉的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?
“華為面試題”版權(quán)歸作者所有;轉(zhuǎn)載請(qǐng)注明出處!版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請(qǐng)帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除