java實習生的有關面試題


java的數據結構你用過那些?map與set的本質區別是什么

   數據結構:是指相互之間存在一種或多種特定關系的數據元素的集合。

   依據邏輯關系,數據結構分為:線性和非線性數據結構。

java中常見的數據結構有:

(1)數組

(2)集合類——Collection(list(ArrayList,LinkedList),set(HashSet))

   List 是鏈表(接口),是可以允許出現重復值的。它的具體實現類:ArrayList和LinkedList

   set  是集合(接口),不允許出現重復值。它的具體實現類HashSet

 

   ArrayList 實現鏈表的內部結構是用數組(Array)。查找高效,修改低效

   LinkedList 實現鏈表的內部結構是鏈表(Linked)。查找低效,修改高效

 

   set是集合(接口),不允許出現重復值

 

   Iterator迭代器

   簡介:java提供的迭代器接口進行java collection的遍歷。Iterator模式是用於遍歷類的標准訪問方法

   所有的繼承Coollection的集合類子類,都有Iterator()方法用於反饋迭代器,程序額可以獲取這個迭代器對象對Collection對象中的元素進行遍歷。

 

(3)鍵值對容器 ——Map

    Map是一種把鍵對象和值對象進行關聯的容器

    指出:像set一樣,一個Map容器中的鍵對象不允許重復,這是為了保證查找結果的一致性。

Map與Set的區別

   Map是用來存放鍵值對的,需要轉成set由迭代器進行遍歷!(加強for循環除外)
   Map m=new Map();
   Set s=m.keySet()
   Set是無序而且不可用重復的!

 (4)增強for循環:

  

增強型的for循環 優點主要體現在集合中,隨便舉個例子
比如對 set 的遍歷
一般是迭代遍歷:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
for循環遍歷:
for (String str : set) {
System.out.println(str);
}
是不是簡單些?

優點還體現在泛型 假如 set中存放的是Object

Set<Object> set = new HashSet<Object>();
for循環遍歷:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}
如果你用Iterator遍歷,那就暈了
map list 也一樣

唯一的缺點就是 在遍歷 集合過程中,不能對集合本身進行操作
for (String str : set) {
set.remove(str);//錯誤!
}
最主要的優勢是增強for在海量數據處理中是有效率優勢的。

1.首先增強for循環和iterator遍歷的效果是一樣的,也就說增強for循環的內部也就是調用iteratoer實現的,

但是增強for循環有些缺點,例如不能在增強循環里動態的刪除集合內容。不能獲取下標等。
2.ArrayList由於使用數組實現,因此下標明確,最好使用普通循環。
3.而對於LinkedList 由於獲取一個元素,要從頭開始向后找,因此建議使用增強for循環,也就是iterator。
下面的例子可以證明

復制代碼
package com.ljq.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
* 增強for循環用法
*
* @author jiqinlin
*
*/
public class ForTest {

public static void main(String[] args) {

//List<Integer> list = new ArrayList<Integer>();
List<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < 50000; i++) {
list.add(11);
}

int resutl = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
resutl = list.get(i);
}
System.out.println("普通循環使用了"+ (System.currentTimeMillis() - start)+"毫秒");


start = System.currentTimeMillis();
for (int c2 : list) {
}
System.out.println("增強for循環使用了"+ (System.currentTimeMillis() - start)+"毫秒");
}

}
復制代碼

使用ArrayList運行結果如下

把ArrayList改為LinkedList,我這里內存溢出了,運行結果如下

於是list改成50000,運行結果如下


所以在使用的時候適當選擇就好了

 

 
Map與Set的本質區別有:Set不能包含重復的元素,最多有一個空值,繼承自Collection接口,底層是Map實現機制。Map不能包含重復的鍵,每個鍵最多對應一個映射的值,不能有空值鍵。兩接口提供的方法不完全一樣。

 

Java常見的數據結構有Collection和Map,其中Collection接口下包括List和Set接口,其下又有多個實現類如List下有 ArrayList、LinkedList和Vector等實現類,Set下有HashSet、LinkedSet等實現類和SortedSet接 口,HashSet下有LinkedHashSet子類,SortedSet接口下有TreeSet實現類。Map接口下有HashMap(有 LinkedHashMap子類)、HashTable(有Properties子類)實現類和SortedMap接口(有TreeMap實現類)。
JAVA的數據結構主要有List、Set、Map、ArrayList、HashSet、HashMap、Properties等。

 

 

