2017-8-30面試題總結

1.使用final 關鍵字修飾一個變量時,是引用不能變仍是引用對象不能變。前端

  答:引用對象不能變,final Student stu  = new Student();java

    stu.setName("小明");sql

  錯:stu = new Student();數據庫

2.abstract(抽象類)和interface(接口) 有何區別編程

  回答這個問題,首先得一步一步的比較,在抽象類中成員屬性能夠只聲明不賦值會有默認的初始值,接口中全部成員屬性默認都是public static final 修飾的常量,不能沒有初始值。抽象類中,方法能夠是抽象方法,也能夠是普通的方法,或者static修飾的方法。main方法也沒有問題。能夠有構造方法。接口中全部的方法都是抽象的。不能有static修飾的方法。抽象類的抽象方法只能繼承他去實現。接口是經過實現。說完他們的不一樣點,再說他們的相同點,他們都有抽象方法。而卻他們都不能new。緩存

3.java八大數據類型安全

  byte 、short 、int 、float 、lang 、double 、 boolean 、char服務器

  他們都有相對應的包裝類。他們之間能夠隱式轉換爲相應的類型mybatis

4.instanceof 是什麼app

  instanceof 是比較運算符,比較兩個類型是不是同一種類型

    String a = new String("s");   if(a instanceof String){}

 5. Integer 和 int 有什麼區別。

  Integer是int 的包裝類。Integer初始值是null,int的初始值是0。使用Integer類型聲明對象能夠調用包裝類裏的方法。而int 不行。在jsp開發中el表達式Integer在頁面顯示的是空字符串。int在頁面顯示的是0

6.子類是否可以重寫父類的static(靜態)方法。

  不能

7. String a = "a";建立了幾個對象。String  s = new String("s");建立了幾個對象。String s = "a"+"s";又建立了幾個對象。

 String str = new ("a"+"s"); 又建立了幾個?如下解釋是針對String常量池中是什麼都沒有的。

  1、建立一個"a"對象,放在常量池中。

 2、建立了兩個對象,new 是一個"s" 又是一個,new 的那個對象放在堆裏,"s"放在常量池裏。s變量指向堆裏的對象,堆裏的對象又引用常量池裏的"s"。

 3、建立了一個對象,放在常量池中。首先,在編譯期間。"a"+"s" 會默認變成"as",而後運行時直接使用。

 4、建立了兩個,首先看完上面三個解釋,第四個就無需解釋了。

  (注:這四個答案都是我本身所理解。若有錯誤但願提點。謝謝!)

9.hashMap 和 hashTabel 有什麼區別。

 首先他們的實現不一樣,hashMap是實現Map接口。hashTab

象。String s = "a"+"s";又建立了幾個對象。

 String str = new ("a"+"s"); 又建立了幾個?如下解釋是針對String常量池中是什麼都沒有的。

  1、建立一個"a"對象,放在常量池中。

 2、建立了兩個對象,new 是一個"s" 又是一個,new 的那個對象放在堆裏,"s"放在常量池裏。s變量指向堆裏的對象,堆裏的對象又引用常量池裏的"s"。

 3、建立了一個對象,放在常量池中。首先,在編譯期間。"a"+"s" 會默認變成"as",而後運行時直接使用。

 4、建立了兩個,首先看完上面三個解釋,第四個就無需解釋了。

  (注:這四個答案都是我本身所理解。若有錯誤但願提點。謝謝!)

9.hashMap 和 hashTabel 有什麼區別。

 首先他們的實現不一樣,hashMap是實現Map接口。hashTable是繼承Dictionary類。所編寫的。

hashMap 容許一個null鍵,多個null值。hashTable不容許有null鍵或null值。線程安全問題:hashTable是線程安全的,由於線程安全,因此速度稍微的慢一點。hashMap是線程不安全的,速度快。

10.list和map有什麼區別,

 他們所繼承的接口不一樣。list是繼承了colliction接口,map是map接口,底下有hashMap。

11.說出ArrayList和LinkedList的區別

 ArrayList是先進先出,有下標,獲取元素比較快,再者可以交換元素。

 LikedList是雙向鏈表結構。對插入元素和刪除元素較快。可是獲取元素就很難的。LinkedList提供了一些方法使得它能夠看成堆棧和隊列來使用。

12.Spring的IOC是什麼?

  IOC是Spring基於工廠模式所建造的一個容器。默認在容器的對象都是單例的。Spring幫咱們管理咱們各個組件的對象。也叫控制反轉,熟悉java的人都知道,一個功能都大多都須要不少的類(對象)來完成,之前好比B類調用A類的方法時A類的生命週期是用B類來掌控的。如今Spirng幫咱們作着件事情。 把這個控制權交給Spring。可以依賴注入(在運行期間,由外部容器動態的將依賴對象注入到相應的組件中)。

