<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 廣州合生元Java開發(fā)工程師面試題及答案

    時(shí)間:2023-04-03 05:41:03 筆試題目 我要投稿
    • 相關(guān)推薦

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

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

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

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

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

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

      1.用session超時(shí),session為null就表示下線了

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

      一個(gè)用戶登陸時(shí)向表中插進(jìn)一條記錄,用戶離開時(shí)候刪除該記錄

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

      select count(*) from table… 即可

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

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

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

      在文件頭部加上

      刷新間隔時(shí)間是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:

      登陸成功,歡迎訪問

      [關(guān)閉窗口]

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

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

      jdk6.0將會(huì)有很大變化

      增強(qiáng)的for循環(huán)

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

      Init表達(dá)式

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

      未增強(qiáng)的For:

      int sum = 0;

      Integer[] numbers = computeNumbers();

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

      sum += numbers[i];

      增強(qiáng)后的For:

      int sum = 0;

      for ( int number: computeNumbers() )

      sum += number;

      局限性

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

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

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

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

      }

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

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

      if (it.next() < 0)

      it.remove();

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

      注釋

      注釋處理是一個(gè)很大的話題。因?yàn)楸疚闹魂P(guān)注核心的語言特性,所以我們不打算涵蓋它所有的可能形式和陷阱。 我們將討論內(nèi)置的注釋(SuppressWarnings,Deprecated和Override)以及一般注釋處理的局限性。

      Suppress Warnings

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

      @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也可能支持它。這允許您把代碼徹底地從警告中解脫出來。如果在編譯時(shí)出現(xiàn)警告,可以確定是您剛剛把它添加進(jìn)來——以幫助查看那些可能不安全的代碼。隨著泛型的添加,它使用起來將更趁手。

      Deprecated

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

      Override

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

      @Override

      public int hashCode() {

      …

      }

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

      在超類發(fā)生改變的情況中,這也很有幫助。如果向該方法中添加一個(gè)新參數(shù),而且方法本身也被重命名了,那么子類將突然不能編譯,因?yàn)樗辉僦貙懗惖娜魏螙|西。

      其它注釋

      注釋在其他場(chǎng)景中非常有用。當(dāng)不是直接修改行為而是增強(qiáng)行為時(shí),特別是在添加樣板代碼的情況下,注釋在諸如EJB和Web services這樣的框架中運(yùn)行得非常好。

      注釋不能用做預(yù)處理器。Sun的設(shè)計(jì)特別預(yù)防了完全因?yàn)樽⑨尪薷念惖淖止?jié)碼。這樣可以正確地理解該語言的成果,而且IDE之類的工具也可以執(zhí)行深入的代碼分析和重構(gòu)之類的功能。

      注釋不是銀彈。第一次遇到的時(shí)候,人們?cè)噲D嘗試各種技巧。請(qǐng)看下面這個(gè)從別人那里獲得的建議:

      public class Foo {

      @Property

      private int bar;

      }

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

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

      枚舉

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

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

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

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

      兩個(gè)靜態(tài)方法出現(xiàn)在所有枚舉類型聲明中。因?yàn)樗鼈兪敲杜e子類上的靜態(tài)方法,而不是Enum本身的方法,所以它們?cè)趈ava.lang.Enum的javadoc中沒有出現(xiàn)。

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

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

      方法

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

      public enum DatabaseType {

      ORACLE {

      public String getJdbcUrl() {…}

      },

      MYSQL {

      public String getJdbcUrl() {…}

      };

      public abstract String getJdbcUrl();

      }

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

      DatabaseType dbType = …;

      String jdbcURL = dbType.getJdbcUrl();

      要獲取URL,必須預(yù)先知道該實(shí)用方法在哪里。

      可變參數(shù)(Vararg)

      正確地使用可變參數(shù)確實(shí)可以清理一些垃圾代碼。典型的例子是一個(gè)帶有可變的String參數(shù)個(gè)數(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)

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

      Log.log(String code, String… args)

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

      類型強(qiáng)制轉(zhuǎn)換

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

      Log.log(Object… objects) {

      String message = (String)objects[0];

      if (objects.length > 1) {

      Exception e = (Exception)objects[1];

      // Do something with the exception

      }

      }

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

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

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

      協(xié)變返回

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

      public interface Zoo {

      public Animal getAnimal();

      }

      public class ZooImpl implements Zoo {

      public Animal getAnimal(){

      return new AnimalImpl();

      }

      }

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

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

      ZooImpl._animal

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

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

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

      ZooImpl._getAnimal();

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

      協(xié)變

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

      public AnimalImpl getAnimal(){

      return new AnimalImpl();

      }

      使用結(jié)果:

      ZooImpl.getAnimal().implMethod();

      使用泛型

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

      我們將討論泛型方法的使用以及編譯器推斷類型的方法。通常這些都不會(huì)出問題,但是當(dāng)出問題時(shí),錯(cuò)誤信息會(huì)非常令人費(fèi)解,所以需要了解如何修復(fù)這些問題。

      泛型方法

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

      static List Collections.singletonList(T o)

      示例用法:

      public List getListOfOne() {

      return Collections.singletonList(1);

      }

      在示例用法中,我們傳入了一個(gè)int。所以方法的返回類型就是List。編譯器把T推斷為Integer。這和泛型類型是不同的,因?yàn)槟ǔ2恍枰@式地指定類型參數(shù)。

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

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

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

      static List Collections.emptyList()

      示例用法:

      public List getNoIntegers() {

      return Collections.emptyList();

      }

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

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

      public List getNoIntegers() {

      return x ? Collections.emptyList() : null;

      }

      因?yàn)榫幾g器看不到返回上下文,也不能推斷T,所以它放棄并采用Object。您將看到一個(gè)錯(cuò)誤消息,比如:“無法將List

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

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

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

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

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

    高級(jí)Java面試題及答案201602-26

    NIIT認(rèn)證Java面試題及答案03-30

    Java工程師面試題03-29

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

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

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

    主站蜘蛛池模板: 99re6这里有精品热视频| 精品国产日产一区二区三区| 精品人妻中文字幕有码在线| 国产精品电影在线| 精品无码AV一区二区三区不卡 | 亚洲欧洲国产日韩精品| 亚洲日韩精品无码一区二区三区| 国产成人精品优优av| 人人妻人人澡人人爽精品欧美| 99久久精品午夜一区二区| 香港三级精品三级在线专区 | 老司机午夜网站国内精品久久久久久久久| xxx国产精品视频| 亚洲精品国产精品乱码在线观看| 国产精品午夜一级毛片密呀| 欧美视频精品一区二区三区| 久久99国内精品自在现线| 中文无码久久精品| 久久久久久亚洲精品不卡| 欧美精品亚洲精品日韩专区va | 国产精品九九久久免费视频 | 99久久精品国产高清一区二区 | 精品偷自拍另类在线观看| 亚洲国产精品无码久久久久久曰| 人精品影院| 久久国产精品99久久久久久老狼| 精品久久久久久中文字幕人妻最新| 亚洲综合精品网站在线观看| 人妻VA精品VA欧美VA| 久久精品中文字幕第23页| 国产精品你懂的在线播放| 亚洲国产精品自在在线观看 | 欧美成人精品第一区二区三区| 国产精品1024视频| www夜片内射视频日韩精品成人 | 网友偷拍日韩精品| 欧美久久亚洲精品| 三级国产精品| 香港aa三级久久三级老师2021国产三级精品三级在 | 精品亚洲永久免费精品| 2021久久精品国产99国产精品|