Spring整合ORM框架時,事務管理用哪些類?是Spring控制事物的提交還是ORM框架控制?同一事物中執行兩個更新操作,它的工作原理是怎么樣的

   Spring整合ORM框架時事務管理用的是相應ORM框架的事務管理器類如Hibernate對應於                   HibernateTransactionManager,JPA對應於JpaTransactionManager等。

   整合過后可配置由Spring控制事務的提交。

 

   事務提交前執行兩個更新操作。其工作原理是采用AOP編程的原理來進行控制。

 

   Spring整合ORM框架時事務管理用的是相應ORM框架的事務管理器類如Hibernate對應於HibernateTransactionManager,JPA對應於JpaTransactionManager等。整合過后可配置由Spring控制事務的提交。事務提交前執行兩個更新操作。其工作原理是采用AOP編程的原理來進行控制。

 

Http協議你了解嗎?文件上傳時,進度條的設計原理是什么

   超文本傳送協議 (hypertext transport protocol)

   一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。

   HTTP工作在TCP/IP協議體系中的TCP協議上。

    客戶機和服務器必須都支持 HTTP,才能在萬維網上發送和接收 HTML 文檔並進行交互。

    HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。

    HTTP主要特點:簡單快速 靈活 無連接 無狀態

 

     一般來說,上傳也好,下載也好,都要用到JavaI/O。 而計算進度的原理,不就是已經傳輸的大小與總大小的比值嘛。 這樣就簡單了,就拿最基本的OutputStream來說,它的基本的寫出方法為 void write(byte[] b) ,實際上寫出的過程不就是通過InputStream循環讀,然后OutputStream循環寫嘛。 你只要事先通過File類取得文件的總大小,然后在讀入或寫出的循環里加一個簡單的進度計算的步驟,每讀取或寫出一次,就將已傳輸大小增加b.length,求出比值,更新進度條。具體的計算間隔,可以根據循環次數或時間間隔來定。 編碼上,估計要用到I/O流,File,Socket以及Thread。 因為你是使用fileupload插件,所以最好查看一下它的實現代碼,已決定如何將進度功能加入其中。

  

     Http協議即超文本傳輸協議,屬於應用層的面向對象的協議。它支持客戶/服務器模式,簡單快速、靈活、無連接和無狀態。http請求由請求行、消息報頭、請求正文組成,http響應由狀態行、消息報頭和響應正文組成。

      文件上傳時進度條的設計原理:在java中主要用到I/O原理,已上傳的數據值除以文件總大小的比值即實時進度的值。通過File類獲取文件的總大小,在讀取或寫出文件時加一個進度計算的步驟,每讀取或寫出一次就計算進度值,更新進度條。

   

查詢一個字段值有重復的表,要去除重復項,SQL語句怎么寫

    select distinct xx,xx,xx from xxx 

 

java中的Annotation的工作原理是什么

   一個 annotation類型被定義為runtime retention后,它才是在運行時可見,當class文件被裝載時被保存在class文件中的annotation才會被虛擬機讀取

 

     Annotation提供一種機制,將程序的元素如:類,方法,屬性,參數,本地變量,包和元數據聯系起來。這樣編譯器可以將元數據存儲在Class文件中。這樣虛擬機和其它對象可以根據這些元數據來決定如何使用這些程序元素或改變它們的行為。

 

分層架構中,Dao層的作用是什么?如果不要DAo層,能不能實現DAO層時的優點

      Dao層又叫數據訪問對象層, 封裝數據庫的底層操作細節如數據庫的連接及對數據的CRUD等操作,它不但屏蔽了數據存儲最終介質的不同,也屏蔽了具體實現技術的不同。一般在其上還會有 Service層來封裝業務操作進行進一步的解耦。不用DAO層也能實現Dao層時的優點如自己封裝一個類似Dao層功能的數據庫操作模板類,可參考 Spring的DAO層思想

 

HibernateDaoSupport,ActionSupport等類中所指的Support,是不是一種設計模式?若是,那說說你對這種感設計模式的理解

     它們用到了IoC和工廠模式,即依賴注入,將程序代碼中依賴對象的管理交由相應的容器去管理如在配置文件中進行注入配置

 