13.說說Hibernate和MyBaties的區別。

 首先,他們都是ORM(對象關係映射)框架。都對Java的jdbcAPI進行了封裝屏蔽了底層訪問細節,相對來講Hibernate門檻稍微高一點,自動化建立sql。這是一個優勢同時也是一個缺點,因爲自動建立sql因此相對於一些複雜的sql語句很差寫。雖然也可以本身的去編寫sql語句而不是hql語句。但那樣也就損失了Hibernate的可移植性。Hibernate可移植性強。Mybaties簡單小巧,新手也能夠迅速上路。須要本身的去編寫sql語句。若是更換數據庫那麼須要從新編寫對應的sql語句。Mybaties可移植性差。

這裏可能說得太亂了,進行一些總結:

  Hibernate 是一個全自動的 orm 映射工具,它能夠自動生成 sql 語句,ibatis 須要咱們本身在 xml 配置文件中寫 sql 語句,hibernate 要比 ibatis 功能負責和強大不少。由於 hibernate 自動生成 sql 語句,咱們沒法控制該語句,咱們就沒法去寫特定的高效率的 sql。對於一些不太複雜的 sql 查詢, hibernate 能夠很好幫咱們完成,可是,對於特別複雜的查詢,hibernate 就很難適應了,這時候用 ibatis 就是不錯的選擇,由於 ibatis 仍是由咱們本身寫 sql 語句。   整體來講: 1. hibernate 是當前最流行的對象關係 ORM 映射框架,徹底能夠經過對象關係映射來實現對 數據庫的操做,門檻高; mybatis 是半自動化的 ORM 映射框架,只作了字段映射,須要手動寫 sql,但簡單,小巧, 靈活,新手也能夠很快上路。 2. hibernate 移植性好(dialect),mybatis 差,不一樣的數據庫須要寫不一樣 SQL。 3. hibernate 擁有完整的日誌系統,而 mybatis 沒有本身的日誌統計,須要藉助 log4j 4. hibernate 有更好的二級緩存機制,可使用第三方緩存。 MyBatis 自己提供的緩存機制不 佳。

14.MyBaties中編寫sql語句時$和#有什麼區別?

  $ 號是不會防止sql注入的,會把實際值傳入sql語句。例:order by ${user_id}  若是user_id的值是11, 傳入sql的是order by user_id。若是傳入的值是id則會解析爲:order by id

  # 號將傳入的數據都視爲字符串,自動的將值加上雙引號。例:order by #{user_id}  若是user_id的值是11,那麼解析成 order by "11"。若是傳入的是id則解析爲 :order by "id"

  #號在很大的程度上防止了sql注入。而$號不行,通常能用#號,最好別用$號

15.Struts的優缺點

  優勢:

  1.實現MVC模式(model,view,controller)。結構清晰使得開發者只關注業務邏輯的實現。

  2.有豐富的tag 可使用,Strtus的標籤庫(taglib),如能靈活應用則能大大提高開發效率。

  3.頁面導航。使系統的脈絡更加的清晰,經過一個配置文件,便可把握整個系統各個部分之間的聯繫。這對於後期開發有着很大的好處。尤爲是另外一批開發者接手這個項目的時候。這種優點更加的明顯。

  4.提供了Exception處理機制

  缺點:

  1.須要配置forward,若是有十個展現層的jsp,須要配置十次struts,並且還不包括有時候文件目錄的變動,文件的變動。須要從新修改forward。注意:每次修改配置的以後,要求從新部署整個項目。而Tomcat這樣的服務器,還必須重啓。

  2.Struts的Action必須是thread - safe方式,它僅僅容許一個實例去處理全部請求。因此全部的Action都必須同步,這也就引發了線程安全問題。

  3.前端表達式語言方面,Stuts繼承了JSTL,因此他主要使用JSTL來獲取數據,但是JSTL的表達式在Collection和索引屬性方面處理得很弱。

  4.Ajax請求比較複雜,沒有很好的支持。

16.手寫出SpringMVC的5個註解

  @RequestMapping 、@Controller 、@RequestParm 、@PathVariable 、@ResponseBody 、

17.談談你對Spring的理解

  Spring是一個開源的控制反轉框架(Inversion of Conrol , IOC)和切面(AOP)的輕量級容器,是基於工廠模式實現的。

   IOC:應用自己不負責依賴對象的建立及維護。依賴對象的建立及維護是由外部容器負責的。

  ID:依賴注入是指程序運行期,由外部容器動態的將依賴對象注入到組件當中。

  Spring提供了對AOP技術的良好封裝。AOP稱爲切面編程。就是系統中有不少各不相干的類的方法。在這些衆多方法中要加入某種系統功能代碼,例如:日誌,將入權限判斷,加入異常處理。這種應用稱爲AOP。實現AOP功能採用的是代理技術,客戶端程序再也不調用目標。而調用調用代理類。代理類和目標類對外具備相同的方法聲明。

  採用代理機制組裝起來運行,在不改變原程序的基礎上對代碼段進行加強處理,或增長新的功能。

  AOP的做用是讓咱們專心作事,將複雜的需求分解出不一樣方面。將散佈在系統中的公共功能集中解決。把必須作但又不是特別重要的任務集中解決。

相關文章
相關標籤/搜索