個人答案
------------
問:Java的數據結構你用過哪些?Map與Set的本質區別是什么?
答: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實現類)。
我用過的數據結構主要有List、Set、Map、ArrayList、HashSet、HashMap、Properties等。
Map與Set的本質區別我認為有:Set不能包含重復的元素,最多有一個空值,繼承自Collection接口,底層是Map實現機制。Map不能包含重復的鍵,每個鍵最多對應一個映射的值,不能有空值鍵。兩接口提供的方法不完全一樣。
問:Spring整合ORM框架時,事務管理用哪個類?是Spring控制事務的提交還是ORM框架控制?同一事務中執行兩個更新操作,它的工作原理是怎樣的?
答:Spring整合ORM框架時事務管理用的是相應ORM框架的事務管理器類如Hibernate對應于HibernateTransactionManager,JPA對應于JpaTransactionManager等。整合過后可配置由Spring控制事務的提交。事務提交前執行兩個更新操作(不清楚其工作原理)。
問:Http協議你了解嗎?文件上傳時,進度條的設計原理是什么?
答:Http協議即超文本傳輸協議,屬于應用層的面向對象的協議。它支持客戶/服務器模式,簡單快速、靈活、無連接和無狀態。http請求由請求行、消息報頭、請求正文組成,http響應由狀態行、消息報頭和響應正文組成。
文件上傳時進度條的設計原理:在java中主要用到I/O原理,已上傳的數據值除以文件總大小的比值即實時進度的值。通過File類獲取文件的總大小,在讀取或寫出文件時加一個進度計算的步驟,每讀取或寫出一次就計算進度值,更新進度條。
問:查詢一個字段值有重復的表,要去除重復項,SQL語句怎么寫?
答:在SQL語句中加上distinct關鍵字,如SELECT distinct(name),id FROM table、SELECT distinct name FROM table。
問:Java中的Annotation的工作原理是什么?
答:Annotation提供一種機制,將程序的元素如:類,方法,屬性,參數,本地變量,包和元數據聯系起來。這樣編譯器可以將元數據存儲在Class文件中。這樣虛擬機和其它對象可以根據這些元數據來決定如何使用這些程序元素或改變它們的行為。
問:分層架構中,Dao層的作用是什么?如果不要DAO層,能不能實現有Dao層時的優點?
答:Dao層又叫數據訪問對象層, 封裝數據庫的底層操作細節如數據庫的連接及對數據的CRUD等操作,它不但屏蔽了數據存儲最終介質的不同,也屏蔽了具體實現技術的不同。一般在其上還會有Service層來封裝業務操作進行進一步的解耦。不用DAO層也能實現Dao層時的優點如自己封裝一個類似Dao層功能的數據庫操作模板類,可參考Spring的DAO層思想。
問:HibernateDaoSupport,ActionSupport等類中所指的Support,是不是一種設計模式?若是,那說說你對這種設計模式的理解?
答:個人認為用到了IoC模式,即依賴注入,將程序代碼中依賴對象的管理交由相應的容器去管理如在配置文件中進行注入配置。
問:對數據庫的存儲過程熟悉不?對CSS熟悉不?
答:數據庫的存儲過程是存儲過程(stored procedure)是一組為了完成特定功能的sql 語句集,經編譯后存儲在數據庫,用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。從本質上講觸發器也是一種存儲過程。存儲過程可以調用另一個存儲過程,它具有如下的優點:允許標準組件式編程因為它可以多次使用不必重復編寫、能夠實現較快的執行速度因為它是預編譯的比批處理執行更快、能夠減少網絡流量因為它一次性可執行多個SQL語句、可作為一種安全機制來充分利用因為系統管理員可對存儲過程進行權限限制。
CSS又叫層疊樣式表,是設計網頁樣式的工具,使用它可更方便的設計和管理網頁樣式,比普通的HTML標記樣式更優秀和方便使用,具體使用在此不多講。
問:說說Struts2的工作原理?
答:客戶發起相應請求-》請求被提交到一系列有序的Filter中如ActionContextCleanUp和FilterDispatcher等-》ActionProxy代理類通過配置文件如struts.xml找到需要調用的Action類-》ActionProxy創建一個ActionInvocation的實例,同時ActionInvocation通過代理模式調用Action。但在調用之前ActionInvocation會根據配置加載Action相關的所有Interceptor-》ActionInvocation初始化時,根據配置,加載Action相關的所有Interceptor-》通過ActionInvocation.invoke方法調用Action實現時,執行Interceptor-》一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。如上文中將結構返回“add.jsp”,若是返回另外一個action,那么該流程又得走一遍。
問:Hibernate框架的設計有什么不好的地方?
答:配置麻煩、映射文件可能過于冗余、查詢慢、對海量數據無能為力、太對象化限制了查詢、級聯關系也影響查詢速度等。
問:你是怎么樣實現分頁顯示的?具體原理怎么樣?Hibernate的setMaxResults和setFirstResult內部是怎么實現分頁查詢的?
答:實現一個分頁組件,可自實現或借用相應框架的實現。原理是求出所查數據總記錄數,設置每頁要顯示的記錄數,然后計算每頁要顯示的第一條記錄數,根據每頁要顯示的記錄數和總記錄數來求出頁數等。
Hibernate的setMaxResults和setFirstResult內部是通過SQL語句來實現分頁查詢的,個人觀點而已,未查看源代碼。
問:Struts,Hibernate,Spring等框架,你哪個最熟悉?有沒有讀過它的源代碼?你用過Spring框架的那些功能?
答:最熟悉的是Struts1.x,其次是Hibernate和Spring,讀過其中的一些源代碼,并沒有去讀所有的源代碼。主要用過的是Spring的IoC和AOP和事務管理等功能。
回復 更多評論