對數據庫的存儲的存儲過程熟悉嗎?對css熟悉嗎

 

       層疊樣式表(Cascading Style Sheet)簡稱“CSS”,通常又稱為“風格樣式表(Style Sheet)”,它是用來進行網頁風格設計的。它是一種用來表現HTML或 XML 等文件式樣的計算機語言。

相對於傳統HTML的表現而言,CSS能夠對網頁中的對象的位置排版進行像素級的精確控制,支持幾乎所有的字體字號樣式,擁有對網頁對象盒模型的能力,並能夠進行初步交互設計,是目前基於文本展示最優秀的表現設計語言。

在網頁上使用樣式表有三種方法可以在站點網頁上使用樣式表:

  將網頁鏈接到外部樣式表。

  在網頁上創建嵌入的樣式表。

  應用內嵌樣式到各個網頁元素。

每一種方法均有其優缺點:

當要在站點上所有或部份的網頁上一致地應用相同樣式時,可使用外部樣式表。在一個或多個外部樣式表中定義樣式,並將它們鏈接到所有網頁,便能確保所有網頁外觀的一致性。 

當人們只是要定義當前網頁的樣式,可使用嵌入的樣式表。嵌入的樣式表是一種級聯樣式表,“嵌”在網頁的 <HEAD> 標記符內。嵌入的樣式表中的樣式只能在同一網頁上使用。

     使用內嵌樣式以應用級聯樣式表屬性到網頁元素上。

  如果網頁鏈接到外部樣式表,為網頁所創建的內嵌的或嵌入式樣式將擴充或覆蓋外部樣式表中的指定屬性。

 

說說Struts2的工作原理

 一個請求在Struts2框架中的處理分為以下幾個步驟:
 1.客戶端發出一個指向servlet容器的請求(tomcat);
 2.這個請求會經過圖中的幾個過濾器,最后會到達FilterDispatcher過濾器

 3.過濾器FilterDispatcher是struts2框架的心臟,在處理用戶請求時,它和請求一起相互配合訪問struts2
 的底層框架結構。在web容器啟動時,struts2框架會自動加載配置文件里相關參數,並轉換成相應的類。

 4.如果找到需要調用的Action,過濾器會把請求的處理交給ActionProxy。ActionProxy為Action的代理對象
 。ActionProxy通過ConfigurationManager詢問框架的配置文件,找到需要調用的Action類。

  5.ActionProxy創建一個ActionInvocation的實例。ActionInvocation在ActionProxy層之下,它表示了
 Action的執行狀態,或者說它控制的Action的執行步驟。它持有Action實例和所有的Interceptor。

 6.ActionInvocation實例使用命名模式來調用,1. ActionInvocation初始化時,根據配置,加載Action相
 關的所有Interceptor。2. 通過ActionInvocation.invoke方法調用Action實現時,執行Interceptor。在
 調用Action的過程前后,涉及到相關攔截器(intercepetor)的調用。

 7. 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果
 通常是(但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。

 

 

怎樣實現分頁顯示的?具體原理怎么樣?Hibernate的setMaxResults和setFirstResult內部是怎么實現分頁查詢的?

         實現一個分頁組件,可自實現或借用相應框架的實現。原理是求出所查數據總記錄數,設置每頁要顯示的記錄數,然后計算每頁要顯示的第一條記錄數,根據每頁要顯示的記錄數和總記錄數來求出頁數等。
Hibernate的setMaxResults和setFirstResult內部是通過SQL語句來實現分頁查詢的,

 

Hibernate框架的設計有什么不好的地方

    XML配置麻煩、映射文件可能過於冗余、查詢慢、對海量數據無能為力、太對象化限制了查詢、級聯關系也影響查詢速度等。 當然,最新版本的Hibernate采用EJB3注解的方式,大大的提高了它的應用效率。

你是怎么樣實現分頁顯示的?具體原理怎么樣?Hibernate的setMesResults和setFirsResult內部是怎么實現分布查詢的

 

Struts,Hibernate,Spring等框架,你最熟悉哪個?有沒有讀過它的源代碼?你用過Spring框架的那些功能

學習JSF,Richface,JBoss Seam,JBPM該按什么順序,步驟去學習?

    先需要學習JAVA EE 相關技術,如JSF2,EJB3,學完這些技術后,就可以學習Seam技術和Richface.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM