大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 2019最新大唐電信java面試題及答案

2019最新大唐電信java面試題及答案

更新時(shí)間:2019-08-15 15:00:03 來源:動力節(jié)點(diǎn) 瀏覽2454次



1、Java如何實(shí)現(xiàn)多態(tài),實(shí)現(xiàn)的主要方法。


  java是借助方法的重寫和重載實(shí)現(xiàn)多態(tài)。


  重載的特性,方法名相同.返回類型,傳入方法的參數(shù)不同(包括個(gè)數(shù)和類型)。


  重寫的特性,方法名相同,返回類型,參數(shù)均相同,必須發(fā)生在子類。



  2、Hashtable\HashMap有什么區(qū)別,HashMap實(shí)現(xiàn)的算法思想,多個(gè)任意長度的值進(jìn)行hash操作,得出的hash值是否相等?


(1)Hashtable是繼承自陳舊的Dictionary類的,HashMap繼承自AbstractMap類同時(shí)是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)。


  (2)也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。


  (3)第三點(diǎn)不同是,只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value。HashMap中只有一條記錄可以是一個(gè)空的key,但任意數(shù)量的條目可以是空的value。這就是說,如果在表中沒有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個(gè)空的值,那么get()將返回null。如果有必要,用containKey()方法來區(qū)別這兩種情況。


  (4)HashMap去掉了Hashtable的contains方法,保留了containsValue和containsKey方法。


  (5)Hashtable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1。HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。


1)首先HashMap里面實(shí)現(xiàn)一個(gè)靜態(tài)內(nèi)部類Entry 其重要的屬性有 key , value, next,從屬性key,value我們就能很明顯的看出來Entry就是HashMap鍵值對實(shí)現(xiàn)的一個(gè)基礎(chǔ)bean,我們上面說到HashMap的基礎(chǔ)就是一個(gè)線性數(shù)組,這個(gè)數(shù)組就是Entry[],Map里面的內(nèi)容都保存在Entry[]里面。


