中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      java面試問(wèn)題及答案

      時(shí)間:2023-04-04 11:24:54 面試問(wèn)題 我要投稿
      • 相關(guān)推薦

      java面試問(wèn)題及答案

        JAVA經(jīng)典面試題及參考答案

      java面試問(wèn)題及答案

        1、作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別

        答:區(qū)別如下:

        作用域 當(dāng)前類(lèi) 同一package 子孫類(lèi) 其他package

        public √ √ √ √

        protected √ √ √ ×

        friendly √ √ × ×

        private √ × × ×

        不寫(xiě)時(shí)默認(rèn)為friendly

        2、ArrayList和Vector的區(qū)別,HashMap和Hashtable的區(qū)別

        答:就ArrayList與Vector主要從二方面來(lái)說(shuō).

        一.同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,不是同步的

        二.數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半

        就HashMap與HashTable主要從三方面來(lái)說(shuō)。

        一.歷史原因:Hashtable是基于陳舊的Dictionary類(lèi)的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)

        二.同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的

        三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value

        3、char型變量中能不能存貯一個(gè)中文漢字?為什么?

        答:是能夠定義成為一個(gè)中文的,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)字節(jié),所以放一個(gè)中文是沒(méi)問(wèn)題的

        4、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?

        答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)與實(shí)現(xiàn)Runnable接口

        同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify

        JAVA經(jīng)典面試題及參考答案

        1)transient和volatile是java關(guān)鍵字嗎?(瞬聯(lián))

        如果用transient聲明一個(gè)實(shí)例變量,當(dāng)對(duì)象存儲(chǔ)時(shí),它的值不需要維持。例如:

        class T

        {

        transient int a; //不需要維持

        int b; //需要維持

        }

        這里,如果T類(lèi)的一個(gè)對(duì)象寫(xiě)入一個(gè)持久的存儲(chǔ)區(qū)域,a的內(nèi)容不被保存,但b的將被保存。

        volatile修飾符告訴編譯器被volatile修飾的變量可以被程序的其他部分改變。在多線程程序中,有時(shí)兩個(gè)或更多的線程共享一個(gè)相同的實(shí)例變量。考慮效率問(wèn)題,每個(gè)線程可以自己保存該共享變量的私有拷貝。實(shí)際的變量副本在不同的時(shí)候更新,如當(dāng)進(jìn)入synchronized方法時(shí)。 用strictfp修飾類(lèi)或方法,可以確保浮點(diǎn)運(yùn)算(以及所有切斷)正如早期的Java版本那樣準(zhǔn)確。切斷只影響某些操作的指數(shù)。當(dāng)一個(gè)類(lèi)被strictfp修飾,所有的方法自動(dòng)被strictfp修飾。

        strictfp的意思是FP-strict,也就是說(shuō)精確浮點(diǎn)的意思。在Java虛擬機(jī)進(jìn)行浮點(diǎn)運(yùn)算時(shí),如果沒(méi)有指定strictfp關(guān)鍵字時(shí),Java的編譯器以及運(yùn)行環(huán)境在對(duì)浮點(diǎn)運(yùn)算的表達(dá)式是采取一種近似于我行我素的行為來(lái)完成這些操作,以致于得到的結(jié)果往往無(wú)法令你滿意。而一旦使用了strictfp來(lái)聲明一個(gè)類(lèi)、接口或者方法時(shí),那么所聲明的范圍內(nèi)Java的編譯器以及運(yùn)行環(huán)境會(huì)完全依照浮點(diǎn)規(guī)范IEEE-754來(lái)執(zhí)行。因此如果你想讓你的浮點(diǎn)運(yùn)算更加精確,而且不會(huì)因?yàn)椴煌挠布脚_(tái)所執(zhí)行的結(jié)果不一致的話,那就請(qǐng)用關(guān)鍵字strictfp。

        你可以將一個(gè)類(lèi)、接口以及方法聲明為strictfp,但是不允許對(duì)接口中的方法以及構(gòu)造函數(shù)聲明strictfp關(guān)鍵字,例如下面的代碼:

        strictfp interface A {}

        public strictfp class FpDemo1 {

        strictfp void f() {}

        }

        2. 錯(cuò)誤的使用方法

        interface A {

        strictfp void f();

        }

        public class FpDemo2 {

        strictfp FpDemo2() {}

        }

        一旦使用了關(guān)鍵字strictfp來(lái)聲明某個(gè)類(lèi)、接口或者方法時(shí),那么在這個(gè)關(guān)鍵字所聲明的范圍內(nèi)所有浮點(diǎn)運(yùn)算都是精確的,符合IEEE-754規(guī)范

        的。例如一個(gè)類(lèi)被聲明為strictfp,那么該類(lèi)中所有的方法都是strictfp的。

        2)抽象類(lèi)和接口有什么區(qū)別?(瞬聯(lián))

        1.abstract class 在 Java 語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類(lèi)只能使用一次繼承關(guān)系。但是,一個(gè)類(lèi)卻可以實(shí)現(xiàn)多個(gè)interface。

        2.在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過(guò)在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。

        3.abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系。

        4.實(shí)現(xiàn)抽象類(lèi)和接口的類(lèi)必須實(shí)現(xiàn)其中的所有方法。抽象類(lèi)中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。

        5.接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類(lèi)中不能重新定義,也不能改變其值。

        6.抽象類(lèi)中的變量默認(rèn)是 friendly 型,其值可以在子類(lèi)中重新定義,也可以重新賦值。

        7.接口中的方法默認(rèn)都是 public,abstract 類(lèi)型的。

        3)能說(shuō)一下java的反射(reflection)機(jī)制嗎?(瞬聯(lián))

        開(kāi)放性和原因連接(causally-connected)是反射系統(tǒng)的兩大基本要素

        4)在java中怎樣實(shí)現(xiàn)多線程?(瞬聯(lián))

        extends Thread

        implement Runnable

        方法一:繼承 Thread 類(lèi),覆蓋方法 run(),我們?cè)趧?chuàng)建的 Thread 類(lèi)的子類(lèi)中重寫(xiě) run() ,加入線程所要執(zhí)行的代碼即可。下面是一個(gè)例子:

        public class MyThread extends Thread

        {

        int count= 1, number;

        public MyThread(int num)

        {

        number = num;

        System.out.println

        ("創(chuàng)建線程 " + number);

        }

        public void run() {

        while(true) {

        System.out.println

        ("線程 " + number + ":計(jì)數(shù) " + count);

        if(++count== 6) return;

        }

        }

        public static void main(String args[])

        {

        for(int i = 0;i 〈 5; i++) new MyThread(i+1).start();

        }

        }

        這種方法簡(jiǎn)單明了,符合大家的習(xí)慣,但是,它也有一個(gè)很大的缺點(diǎn),那就是如果我們的類(lèi)已經(jīng)從一個(gè)類(lèi)繼承(如小程序必須繼承自 Applet 類(lèi)),則無(wú)法再繼承 Thread 類(lèi),這時(shí)如果我們又不想建立一個(gè)新的類(lèi),應(yīng)該怎么辦呢?

        我們不妨來(lái)探索一種新的方法:我們不創(chuàng)建Thread類(lèi)的子類(lèi),而是直接使用它,那么我們只能將我們的方法作為參數(shù)傳遞給 Thread 類(lèi)的實(shí)例,有點(diǎn)類(lèi)似回調(diào)函數(shù)。但是 Java 沒(méi)有指針,我們只能傳遞一個(gè)包含這個(gè)方法的類(lèi)的實(shí)例。

        那么如何限制這個(gè)類(lèi)必須包含這一方法呢?當(dāng)然是使用接口!(雖然抽象類(lèi)也可滿足,但是需要繼承,而我們之所以要采用這種新方法,不就是為了避免繼承帶來(lái)的限制嗎?)

        Java 提供了接口 java.lang.Runnable 來(lái)支持這種方法。

        方法二:實(shí)現(xiàn) Runnable 接口

        Runnable接口只有一個(gè)方法run(),我們聲明自己的類(lèi)實(shí)現(xiàn)Runnable接口并提供這一方法,將我們的線程代碼寫(xiě)入其中,就完成了這一部分的任務(wù)。但是Runnable接口并沒(méi)有任何對(duì)線程的支持,我們還必須創(chuàng)建Thread類(lèi)的實(shí)例,這一點(diǎn)通過(guò)Thread類(lèi)的構(gòu)造函數(shù) public Thread(Runnable target);來(lái)實(shí)現(xiàn)。下面是一個(gè)例子:

        public class MyThread implements Runnable

        {

        int count= 1, number;

        public MyThread(int num)

        {

        number = num;

        System.out.println("創(chuàng)建線程 " + number);

        }

        public void run()

        {

        while(true)

        {

        System.out.println

        ("線程 " + number + ":計(jì)數(shù) " + count);

        if(++count== 6) return;

        }

        }

        public static void main(String args[])

        {

        for(int i = 0; i 〈 5;i++) new Thread(new MyThread(i+1)).start();

        }

        }

        嚴(yán)格地說(shuō),創(chuàng)建Thread子類(lèi)的實(shí)例也是可行的,但是必須注意的是,該子類(lèi)必須沒(méi)有覆蓋 Thread 類(lèi)的 run 方法,否則該線程執(zhí)行的將是子類(lèi)的 run 方法,而不是我們用以實(shí)現(xiàn)Runnable 接口的類(lèi)的 run 方法,對(duì)此大家不妨試驗(yàn)一下。

        使用 Runnable 接口來(lái)實(shí)現(xiàn)多線程使得我們能夠在一個(gè)類(lèi)中包容所有的代碼,有利于封裝,它的缺點(diǎn)在于,我們只能使用一套代碼,若想創(chuàng)建多個(gè)線程并使各個(gè)線程執(zhí)行不同的代碼,則仍必須額外創(chuàng)建類(lèi),如果這樣的話,在大多數(shù)情況下也許還不如直接用多個(gè)類(lèi)分別繼承 Thread 來(lái)得緊湊。

        綜上所述,兩種方法各有千秋,大家可以靈活運(yùn)用。

        下面讓我們一起來(lái)研究一下多線程使用中的一些問(wèn)題。

        三、線程的四種狀態(tài)

        1. 新?tīng)顟B(tài):線程已被創(chuàng)建但尚未執(zhí)行(start() 尚未被調(diào)用)。

        2. 可執(zhí)行狀態(tài):線程可以執(zhí)行,雖然不一定正在執(zhí)行。CPU 時(shí)間隨時(shí)可能被分配給該線程,從而使得它執(zhí)行。

        3. 死亡狀態(tài):正常情況下 run() 返回使得線程死亡。調(diào)用 stop()或 destroy() 亦有同樣效果,但是不被推薦,前者會(huì)產(chǎn)生異常,后者是強(qiáng)制終止,不會(huì)釋放鎖。

        4. 阻塞狀態(tài):線程不會(huì)被分配 CPU 時(shí)間,無(wú)法執(zhí)行。

        四、線程的優(yōu)先級(jí)

        線程的優(yōu)先級(jí)代表該線程的重要程度,當(dāng)有多個(gè)線程同時(shí)處于可執(zhí)行狀態(tài)并等待獲得 CPU 時(shí)間時(shí),線程調(diào)度系統(tǒng)根據(jù)各個(gè)線程的優(yōu)先級(jí)來(lái)決定給誰(shuí)分配 CPU 時(shí)間,優(yōu)先級(jí)高的線程有更大的機(jī)會(huì)獲得 CPU 時(shí)間,優(yōu)先級(jí)低的線程也不是沒(méi)有機(jī)會(huì),只是機(jī)會(huì)要小一些罷了。

        你可以調(diào)用 Thread 類(lèi)的方法 getPriority() 和 setPriority()來(lái)存取線程的優(yōu)先級(jí),線程的優(yōu)先級(jí)界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之間,缺省是5(NORM_PRIORITY)。

        5)你用過(guò)哪種設(shè)計(jì)模式?(瞬聯(lián),IBM,aspenTech)

        設(shè)計(jì):design

        模式:pattern

        框架:framework

        創(chuàng)建模式,結(jié)構(gòu)模式和行為模式

        GoF設(shè)計(jì)模式

        A.創(chuàng)建模式

        設(shè)計(jì)模式之Factory(工廠模式)

        使用工廠模式就象使用new一樣頻繁.2002/10/9更新

        設(shè)計(jì)模式之Prototype(原型模式)

        用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。

        設(shè)計(jì)模式之Builder

        汽車(chē)由車(chē)輪 方向盤(pán) 發(fā)動(dòng)機(jī)很多部件組成,同時(shí),將這些部件組裝成汽車(chē)也是一件復(fù)雜的工作,Builder模式就是將這兩種情況分開(kāi)進(jìn)行。

        設(shè)計(jì)模式之Singleton(單態(tài)模式)

        保證一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn) 2002/10/9更新

        B.結(jié)構(gòu)模式

        設(shè)計(jì)模式之Facade

        可擴(kuò)展的使用JDBC針對(duì)不同的數(shù)據(jù)庫(kù)編程,Facade提供了一種靈活的實(shí)現(xiàn).

        設(shè)計(jì)模式之Proxy

        以Jive為例,剖析代理模式在用戶(hù)級(jí)別授權(quán)機(jī)制上的應(yīng)用

        設(shè)計(jì)模式之Adapter

        使用類(lèi)再生的兩個(gè)方式:組合(new)和繼承(extends),這個(gè)已經(jīng)在"thinking in java"中提到過(guò).

        設(shè)計(jì)模式之Composite

        就是將類(lèi)用樹(shù)形結(jié)構(gòu)組合成一個(gè)單位.你向別人介紹你是某單位,你是單位中的一個(gè)元素,別人和你做買(mǎi)賣(mài),相當(dāng)于和單位做買(mǎi)賣(mài)。文章中還對(duì)Jive再進(jìn)行了剖析。

        設(shè)計(jì)模式之Decorator

        Decorator是個(gè)油漆工,給你的東東的外表刷上美麗的顏色.

        設(shè)計(jì)模式之Bridge

        將"牛郎織女"分開(kāi)(本應(yīng)在一起,分開(kāi)他們,形成兩個(gè)接口),在他們之間搭建一個(gè)橋(動(dòng)態(tài)的結(jié)合)

        設(shè)計(jì)模式之Flyweight

        提供Java運(yùn)行性能,降低小而大量重復(fù)的類(lèi)的開(kāi)銷(xiāo).

        C.行為模式

        設(shè)計(jì)模式之Template

        實(shí)際上向你介紹了為什么要使用Java 抽象類(lèi),該模式原理簡(jiǎn)單,使用很普遍.

        設(shè)計(jì)模式之Memento

        很簡(jiǎn)單一個(gè)模式,就是在內(nèi)存中保留原來(lái)數(shù)據(jù)的拷貝.

        設(shè)計(jì)模式之Observer

        介紹如何使用Java API提供的現(xiàn)成Observer

        設(shè)計(jì)模式之Chain of Responsibility

        各司其職的類(lèi)串成一串,好象擊鼓傳花,當(dāng)然如果自己能完成,就不要推委給下一個(gè).

        設(shè)計(jì)模式之Command

        什么是將行為封裝,Command是最好的說(shuō)明.

        設(shè)計(jì)模式之State

        狀態(tài)是編程中經(jīng)常碰到的實(shí)例,將狀態(tài)對(duì)象化,設(shè)立狀態(tài)變換器,便可在狀態(tài)中輕松切換.

        設(shè)計(jì)模式之Strategy

        不同算法各自封裝,用戶(hù)端可隨意挑選需要的算法.

        設(shè)計(jì)模式之Mediator

        Mediator很象十字路口的紅綠燈,每個(gè)車(chē)輛只需和紅綠燈交互就可以.

        設(shè)計(jì)模式之Interpreter

        主要用來(lái)對(duì)語(yǔ)言的分析,應(yīng)用機(jī)會(huì)不多.

        設(shè)計(jì)模式之Visitor

        訪問(wèn)者在進(jìn)行訪問(wèn)時(shí),完成一系列實(shí)質(zhì)性操作,而且還可以擴(kuò)展.

        設(shè)計(jì)模式之Iterator

        這個(gè)模式已經(jīng)被整合入Java的Collection.在大多數(shù)場(chǎng)合下無(wú)需自己制造一個(gè)Iterator,只要將對(duì)象裝入Collection中,直接使用Iterator進(jìn)行對(duì)象遍歷。

      【java面試問(wèn)題及答案】相關(guān)文章:

      java招聘面試常見(jiàn)問(wèn)題12-10

      java面試最常見(jiàn)問(wèn)題03-24

      JAVA面試真題及答案分享11-20

      面試后勤問(wèn)題及答案09-23

      面試領(lǐng)導(dǎo)的問(wèn)題及答案10-20

      銷(xiāo)售面試的問(wèn)題及答案11-08

      面試問(wèn)題及答案02-15

      面試問(wèn)題及答案01-02

      社團(tuán)面試的問(wèn)題及答案11-20

      面試司機(jī)的問(wèn)題及答案04-26

      主站蜘蛛池模板: 国产女主播在线一区二区| 毛片在线啊啊| 国产成人综合亚洲av| 超碰av男人一区二区| 国产免费激情小视频在线观看| 日本亚洲成人中文字幕| 亚洲精品久久久中文字| 精品国产自拍在线视频| 亚洲国产成人一区二区| 成美女黄网站18禁免费| 广东省| 久草免费在线播放视频| 国产在线白浆一区二区三区在线| 亚洲综合网一区二区三区| 国产欧美久久久精品影院| 贵阳市| 金平| 精品人妻一区二区三区中文久久 | 国产亚洲午夜高清国产拍精品不卡| 天天插天天干天天操| 粗大挺进尤物人妻一区二区| 国产精品亚洲一区二区三区正片| 盐山县| 最新国产精品精品视频| 日本少妇精品一区二区| 读书| 突泉县| 好爽~又到高潮了毛片视频 | 绵竹市| 翁源县| 海兴县| 精精国产xxx在线视频app| 亚洲AV手机专区久久精品| 日本第一区二区三区视频| 精品人妻av一区二区三区不卡 | 午夜一区二区三区av| 国产亚洲精品hd网站| 亚洲一区二区在线观看网站| 无码吃奶揉捏奶头高潮视频| 一区二区高清视频在线观看| 国产不卡视频一区二区在线观看|