激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

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

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

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

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

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

  2:你用什么方法統計網(wǎng)站的當前在線(xiàn)人數

  3:寫(xiě)出你做的比較滿(mǎn)意的系統并簡(jiǎn)述,說(shuō)出他們的體系結構

  java網(wǎng)頁(yè)中怎樣統計在線(xiàn)人數

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

  2.也可以采用數據庫中設置 臨時(shí)表 來(lái)處理

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

  如想統計在線(xiàn)人數,簡(jiǎn)單地執行

  select count(*) from table… 即可

  3.application對象中可以記住現在的人數,application的生命周期和服務(wù)器的生命周期一樣長(cháng)。

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

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

  在文件頭部加上

  刷新間隔時(shí)間是15秒

  6.在session中加入監聽(tīng)類(lèi),類(lèi)的示例代碼如下:

  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”+(new Date()));

  System.out.println(“ 在線(xiàn)用戶(hù)數為:“+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”+(new Date()));

  System.out.println(“ 在線(xiàn)用戶(hù)數為:“+getCount());

  }

  }

  jsp:

  登陸成功,歡迎訪(fǎng)問(wèn)

  [關(guān)閉窗口]

  Jdk1.5和jdk1.6的區別

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

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

  增強的for循環(huán)

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

  Init表達式

  在循環(huán)中,初始化表達式只計算一次。這意味著(zhù)您通?梢砸瞥粋(gè)變量聲明。在這個(gè)例子中,我們必須創(chuàng )建一個(gè)整型數組來(lái)保存computeNumbers()的結果,以防止每一次循環(huán)都重新計算該方法。您可以看到,下面的代碼要比上面的代碼整潔一些,并且沒(méi)有泄露變量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;

  局限性

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

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

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

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

  }

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

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

  if (it.next() < 0)

  it.remove();

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

  注釋

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

  Suppress Warnings

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

  @SuppressWarnings(“deprecation”)

  public static void selfDestruct() {

  Thread.currentThread().stop();

  }

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

  Eclipse 3.1中支持該注釋?zhuān)渌鸌DE也可能支持它。這允許您把代碼徹底地從警告中解脫出來(lái)。如果在編譯時(shí)出現警告,可以確定是您剛剛把它添加進(jìn)來(lái)——以幫助查看那些可能不安全的代碼。隨著(zhù)泛型的添加,它使用起來(lái)將更趁手。

  Deprecated

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

  Override

  Override表示,它所注釋的方法應該重寫(xiě)超類(lèi)中具有相同簽名的方法:

  @Override

  public int hashCode() {

  …

  }

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

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

  其它注釋

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

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

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

  public class Foo {

  @Property

  private int bar;

  }

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

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

  枚舉

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

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

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

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

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

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

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

  方法

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

  public enum DatabaseType {

  ORACLE {

  public String getJdbcUrl() {…}

  },

  MYSQL {

  public String getJdbcUrl() {…}

  };

  public abstract String getJdbcUrl();

  }

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

  DatabaseType dbType = …;

  String jdbcURL = dbType.getJdbcUrl();

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

  可變參數(Vararg)

  正確地使用可變參數確實(shí)可以清理一些垃圾代碼。典型的例子是一個(gè)帶有可變的String參數個(gè)數的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í),比較有趣的是,如果用新的可變參數替換前四個(gè)例子,將是兼容的:

  Log.log(String code, String… args)

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

  類(lèi)型強制轉換

  如果希望調用程序了解應該使用哪種類(lèi)型的參數,那么應該避免用可變參數進(jìn)行類(lèi)型強制轉換?聪旅孢@個(gè)例子,第一項希望是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

  }

  }

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

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

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

  協(xié)變返回

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

  public interface Zoo {

  public Animal getAnimal();

  }

  public class ZooImpl implements Zoo {

  public Animal getAnimal(){

  return new AnimalImpl();

  }

  }

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

  直接字段訪(fǎng)問(wèn)。為了規避API限制,一些實(shí)現把子類(lèi)直接暴露為字段:

  ZooImpl._animal

  另一種形式是,在知道實(shí)現的實(shí)際上是特定的子類(lèi)的情況下,在調用程序中執行向下轉換:

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

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

  ZooImpl._getAnimal();

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

  協(xié)變

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

  public AnimalImpl getAnimal(){

  return new AnimalImpl();

  }

  使用結果:

  ZooImpl.getAnimal().implMethod();

  使用泛型

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

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

  泛型方法

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

  static List Collections.singletonList(T o)

  示例用法:

  public List getListOfOne() {

  return Collections.singletonList(1);

  }

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

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

  不帶參數的泛型方法

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

  static List Collections.emptyList()

  示例用法:

  public List getNoIntegers() {

  return Collections.emptyList();

  }

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

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

  public List getNoIntegers() {

  return x ? Collections.emptyList() : null;

  }

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

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

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

Java中級開(kāi)發(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開(kāi)發(fā)工程師筆試題目及答案02-10

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

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频