在經歷幾次的面試中,逐漸的發現自己的基礎還是很薄弱,現整理一下面試問的問題,以鞭策自己
1、從技術的角度講解一下Spring的原理?
答:
IOC控制反轉,不是一種技術,而是一種思想,對象的生命週期不是由程序本身來決定,而是由容器來控制,所以稱之爲控制反轉。
ioc底層原理使用技術
(1)xml配置文件
(2)dom4j解決xml
(3)工廠設計模式
(4)反射
aop是面向切面編程,aop是對oop(面向對象編程)的補充和完善,OOP引入封裝、繼承和多態性等概念建立一種對象的層次結構。當我們需要爲不具備上下級關係的對象添加一系列公共的行爲時,oop顯得很無力。如日誌,日誌代碼所在所有對象之間毫無關係。使用AOP技術,可以將一些系統性相關的編程工作,獨立提取出來,獨立實現,然後通過切面切入進系統,提高代碼的複用性。
1) Aspect :切面,切入系統的一個切面。比如事務管理是一個切面,權限管理也是一個切面;
2) Join point :連接點,也就是可以進行橫向切入的位置;
3) Advice :通知,切面在某個連接點執行的操作(分爲: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice );
4) Pointcut :切點,符合切點表達式的連接點,也就是真正被切入的地方;
2、angular中數據的雙向綁定怎麼實現的?
答:利用[(
ngModel)]
符號進行雙向綁定
3、javaWeb中web.xml的配置有哪些?
答:1)、指定歡迎頁 <welcome-file>
2)、命名與定製url <servlet-name>
3)、定製初始化參數 <param-name>
4)、指定錯誤處理頁面,可以通過“異常類型”或“錯誤碼”來指定錯誤處理頁面<error-page>
5)、設置過濾器:比如設置一個編碼過濾器,過濾所有資源<filter>
6)、設置監聽器<listener>
7)、設置會話(Session)過期時間,其中時間以分鐘爲單位<session-config>
4、你所知道的集合有哪些?
答:主要有兩種。一種Collection,另一種Map。其中Collection包括Set、List和Queue,Set(無序無重)又包括HashSet、LinkedHashSet及TreeSet,List(有序有重)又包括ArrayList、LinkedList及Vector;其中Map包括HashTable、LinkedHashMap、HashMap及TreeMap
5、spring中有哪些註解,請簡單說明一下?
答: @Controller 表現層
@Service 服務層
@Autowired 它可以對類成員變量、方法及構造函數進行標註
@RequestMapping URL 請求
@RequestParam URL 參數
@ModelAttribute 我們可以在需要訪問Session屬性的controller上加上 @SessionAttributes,然後在action需要的User參數上加上 @ModelAttribute,並保證兩者的屬性名稱一致。SpringMVC就會自動將 @SessionAttributes定義的屬性注入到ModelMap對象,在setup action的參數列表時,去ModelMap中取到這樣的對象,再添加到參數列表。只要我們不去調用SessionStatus的setComplete()方法,這個對象就會一直保留在Session中,從而實現Session信息的共享。
@Cacheable @Cacheable可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支持緩存的,當標記在一個類上時則表示該類所有的方法都是支持緩存的。對於一個支持緩存的方法,Spring會在其被調用後將其返回值緩存起來,以保證下次利用同樣的參數來執行該方法時可以直接從緩存中獲取結果,而不需要再次執行該方法。Spring在緩存方法的返回值時是以鍵值對進行緩存的,值就是方法的返回結果,至於鍵的話,Spring又支持兩種策略,默認策略和自定義策略,這個稍後會進行說明。需要注意的是當一個支持緩存的方法在對象內部被調用時是不會觸發緩存功能的。@Cacheable可以指定三個屬性,value、key和condition。
@CacheFlush 刷新緩存
@Resource @Resource(這個註解屬於J2EE的),默認安照名稱進行裝配,名稱可以通過name屬性進行指定,
如果沒有指定name屬性,當註解寫在字段上時,默認取字段名進行按照名稱查找,如果註解寫在setter方法上默認取屬性名進行裝配。 當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。
@PostConstruct 在方法上加上註解 @PostConstruct,這個方法就會在Bean初始化之後被Spring容器執行(注:Bean 初始化包括,實例化Bean,並裝配Bean的屬性(依賴注入))。
@PreDestroy 在方法上加上註解 @PreDestroy ,這個方法就會在Bean 被銷燬前被Spring 容器執行。
@Repository 持久化層
@Component 註解你的組件類
@Scope 通過bean的scope屬性來定義一個Bean的作用範圍
@SessionAttributes Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到 session 中,
以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問到這些屬性。
@InitBinder 解決類型轉換問題
@Required @Required負責檢查一個bean在初始化時其聲明的set方法是否被執行,當某個被標註了 @Required的Setter方法沒有被調用,則Spring在解析的時候會拋出異常,以提醒開發者對相應屬性進行設置。@Required註解只能標註在Setter方法之上。因爲依賴注入的本質是檢查Setter方法是否被調用了,而不是真的去檢查屬性是否賦值了以及賦了什麼樣的值。如果將該註解標註在非setXxxx()類型的方法則被忽略。
@Qualifier 明確指定bean的名稱進行注入
6、oracle的分頁,請說明一下?
答:分頁的目的就是控制輸出結果集大小,將結果儘快的返回,選擇第21到40條記錄存在兩種方法
例1:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
例2:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40
7、jsp中閉包是怎麼一回事?
答:變量 add 指定了函數自我調用的返回字值。
自我調用函數只執行一次。設置計數器爲 0。並返回函數表達式。
add變量可以作爲一個函數使用。非常棒的部分是它可以訪問函數上一層作用域的計數器。
這個叫作 JavaScript 閉包。它使得函數擁有私有變量變成可能。
計數器受匿名函數的作用域保護,只能通過 add 方法修改。
簡單說:閉包是一種保護私有變量的機制,在函數執行時形成私有的作用域,保護裏面的私有變量不受外界干擾。
直觀的說就是形成一個不銷燬的棧環境。
例:var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();