問(wèn)題:Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類欣喧,是否可以implements(實(shí)現(xiàn))interface(接口)迄汛,并說(shuō)明原因
解答:不能通過(guò)extends或implement關(guān)鍵詞來(lái)繼承類或?qū)崿F(xiàn)接口,而是直接實(shí)現(xiàn)抽象類或接口中的方法
匿名內(nèi)部類的作用:
1.通常用來(lái)簡(jiǎn)化代碼編寫(xiě)槽畔,單次實(shí)現(xiàn)接口中全部的抽象方法,Anonymous Inner Class 沒(méi)有名字胁编,每次調(diào)用才會(huì)重新創(chuàng)建厢钧,用完即會(huì)回收
- 最常用的情況就是在多線程的實(shí)現(xiàn)上,因?yàn)橐獙?shí)現(xiàn)多線程必須繼承Thread類或是繼承Runnable接口嬉橙。如例子:Runnable接口的匿名內(nèi)部類實(shí)現(xiàn)
public class Demo {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
}
};
Thread t = new Thread(r);
t.start();
}
}
問(wèn)題:多重繼承的概念在Java中實(shí)現(xiàn)是通過(guò)如下哪些早直?
A. 擴(kuò)展兩個(gè)或多個(gè)類
B. 擴(kuò)展一個(gè)類并實(shí)現(xiàn)一個(gè)或多個(gè)接口
C. 實(shí)現(xiàn)兩個(gè)或更多接
解答:B,java僅支持單個(gè)繼承市框,可以實(shí)現(xiàn)多個(gè)接口霞扬,接口可以繼承多個(gè)
問(wèn)題:根據(jù)下面的程序代碼,哪些選項(xiàng)的值返回true枫振?
public class Square {
long width;
public Square(long l) {
width = l;
}
public static void main(String arg[]) {
Square a, b, c;
a = new Square(42L);
b = new Square(42L);
c = b;
long s = 42L;
}
}
A喻圃、a == b
B、s == a
C粪滤、b == c
D斧拍、a.equals(s)
解答:C
A:a和b都是分別new的對(duì)象,所占堆內(nèi)存處于不同的位置杖小,應(yīng)該是false
B:對(duì)象和基本數(shù)據(jù)類型不能比較
C: c直接就賦值給b了肆汹,所以他們兩個(gè)在堆內(nèi)存對(duì)應(yīng)的是一塊地址,應(yīng)該是true
D:equals予权,會(huì)進(jìn)行封箱操作昂勉,他們的地址也是不一樣的,false
問(wèn)題:在jdk1.5的環(huán)境下扫腺,有如下4條語(yǔ)句:
1岗照、 Integer i01 = 59;
2 、int i02 = 59;
3 斧账、Integer i03 =Integer.valueOf(59);
4 谴返、Integer i04 = new Integer(59);
以下輸出結(jié)果為false的是:
A、System.out.println(i01 == i02);
B咧织、System.out.println(i01 == i03);
C嗓袱、System.out.println(i03 == i04);
D、System.out.println(i02 == i04);
解答:C
包裝類 與 基本類型比較時(shí)會(huì)自動(dòng)使用值比較习绢,A渠抹、D為true 蝙昙,
jvm 中會(huì)緩存1-1024的Integer,i01 與 i03 使用相同地址的類梧却,i03創(chuàng)建是通過(guò)IntegerCache創(chuàng)建奇颠,在-128到127之間。而i04創(chuàng)建是通過(guò)Integer中的value
問(wèn)題:大小為MAX的循環(huán)隊(duì)列中放航,f為當(dāng)前對(duì)頭元素位置烈拒,r為當(dāng)前隊(duì)尾元素位置(最后一個(gè)元素的位置),則任意時(shí)刻广鳍,隊(duì)列中的元素個(gè)數(shù)為:
A荆几、r-f
B、(r-f+MAX+1)%MAX
C赊时、r-f+1
D吨铸、(r-f+MAX)%MAX
解答:B
f為當(dāng)前對(duì)頭元素位置,r為當(dāng)前隊(duì)尾元素位置(最后一個(gè)元素的位置)祖秒,則任意時(shí)刻诞吱,隊(duì)列中的元素個(gè)數(shù)為:(r-f+MAX+1)%MAX
問(wèn)題:如下Java語(yǔ)句
double x= 3.0;
int y=5;
x/=–y;
執(zhí)行后,x的值是()
A 竭缝、3
B房维、-0.6
C、0.4
D抬纸、0.75
解答:B
x /= -y表示為:x = x / -y = 3.0 / -5 = -0.6,由于x為double類型握巢,所有結(jié)果也是double類型
問(wèn)題:n個(gè)數(shù)值選出最大m個(gè)數(shù)(3<m<n)的最小算法復(fù)雜度是:
A、O(n)
B松却、O(nlogn)
C暴浦、O(logn)
D、O(mlogn)
E晓锻、O(nlogm)
F歌焦、O(mn)
解答:A
1.最簡(jiǎn)單的方法:將n個(gè)數(shù)排序,排序后的前k個(gè)數(shù)就是最大的k個(gè)數(shù)砚哆,這種算法的復(fù)雜度是O(nlogn)
2.O(n)的方法:利用快排的patition思想独撇,基于數(shù)組的第k個(gè)數(shù)來(lái)調(diào)整,將比第k個(gè)數(shù)小的都位于數(shù)據(jù)的左邊躁锁,比第k個(gè)數(shù)大的都調(diào)整到數(shù)組的右邊纷铣,這樣調(diào)整后,位于數(shù)組右邊的k個(gè)數(shù)最大的k個(gè)數(shù)(這k個(gè)數(shù)不一定是排序好的)
3.O(nlogk)的方法:先創(chuàng)建一個(gè)大小為k的最小堆战转,接下來(lái)我們每次從輸入的n個(gè)整數(shù)中讀入一個(gè)數(shù)搜立,如果這個(gè)數(shù)比最小堆的堆頂元素還要大,那么替換這個(gè)最小堆的堆頂并調(diào)整
問(wèn)題:有一個(gè)文件ip.txt槐秧,每行一條ip記錄啄踊,共若干行忧设,下面哪個(gè)命令可以實(shí)現(xiàn)“統(tǒng)計(jì)出現(xiàn)次數(shù)最多的前3個(gè)ip及其次數(shù)”?
A颠通、uniq -c ip.txt | sort -nr | head -n 3
B址晕、sort ip.txt | uniq -c | sort -rn | head -n 3
C、cat ip.txt | count -n | sort -rn | head -n 3
D顿锰、cat ip.txt | sort | uniq -c | sort -rn | top -n 3
解答:B
第一次排序谨垃,把ip按順序排列,因?yàn)榈诙€(gè)uniq只會(huì)合并相鄰項(xiàng)
第二次排序硼控,才是把ip按出現(xiàn)次序大小從大到小排列乘客,最后取前三項(xiàng)結(jié)果
問(wèn)題:設(shè)有兩個(gè)事務(wù)T1,T2,其并發(fā)操作如下所示,下面評(píng)價(jià)正確的是()
步驟 T1 T2
1 讀A=100
2 讀A=100
3. A=A+10寫(xiě)回
4. A=A-10寫(xiě)回
A、該操作不能重復(fù)讀
B淀歇、該操作不存在問(wèn)題
C、該操作讀"臟"數(shù)據(jù)
D匈织、該操作丟失修改
解答:D
當(dāng)兩個(gè)或多個(gè)事務(wù)讀取同一數(shù)據(jù)并做修改時(shí)浪默,會(huì)發(fā)生丟失更新問(wèn)題,即后一事務(wù)更新的結(jié)果會(huì)被前一事務(wù)更新的結(jié)果所覆蓋缀匕。
比如:當(dāng)事務(wù)A和事務(wù)B同時(shí)進(jìn)行纳决,事務(wù)A對(duì)數(shù)據(jù)做了修改,但還未提交乡小,此時(shí)阔加,事務(wù)B又對(duì)同一數(shù)據(jù)做了修改(注意:此時(shí)事務(wù)A還未提交修改過(guò)的數(shù)據(jù)),等事務(wù)A做事務(wù)提交時(shí)满钟,會(huì)發(fā)生數(shù)據(jù)改動(dòng)丟失
問(wèn)題:CPU和兩臺(tái)輸入/輸出設(shè)備(I1,I2)多道程序設(shè)計(jì)環(huán)境下,同時(shí)有三個(gè)作業(yè)J1,J2,J3進(jìn)行,這三個(gè)作業(yè)使用CPU和輸入/輸出設(shè)備的順序和時(shí)間如下所示:
J1:I2(35ms); CPU(15ms); I1(35ms);CPU(15ms); I2(25ms)
J2:I1(25ms); CPU(30ms); I2(35ms)
J3:CPU(30ms); I1(25ms);CPU(15ms);I1(15ms);
假定CPU,I1,I2都能并行工作,J1的優(yōu)先級(jí)最高,J2次之,J3優(yōu)先級(jí)最低,優(yōu)先級(jí)高的作業(yè)可以搶占優(yōu)先級(jí)低的作業(yè)的CPU,但不能搶占I1,I2,作業(yè)從J3開(kāi)始到完成需要多少時(shí)間?
A胜榔、130
B、85
C湃番、140
D夭织、115
解答:B
問(wèn)題:在jdk1.5之后,下列 java 程序輸出結(jié)果為()
1 int i=0;
2 Integer j = new Integer(0);
3 System.out.println(i==j);
4 System.out.println(j.equals(i));
A吠撮、true,false
B尊惰、true,true
C、false,true
D泥兰、false,false
E弄屡、對(duì)于不同的環(huán)境結(jié)果不同
F、程序無(wú)法執(zhí)行
解答:B
第①種i==j =>true:基本類型和它包裝型進(jìn)行“”運(yùn)算符的比較鞋诗,基本型封裝型將會(huì)自動(dòng)拆箱變?yōu)榛拘秃笤龠M(jìn)行比較膀捷,因此Integer(0)會(huì)自動(dòng)拆箱為int類型再進(jìn)行比較,顯然返回true削彬;
第②中(j.equals(i)) ==>true:基本型封裝類型調(diào)用equals(),但是參數(shù)是基本類型担孔,這時(shí)候江锨,先會(huì)進(jìn)行自動(dòng)裝箱,基本型轉(zhuǎn)換為其封裝類型
== 比較的是變量(棧)內(nèi)存中存放的對(duì)象的(堆)內(nèi)存地址糕篇,用來(lái)判斷兩個(gè)對(duì)象的地址是否相同啄育,即是否是指相同一個(gè)對(duì)象。比較的是真正意義上的指針操作拌消。
1挑豌、比較的是操作符兩端的操作數(shù)是否是同一個(gè)對(duì)象。
2墩崩、兩邊的操作數(shù)必須是同一類型的(可以是父子類之間)才能編譯通過(guò)氓英。
3、比較的是地址鹦筹,如果是具體的阿拉伯?dāng)?shù)字的比較铝阐,值相等則為true,如:int a=10 與 long b=10L 與 double c=10.0都是相同的(為true)铐拐,因?yàn)樗麄兌贾赶虻刂窞?0的堆
equals
1.equals用來(lái)比較的是兩個(gè)對(duì)象的內(nèi)容是否相等徘键,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對(duì)象遍蟋,如果沒(méi)有對(duì)該方法進(jìn)行覆蓋的話吹害,調(diào)用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷
2.String s="abce"是一種非常特殊的形式,和new 有本質(zhì)的區(qū)別虚青。它是java中唯一不需要new 就可以產(chǎn)生對(duì)象的途徑它呀。以String s="abce";形式賦值在java中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中。這種形式的字符串棒厘,在JVM內(nèi)部發(fā)生字符串拘留纵穿,即當(dāng)聲明這樣的一個(gè)字符串后,JVM會(huì)在常量池中先查找有有沒(méi)有一個(gè)值為"abcd"的對(duì)象,如果有,就會(huì)把它賦給當(dāng)前引用.即原來(lái)那個(gè)引用和現(xiàn)在這個(gè)引用指點(diǎn)向了同一對(duì)象,如果沒(méi)有,則在常量池中新創(chuàng)建一個(gè)"abcd",下一次如果有String s1 = "abcd";又會(huì)將s1指向"abcd"這個(gè)對(duì)象,即以這形式聲明的字符串,只要值相等,任何多個(gè)引用都指向同一對(duì)象奢人,而String s = new String("abcd");和其它任何對(duì)象一樣.每調(diào)用一次就產(chǎn)生一個(gè)對(duì)象政恍,只要它們調(diào)用
3.也可以這么理解: String str = "hello"; 先在內(nèi)存中找是不是有"hello"這個(gè)對(duì)象,如果有,就讓str指向那個(gè)"hello".如果內(nèi)存里沒(méi)有"hello"达传,就創(chuàng)建一個(gè)新的對(duì)象保存"hello". String str=new String ("hello") 就是不管內(nèi)存里是不是已經(jīng)有"hello"這個(gè)對(duì)象篙耗,都新建一個(gè)對(duì)象保存"hello"
// equals方法最初是在所有類的基類Object中進(jìn)行定義的,源碼是
public boolean equals(Object obj) {
return (this == obj);
}
//由equals的源碼可以看出這里定義的equals與==是等效的(Object類中的equals沒(méi)什么區(qū)別)宪赶,不同的原因就在于有些類(像String宗弯、Integer等類)對(duì)equals進(jìn)行了重寫(xiě),但是沒(méi)有對(duì)equals進(jìn)行重寫(xiě)的類(比如我們自己寫(xiě)的類)就只能從Object類中繼承equals方法搂妻,其equals方法與==就也是等效的蒙保,除非我們?cè)诖祟愔兄貙?xiě)equals。
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 為一個(gè)引用
String b = new String("ab"); // b為另一個(gè)引用,對(duì)象的內(nèi)容一樣
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 從常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false欲主,非同一對(duì)象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
問(wèn)題:下列java程序的輸出結(jié)果為()
1 public class Example{
2 String str=new String(“hello”);
3 char[] ch={‘a(chǎn)’,‘b’};
4 public static void main(String args[]){
5 Example ex=new Example();
6 ex.change(ex.str,ex.ch);
7 System.out.print(ex.str+" and ");
8 System.out.print(ex.ch);
9 }
10 public void change(String str,char ch[]){
11 str=“test ok”;
12 ch[0]=‘c’;
13 }
14 }
A邓厕、hello and ab
B逝嚎、hello and cb
C、hello and a
D详恼、test ok and ab
E补君、test ok and cb
解答: B
Java方法傳參是將變量復(fù)制一份傳進(jìn)去的,基本類型復(fù)制的就是變量值本身昧互,成為值傳遞挽铁,數(shù)組類型復(fù)制的變量的值的引用,方法change里拿到的str和ch都是外部變量引用的復(fù)制'str'和'ch’敞掘,'ch[0]'可以直接修改外部變量的值叽掘,而str = “test ok”, 在方法內(nèi)部會(huì)重新為"test ok"分配內(nèi)存空間玖雁,并把引用賦值內(nèi)'str',并不會(huì)改變外部變量的值
問(wèn)題:有關(guān)下述Java代碼描述正確的選項(xiàng)是()
1 public class TestClass {
2 private static void testMethod(){
3 System.out.println(“testMethod”);
4 }
5 public static void main(String[] args) {
6 ((TestClass)null).testMethod();
7 }
8 }
A更扁、編譯不通過(guò)
B、編譯通過(guò)赫冬,運(yùn)行異常浓镜,報(bào)NullPointerException
C、編譯通過(guò)面殖,運(yùn)行異常,報(bào)IllegalArgumentException
D哭廉、編譯通過(guò)脊僚,運(yùn)行異常,報(bào)NoSuchMethodException
E遵绰、編譯通過(guò)辽幌,運(yùn)行異常,報(bào)Exception
F椿访、運(yùn)行正常乌企,輸出testMethod
解答:F
思路
1.將null強(qiáng)制類型轉(zhuǎn)換后得到的是一個(gè)空的該類型的引用變量,(Object) null 同等于 Object obj = null
2.使用對(duì)象調(diào)用靜態(tài)方法時(shí)成玫,與該對(duì)象是否為空沒(méi)有關(guān)系
3.private控制修飾符加酵,表示只在本類中使用,包括內(nèi)部類
還有一個(gè)調(diào)用靜態(tài)方法容易搞錯(cuò)的例子哭当,Thread的靜態(tài)方法interrupted()與實(shí)例方法interrupt()
public class Do {
public static void main(String[] args ) {
MyThread thread=new MyThread();
thread.start();
thread.interrupt();
System.out.println("第一次調(diào)用thread.interrupted():"+thread.interrupted());
System.out.println("第二次調(diào)用thread.interrupted():"+thread.interrupted());
System.out.println("thread是否存活:"+thread.isAlive());
}
}
輸出結(jié)果為:
第一次調(diào)用thread.interrupted():false
第二次調(diào)用thread.interrupted():false
thread是否存活:true
為什么第一次調(diào)用thread.interrupted()的結(jié)果不是true猪腕?
因?yàn)閕nterrupted()是靜態(tài)方法,與該對(duì)象是具體哪個(gè)實(shí)例無(wú)關(guān)钦勘,它執(zhí)行的是Thread.currentThread().isInterrupted(true);在當(dāng)前對(duì)應(yīng)的是main線程陋葡,而被中斷的是MyThread實(shí)例
問(wèn)題:將整數(shù)數(shù)組(7-6-3-5-4-1-2)按照堆排序的方式原地進(jìn)行升序排列,請(qǐng)問(wèn)在整個(gè)排序過(guò)程中彻采,元素3的數(shù)組下標(biāo)發(fā)生過(guò)()次改變腐缤?
A捌归、0
B、1
C岭粤、2
D惜索、3
E、4
F绍在、5
解答:C
問(wèn)題:對(duì)文件名為T(mén)est.java的java代碼描述正確的是()
1 class Person {
2 String name = "No name";
3 public Person(String nm) {
4 name = nm;
5 }
6 }
7 class Employee extends Person {
8 String empID = "0000";
9 public Employee(String id) {
10 empID = id;
11 }
12 }
13 public class Test {
14 public static void main(String args[]) {
15 Employee e = new Employee("123");
16 System.out.println(e.empID);
17 }
18 }
A门扇、輸出:0000
B、輸出:123
C偿渡、編譯報(bào)錯(cuò)
D臼寄、輸出:No name
解答:C
每個(gè)類的創(chuàng)建都依賴構(gòu)造函數(shù),子類的創(chuàng)建依賴子類的構(gòu)造函數(shù)溜宽,子類繼承父類的字段和方法吉拳,那么父類的字段和方法就需要父類來(lái)完成初始化操作,所以子類需要實(shí)現(xiàn)父類的構(gòu)造方法
解決方法:在子類構(gòu)造方法中調(diào)用super("")或者在父類添加無(wú)參構(gòu)造函數(shù)
問(wèn)題:若k為整形,下述while循環(huán)的次數(shù)為:()
1 k=1000;
2 while (k>1)
3 { print k;
4 k=k/2;
5 }
A适揉、1000
B留攒、10
C、11
D嫉嘀、9
解答:D
整數(shù)除以2炼邀,其實(shí)就是整數(shù)向右移1位,右移比符號(hào)運(yùn)算效率更高剪侮,把1000轉(zhuǎn)化為二進(jìn)制是0011 1110 1000拭宁,當(dāng)右移直到只剩下一個(gè)1時(shí)(也就是將最高位的1移動(dòng)到最低位,0000 0000 0001)瓣俯,共需要移動(dòng)9次
問(wèn)題:以下程序的輸出結(jié)果是()杰标?
1 int x = 1;
2 do{
3 printf("%2d\n",x++);
4 }while(x--);
A、1
B彩匕、無(wú)任何輸出
C腔剂、2
D、陷入死循環(huán)
解答:D
初始條件: x=1
第一次循環(huán):輸出1, x=2
x--=2>0, x=1,進(jìn)入第二次循環(huán)
- 第二次循環(huán):輸出1,x=2
x--=2>0, x=1,進(jìn)入第三次循環(huán)
...
依此規(guī)律,該行代碼會(huì)無(wú)限輸出1
問(wèn)題:對(duì)于JVM內(nèi)存配置參數(shù):
-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,其最小內(nèi)存值和Survivor區(qū)總大小分別是()
A驼仪、5120m掸犬,1024m
B、5120m绪爸,2048m
C登渣、10240m,1024m
D毡泻、10240m胜茧,2048m
解答:D
-Xms:初始堆大小,表示java虛擬機(jī)堆區(qū)內(nèi)存初始內(nèi)存分配的大小,通常為操作系統(tǒng)可用內(nèi)存的1/64大小即可
-Xmx:最大堆大小呻顽,表示java虛擬機(jī)堆區(qū)內(nèi)存可被分配的最大上限雹顺,通常為操作系統(tǒng)可用內(nèi)存的1/4大小。但是開(kāi)發(fā)過(guò)程中廊遍,通常會(huì)將 -Xms 與 -Xmx兩個(gè)參數(shù)的配置相同的值嬉愧,其目的是為了能夠在java垃圾回收機(jī)制清理完堆區(qū)后不需要重新分隔計(jì)算堆區(qū)的大小而浪費(fèi)資源
-Xmn
:年輕代大小
-XX:NewSize=n
:設(shè)置年輕代大小
-XX:NewRatio=n
:設(shè)置年輕代和年老代的比值。如:為3喉前,表示年輕代與年老代比值為1:3没酣,年輕代占整個(gè)年輕代年老代和的1/4
-XX:SurvivorRatio=n
:年輕代中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。注意Survivor區(qū)有兩個(gè)卵迂。如:3裕便,表示Eden:Survivor=3:2,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/5
我們可以知道见咒,最小內(nèi)存值是10240m偿衰,排除A,B選項(xiàng)
根據(jù)Generation-Collection算法(目前大部分JVM采用的算法),一般根據(jù)對(duì)象的生存周期將堆內(nèi)存分為若干不同的區(qū)域改览,一般情況將新生代分為Eden 下翎,兩塊Survivor:
計(jì)算Survivor大小, Eden:Survivor = 3宝当,總大小5120,3x+x+x=5120 x=1024(Survivor區(qū)有兩個(gè)视事,即將年輕代分為5份,每個(gè)Survivor區(qū)占一份)庆揩,所以得出答案:總大小為2048m
問(wèn)題:執(zhí)行下列代碼的輸出結(jié)果是( )
1 public class Demo{
2 public static void main(String args[]){
3 int num = 10;
4 System.out.println(test(num));
5 }
6 public static int test(int b){
7 try{
9 b += 10; //1
10 return b; //2
11 }catch(RuntimeException e){
14 }
15 catch(Exception e2){
17 }
18 finally{
20 b += 10;//3
21 return b;//4
22 }
23 }
24}
A俐东、10
B、20
C盾鳞、30
D犬性、40
解答:C
1瞻离、不管有沒(méi)有出現(xiàn)異常腾仅,finally 塊中代碼都會(huì)執(zhí)行;
2、當(dāng)嘗試和捕獲中有返回時(shí)套利,finally 仍然會(huì)執(zhí)行;
3推励、finally 是在返回后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒(méi)有返回運(yùn)算后的值,而是先把要返回的值保存起來(lái)肉迫,不管最后中的代碼怎么樣验辞,返回的值都不會(huì)改變,任然是之前保存的值)喊衫,所以函數(shù)返回值是在finally執(zhí)行前確定的;
4跌造、finally中如果包含return,那么程序?qū)⒃谶@里返回,而不是try或catch中的return返回壳贪,返回值就不是try或catch中保存的返回值了
問(wèn)題:給定某Java程序的main方法如下陵珍,該程序編譯運(yùn)行后的結(jié)果是( )
1 public class Test {
2 int count = 21;
3 public void count() {
4 System.out.println(++count);
5 }
6 public static void main(String args[]) {
7 new Test().count();
8 new Test().count();
9 }
10 }
A、22 23
B违施、21 22
C互纯、22 22
D、21 23
解答:C
同個(gè)對(duì)象的兩個(gè)不同實(shí)例磕蒲,執(zhí)行相同的方法留潦,輸出自己的成員變量,結(jié)果肯定是一樣的辣往,int count 并沒(méi)有被static修飾兔院,這個(gè)變量并不是共享變量,不存在指向同一個(gè)對(duì)象
問(wèn)題:以下JAVA程序的輸出是什么()
public class HelloSogou{
public static synchronized void main(String[] a){
Thread t = new Thread(){
public void run(){
Sogou();
}
};
t.run();
System.out.print("Hello");
}
static synchronized void Sogou(){
System.out.print("Sogou");
}
}
A、HelloSogou
B、SogouHello
C亩歹、Hello
D疗认、結(jié)果不確定
解答:B
線程的start與run方法的區(qū)別:
1.先來(lái)看下start()的源碼,start()啟動(dòng)線程其實(shí)是通過(guò)start0()啟動(dòng)的
public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
/* Notify the group that this thread is about to be started
* so that it can be added to the group's list of threads
* and the group's unstarted count can be decremented. */
group.add(this); //添加到線程組
boolean started = false;
try {
start0(); //調(diào)用本地方法start0()來(lái)啟動(dòng)新的線程
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
private native void start0(); //本地方法start0()
2.run()源碼
public void run() {
if (target != null) {
target.run();
}
}
只是調(diào)用了runnable里面的run方法杨凑,并沒(méi)有創(chuàng)建新的線程
run方法啟動(dòng),走的線程是main線程,不會(huì)啟動(dòng)新線程
如果是start()方法啟動(dòng)扯键,則會(huì)new一個(gè)新的線程去thread-0去跑,
先運(yùn)行run方法運(yùn)行Sogou珊肃,再打印hello
問(wèn)題:Java類Demo中存在方法func0荣刑、func1、func2伦乔、func3和func4厉亏,請(qǐng)問(wèn)該方法中,哪些是不合法的定義烈和?(不定項(xiàng)選擇題)
1 public class Demo{
2 float func0()
3 {
4 byte i=1;
5 return i;
6 }
7 float func1()
8 {
9 int i=1;
10 return;
11 }
12 float func2()
13 {
14 short i=2;
15 return i;
16 }
17 float func3()
18 {
19 long i=3;
20 return i;
21 }
22 float func4()
23 {
24 double i=4;
25 return i;
26 }
27}
A爱只、func1
B、func2
C招刹、func3
D恬试、func4
E、func0
解答: A D
Java類型轉(zhuǎn)換分為自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換兩種
基本類型間的自動(dòng)類型轉(zhuǎn)換需要滿足以下條件:
(1).轉(zhuǎn)換雙方的類型必須兼容疯暑,例如int和long類型就是兼容的训柴,而int和boolean就是不兼容的。
(2).只能是"窄類型"向"寬類型"轉(zhuǎn)換,也就是目標(biāo)類型的數(shù)據(jù)表示范圍要比源類型的數(shù)據(jù)表示范圍要大
byte–>short–>int–>long->float–>double
Double源碼:
public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;//1.7976931348623157e+308
Float源碼:
// 2<sup>-149</sup> 2的負(fù)149次方
public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f
public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f
Long源碼:
/**
* A constant holding the minimum value a {@code long} can
* have, -2<sup>63</sup>.
*/
@Native public static final long MIN_VALUE = 0x8000000000000000L;
/**
* A constant holding the maximum value a {@code long} can
* have, 2<sup>63</sup>-1.
*/
@Native public static final long MAX_VALUE = 0x7fffffffffffffffL;
float的范圍為-2^128 ~ +2^128妇拯,也即-3.40E+38 ~ +3.40E+38幻馁;
double的范圍為-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308
即,double類型的范圍大于float類型仗嗦,所以预麸,D選項(xiàng)錯(cuò)誤
從double轉(zhuǎn)成float時(shí)會(huì)存在無(wú)法轉(zhuǎn)換的情況,因?yàn)閐ouble表示的數(shù)據(jù)范圍大于float表示的數(shù)據(jù)范圍儒将,所以從double到float要明確使用強(qiáng)制類型轉(zhuǎn)換
func3() long型的范圍小于float吏祸,所以,自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換都是由精度低的往精度高的轉(zhuǎn)換钩蚊,正確贡翘;
func2(),func0()正確;
func1() 方法沒(méi)有返回值砰逻,錯(cuò)誤鸣驱;
E 是什么?
這是科學(xué)計(jì)數(shù)法蝠咆,表示的是 eg:1.810524e10 則是18105240000,小數(shù)點(diǎn)往后10位表示的是1.810524乘以10的十次方
有效位:
float:浮點(diǎn)型踊东,含字節(jié)數(shù)為4,32bit刚操,數(shù)值范圍為-3.4E38~3.4E38(7個(gè)有效位)
double:雙精度實(shí)型闸翅,含字節(jié)數(shù)為8,64bit數(shù)值范圍-1.7E308~1.7E308(15個(gè)有效位)
decimal:數(shù)字型菊霜,128bit坚冀,不存在精度損失(相對(duì)不存在,28個(gè)有效位后會(huì)報(bào)錯(cuò))鉴逞,常用于銀行帳目計(jì)算记某。(28個(gè)有效位)
float f = 345.98756f;//結(jié)果顯示為345.9876,只顯示7個(gè)有效位构捡,對(duì)最后一位數(shù)四舍五入液南。
double d=345.975423578631442d;//結(jié)果顯示為345.975423578631,只顯示15個(gè)有效位勾徽,對(duì)最后一位四舍五入
注:float和double的相乘操作滑凉,數(shù)字溢出不會(huì)報(bào)錯(cuò),會(huì)有精度的損失
問(wèn)題:對(duì)于滿足SQL92標(biāo)準(zhǔn)的SQL語(yǔ)句:
select foo,count(foo) from pokes where foo>10 group by foo having count (*)>5 order by foo
其執(zhí)行順序應(yīng)該是?
A捂蕴、FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
B譬涡、FROM->GROUP BY->WHERE->HAVING->SELECT->ORDER BY
C闪幽、FROM->WHERE->GROUP BY->HAVING->ORDER BY->SELECT
D啥辨、FROM->WHERE->ORDER BY->GROUP BY->HAVING->SELECT
解答:A
問(wèn)題:在Java中,包c(diǎn)om中定義了類TestUtil盯腌,在com的子包util中定義了同名類TestUtil溉知,給定如下Java代碼,編譯運(yùn)行時(shí),將發(fā)生( )
1 package test;
2 import com.util.TestUtil;
3 import com.TestUtil;
4 public class Test {
5 public static void main(String[] args) {
6 TestUtil testutil = new TestUtil();
7 }
8 }
A级乍、創(chuàng)建了一個(gè)com.TestUtil對(duì)象
B舌劳、創(chuàng)建了一個(gè)com.util.TestUtil對(duì)象
C、運(yùn)行時(shí)出現(xiàn)異常
D玫荣、編譯無(wú)法通過(guò)
解答:D
根據(jù)JDK中ClassLoader
類加載器知道甚淡,因?yàn)樵贘VM編譯的時(shí)候,因?yàn)閯?chuàng)建完源文件之后,程序先要被JVM中的java編譯器進(jìn)行編譯為.class文件捅厂,他自下而上去找架包搜索需要的引用的類贯卦,當(dāng)他發(fā)現(xiàn)同名的類的架包有兩個(gè),他就不知道使用哪個(gè)架包了,需要指定是那個(gè)包下面的類才可以編譯通過(guò)
問(wèn)題:如下代碼焙贷,執(zhí)行test()函數(shù)后撵割,屏幕打印結(jié)果為()
1 public class Test2
2{
3 public void add(Byte b)
4 {
5 b = b++;
6 }
7 public void test()
8 {
9 Byte a = 127;
10 Byte b = 127;
11 add(++a);
12 System.out.print(a + " ");
13 add(b);
14 System.out.print(b + "");
15 }
16}
A、127 127
B辙芍、128 127
C啡彬、129 128
D、以上都不對(duì)
解答:D
應(yīng)該是:-128 127
b++ 是先賦值再計(jì)算
++a 是先計(jì)算再賦值
add(a); 先執(zhí)行a = a + 1 (127 + 1) = 128故硅,再執(zhí)行add里面的運(yùn)算 b = b ++ ,前面說(shuō)到 b 是先賦值再計(jì)算庶灿,所以此次結(jié)果不會(huì)改變。最終結(jié)果為128吃衅,但是Byte 最大為127跳仿,超過(guò)了最大值,所以變成了最小值-128
add(b); 同上捐晶,b的結(jié)果不會(huì)改變所以為127.
問(wèn)題:以下程序運(yùn)行的結(jié)果為()
1 public class Example extends Thread{
2 @Override
3 public void run(){
4 try{
5 Thread.sleep(1000);
6 }catch (InterruptedException e){
7 e.printStackTrace();
8 }
9 System.out.print("run");
10 }
11 public static void main(String[] args){
12 Example example=new Example();
13 example.run();
14 System.out.print("main");
15 }
16}
A菲语、runmain
B、mainrun
C惑灵、main
D山上、run
E、不能確定
解答:A
1英支、run() 和 start() 的區(qū)別:
run() 方法和線程沒(méi)有關(guān)系
Thread 的 run方法如下:
public void run() {
if (target != null) {
target.run();
}
}
target 就是實(shí)現(xiàn)了Thread的子類佩憾。這里就是Example。
其實(shí)可以看出就是調(diào)用了Example 的run方法干花。就相當(dāng)于普通方法調(diào)用
start() 方法才是啟動(dòng)一個(gè)線程了妄帘,通過(guò)查看源碼 方法上有個(gè)synchronized 修飾。
2池凄、線程的執(zhí)行流程
如題抡驼,程序運(yùn)行到example.run(); 會(huì)執(zhí)行這個(gè)方法,最后再執(zhí)行System.out.print(“main”);所以這個(gè)結(jié)果是:runmain
要是改成example.start(); 就是有兩個(gè)線程肿仑,一個(gè)是main主線程致盟,一個(gè)是example線程碎税,這時(shí)候兩個(gè)線程搶占鎖,誰(shuí)先搶到馏锡,誰(shuí)執(zhí)行雷蹂,所以最后結(jié)果是:無(wú)法確定
問(wèn)題:以下JAVA程序的輸出是什么()
1 public class HelloSogou{
2 public static synchronized void main(String[] a){
3 Thread t=new Thread(){
4 public void run(){Sogou();}
5 };
6 t.run();
7 System.out.print("Hello");
8 }
9 static synchronized void Sogou(){
10 System.out.print("Sogou");
11 }
12 }
A、HelloSogou
B杯道、SogouHello
C匪煌、Hello
D、結(jié)果不確定
解答:B
如果是 t.start();使用start()方法區(qū)啟動(dòng)線程党巾,答案則是E.不確定虐杯,因?yàn)橛锌赡苁茿
這是因?yàn)椋哼@一點(diǎn)應(yīng)該至今沒(méi)有解決。這因?yàn)閺牟僮飨到y(tǒng)之間調(diào)用的問(wèn)題
因?yàn)閖ava線程源碼看是昧港,start最終他執(zhí)行的是本地方法start0擎椰,是直接調(diào)用操系統(tǒng)的線程的一個(gè)方法,而這個(gè)start0 他會(huì)調(diào)用一個(gè)native文件创肥,也就是我們的c文件达舒。但是這個(gè)c文件他并沒(méi)有直接去調(diào)用os(操作系統(tǒng))函數(shù)
他的實(shí)現(xiàn)是:start0會(huì)去調(diào)用操作系統(tǒng)函數(shù)的pthread_create創(chuàng)建線程的方法。這個(gè)創(chuàng)建方法會(huì)有一個(gè)傳回調(diào)方法的參數(shù)然后再由操作系統(tǒng)去掉用java的run方法叹侄。這一系列的調(diào)用巩搏。導(dǎo)致主線程main已經(jīng)執(zhí)行了
問(wèn)題:下面哪段程序能夠正確的實(shí)現(xiàn)了GBK編碼字節(jié)流到UTF-8編碼字節(jié)流的轉(zhuǎn)換:byte[] src,dst;
A、dst=String.fromBytes(src趾代,“GBK”).getBytes(“UTF-8”)
?
B贯底、dst=new String(src,“GBK”).getBytes(“UTF-8”)
?
C撒强、dst=new String(“GBK”禽捆,src).getBytes()
?
D飘哨、dst=String.encode(String.decode(src胚想,“GBK”)),“UTF-8” )
解答:B
String#getBytes(charset) 是將字符串以指定字符集進(jìn)行編碼成字節(jié)流
String(bytes,charset) 則是將字節(jié)流以指定字符集解碼成字符串
問(wèn)題:關(guān)于代碼中的變量在內(nèi)存中的存儲(chǔ)位置描述正確的是()
1 int a=0;
2 class someClass{
3 int b;
4 static int c;
5 };
6 int main(){
7 int d=0;
8 someClass *p=new someClass();
9 return 0;
10 }
A芽隆、堆浊服、棧、全局區(qū)均有變量
B胚吁、不存在堆區(qū)的變量
C牙躺、不存在棧區(qū)的變量
D、不存在全局變量區(qū)的變量
解答:A
問(wèn)題:假設(shè)MySQL數(shù)據(jù)庫(kù)表:
create table T{
k int unsigned not null auto_increment,
a date,
b varchar(24),
c int,d varchar(24),
primary key(k),unique key a_index (a DESC,b DESC),
key k1(b),key k2?,key k3(d));
如下哪些sql語(yǔ)句查詢能較好的利用索引?()
A腕扶、select b from WHERE b like ‘a(chǎn)aa%’;
B孽拷、select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC;
C、select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC;
D蕉毯、select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b;
解答:AD
問(wèn)題:已知a為不為空的數(shù)組乓搬,且變量b===a. 以下哪些方式可以清空數(shù)組, 使得a.length 與 b.length 都為 0;
A、b.len(0)
B代虾、a = []
C进肯、a.splice(0, a.length)
D、a = a.slice(a.length)
解答:C
java中沒(méi)有l(wèi)en()方法棉磨,故A不對(duì)
B選項(xiàng):相當(dāng)于a指向了一個(gè)新的數(shù)組江掩,新數(shù)組為空數(shù)組
C選項(xiàng):數(shù)組的splice(0,a.length)方法執(zhí)行后返回的是被刪除的項(xiàng)乘瓤,執(zhí)行后刪除了數(shù)組的每一項(xiàng)环形,原數(shù)組發(fā)生改變
D選項(xiàng):數(shù)組的slice(a.length)方法執(zhí)行后返回空數(shù)組,賦值給a,但是這個(gè)方法對(duì)原數(shù)組不會(huì)產(chǎn)生影響衙傀,所以b.length不為0
問(wèn)題:計(jì)算f(10)時(shí)抬吟,f()被調(diào)用了多少次?
1 int f(int x) {
2 if(x <= 2)
3 return 1;
4 return f(x - 2) + f(x - 4) + 1;
5}
A统抬、14
B火本、18
C、20
D聪建、24
E钙畔、以上都不是
解答:E
基于偶數(shù)遞歸樹(shù),應(yīng)該是15次
問(wèn)題:以下計(jì)算斐波那契數(shù)列的函數(shù)時(shí)間復(fù)雜度為()
1 int Fibonacci(int n)
2 {
3 if(n==0)
4 return 0;
5 else if(n==1)
6 return 1;
7 else
8 return Fibonacci(n-1)+Fibonacci(n-2)
9 }
A金麸、O(nlogn)
B擎析、O(n^2)
C、O(n)
D挥下、O(2^n)
解答:D
問(wèn)題:有以下程序段,下面正確的選項(xiàng)是()
1 class DemoThread extends Thread {
2 public static void main(String args[]) {
3 DemoThread threadOne = new DemoThread();
4 DemoThread threadTwo = new DemoThread();
5 threadOne.start();
6 System.out.print("thread one.");
7 threadTwo.start();
8 System.out.print("thread two.");
9 }
10 public void run() {
11 System.out.print("Thread.");
12 }
13 }
A揍魂、編譯失敗
B、程序運(yùn)行結(jié)果為:thread one.Thread.thread two.Thread.
C棚瘟、程序運(yùn)行結(jié)果是:thread one.thread two.Thread.Thread.
D愉烙、程序運(yùn)行結(jié)果不確定
解答:D
因?yàn)閖ava線程源碼看是,start最終他執(zhí)行的是本地方法start0解取,是直接調(diào)用操系統(tǒng)的線程的一個(gè)方法
而這個(gè)start0 他會(huì)調(diào)用一個(gè)native文件步责,也就是我們的c文件。但是這個(gè)c文件他并沒(méi)有直接去調(diào)用os(操作系統(tǒng))函數(shù)
他的實(shí)現(xiàn)是:start0會(huì)去調(diào)用操作系統(tǒng)函數(shù)的pthread_create創(chuàng)建線程的方法禀苦,這個(gè)創(chuàng)建方法會(huì)有一個(gè)傳回調(diào)方法的參數(shù)然后再由操作系統(tǒng)去掉用java的run方法蔓肯,這一系列的調(diào)用,導(dǎo)致主線程main已經(jīng)執(zhí)行了振乏,所以這里最終那個(gè)線程先執(zhí)行run方法并不確定
問(wèn)題:下面java程序的運(yùn)行結(jié)果是()
1 class A {
2 static {
3 System.out.print("A");
4 }
5 public A() {
6 System.out.print("a");
7 }
8 void say() {
9 System.out.print("1");
10 }
11 }
12 class B extends A {
13 static {
14 System.out.print("B");
15 }
16 public B() {
17 System.out.print("b");
18 }
19 void say() {
20 System.out.print("2");
21 }
22 }
23 public class Hello {
24 public static void main(String[] args) {
25 A ab = new B();
26 ab.say();
27 ab = new B();
28 ab.say();
29 }
30 }
A蔗包、ABab2ABab2
B、AaBb1AaBb2
C慧邮、ABab1ab2
D调限、ABab2ab2
解答:D
這題考的是static 和 構(gòu)造函數(shù)的執(zhí)行順序
先執(zhí)行父類static塊舟陆,在執(zhí)行子類static塊,static塊只執(zhí)行一次耻矮。 所以只有一個(gè)AB秦躯,然后就是構(gòu)造方法,先執(zhí)行父類的裆装,在執(zhí)行子類的踱承,因?yàn)閚ew了兩次,所以有兩個(gè)ab哨免,緊接著調(diào)用了兩次say方法茎活,所以有兩個(gè)2
問(wèn)題:Linux進(jìn)程內(nèi)存空間有以下幾個(gè)部分:
1.stack
2.heap
3.bss segment
4.code segment/text segment
5.data segment
它們從高地址到低地址的分布順序?yàn)?)
A、45321
B琢唾、12354
C载荔、45312
D、21354
解答:B
1采桃、棧(Stack): 由編譯器自動(dòng)分配釋放管理. 用于函數(shù)調(diào)用,保存函數(shù)的返回地址,函數(shù)的參數(shù),函數(shù)內(nèi)部定義的局部變量
2身辨、堆(heap) : 需要由程序員分配釋放管理,若程序員不釋放芍碧,程序結(jié)束時(shí)可能由OS回收煌珊。通常在堆中進(jìn)行動(dòng)態(tài)存儲(chǔ)分配。(建議一定要手動(dòng)釋放,不然會(huì)造成內(nèi)存泄漏)
3泌豆、未被初始化數(shù)據(jù)段(bbs):它屬于靜態(tài)存儲(chǔ)區(qū),但是該段中的數(shù)據(jù)沒(méi)有經(jīng)過(guò)初始化.即存放未初始化的靜態(tài)變量或全局變量
4定庵、數(shù)據(jù)段(data):數(shù)據(jù)段分為讀寫(xiě)數(shù)據(jù)段和只讀數(shù)據(jù)段
讀寫(xiě)數(shù)據(jù)段:已初始化的全局變量或者已初始化的靜態(tài)變量
只讀數(shù)據(jù)段:只讀全局量和只讀局部量(使用const); 程序中使用的常量
5、代碼段(text):即二進(jìn)制代碼,代碼段是只讀的,可被多個(gè)進(jìn)程共享
問(wèn)題:假定x=500踪危,求下面函數(shù)的返回值()
1 int fun(int x)
2{
3 int countx = 0;
4 while (x)
5 {
6 countx++;
7 x = x & (x – 1);
8 }
9 return countx;
10}
A蔬浙、2
B、3
C贞远、5
D畴博、6
解答:D
x = x & x-1 # 將x的二進(jìn)制表示最后一位1變成0,那么整段代碼的目的就是求x二進(jìn)制表示1的個(gè)數(shù)
500 -> 111110100蓝仲,有6個(gè)1
問(wèn)題:其中 alert 兩次輸出結(jié)果為()
1 var foo=”hello”;
2(function(){
3 var bar=”world”;
4 alert(foo+bar);
5})();
6alert(foo+bar);
A俱病、hello world報(bào)錯(cuò)
B、hello world hello world
C袱结、hello world hello
D亮隙、hello world
解答:A
外面的 alert 找不到變量 bar 的定義
問(wèn)題:設(shè)有一個(gè)遞歸算法如下
1 int f(int n) {
2 if(n<=3) return 1;
3 else return f(n-2)+f(n-6)+1;
4}
試問(wèn)計(jì)算f(f(9))時(shí)需要計(jì)算()次f函數(shù)。
A垢夹、10
B溢吻、11
C、12
D果元、14
解答:C
一促王、先算內(nèi)層f(9)
[1] 計(jì)算 f(9) = f(7) + f(3) + 1;
[2] 計(jì)算[1]中 f(7) = f(5) + f(1) + 1;
[3] 計(jì)算[2]中 f(5) = f(3) + f(-1) + 1;
[4] 計(jì)算[3]中 f(3) = 1;
[5] 計(jì)算[3]中 f(-1) = 1;
{至此f(5)可計(jì)算得: f(5) = 1 + 1 + 1 = 3}
[6] 計(jì)算(1)中f(1) = 1;
{至此f(7)可計(jì)算得 :f(7) = 3 + 1 + 1 = 5}
[7] 計(jì)算[1]中f(3) = 1;
{至此f(9)可計(jì)算得:f(9) = 5 + 1 + 1 = 7}
計(jì)算f(9)一共調(diào)用了7次函數(shù)
二犀盟、計(jì)算外層f(7) 由上面步驟可知,計(jì)算f(7)調(diào)用了5次函數(shù) 所以一共調(diào)用了函數(shù)7+5=12次
問(wèn)題:下面函數(shù)的時(shí)間復(fù)雜度是()
1 long foo(long x){
2 if(x<2) return 1;
3 return x*x*foo(x-1);
4}
A蝇狼、O(N)
B阅畴、O(N^2)
C、O(N^3)
D题翰、o(N!)
解答:A
這是一個(gè)遞歸算法恶阴,如:n表示遞歸次數(shù)
foo(2)=22foo(1) n=2
foo(3)=33foo(2) n=3
foo(4)=44foo(3) n=4
………………
依次類推:
foo(N)=NNfoo(N-1) n= (N)
當(dāng)n>=2時(shí)
foo(n)=n2foo(n-1)=n2(n-1)2foo(n-2)=…=n2(n-1)^2*…2foo(1);
遞歸n-1步诈胜,時(shí)間復(fù)雜度為O(n)
因此時(shí)間復(fù)雜度為:O(N)
問(wèn)題:運(yùn)行以下程序
1 <script>
2 var m= 1, j = k = 0;
3 function add(n) {
4 return n = n+1;
5 }
6 y = add(m);
7 function add(n) {
8 return n = n + 3;
9 }
10z = add(m);
11</script>
y和z的最終結(jié)果為:
A豹障、2,4
B、4,4
C焦匈、2,2
D血公、報(bào)異常
解答:B
javascript
里沒(méi)有函數(shù)重載,如果存在兩個(gè)同名函數(shù)缓熟,后一個(gè)函數(shù)會(huì)覆蓋前一個(gè)函數(shù)累魔;解析器在讀取、加載數(shù)據(jù)時(shí)會(huì)先讀取函數(shù)聲明再讀取函數(shù)表達(dá)式够滑,綜上垦写,y和z的值都為4
問(wèn)題:下面的輸出結(jié)果()
(function() {
2 var a = b = 5;
3 })();
4console.log(b);
5console.log(a);
A?、5彰触,5
B梯投、undefined,undefined
C况毅、5分蓖,undefined
D、5尔许,Uncaught ReferenceError: a is not defined
解答:D
由于 a 和 b 都定義在函數(shù)的封閉范圍內(nèi)么鹤,并且都始于 var關(guān)鍵字,大多數(shù)JavaScript開(kāi)發(fā)人員期望 typeof a 和 typeof b 在上面的例子中都是undefined
然而味廊,事實(shí)并非如此蒸甜。這里的問(wèn)題是,大多數(shù)開(kāi)發(fā)人員將語(yǔ)句 var a = b = 5; 錯(cuò)誤地理解為是以下聲明的簡(jiǎn)寫(xiě):
var b = 5;
var a = b;
但事實(shí)上余佛,var a = b = 5; 實(shí)際是以下聲明的簡(jiǎn)寫(xiě):
b = 5;
var a = b;
既然語(yǔ)句 var a = b = 3; 是語(yǔ)句 b = 3; 和 var a = b;的簡(jiǎn)寫(xiě)迅皇, b 最終成為了一個(gè)全局變量(因?yàn)樗鼪](méi)有前綴 var 關(guān)鍵字),因此仍然在范圍內(nèi)甚至封閉函數(shù)之外
在嚴(yán)格模式下(即使用 use strict)衙熔,語(yǔ)句var a = b = 3; 將生成ReferenceError: a is not defined的運(yùn)行時(shí)錯(cuò)誤登颓,從而避免任何否則可能會(huì)導(dǎo)致的headfakes /bug
問(wèn)題:NumberList是一個(gè)順序容器,以下代碼執(zhí)行后红氯,NumberList里的元素依次為
1 List<int> NumberList = new List<int>(){2,4,1,3,5};
2 for(int i = 0;i<NumberList.Count;++i)
3{
4 int v = NumberList[i];
5 if(v%2 = = 0)
6 {
7 NumberList.Remove(v);//刪除的是元素框咙,而非下標(biāo)
8 }
9}
A咕痛、2,4,1,3,5
B、2,1,3,5
C喇嘱、4,1,3,5
D茉贡、1,3,5
解答:C
類似于Java中的ArrayList,初始時(shí)Arraylist為{2,4,1,3,5}
第一次循環(huán) i=0;v=2;2是偶數(shù)者铜,所以把2從ArrayList中移除腔丧,這時(shí)ArrayList變?yōu)閧4,1,3,5}
第二次循環(huán)i=1;v=1(因?yàn)樾碌腁rrayList中4的索引是0),1不是偶數(shù),
依次 3和 5都不是偶數(shù)作烟,所以只刪除了元素2愉粤,那么剩下的就是{4,1,3,5}
問(wèn)題:執(zhí)行某操作,前50次成功拿撩,第51次失敗a全部回滾b前50次提交第51次拋異常衣厘,ab場(chǎng)景分別如何設(shè)置Spring(傳播性)?
解答:
a压恒、全部回滾 父類方法加事務(wù)PROPAGATION_REQUIRED
b影暴、第51次拋異常 父類方法加事務(wù)PROPAGATION_REQUIRED
,子類方法加事務(wù)PROPAGATION_REQUIRES_NEW
問(wèn)題:檢查程序探赫,是否存在問(wèn)題型宙,如果存在指出問(wèn)題所在,如果不存在伦吠,說(shuō)明輸出結(jié)果
1 public class HelloB extends HelloA
2{
3 public HelloB()
4 {
5 }
6 {
7 System.out.println("I’m B class");
8 }
9 static
10{
11 System.out.println("static B");
12 }
13 public static void main(String[] args)
14 {
15 new HelloB();
16 }
17}
18class HelloA
19{
20 public HelloA()
21 {
22 }
23 {
24 System.out.println("I’m A class");
25 }
26 static
27 {
28 System.out.println("static A");
29 }
30}
A妆兑、static A
I’m A class
static B
I’m B class
?
B、I’m A class
I’m B class
static A
static B
C讨勤、static A
static B
I’m A class
I’m B class
?
D箭跳、I’m A class
static A
I’m B class
static B
解答:C
構(gòu)造方法是只有你在new對(duì)象的時(shí)候才會(huì)執(zhí)行,
靜態(tài)語(yǔ)句塊和靜態(tài)方法在類加載到內(nèi)存的時(shí)候就已經(jīng)執(zhí)行了
靜態(tài)語(yǔ)句塊只能給靜態(tài)變量賦值,里面不能出現(xiàn)方法,同樣,靜態(tài)方法里面也不能出現(xiàn)靜態(tài)語(yǔ)句塊
所以先是靜態(tài)語(yǔ)句塊執(zhí)行,然后靜態(tài)方法加載到內(nèi)存,靜態(tài)語(yǔ)句塊你不管它它自動(dòng)會(huì)執(zhí)行潭千,而靜態(tài)方法它一直存在于內(nèi)存中谱姓,只有你用類名點(diǎn)方法名的時(shí)候才會(huì)執(zhí)行
{
System.out.println("I’m A class");
}
他是非靜態(tài)代碼塊,如果都是靜態(tài)代碼刨晴,一個(gè)類里面屉来,按照先后順序執(zhí)行,父子之間狈癞,父類靜態(tài)代碼塊先執(zhí)行
正確順序是:
父類A靜態(tài)代碼塊->子類B靜態(tài)代碼塊->父類A非靜態(tài)代碼塊->父類A構(gòu)造函數(shù)->子類B非靜態(tài)代碼塊->子類B構(gòu)造函數(shù)
問(wèn)題:檢查程序茄靠,是否存在問(wèn)題,如果存在指出問(wèn)題所在蝶桶,如果不存在慨绳,說(shuō)明輸出結(jié)果
1package algorithms.com.guan.javajicu;
2public class Example {
3 String str = new String("good");
4 char[] ch = {'a','b','c'};
5 public static void main(String[] args) {
6 Example ex = new Example();
7 ex.change(ex.str, ex.ch);
8 System.out.print(ex.str +"and");
9 System.out.print(ex.ch);
10 }
11
12 public void change(String str, char ch[]){ 12
13 str= "test ok";
14 ch[0]= 'g';
15 }
16}
A、test okandabc
B、test okandgbc
C脐雪、goodandabc
D厌小、goodandgbc
解答:D
數(shù)組:
使用一個(gè)"new"創(chuàng)建一個(gè)對(duì)象時(shí),在堆中會(huì)分配一段內(nèi)存空間战秋,并返回一個(gè)引用璧亚。這一點(diǎn)對(duì)于數(shù)組也適用,因?yàn)樵趈ava中脂信,數(shù)組也是對(duì)象
字符串:
1癣蟋、顯式的String常量
str= “test ok”;
代碼執(zhí)行后就在常量池中創(chuàng)建了一個(gè)值為test ok的String對(duì)象;
此時(shí)該字符串的引用在虛擬機(jī)棧里面
2狰闪、String對(duì)象
String str = new String(“good”);
Class被加載時(shí)就在常量池中創(chuàng)建了一個(gè)值為good的String對(duì)象疯搅,執(zhí)行時(shí)會(huì)在堆里創(chuàng)建new String(“good”)對(duì)象
問(wèn)題:下面代碼運(yùn)行后,變量 total 的結(jié)果是?
1 int total = 0;
2 for (int i = 0, j = 5; total < 10 || j > 3; ++i, --j) {
3 total += (i + j);
4 }
A、5
B尝哆、10
C秉撇、無(wú)法通過(guò)編譯
D甜攀、運(yùn)行時(shí)出錯(cuò)
E秋泄、運(yùn)行時(shí)死循環(huán)
解答:B
for循環(huán)的表達(dá)式一般如下:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){
表達(dá)式4;
}
執(zhí)行的順序?yàn)椋?br>
1)第一次循環(huán),即初始化循環(huán)规阀。
首先執(zhí)行表達(dá)式1(一般為初始化語(yǔ)句)恒序,再執(zhí)行表達(dá)式2(一般為條件判斷語(yǔ)句),判斷表達(dá)式1是否符合表達(dá)式2的條件谁撼,如果符合歧胁,則執(zhí)行表達(dá)式4,否則厉碟,停止執(zhí)行喊巍,最后執(zhí)行表達(dá)式3
2)下次的循環(huán):
首先執(zhí)行表達(dá)式2,判斷表達(dá)式3是否符合表達(dá)式2的條件箍鼓;如果符合崭参,繼續(xù)執(zhí)行表達(dá)式4,否則停止執(zhí)行款咖,最后執(zhí)行表達(dá)式3.如果往復(fù)何暮,直到表達(dá)式3不再滿足表達(dá)式2的條件怜俐。
總的來(lái)說(shuō)膨蛮,執(zhí)行順序是一致的,先進(jìn)行條件判斷(表達(dá)式2)休里,再執(zhí)行函數(shù)體(表達(dá)式4)富腊,最后執(zhí)行表達(dá)式3坏逢,如此往復(fù),區(qū)別在于,條件判斷的對(duì)象是整,在第一次判斷時(shí)俯树,是執(zhí)行表達(dá)式1,初始化對(duì)象贰盗,后續(xù)的判斷對(duì)象是執(zhí)行后的結(jié)果(表達(dá)式3)
本題執(zhí)行順序?yàn)椋?br>
total += (i + j); => i=0,j=5 , total=5
++i, --j ; => i=1,j=4 , total=5
total += (i + j); => i=1,j=4 , total=10
++i, --j ; => i=2,j=3 , total=10
問(wèn)題:執(zhí)行以下程序后的輸出結(jié)果是()
1public class Test {
2public static void main(String[] args) {
3 StringBuffer a = new StringBuffer("A");
4 StringBuffer b = new StringBuffer("B");
5 operator(a, b);
6 System.out.println(a + "," + b);
7}
8public static void operator(StringBuffer x, StringBuffer y) {
9 x.append(y); y = x;
10}
11}
A许饿、A,A
B、A,B
C舵盈、B,B
D陋率、AB,B
解答:D
a和x是同個(gè)地址,b和y是同個(gè)地址秽晚,然后執(zhí)行x.append(y)就把y的值放在x的地址里面此時(shí)a地址和x是同一個(gè)所以a就是AB了瓦糟,接著執(zhí)行y=x是把x的地址給y,這時(shí)候axy屬于同一個(gè)地址赴蝇,所以y=x 只是改變了y的地址沒(méi)改變b的地址菩浙,所以b還是B
問(wèn)題:以下java程序代碼,執(zhí)行后的結(jié)果是()
1 public class Test {
2 public static void main(String[] args) {
3 Object o = new Object() {
4 public boolean equals(Object obj) {
5 return true;
6 }
7 };
8 System.out.println(o.equals("Fred"));
9 }
10}
A句伶、Fred
B劲蜻、true
C、編譯錯(cuò)誤
D考余、運(yùn)行時(shí)拋出異常
解答:B
重寫(xiě)了object 的equals 的方法先嬉,使他怎么輸出都是tue
相當(dāng)于創(chuàng)建了一個(gè)方法無(wú)論傳入什么對(duì)象返回都是true
問(wèn)題:下面代碼運(yùn)行結(jié)果是()
1 public class Test{
2 public int add(int a,int b){
3 try {
4 return a+b;
5 }
6 catch (Exception e) {
7 System.out.println("catch語(yǔ)句塊");
8 }
9 finally{
10 System.out.println("finally語(yǔ)句塊");
11 }
12 return 0;
13 }
14 public static void main(String argv[]){
15 Test test =new Test();
16 System.out.println("和是:"+test.add(9, 34));
17 }
18}
A、catch語(yǔ)句塊
和是:43
B楚堤、編譯異常
C疫蔓、finally語(yǔ)句塊
和是:43
D、和是:43
finally語(yǔ)句塊
解答:C
try身冬、catch衅胀、finally 這個(gè)過(guò)程也就是這樣,如果try catch finally 都有return:
1酥筝、在沒(méi)有異常的情況下滚躯,try 中的返回值先保存到臨時(shí)區(qū)域里在去執(zhí)行finally ,這個(gè)finally 有返回值樱哼,這個(gè)返回值將之前try中的保存到臨時(shí)區(qū)域的值用返回的這個(gè)值替換哀九,再將這個(gè)臨時(shí)區(qū)域中的值返回給上一級(jí)方法。
2搅幅、如果有異常阅束,則執(zhí)行catch中的代碼,這里的return 將返回一個(gè)返回值放到臨時(shí)區(qū)域茄唐,再去執(zhí)行finally 息裸,這個(gè)finally有返回值蝇更,這樣就將catch中存在臨時(shí)區(qū)域中的值用這個(gè)finally 返回的值替換掉,在將這個(gè)臨時(shí)區(qū)域的值返回給上一級(jí)方法呼盆。
System.out.println(“和是:”+test.add(9, 34)); 這是進(jìn)行字符串拼接是一個(gè)整體年扩,所以首先是進(jìn)入add方法中,進(jìn)去之后先把先不運(yùn)算result访圃,而是輸出finally塊厨幻。注意:此時(shí)finally塊輸出結(jié)果是:finally語(yǔ)句塊,這句話首先打印到控制臺(tái)中腿时。打印完后返回來(lái)執(zhí)行try中的return得到43况脆,所以此時(shí)再將結(jié)果與"和是:"進(jìn)行拼接–>輸出:和是 43。所以此時(shí)控制臺(tái)又多了一句話:和是 43批糟。加上之前finally先在控制臺(tái)上的輸出格了,所以結(jié)果為:finally語(yǔ)句塊 和是 43
問(wèn)題:關(guān)于下面代碼片段敘述正確的是()
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
A、輸出結(jié)果:13
B徽鼎、語(yǔ)句:b6=b4+b5編譯出錯(cuò)
C盛末、語(yǔ)句:b3=b1+b2編譯出錯(cuò)
D、運(yùn)行期拋出異常
解答:C
被final修飾的變量不會(huì)自動(dòng)轉(zhuǎn)換類型
b4,b5被final修飾否淤,所以不會(huì)轉(zhuǎn)成int類型
b1,b2沒(méi)有被final修飾悄但,會(huì)轉(zhuǎn)成int類型相加,得到的結(jié)果也是int叹括,從大的范圍變成小的范圍需要強(qiáng)轉(zhuǎn)算墨,同時(shí)需要注意不要超出小的范圍宵荒,不然計(jì)算結(jié)果不正確
問(wèn)題:現(xiàn)有二叉搜索樹(shù)(BST)前序遍歷結(jié)果序列為abdefgc汁雷,中序遍歷結(jié)果序列為debgfac,請(qǐng)問(wèn)后序遍歷結(jié)果序列?
A报咳、debgfac
B侠讯、edgfbca
C、edgbfca
D暑刃、degbfac
解答:B
前序遍歷:
1.訪問(wèn)根節(jié)點(diǎn)
2.前序遍歷左子樹(shù)
3.前序遍歷右子樹(shù)
中序遍歷:
1.中序遍歷左子樹(shù)
2.訪問(wèn)根節(jié)點(diǎn)
3.中序遍歷右子樹(shù)
后序遍歷:
1.后序遍歷左子樹(shù)
2.后序遍歷右子樹(shù)
3.訪問(wèn)根節(jié)點(diǎn)
問(wèn)題:下面代碼輸出的結(jié)果是厢漩?
public class NULL {
public static void print(){
System.out.println(“MTDP”);
}
public static void main(String[] args) {
try{
((NULL)null).print();
}catch(NullPointerException e){
System.out.println("NullPointerException");
}
}
}
A、NullPointerException
B岩臣、MTDP
C溜嗜、都不輸出
D、無(wú)法正常編譯
解答:B
因?yàn)閚ull值可以強(qiáng)制轉(zhuǎn)換為任何java類類型架谎,(String)null也是合法的炸宵。但null強(qiáng)制轉(zhuǎn)換后是無(wú)效對(duì)象,其返回值還是為null谷扣,而static方法的調(diào)用是和類名綁定的土全,不借助對(duì)象進(jìn)行訪問(wèn)所以能正確輸出。反過(guò)來(lái),沒(méi)有static修飾就只能用對(duì)象進(jìn)行訪問(wèn)裹匙,使用null調(diào)用對(duì)象肯定會(huì)報(bào)空指針錯(cuò)了
問(wèn)題:以下JSP代碼定義了一個(gè)變量瑞凑,如何輸出這個(gè)變量的值?
<bean:define id=“stringBean” value=“helloWorld”/>
A概页、<bean:write name=“helloWorld”/>
B籽御、<%=stringBean%>
C、<bean:write name=“stringBean”/>
D惰匙、<%String myBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%><%=myBean%>
解答:BCD
用Struts 的bean:define 標(biāo)簽定義了一個(gè)字符串變量 stringBean ,它的值為 helloworld
A:bean:write相當(dāng)于 <%=request.getAttribute(“something”)%> 其中 something 是屬性的名字篱蝇。所以 A 錯(cuò),C對(duì)
B:通過(guò)Jsp 表達(dá)式 獲取變量 stringBean 的值
D:通過(guò) pageContext(PageContext類的實(shí)例徽曲,提供對(duì)JSP頁(yè)面所有對(duì)象以及命名空間的訪問(wèn)) 獲取stringBean 的值零截,賦給 String 類型的變量 myBean,然后通過(guò) Jsp 表達(dá)式 處理該值
問(wèn)題:下面函數(shù)將返回秃臣?
1 public static int func (){
2 try{
3 return 1;
4 }catch (Exception e){
5 return 2;
6 }finally{
7 return 3;
8 }
9}
A涧衙、1
B、2
C奥此、3
D弧哎、編譯錯(cuò)誤
解答:C
try{
return 1; // 這里會(huì)執(zhí)行,但是不會(huì)立刻return稚虎,return之前會(huì)繼續(xù)執(zhí)行finally代碼
}catch (Exception e){
return 2; // 異常才會(huì)執(zhí)行
}finally{
return 3; // 無(wú)論如何這里都會(huì)執(zhí)行撤嫩,如果finally有return會(huì)立刻返回
}
問(wèn)題:設(shè) m 和 n 都是 int 類型,那么以下 for 循環(huán)語(yǔ)句蠢终,___
for(m=0,n=-1;n=0;m++,n++)
n++;
A序攘、循環(huán)體一次也不執(zhí)行
B、循環(huán)體執(zhí)行一次
C寻拂、是無(wú)限循環(huán)
D程奠、有限次循環(huán)
E、循環(huán)結(jié)束判斷條件不合法
F祭钉、運(yùn)行出錯(cuò)
解答:A
執(zhí)行順序:
(1)初始化m=0,n=-1
(2)循環(huán)條件n=0瞄沙,為假,所以循環(huán)體一次也不執(zhí)行
問(wèn)題:下面程序運(yùn)行的結(jié)果是慌核?
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
A距境、pingpong
B、pongping
C垮卓、pingpong和pongping都有可能
D垫桂、都不輸出
解答:B
t.run();直接執(zhí)行java線程,主線被搶占
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
如果t.start();則答案是C
因?yàn)閖ava線程源碼看是,start最終他執(zhí)行的是本地方法start0扒接,是直接調(diào)用操系統(tǒng)的線程的一個(gè)方法伪货。
而這個(gè)start0 他會(huì)調(diào)用一個(gè)native文件们衙,也就是我們的c文件。但是這個(gè)c文件他并沒(méi)有直接去調(diào)用os(操作系統(tǒng))函數(shù)碱呼。他的實(shí)現(xiàn)是:start0會(huì)去調(diào)用操作系統(tǒng)函數(shù)的pthread_create創(chuàng)建線程的方法蒙挑。這個(gè)創(chuàng)建方法會(huì)有一個(gè)傳回調(diào)方法的參數(shù)然后再由操作系統(tǒng)去掉用java的run方法。這一系列的調(diào)用愚臀∫涫矗可能導(dǎo)致主線程main已經(jīng)執(zhí)行了。
問(wèn)題:閱讀以下JAVA程序段姑裂,執(zhí)行結(jié)果正確的是( )
public class Test
{
public static void main (String[] args)
{
Byte var1 = 126;
Byte var2 = 127;
Byte var3 = var1 + var2; //第7行
}
}
A馋袜、編譯成功并且變量var3的值為253
B、第7行有錯(cuò)誤導(dǎo)致編譯不成功
C舶斧、第7行有“溢出”導(dǎo)致執(zhí)行失敗
D欣鳖、編譯成功并且變量var3的值為1
解答:B
byte類型進(jìn)行運(yùn)算時(shí)會(huì)自動(dòng)轉(zhuǎn)化為int類型,需要強(qiáng)轉(zhuǎn)
問(wèn)題:下面代碼的運(yùn)行結(jié)果是( )
public class Arraytest
{
int a[] = new int[6];
public static void main ( String arg[] ) {
System.out.println ( a[0] );
}
}
A茴厉、null
B泽台、0
C、編譯出錯(cuò)
D矾缓、運(yùn)行出錯(cuò)
解答:C
類的靜態(tài)成員(變量和方法)屬于類本身怀酷,在類加載的時(shí)候就會(huì)分配內(nèi)存;
非靜態(tài)成員(變量和方法)屬于類的對(duì)象嗜闻,所以只有在類的對(duì)象產(chǎn)生(創(chuàng)建類的實(shí)例)時(shí)才會(huì)分配內(nèi)存蜕依,然后通過(guò)類的對(duì)象(實(shí)例)去訪問(wèn)
因?yàn)閍是非靜態(tài)變量;
在一個(gè)類的靜態(tài)成員中去訪問(wèn)其非靜態(tài)成員之所以會(huì)出錯(cuò)是因?yàn)樵陬惖姆庆o態(tài)成員不存在的時(shí)候類的靜態(tài)成員就已經(jīng)存在了琉雳,訪問(wèn)一個(gè)內(nèi)存中不存在的東西就會(huì)出錯(cuò)
問(wèn)題:執(zhí)行如下程序样眠,輸出結(jié)果是( )
class MyTest {
public static void main(String[] args) {
Integer first = new Integer(3);
Integer second = 3;
int three = 3;
System.out.println(first==second);
System.out.println(first==three);
}
}
A、falsetrue
B咐吼、falsefalse
C吹缔、truetrue
D、truefalse
解答:A
1锯茄、int 和Integer在進(jìn)行比較的時(shí)候,Integer會(huì)進(jìn)行拆箱茶没,轉(zhuǎn)為int值與int進(jìn)行比較
2肌幽、Integer與Integer比較的時(shí)候,由于直接賦值的時(shí)候會(huì)進(jìn)行自動(dòng)的裝箱抓半,那么這里就需要注意兩個(gè)問(wèn)題喂急,一個(gè)是-128<= x<=127的整數(shù),將會(huì)直接緩存在IntegerCache中笛求,那么當(dāng)賦值在這個(gè)區(qū)間的時(shí)候廊移,不會(huì)創(chuàng)建新的Integer對(duì)象糕簿,而是從緩存中獲取已經(jīng)創(chuàng)建好的Integer對(duì)象。二:當(dāng)大于這個(gè)范圍的時(shí)候狡孔,直接new Integer來(lái)創(chuàng)建Integer對(duì)象
3懂诗、new Integer(1) 和Integer a = 1不同,前者會(huì)創(chuàng)建對(duì)象苗膝,存儲(chǔ)在堆中殃恒,而后者因?yàn)樵?128到127的范圍內(nèi),不會(huì)創(chuàng)建新的對(duì)象辱揭,而是從IntegerCache中獲取的离唐。那么Integer a = 128, 大于該范圍的話才會(huì)直接通過(guò)new Integer(128)創(chuàng)建對(duì)象,進(jìn)行裝箱
下面的程序?qū)?lái)打印什么?()
1 public class TestIncr {
2 public static void main(String args[]) {
3 int i = 0;
4 i = i++ + i;
5 System.out.println("I = "a + i);
6 }
7}
A问窃、I = 1
B亥鬓、I = 2
C、I = 3
D域庇、編譯出錯(cuò)
解答:D
問(wèn)題:以下類定義中的錯(cuò)誤是什么贮竟?()
1 abstract class xy
2{
3 abstract sum (int x, int y) { }
4}
A、沒(méi)有錯(cuò)誤
B较剃、類標(biāo)題未正確定義
C咕别、方法沒(méi)有正確定義
D、沒(méi)有定義構(gòu)造函數(shù)
解答:C
有兩個(gè)問(wèn)題1:不應(yīng)該有{ }写穴,2:沒(méi)有返回值
問(wèn)題:針對(duì)下面的代碼塊,哪個(gè)equal為true:()
String s1 = "xiaopeng" ;
String s2 = "xiaopeng" ;
String s3 =new String;
A惰拱、s1 == s2
B、s1 = s2
C啊送、s2 == s3
D偿短、都不正確
解答:A
== 用法:
如果作用于基本數(shù)據(jù)類型的變量,則直接比較其存儲(chǔ)的 “值”是否相等
如果作用于引用類型的變量馋没,則比較的是所指向的對(duì)象的地址昔逗, 比較的是兩個(gè)變量是否指向同一個(gè)對(duì)象
使用字符串常量給String變量賦值,s1和s2字符串常量會(huì)被存進(jìn)內(nèi)存的常量池里面篷朵,供整個(gè)程序使用勾怒,所以s1和s2實(shí)際是引用了同一個(gè)字符串對(duì)象,地址相同声旺,而new出來(lái)的是在存在堆內(nèi)存中笔链,單獨(dú)的一份,所以s3和另外兩個(gè)地址不同
問(wèn)題:嘗試編譯以下程序會(huì)產(chǎn)生怎么樣的結(jié)果腮猖?()
1 public class MyClass {
2 long var;
3 public void MyClass(long param) { var = param; }//(1)
4 public static void main(String[] args) {
5 MyClass a, b;
6 a =new MyClass();//(2)
7 b =new MyClass(5);//(3)
8 }
9 }
A鉴扫、編譯錯(cuò)誤將發(fā)生在(1),因?yàn)闃?gòu)造函數(shù)不能指定返回值
B澈缺、編譯錯(cuò)誤將發(fā)生在(2)坪创,因?yàn)樵擃悰](méi)有默認(rèn)構(gòu)造函數(shù)
C炕婶、編譯錯(cuò)誤將在(3)處發(fā)生,因?yàn)樵擃悰](méi)有構(gòu)造函數(shù)莱预,該構(gòu)造函數(shù)接受一個(gè)int類型的參數(shù)
D柠掂、該程序?qū)⒄_編譯和執(zhí)行
解答:C
因?yàn)镸yClass不是構(gòu)造函數(shù),而是一個(gè)普通的方法锁施。又因?yàn)橐粋€(gè)類陪踩,如果不自定義構(gòu)造方法,會(huì)有個(gè)缺省的構(gòu)造方法悉抵,所有(2)處是不會(huì)報(bào)錯(cuò)誤的肩狂。而缺省的構(gòu)造方法是無(wú)參的。所以在(3)處會(huì)報(bào)錯(cuò)
問(wèn)題:已知如下類定義:
1 class Base {
2 public Base (){
3 //...
4 }
5 public Base ( int m ){
6 //...
7 }
8 public void fun( int n ){
9 //...
10 }
11}
12public class Child extends Base{
13 // member methods
14}
如下哪句可以正確地加入子類中姥饰?
A傻谁、private?void?fun(?int?n?){?//…}
B、void fun ( int n ){ //… }
C列粪、protected void fun ( int n ) { //… }
D审磁、public void fun ( int n ) { //… }
解答:D
方法的重寫(xiě)(override)兩同兩小一大原則:
方法名相同,參數(shù)類型相同
子類返回類型小于等于父類方法返回類型岂座,
子類拋出異常小于等于父類方法拋出異常态蒂,
子類訪問(wèn)權(quán)限大于等于父類方法訪問(wèn)權(quán)限。
問(wèn)題:以下語(yǔ)句的執(zhí)行結(jié)果是什么费什?
1+”10”+3+”2”
A钾恢、”11032”
B、“16”
C鸳址、16
D瘩蚪、“32101”
解答:A
當(dāng)一個(gè)整形類型數(shù)值加上“”,會(huì)轉(zhuǎn)化為字符串類型稿黍,這也是整形轉(zhuǎn)化為字符串的一種方式疹瘦。這種會(huì)產(chǎn)生兩個(gè)String對(duì)象,所以整形加上字符串時(shí)巡球,此時(shí)+就變成了了連接符
問(wèn)題:
1 public class IfTest{
2 public static void main(string[]args){
3 int x=3;
4 int y=1;
5 if(x=y)
6 System.out.println(“Not equal”);
7 else
8 System.out.println(“Equal”);
9 }
10 }
結(jié)果是?
A言沐、The output is “Equal”
B、The output in “Not Equal”
C辕漂、An error at line 5 causes compilation to fall.
D呢灶、The program executes but does not print a message.
解答:C
在 Java 中 if 只能匹配 ture、false钉嘹,賦值語(yǔ)句沒(méi)有返回結(jié)果,無(wú)法使用在 if 句式中鲸阻,會(huì)語(yǔ)法報(bào)錯(cuò)
問(wèn)題:輸出的是跋涣?
1 class Foo {
2 final int i;
3 int j;
4 public void doSomething() {
5 System.out.println(++j + i);
6 }
7}
A缨睡、0
B、1
C陈辱、2
D奖年、不能執(zhí)行,因?yàn)榫幾g有錯(cuò)
解答:D
final必須進(jìn)行初始化賦值沛贪,編譯報(bào)錯(cuò)
問(wèn)題:下列哪些針對(duì)代碼運(yùn)行結(jié)果的描述是正確的陋守?
1 class Car extends Vehicle
2{
4 public static void main (String[] args)
5 {
6 new Car(). run();
7 }
8 private final void run()
9 {
10 System. out. println ("Car");
11 }
12}
13class Vehicle
14{
15 private final void run()
16 {
17 System. out. println("Vehicle");
18 }
19}
A、Car
B利赋、Vehicle
C水评、Compiler error at line 6
D、Compiler error at line 8
E媚送、Exception thrown at runtime
解答:A
父類用final修飾的方法 無(wú)法被子類重寫(xiě) 所以調(diào)用本身方法
問(wèn)題:經(jīng)過(guò)強(qiáng)制類型轉(zhuǎn)換以后中燥,變量a,b的值分別為多少塘偎?
short a =128疗涉;
byte b =(byte) a;
A吟秩、128 127
B咱扣、128 - 128
C、128 128
D涵防、編譯錯(cuò)誤
解答:B
## int占4個(gè)字節(jié)闹伪,32位
byte占1個(gè)字節(jié),8位
所以強(qiáng)轉(zhuǎn)時(shí)會(huì)截?cái)辔溲АG?4位
## 在內(nèi)存中表示形式( 注意java中是以補(bǔ)碼表示一個(gè)數(shù)祭往,所以表示形式是補(bǔ)碼,不是原碼火窒! ):
int a = 3 00000000 00000000 00000000 00000011 (強(qiáng)轉(zhuǎn)byte時(shí)前面24個(gè)0被截?cái)啵?byte b = 3 00000011
int a = -3 11111111 11111111 11111111 11111101 (強(qiáng)轉(zhuǎn)byte時(shí)前面24個(gè)1被截?cái)啵?byte b = -3 11111101
## 1硼补、Java中用補(bǔ)碼形式表示
2、第一位正負(fù)位熏矿,1表示負(fù)已骇,0表示正。
3票编、原碼:一個(gè)數(shù)的二進(jìn)制表示褪储。
3的原碼00000011 -3的 原碼 10000011
4、反碼:負(fù)數(shù)原碼按位取反(符號(hào)位不變)慧域。正數(shù)原碼本身鲤竹。
3的反碼00000011 -3的反碼11111100
5、補(bǔ)碼:正數(shù)是原碼本身昔榴。負(fù)數(shù)反碼加1辛藻。
3的補(bǔ)碼是00000011 -3的補(bǔ)碼是11111101
## 已知負(fù)數(shù)的補(bǔ)碼碘橘,求負(fù)數(shù):
補(bǔ)碼-1=反碼,反碼按位取反=該負(fù)數(shù)絕對(duì)值
已知負(fù)數(shù)吱肌,求負(fù)數(shù)的補(bǔ)碼:
1痘拆、負(fù)數(shù)原碼除了符號(hào)位,按位取反(不含符號(hào)位)氮墨,加1纺蛆。
2、負(fù)數(shù)絕對(duì)值的補(bǔ)碼(也就是原碼)规揪,按位取反(含符號(hào)位)桥氏,加1
java int 128轉(zhuǎn)為byte,值:
128為正數(shù)粒褒,補(bǔ)碼為10000000(前面24個(gè)0省略)识颊,變成byte,只剩下10000000(byte為1個(gè)字節(jié))奕坟,因?yàn)殚_(kāi)頭是1祥款,所以為負(fù)數(shù)。即1個(gè)負(fù)數(shù)的補(bǔ)碼是10000000月杉。反碼是01111111刃跛,原碼是1000000。是128.因?yàn)槭秦?fù)數(shù)苛萎,所以是-128桨昙。
問(wèn)題:假設(shè)如下代碼中,若t1線程在t2線程啟動(dòng)之前已經(jīng)完成啟動(dòng)腌歉。代碼的輸出是()
1 public static void main(String[]args)throws Exception {
2 final Object obj = new Object();
3 Thread t1 = new Thread() {
4 public void run() {
5 synchronized (obj) {
6 try {
7 obj.wait();
8 System.out.println("Thread 1 wake up.");
9 } catch (InterruptedException e) {
10 }
11 }
12 }
13 };
14 t1.start();
15 Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
16 Thread t2 = new Thread() {
17 public void run() {
18 synchronized (obj) {
19 obj.notifyAll();
20 System.out.println("Thread 2 sent notify.");
21 }
22 }
23 };
24 t2.start();
25 }
A蛙酪、Thread 1 wake up
Thread 2 sent notify.
B、Thread 2 sent notify.
Thread 1 wake up
C翘盖、A桂塞、B皆有可能
D、程序無(wú)輸出卡死
解答:B
t1 啟動(dòng)后執(zhí)行 obj.wait() 時(shí)馍驯,進(jìn)入阻塞狀態(tài)阁危,讓出時(shí)間片并釋放鎖,等待其他線程的喚醒汰瘫。然后 t2 獲取到 obj狂打,并喚醒 t1,待 t2 執(zhí)行完畢混弥,釋放鎖后趴乡,t1 再繼續(xù)執(zhí)行
問(wèn)題:下列代碼的執(zhí)行結(jié)果是:( )
1 public class Test3{
2 public static void main(String args[]){
3 System.out.println(100%3);
4 System.out.println(100%3.0);
5}
6}
A、1和1
B、1和1.0
C浙宜、1.0和1
D官辽、1.0和1.0
解答:B
大數(shù)據(jù)類型與小數(shù)據(jù)類型做數(shù)值運(yùn)算時(shí):
小的數(shù)據(jù)類型會(huì)自動(dòng)轉(zhuǎn)為大數(shù)據(jù)類型蛹磺,無(wú)無(wú)需強(qiáng)轉(zhuǎn)粟瞬。 (小轉(zhuǎn)大——類型聲明)
大的數(shù)據(jù)類型轉(zhuǎn)為小的數(shù)據(jù)類型,必須強(qiáng)轉(zhuǎn)萤捆,但是可能會(huì)丟失內(nèi)容 (大轉(zhuǎn)小——強(qiáng)轉(zhuǎn))
第一個(gè)裙品,沒(méi)有牽扯到不同類型之間的運(yùn)算,所以還是 1
第二個(gè)俗或,int對(duì)double取余市怎,自動(dòng)會(huì)轉(zhuǎn)換為double類型,所以是 1.0
問(wèn)題:運(yùn)行下面代碼辛慰,輸出的結(jié)果是()
1 class A {
2 public A() {
3 System.out.println("class A");
4 }
5 { System.out.println("I'm A class"); }
6 static { System.out.println("class A static"); }
7}
8public class B extends A {
9 public B() {
10 System.out.println("class B");
11 }
12 { System.out.println("I'm B class"); }
13 static { System.out.println("class B static"); }
14
15 public static void main(String[] args) {
16 new B();
17 }
18}
A区匠、class A static
class B static
I’m A class
class A
I’m B class
class B
?
B、class A static
I’m A class
class A
class B static
I’m B class
class B
C帅腌、class A static
class B static
class A
I’m A class
class B
I’m B class
?
D驰弄、class A static
class A
I’m A class
class B static
class B
I’m B class
解答:A
執(zhí)行順序優(yōu)先級(jí):靜態(tài)塊>構(gòu)造塊>構(gòu)造方法
當(dāng)涉及到繼承時(shí),按照如下順序執(zhí)行:
1速客、執(zhí)行父類的靜態(tài)代碼塊戚篙,并初始化父類靜態(tài)成員變量
2、執(zhí)行子類的靜態(tài)代碼塊溺职,并初始化子類靜態(tài)成員變量
3岔擂、執(zhí)行父類的構(gòu)造代碼塊,執(zhí)行父類的構(gòu)造函數(shù)浪耘,并初始化父類普通成員變量
4乱灵、執(zhí)行子類的構(gòu)造代碼塊, 執(zhí)行子類的構(gòu)造函數(shù)七冲,并初始化子類普通成員變量
問(wèn)題:當(dāng)你編譯和運(yùn)行下面的代碼時(shí)痛倚,會(huì)出現(xiàn)下面選項(xiàng)中的哪種情況?
1 public class Pvf{
2 static boolean Paddy;
3 public static void main(String args[]){
4 System.out.println(Paddy);
5 }
6}
A癞埠、編譯時(shí)錯(cuò)誤
B状原、編譯通過(guò)并輸出結(jié)果false
C、編譯通過(guò)并輸出結(jié)果true
D苗踪、編譯通過(guò)并輸出結(jié)果null
解答:B
類中聲明的變量有默認(rèn)初始值颠区;方法中聲明的變量沒(méi)有默認(rèn)初始值,必須在定義時(shí)初始化通铲,否則在訪問(wèn)該變量時(shí)會(huì)出錯(cuò)毕莱。boolean類型默認(rèn)值是false
問(wèn)題:如下的Java程序
public class Test {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
若采用命令行“java Test one two three”調(diào)用,則程序輸出的結(jié)果為:
A、Test
B朋截、one
C蛹稍、two
D、java
解答:B
題目少了public class Test {
采用命令行“java Test one two three”調(diào)用
其中Test為調(diào)用的方法部服,而one two three則為T(mén)est方法里面main函數(shù)的參數(shù)唆姐;System.out.println(args[0]);表示輸出第一個(gè)元素,故為one廓八;
問(wèn)題:執(zhí)行如下程序奉芦,輸出結(jié)果是( )
1 class Test
2{
3 private int data;
4 int result = 0;
5 public void m()
6 {
7 result += 2;
8 data += 2;
9 System.out.print(result + " " + data);
10 }
11 }
12 class ThreadExample extends Thread
13 {
14 private Test mv;
15 public ThreadExample(Test mv)
16 {
17 this.mv = mv;
18 }
19 public void run()
20 {
21 synchronized(mv)
22 {
23 mv.m();
24 }
25 }
26 }
27 class ThreadTest
28 {
29 public static void main(String args[])
30 {
31 Test mv = new Test();
32 Thread t1 = new ThreadExample(mv);
33 Thread t2 = new ThreadExample(mv);
34 Thread t3 = new ThreadExample(mv);
35 t1.start();
36 t2.start();
37 t3.start();
38 }
39 }
A、0 22 44 6
B剧蹂、2 42 42 4
C声功、2 24 46 6
D、4 44 46 6
解答:C
Test mv =newTest()聲明并初始化對(duì)data賦默認(rèn)值
使用synchronized
關(guān)鍵字加同步鎖線程依次操作m()
t1.start();使得result=2,data=2,輸出即為2 2
t2.start();使得result=4,data=4,輸出即為4 4
t3.start();使得result=6,data=6,輸出即為6 6
System.out.print(result +" "+ data);是print()
方法不會(huì)換行,輸出結(jié)果為2 24 46 6
問(wèn)題:以下代碼執(zhí)行的結(jié)果顯示是多少( )宠叼?
1 public class Demo { class Super{ int flag=1;
2 Super(){
3 test();
4 } void test(){
5 System.out.println("Super.test() flag="+flag);
6 }
7 } class Sub extends Super{
8 Sub(int i){ flag=i;
9 System.out.println("Sub.Sub()flag="+flag);
10 } void test(){
11 System.out.println("Sub.test()flag="+flag);
12 }
13 } public static void main(String[] args) { new Demo().new Sub(5);
14 }
15}
A先巴、Sub.test() flag=1
Sub.Sub() flag=5
B、Sub.Sub() flag=5
Sub.test() flag=5
C冒冬、Sub.test() flag=0
Sub.Sub() flag=5
D伸蚯、Super.test() flag=1
Sub.Sub() flag=5
解答:A
在繼承中代碼的執(zhí)行順序?yàn)椋?br>
1.父類靜態(tài)對(duì)象,父類靜態(tài)代碼塊
2.子類靜態(tài)對(duì)象窄驹,子類靜態(tài)代碼塊
3.父類非靜態(tài)對(duì)象朝卒,父類非靜態(tài)代碼塊
4.父類構(gòu)造函數(shù)
5.子類非靜態(tài)對(duì)象,子類非靜態(tài)代碼塊
6.子類構(gòu)造函數(shù)
對(duì)于本題來(lái)說(shuō):在只想new Sub(5)的時(shí)候,父類先初始化了 int flag = 1,然后執(zhí)行父類的構(gòu)造函數(shù)Super()八千,父類構(gòu)造函數(shù)中執(zhí)行的test()方法,因子類是重寫(xiě)了test()方法的瑞眼,因此父類構(gòu)造函數(shù)中的test()方法實(shí)際執(zhí)行的是子類的test()方法,所以輸出為Sub.test() flag=1棵逊,接著執(zhí)行子類構(gòu)造函數(shù)Sub(5) 將flag賦值為5伤疙,因此輸出結(jié)果Sub.Sub() flag=5。最終選擇了A
問(wèn)題:對(duì)下面Spring聲明式事務(wù)的配置含義的說(shuō)明錯(cuò)誤的是()
1 <bean id="txProxyTemplate" abstract="true"
2class=
3"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
4 <property name="transactionManager" ref="myTransactionManager" />
5<property name="transactionAttributes">
6<props>
7 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
8 <prop key="*">PROPAGATION_REQUIRED</prop>
9 </props>
10</property>
11</bean>
A辆影、定義了聲明式事務(wù)的配置模板
B徒像、對(duì)get方法采用只讀事務(wù)
C、缺少sessionFactory屬性的注入
D蛙讥、配置需要事務(wù)管理的bean的代理時(shí)锯蛀,通過(guò)parent引用這個(gè)配置模板
解答:C
TransactionProxyFactoryBean 類沒(méi)有 sessionFactory 屬性,不需要注入次慢;直接用 parent 引用配置模板 Bean旁涤,關(guān)聯(lián)目標(biāo) DAO 對(duì)象即可
<bean id="myProxy" parent="txProxyTemplate">
<property name="target" ref="myTarget">;
</bean>
問(wèn)題:有這么一段程序
1 public class Test{
2 public String name="abc";
3 public static void main(String[] args){
4 Test test=new Test();
5 Test testB=new Test();
6 System.out.println(test.equals(testB)+","+test.name.equals(testB.name));
7 }
8}
請(qǐng)問(wèn)以上程序執(zhí)行的結(jié)果是()
A翔曲、true,true
B、true,false
C劈愚、false,true
D瞳遍、false,false
解答:C
Test未重寫(xiě)equals,則使用Object的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
String 則使用String重寫(xiě)的equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
問(wèn)題:現(xiàn)有如下代碼段:
1 x = 2;
2 while(x<n/2)
3 x = 2*x;
假設(shè)n>=0,則其時(shí)間復(fù)雜度應(yīng)為( )
A菌羽、O(log2(n))
B掠械、O(nlog2(n))
C、O(n)
D算凿、O(n^2)```language
解答:A
可以看到2*x為基本操作份蝴,基本操作的執(zhí)行的次數(shù)即為程序的時(shí)間復(fù)雜度;
x=1 x=2x2=4
x=2 x=4x2=8
…
執(zhí)行到n次
x=2(n+1)
即2(n+1)<n/2結(jié)束