2)既然是線性數(shù)組,為什么能隨機(jī)存取?這里HashMap用了一個(gè)小算法,大致是這樣實(shí)現(xiàn):


  Java代碼

  

  A:存儲時(shí):


  B:int hash = key.hashCode();--> 這個(gè)hashCode方法這里不詳述,只要理解每個(gè)key的hash是一個(gè)固定的int值


  C:int index = hash % Entry[].length;


  D:Entry[index] = value;


  E:取值時(shí):


  F:int hash = key.hashCode();


    G:int index = hash % Entry[].length;


  H: return Entry[index]



  3、說明inputstream和inputstreamreader的區(qū)別


  InputStream是字節(jié)流


  reader是字符流


  inputstreamreader是將字節(jié)流轉(zhuǎn)換成字符流,是上面兩者的轉(zhuǎn)換類。



  4、 Java實(shí)現(xiàn)多線程的方法有哪些?什么情況需實(shí)現(xiàn)線程同步,線程同步的方法有哪幾種?


  多線程有兩種實(shí)現(xiàn)方法。一種是繼承Thread類,一種是實(shí)現(xiàn)Runnable接口!


  在多個(gè)線程同時(shí)訪問互斥(可交換)數(shù)據(jù)時(shí),應(yīng)該同步以保護(hù)數(shù)據(jù),確保兩個(gè)線程不會同時(shí)修改更改它。


  同步有兩種方法。一種同步方法,一種同步代碼!分別是synchronized,wait與notify



  5、Xml解析方式有哪幾種,有什區(qū)別?


  Dom解析在內(nèi)存中創(chuàng)建一個(gè)DOM樹,該結(jié)構(gòu)通常需要加載整個(gè)文檔然后才能做工作。由于它是基于信息層次的,因而DOM被認(rèn)為是基于樹或基于對象的,樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對數(shù)據(jù)和結(jié)構(gòu)作出更改能隨機(jī)訪問文件內(nèi)容,也可以修改原文件內(nèi)容。


  SAX解析 SAX處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。SAX解析器采用了基于事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個(gè)巨大的優(yōu)點(diǎn)線性解析,不能隨機(jī)訪問,也無法修改原文件。


  JDOM解析 JDOM的目的是成為Java特定文檔模型,它簡化與XML的交互并且比使用DOM實(shí)現(xiàn)更快.JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經(jīng)熟悉這些類的Java開發(fā)者的使用。


  DOM4j解析 DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復(fù)雜的API的代價(jià),但是它提供了比JDOM大得多的靈活性。



  6、使用過的觸發(fā)器有哪幾種?有什么區(qū)別?


  觸發(fā)器是一種特殊類型的存儲過程,主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的。


  SQL Server 2000 支持兩種類型的觸發(fā)器:AFTER 觸發(fā)器和INSTEAD OF 觸發(fā)器。其中AFTER 觸發(fā)器即為SQL Server 2000 版本以前所介紹的觸發(fā)器。該類型觸發(fā)器要求只有執(zhí)行某一操作(INSERT UPDATE DELETE)之后,觸發(fā)器才被觸發(fā),且只能在表上定義。可以為針對表的同一操作定義多個(gè)觸發(fā)器。對于AFTER 觸發(fā)器,可以定義哪一個(gè)觸發(fā)器被最先觸發(fā),哪一個(gè)被最后觸發(fā),通常使用系統(tǒng)過程sp_settriggerorder來完成此任務(wù)。


  INSTEAD OF 觸發(fā)器表示并不執(zhí)行其所定義的操作(INSERT、 UPDATE、 DELETE),而僅是執(zhí)行觸發(fā)器本身。既可在表上定義INSTEAD OF 觸發(fā)器,也可以在視圖上定義INSTEAD OF 觸發(fā)器,但對同一操作只能定義一個(gè)INSTEAD OF 觸發(fā)器。



  7、Struts和struts2.0有什么區(qū)別,使用時(shí)需要注意什么?


  /**Action類


  Struts1要求Action類繼承一個(gè)抽象類,Struts1使用抽象類編程而不是接口


  Struts2可以實(shí)現(xiàn)Action接口也可以不實(shí)現(xiàn),Struts2提供一個(gè)ActionSuport基類去實(shí)現(xiàn)常用接口。Action接口不是必須的,任何有execute的標(biāo)識的POJO都有可能成為struts2的Action的對象


  /**線程模式


  Struts1的Action是單例模式并且是線程安全的,僅有Action一個(gè)實(shí)例來處理所有請求。單策略模式限制了Struts1 Action能做的事。比且在開發(fā)時(shí)要注意Action資源必須是線程安全比且是同步的。


  Struts2的Action對象為每個(gè)請求產(chǎn)生一個(gè)實(shí)例,因此沒有線程安全問題。


  /**Servlet依賴


  Struts1 Action依賴與Servlet API,因?yàn)楫?dāng)一個(gè)Action被調(diào)用時(shí)HttpServletRequest和HttpServletResponse被傳遞給execute方法。


  Struts2 Action不依賴與容器,允許Action脫離容器被單獨(dú)測試。如果需要,struts2依然可以訪問初始的request和response。但是,其他的元素減少或者消除了直接訪問

HttpServletRequest和HttpServletResponse的必要性。


  /**可測性:


  測試Struts1 Action的一個(gè)主要問題是execute方法暴漏了Servlet API(這使得測試要依賴于容器)。一個(gè)第三方擴(kuò)展--Struts TestCase--提供了一套Struts1的模擬對象(來進(jìn)行測試)


  struts2 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”支持也使測試更容易。


  /**捕獲輸入:


  struts1使用ActionForm對象捕獲輸入。所有ActionForm必須繼承一個(gè)基類。因?yàn)槠渌鸍avaBean不能用作ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的基類不或輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存在的JavaBean(仍然會導(dǎo)致有沉余的JavaBean)。


  Struts2直接使用Acrtion屬性作為輸入屬性,消除了對第二個(gè)輸入對象的請求。輸入屬性可能是有自己(子)屬性的Rich對象類型。Action屬性能過通過web頁面上的Taglibs訪問。

struts2也支持ActionForm模式。Richard對象類型,包括業(yè)務(wù)對象,能夠用作輸入/輸出對象。這種ModelDriven特性簡化了Taglib對POJO輸入對象的引用


  /**表達(dá)式語言


  Struts1整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很脆弱。


  Struts2可以使用JSTL,但是也支持一個(gè)更強(qiáng)大和靈活的表達(dá)式語言--“object graph Notation Language”(OGNL)


  /**綁定值到頁面(view)


  Struts1使用標(biāo)準(zhǔn)JSP機(jī)制吧對象綁定到頁面中來訪問。


  struts2使用ValueStack技術(shù),使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重同頁面(view)


  /**類型轉(zhuǎn)換


  Struts1 ActionForm屬性通常都是String類型。struts1使用Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。每個(gè)類一個(gè)轉(zhuǎn)換器,對每一個(gè)實(shí)例來說是不可配置的


  struts2 使用OGNL進(jìn)行類型轉(zhuǎn)換,提供基本和常用對象的轉(zhuǎn)換器。


  /**效驗(yàn)


  Struts1支持在ActionForm的validate方法中手動效驗(yàn),或者通過Commons Validator的擴(kuò)展來效驗(yàn)。同一個(gè)類可以有不同的效驗(yàn)內(nèi)容,但不能效驗(yàn)子對象。


  Struts2支持通過validate方法和XWork效驗(yàn)框架進(jìn)行效驗(yàn)。XWork效驗(yàn)框架使用為屬性類類型定義的效驗(yàn)和內(nèi)容效驗(yàn),來支持Chain效驗(yàn)子屬性。


  /**Action執(zhí)行的控制


  Struts1支持每一個(gè)模塊有單獨(dú)的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。


  struts2支持通過攔截器堆棧(Interceptor Stacks)為每一個(gè)Action創(chuàng)建不能的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。


  10. 使用Java定義一個(gè)單鏈表結(jié)構(gòu),編程實(shí)現(xiàn)對定義的單鏈表結(jié)構(gòu)的反轉(zhuǎn)。


  /**


  * @author luochengcheng


  * 定義一個(gè)單鏈表


  */


  class Node {


  //變量


  privateint record;


  //指向下一個(gè)對象


  private Node nextNode;


  public Node(int record) {


  super();


  this.record = record;


  }


  publicintgetRecord() {


  return record;


  }


  public void setRecord(int record) {



  this.record = record;


  }


  public Node getNextNode() {


  returnnextNode;


  }


  public void setNextNode(Node nextNode) {


  this.nextNode = nextNode;


  }


  }


  /**


  * @author luochengcheng


  * 兩種方式實(shí)現(xiàn)單鏈表的反轉(zhuǎn)(遞歸、普通)


  * 新手強(qiáng)烈建議旁邊拿著紙和筆跟著代碼畫圖(便于理解)


  */


  public class ReverseSingleList {


  /**


  * 遞歸,在反轉(zhuǎn)當(dāng)前節(jié)點(diǎn)之前先反轉(zhuǎn)后續(xù)節(jié)點(diǎn)


  */


  public static Node reverse(Node head) {


  if (null == head || null == head.getNextNode()) {


  return head;


  }


  Node reversedHead = reverse(head.getNextNode());


  head.getNextNode().setNextNode(head);


  head.setNextNode(null);


  returnreversedHead;


  }


  /**


  * 遍歷,將當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)緩存后更改當(dāng)前節(jié)點(diǎn)指針


  *


  */


  public static Node reverse2(Node head) {


  if (null == head) {


  return head;


  }


  Node pre = head;


  Node cur = head.getNextNode();


  Node next;


  while (null != cur) {


  next = cur.getNextNode();


  cur.setNextNode(pre);


  pre = cur;


  cur = next;


  }


  //將原鏈表的頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)置為null,再將反轉(zhuǎn)后的頭節(jié)點(diǎn)賦給head


  head.setNextNode(null);


  head = pre;


  return head;


  }


  public static void main(String[] args) {


  Node head = new Node(0);


  Node tmp = null;


  Node cur = null;


  // 構(gòu)造一個(gè)長度為10的鏈表,保存頭節(jié)點(diǎn)對象head


  for (int i = 1; i < 10; i++) {


  tmp = new Node(i);


  if (1 == i) {


  head.setNextNode(tmp);


  } else {


  cur.setNextNode(tmp);


  }


  cur = tmp;


  }


  //打印反轉(zhuǎn)前的鏈表


  Node h = head;


  while (null != h) {


  System.out.print(h.getRecord() + " ");


  h = h.getNextNode();


  }


  //調(diào)用反轉(zhuǎn)方法


  head = reverse2(head);


  System.out.println("\n**************************");


  //打印反轉(zhuǎn)后的結(jié)果


  while (null != head) {


  System.out.print(head.getRecord() + " ");


  head = head.getNextNode();


  }


  }


  }


  運(yùn)行:


  C:\ex>java ReverseSingleList


  0 1 2 3 4 5 6 7 8 9


  **************************


  9 8 7 6 5 4 3 2 1 0



