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

      廣州合生元Java開發(fā)工程師面試題及答案

      時間:2023-04-03 05:41:03 筆試題目 我要投稿
      • 相關推薦

      廣州合生元Java開發(fā)工程師面試題及答案

        1:如果查詢數(shù)據(jù)庫時,速度比較慢,你怎么樣從數(shù)據(jù)庫端進行優(yōu)化

      廣州合生元Java開發(fā)工程師面試題及答案

        2:你用什么方法統(tǒng)計網(wǎng)站的當前在線人數(shù)

        3:寫出你做的比較滿意的系統(tǒng)并簡述,說出他們的體系結構

        java網(wǎng)頁中怎樣統(tǒng)計在線人數(shù)

        1.用session超時,session為null就表示下線了

        2.也可以采用數(shù)據(jù)庫中設置 臨時表 來處理

        一個用戶登陸時向表中插進一條記錄,用戶離開時候刪除該記錄

        如想統(tǒng)計在線人數(shù),簡單地執(zhí)行

        select count(*) from table… 即可

        3.application對象中可以記住現(xiàn)在的人數(shù),application的生命周期和服務器的生命周期一樣長。

        4.還有一種方法要用到一個文件global.jsa ,方法是(在JSP中)是sessionDestroy(),其中它是以session對象為參數(shù)的。還有要把global.jsa文件必須房子和JSP程序相同的文件目錄內(nèi)才行。

        5.網(wǎng)頁自動刷新的代碼是:

        在文件頭部加上

        刷新間隔時間是15秒

        6.在session中加入監(jiān)聽類,類的示例代碼如下:

        onLineUser.java

        import javax.servlet.http.*;

        import javax.servlet.*;

        import java.util.*;

        public class onLineUser implements HttpSessionBindingListener {

        public onLineUser(){

        }

        private Vector users=new Vector();

        public int getCount(){

        users.trimToSize();

        return users.capacity();

        }

        public boolean existUser(String userName){

        users.trimToSize();

        boolean existUser=false;

        for (int i=0;i

        {

        if (userName.equals((String)users.get(i)))

        {

        existUser=true;

        break;

        }

        }

        return existUser;

        }

        public boolean deleteUser(String userName) {

        users.trimToSize();

        if(existUser(userName)){

        int currUserIndex=-1;

        for(int i=0;i

        if(userName.equals((String)users.get(i))){

        currUserIndex=i;

        break;

        }

        }

        if (currUserIndex!=-1){

        users.remove(currUserIndex);

        users.trimToSize();

        return true;

        }

        }

        return false;

        }

        public Vector getOnLineUser()

        {

        return users;

        }

        public void valueBound(HttpSessionBindingEvent e) {

        users.trimToSize();

        if(!existUser(e.getName())){

        users.add(e.getName());

        System.out.print(e.getName()+”\t 登入到系統(tǒng)\t”+(new Date()));

        System.out.println(“ 在線用戶數(shù)為:“+getCount());

        }else

        System.out.println(e.getName()+”已經(jīng)存在“);

        }

        public void valueUnbound(HttpSessionBindingEvent e) {

        users.trimToSize();

        String userName=e.getName();

        deleteUser(userName);

        System.out.print(userName+”\t 退出系統(tǒng)\t”+(new Date()));

        System.out.println(“ 在線用戶數(shù)為:“+getCount());

        }

        }

        jsp:

        登陸成功,歡迎訪問

        [關閉窗口]

        Jdk1.5和jdk1.6的區(qū)別

        沒多大區(qū)別,只要你注意別用那些過時的方法就行,若是新版本加的或有改變的方法,docs里會說的,在方法解釋下面

        jdk6.0將會有很大變化

        增強的for循環(huán)

        為了迭代集合和數(shù)組,增強的for循環(huán)提供了一個簡單、兼容的語法。有兩點值得一提:

        Init表達式

        在循環(huán)中,初始化表達式只計算一次。這意味著您通常可以移除一個變量聲明。在這個例子中,我們必須創(chuàng)建一個整型數(shù)組來保存computeNumbers()的結果,以防止每一次循環(huán)都重新計算該方法。您可以看到,下面的代碼要比上面的代碼整潔一些,并且沒有泄露變量numbers:

        未增強的For:

        int sum = 0;

        Integer[] numbers = computeNumbers();

        for (int i=0; i < numbers.length ; i++)

        sum += numbers[i];

        增強后的For:

        int sum = 0;

        for ( int number: computeNumbers() )

        sum += number;

        局限性

        有時需要在迭代期間訪問迭代器或下標,看起來增強的for循環(huán)應該允許該操作,但事實上不是這樣,請看下面的例子:

        for (int i=0; i < numbers.length ; i++) {

        if (i != 0) System.out.print(“,”);

        System.out.print(numbers[i]);

        }

        我們希望將數(shù)組中的值打印為一個用逗號分隔的清單。我們需要知道目前是否是第一項,以便確定是否應該打印逗號。使用增強的for循環(huán)是無法獲知這種信息的。我們需要自己保留一個下標或一個布爾值來指示是否經(jīng)過了第一項。 這是另一個例子:

        for (Iterator it = n.iterator() ; it.hasNext() ; )

        if (it.next() < 0)

        it.remove();

        在此例中,我們想從整數(shù)集合中刪除負數(shù)項。為此,需要對迭代器調(diào)用一個方法,但是當使用增強的for 循環(huán)時,迭代器對我們來說是看不到的。因此,我們只能使用Java 5之前版本的迭代方法。 順便說一下,這里需要注意的是,由于Iterator是泛型,所以其聲明是Iterator。許多人都忘記了這一點而使用了Iterator的原始格式。

        注釋

        注釋處理是一個很大的話題。因為本文只關注核心的語言特性,所以我們不打算涵蓋它所有的可能形式和陷阱。 我們將討論內(nèi)置的注釋(SuppressWarnings,Deprecated和Override)以及一般注釋處理的局限性。

        Suppress Warnings

        該注釋關閉了類或方法級別的編譯器警告。有時候您比編譯器更清楚地知道,代碼必須使用一個被否決的方法或執(zhí)行一些無法靜態(tài)確定是否類型安全的動作,而使用:

        @SuppressWarnings(“deprecation”)

        public static void selfDestruct() {

        Thread.currentThread().stop();

        }

        這可能是內(nèi)置注釋最有用的地方。遺憾的是,1.5.0_04的javac不支持它。但是1.6支持它,并且Sun正在努力將其向后移植到1.5中。

        Eclipse 3.1中支持該注釋,其他IDE也可能支持它。這允許您把代碼徹底地從警告中解脫出來。如果在編譯時出現(xiàn)警告,可以確定是您剛剛把它添加進來——以幫助查看那些可能不安全的代碼。隨著泛型的添加,它使用起來將更趁手。

        Deprecated

        遺憾的是,Deprecated沒那么有用。它本來旨在替換@deprecated javadoc標簽,但是由于它不包含任何字段,所以也就沒有方法來建議deprecated類或方法的用戶應該使用什么做為替代品。大多數(shù)用法都同時需要javadoc標簽和這個注釋。

        Override

        Override表示,它所注釋的方法應該重寫超類中具有相同簽名的方法:

        @Override

        public int hashCode() {

        …

        }

        看上面的例子,如果沒有在hashCode中將“C”大寫,在編譯時不會出現(xiàn)錯誤,但是在運行時將無法像期望的那樣調(diào)用該方法。通過添加Override標簽,編譯器會提示它是否真正地執(zhí)行了重寫。

        在超類發(fā)生改變的情況中,這也很有幫助。如果向該方法中添加一個新參數(shù),而且方法本身也被重命名了,那么子類將突然不能編譯,因為它不再重寫超類的任何東西。

        其它注釋

        注釋在其他場景中非常有用。當不是直接修改行為而是增強行為時,特別是在添加樣板代碼的情況下,注釋在諸如EJB和Web services這樣的框架中運行得非常好。

        注釋不能用做預處理器。Sun的設計特別預防了完全因為注釋而修改類的字節(jié)碼。這樣可以正確地理解該語言的成果,而且IDE之類的工具也可以執(zhí)行深入的代碼分析和重構之類的功能。

        注釋不是銀彈。第一次遇到的時候,人們試圖嘗試各種技巧。請看下面這個從別人那里獲得的建議:

        public class Foo {

        @Property

        private int bar;

        }

        其思想是為私有字段bar自動創(chuàng)建getter和setter方法。遺憾的是,這個想法有兩個失敗之處:1)它不能運行,2)它使代碼難以閱讀和處理。 它是無法實現(xiàn)的,因為前面已經(jīng)提到了,Sun特別阻止了對出現(xiàn)注釋的類進行修改。

        即使是可能的,它也不是一個好主意,因為它使代碼可讀性差。第一次看到這段代碼的人會不知道該注釋創(chuàng)建了方法。此外,如果將來您需要在這些方法內(nèi)部執(zhí)行一些操作,注釋也是沒用的。 總之,不要試圖用注釋去做那些常規(guī)代碼可以完成的事情。

        枚舉

        enum非常像public static final int聲明,后者作為枚舉值已經(jīng)使用了很多年。對int所做的最大也是最明顯的改進是類型安全——您不能錯誤地用枚舉的一種類型代替另一種類型,這一點和int不同,所有的int對編譯器來說都是一樣的。除去極少數(shù)例外的情況,通常都應該用enum實例替換全部的枚舉風格的int結構。

        枚舉提供了一些附加的特性。EnumMap和EnumSet這兩個實用類是專門為枚舉優(yōu)化的標準集合實現(xiàn)。如果知道集合只包含枚舉類型,那么應該使用這些專門的集合來代替HashMap或HashSet。

        大部分情況下,可以使用enum對代碼中的所有public static final int做插入替換。它們是可比的,并且可以靜態(tài)導入,所以對它們的引用看起來是等同的,即使是對于內(nèi)部類(或內(nèi)部枚舉類型)。注意,比較枚舉類型的時候,聲明它們的指令表明了它們的順序值。

        “隱藏的”靜態(tài)方法

        兩個靜態(tài)方法出現(xiàn)在所有枚舉類型聲明中。因為它們是枚舉子類上的靜態(tài)方法,而不是Enum本身的方法,所以它們在java.lang.Enum的javadoc中沒有出現(xiàn)。

        第一個是values(),返回一個枚舉類型所有可能值的數(shù)組。

        第二個是valueOf(),為提供的字符串返回一個枚舉類型,該枚舉類型必須精確地匹配源代碼聲明。

        方法

        關于枚舉類型,我們最喜歡的一個方面是它可以有方法。過去您可能需要編寫一些代碼,對public static final int進行轉換,把它從數(shù)據(jù)庫類型轉換為JDBC URL。而現(xiàn)在則可以讓枚舉類型本身帶一個整理代碼的方法。下面就是一個例子,包括DatabaseType枚舉類型的抽象方法以及每個枚舉實例中提供的實現(xiàn):

        public enum DatabaseType {

        ORACLE {

        public String getJdbcUrl() {…}

        },

        MYSQL {

        public String getJdbcUrl() {…}

        };

        public abstract String getJdbcUrl();

        }

        現(xiàn)在枚舉類型可以直接提供它的實用方法。例如:

        DatabaseType dbType = …;

        String jdbcURL = dbType.getJdbcUrl();

        要獲取URL,必須預先知道該實用方法在哪里。

        可變參數(shù)(Vararg)

        正確地使用可變參數(shù)確實可以清理一些垃圾代碼。典型的例子是一個帶有可變的String參數(shù)個數(shù)的log方法:

        Log.log(String code)

        Log.log(String code, String arg)

        Log.log(String code, String arg1, String arg2)

        Log.log(String code, String[] args)

        當討論可變參數(shù)時,比較有趣的是,如果用新的可變參數(shù)替換前四個例子,將是兼容的:

        Log.log(String code, String… args)

        所有的可變參數(shù)都是源兼容的——那就是說,如果重新編譯log()方法的所有調(diào)用程序,可以直接替換全部的四個方法。然而,如果需要向后的二進制兼容性,那么就需要舍去前三個方法。只有最后那個帶一個字符串數(shù)組參數(shù)的方法等效于可變參數(shù)版本,因此可以被可變參數(shù)版本替換。

        類型強制轉換

        如果希望調(diào)用程序了解應該使用哪種類型的參數(shù),那么應該避免用可變參數(shù)進行類型強制轉換。看下面這個例子,第一項希望是String,第二項希望是Exception:

        Log.log(Object… objects) {

        String message = (String)objects[0];

        if (objects.length > 1) {

        Exception e = (Exception)objects[1];

        // Do something with the exception

        }

        }

        方法簽名應該如下所示,相應的可變參數(shù)分別使用String和Exception聲明:

        Log.log(String message, Exception e, Object… objects) {…}

        不要使用可變參數(shù)破壞類型系統(tǒng)。需要強類型化時才可以使用它。對于這個規(guī)則,PrintStream.printf()是一個有趣的例外:它提供類型信息作為自己的第一個參數(shù),以便稍后可以接受那些類型。

        協(xié)變返回

        協(xié)變返回的基本用法是用于在已知一個實現(xiàn)的返回類型比API更具體的時候避免進行類型強制轉換。在下面這個例子中,有一個返回Animal對象的Zoo接口。我們的實現(xiàn)返回一個AnimalImpl對象,但是在JDK 1.5之前,要返回一個Animal對象就必須聲明。:

        public interface Zoo {

        public Animal getAnimal();

        }

        public class ZooImpl implements Zoo {

        public Animal getAnimal(){

        return new AnimalImpl();

        }

        }

        協(xié)變返回的使用替換了三個反模式:

        直接字段訪問。為了規(guī)避API限制,一些實現(xiàn)把子類直接暴露為字段:

        ZooImpl._animal

        另一種形式是,在知道實現(xiàn)的實際上是特定的子類的情況下,在調(diào)用程序中執(zhí)行向下轉換:

        ((AnimalImpl)ZooImpl.getAnimal()).implMethod();

        我看到的最后一種形式是一個具體的方法,該方法用來避免由一個完全不同的簽名所引發(fā)的問題:

        ZooImpl._getAnimal();

        這三種模式都有它們的問題和局限性。要么是不夠整潔,要么就是暴露了不必要的實現(xiàn)細節(jié)。

        協(xié)變

        協(xié)變返回模式就比較整潔、安全并且易于維護,它也不需要類型強制轉換或特定的方法或字段:

        public AnimalImpl getAnimal(){

        return new AnimalImpl();

        }

        使用結果:

        ZooImpl.getAnimal().implMethod();

        使用泛型

        我們將從兩個角度來了解泛型:使用泛型和構造泛型。我們不討論List、Set和Map的顯而易見的用法。知道泛型集合是強大的并且應該經(jīng)常使用就足夠了。

        我們將討論泛型方法的使用以及編譯器推斷類型的方法。通常這些都不會出問題,但是當出問題時,錯誤信息會非常令人費解,所以需要了解如何修復這些問題。

        泛型方法

        除了泛型類型,Java 5還引入了泛型方法。在這個來自java.util.Collections的例子中,構造了一個單元素列表。新的List的元素類型是根據(jù)傳入方法的對象的類型來推斷的:

        static List Collections.singletonList(T o)

        示例用法:

        public List getListOfOne() {

        return Collections.singletonList(1);

        }

        在示例用法中,我們傳入了一個int。所以方法的返回類型就是List。編譯器把T推斷為Integer。這和泛型類型是不同的,因為您通常不需要顯式地指定類型參數(shù)。

        這也顯示了自動裝箱和泛型的相互作用。類型參數(shù)必須是引用類型:這就是為什么我們得到的是List而不是List。

        不帶參數(shù)的泛型方法

        emptyList()方法與泛型一起引入,作為java.util.Collections中EMPTY_LIST字段的類型安全置換:

        static List Collections.emptyList()

        示例用法:

        public List getNoIntegers() {

        return Collections.emptyList();

        }

        與先前的例子不同,這個方法沒有參數(shù),那么編譯器如何推斷T的類型呢?基本上,它將嘗試使用一次參數(shù)。如果沒有起作用,它再次嘗試使用返回或賦值類型。在本例中,返回的是List,所以T被推斷為Integer。

        如果在返回語句或賦值語句之外的位置調(diào)用泛型方法會怎么樣呢?那么編譯器將無法執(zhí)行類型推斷的第二次傳送。在下面這個例子中,emptyList()是從條件運算符內(nèi)部調(diào)用的:

        public List getNoIntegers() {

        return x ? Collections.emptyList() : null;

        }

        因為編譯器看不到返回上下文,也不能推斷T,所以它放棄并采用Object。您將看到一個錯誤消息,比如:“無法將List

      【廣州合生元Java開發(fā)工程師面試題及答案】相關文章:

      中興Java Web開發(fā)工程師筆試題及答案02-10

      Java中級開發(fā)工程師筆試題及答案201603-04

      2017年java面試題及答案03-09

      2017年經(jīng)典的JAVA面試題及答案03-29

      高級Java面試題及答案201602-26

      NIIT認證Java面試題及答案03-30

      Java工程師面試題03-29

      2017年最新java面試題及答案03-09

      博惠思華Java開發(fā)工程師筆試題目及答案02-10

      java開發(fā)工程師簡歷模板03-07

      主站蜘蛛池模板: 久久精品a毛片看国产成人 | 国产白浆美女在线观看| 井研县| 一区二区三区在线蜜桃| 国产午夜av一区二区三区| 洮南市| 普洱| 中文字幕一区二区三区网址| 无码国产精品色午夜| 在线观看极品裸体淫片av| 巨野县| 日喀则市| 最新国产成人综合在线观看| 麻豆精品av国产一区久久| 亚洲色无码中文字幕| 免费无遮挡毛片中文字幕| 亚洲av中文aⅴ无码av不卡| 台山市| 钟山县| 蕉岭县| 六安市| 云和县| 尤溪县| 红桥区| 方正县| 宣化县| 日本一区二区三区高清日韩| 博兴县| 91精品啪在线看国产网站| 仲巴县| 闽清县| 不卡免费av在线高清| 新郑市| 国产福利97精品一区二区| 宝山区| 午夜无码国产18禁| 朔州市| 日韩中文字幕区一区有砖一区| 91精品国产91久久综合蜜臀| 辽阳市| 精品国产性色av网站|