提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久狠狠婷婷丁香香蕉 | 日本黄色免费网址 | 成人精品一区二区三区 | 福利视频国产 | 国产伦精品一区二区三区免费迷 | 网曝门精品国产事件在线观看 | 久久99精品久久久久久国产人妖 | 精品国产三级v | 国内精品久久久久影院嫩草 | 久久久久久久亚洲精品一区 | 一区二区三区视频观看 | 国产99久久九九精品免费 | 青草久久网 | 欧美性一区二区三区 | 亚洲 欧美 中文 日韩欧美 | 欧美一级艳片视频免费观看 | 久久国产影视 | 精品在线一区二区 | 日本欧洲95视频 | 高清成人| 六月丁香深爱六月综合激情 | 亚洲不卡免费视频 | 欧美激情在线播放一区二区 | 国产乱码在线精品可播放 | 色婷婷久久综合中文久久一本 | 久久国产精品国产精品 | 4hu四虎永久网址 | 中文字幕不卡在线观看 | 亚洲欧美日韩中文字幕在线 | 国产精品久久久久蜜芽 | 国产色婷婷视频在线观看 | 最新精品亚洲成a人在线观看 | 天天摸日日碰天天看免费 | 久久视频精品36线视频在线观看 | 中国老妇色xxxxx | 伊人99在线观看 | 99精品国内不卡在线观看 | 国内夫妇精品对白在线播放 | 四虎精品成人免费视频 | 国产亚洲精品成人a在线 | 四虎一级片 |