Java進階程式員面試題
1.你認為項目中最重要的過程是那些。
分析、設計階段 盡量找出進度的優先順序
2.如果給你一個4-6人的team,怎麼分配。
挑選一技術過硬的人作為我的替補。其它人平均分配任務,每周進行全面的任務分配,每個人領取一周的工作量
,每天彙報進度。
3.簡述軟體開發文檔?
需求分析、概要設計、詳細設計、操作手冊、測試計劃
4.你認為一個項目如何才正確。
是企業利益最大化。
5.你經常讀那些書。
Java編程思想 Java模式 人月神話
6.springmvc的工作原理?
用戶端請求提交到DispacherServlet由DispacherServlet控制器查詢HandlerMapping,找到處理請求的Controller
Controller調用商務邏輯處理後,返回ModelAndView
DispacherServlet查詢檢視解析,找到ModelAndView指定的視圖
視圖負責將結果顯示到用戶端
7.springmvc 和struts2的區別?
機制 :springmvc 的入口是servlet,struts2的入口是filter
效能 : springmvc 會比struts2快一點。springmvc是基於方法設計,struts2是基於類,每次發一次請求都會執行個體一個action,每個Action都會被注入屬性。
參數傳遞:struts2是在接受參數的時候,可以採用屬性來接收參數,這家說明可以讓多個方法共用
攔截器機制:struts2有自己的interceptor機制,springmvc用的是獨立的AOP方式,strtus2的設定檔還是比springmvc大,springmvc使用簡潔,springMVC比struts2開發效率要高.
8.struts2工作原理。
用戶端初始化一個執行servlet的請求
這個請求經過一系列的過濾器,被FilterDispatcher調用,詢問ActionMapper來決定是否調用Action
FilterDispatcher把請求的處理交給ActionProxy
ActionProxy通過Configuraction Manager詢問相關的設定檔,找到需要的Action類
ActionProxy建立ActionInvocation的執行個體
ActionInvocation調用Action前後的攔截器
Action執行完畢後,根據struts.xml設定檔找到對應的視圖頁面
9.Hibernate 工作原理。
讀取並解析設定檔
建立SessionFactory
開啟Session
建立事務:transaction
持久化操作
提交事務
關閉Session
關閉SessionFactory
10.為什麼要用spring?
spring能夠很好的和各大架構整合
spring 通過IOC容器管理了對象的建立和銷毀 原廠模式
在使用hiberna,mybatis的時候,不用每次都編寫提交的事務的代碼,可以使用spring的AOP來管理事務 AOP其實就是一個動態代理的實現
聲明式事務和編程式事務
11.mybatis的優缺點。
優點:SQL寫在XML中,便於統一管理和最佳化
提供映射標籤,支援對象和資料庫的orm欄位關係映射
可以對SQL進行最佳化
缺點: SQL工作量大
mybagtis移植姓不好
不支援級聯
12.談談SSH整合?
struts(展示層)+spring(業務層)+hibernate(持久層)
struts是一個展示層的架構,主要用於接收請求,分發請求。struts其實屬於MVC中的VC層次的
hibernate是一個持久層的架構,主要負責與關聯式資料庫的操作
spring是一個業務層的架構,是一個整合的架構,能夠很好的黏合展示層和持久層。
13.maven是什麼?有什麼作用。
是一個專案管理、構建工具
作用:協助下載jar 尋找依賴,協助下載依賴 熱部署、熱編譯
14.WEB 前端最佳化。
減少HTTP請求的數量(合并css、js、圖片)
利用瀏覽器的緩衝機制
利用GZIP壓縮機制:只針對文本類資源有效
把CSS檔案放在HTML開頭
把javascript檔案放在HTML結尾
避免CSS運算式(判斷瀏覽器)
使用javascript壓縮
減少DNS尋找
避免重新導向
使用ajax
15.安全性測試
利用安全性測試技術,找到潛在的漏洞
16.交易隔離等級(4種)
Serializable(序列化):一個事務在執行過程中完全看不到其他事物對資料庫所做的更新(事務執行的時候不允許別的事務並發執行,事務只能一個接著一個地執行,而不能並發執行)
Repeatable Read(可重複讀):一個事務在執行過程中可以看到其它事務已經提交的新插入的記錄,但是不能看到其它事務對已有記錄的更新
Read Commited(讀已提交資料):一個事務在執行過程中可以看到其它事務已經提交的新插入的記錄,而且能看到其它事務已經提交的對已有記錄的更新。
Read Uncommitted(讀未提交資料):一個事務在執行過程中可以看到其它事務沒有提交的新插入的記錄的更新,而且能看其它事務沒有提交到對已有記錄的更新
17.MYSQL儲存引擎(4種)
MyISAM它不支援事務,也不支援外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT為主的應用基本都可以使用這個引擎來建立表。
每個MyISAM在磁碟上儲存成3個檔案,其中檔案名稱和表名都相同,但是副檔名分別為:.frm(儲存表定義) ,YD(MYData,儲存資料) , MYI(MYIndex,儲存索引),InnoDB,InnoDB儲存引擎提供了具有提交、復原和崩潰恢複能力的事務安全。但是對比MyISAM的儲存引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留資料和索引。
1)自動成長列2)外鍵約束
MEMORY
memory使用存在記憶體中的內容來建立表。每個MEMORY表實際對應一個磁碟檔案,格式是.frm。MEMORY類型的表訪問非常快,因為它到資料是放在記憶體中的,並且預設使用HASH索引,但是一旦伺服器關閉,表中的資料就會丟失,但表還會繼續存在。
MERGE
merge儲存引擎是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,MERGE表中並沒有資料,對MERGE類型的表可以進行查詢、更新、刪除的操作,這些操作實際上是對內部的MyISAM表進行操作。
18.事務傳播特性
1. PROPAGATION_REQUIRED: 如果存在一個事務,則支援當前事務。如果沒有事務則開啟
2. PROPAGATION_SUPPORTS: 如果存在一個事務,支援當前事務。如果沒有事務,則非事務的執行
3. PROPAGATION_MANDATORY: 如果已經存在一個事務,支援當前事務。如果沒有一個活動的事務,則拋出異常。
4. PROPAGATION_REQUIRES_NEW: 總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。
5. PROPAGATION_NOT_SUPPORTED: 總是非事務地執行,並掛起任何存在的事務。
6. PROPAGATION_NEVER: 總是非事務地執行,如果存在一個活動事務,則拋出異常
7. PROPAGATION_NESTED:如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務,
20.TCP協議(傳輸控制通訊協定Transmission Control Protocol )
建立連結:三向交握(1.給對方撥號 2.喂,您好,請問是哪位 3 我是小劉)
關閉連結:四次揮手保證可靠
21.shiro 是什麼
Apache Shiro 是一個強大易用的java安全架構,提供了認證、授權、加密和會話管理等功能。
認證 :驗證使用者來核實他們的身份
授權:會話管理
22. 項目技術
前台:面向的客戶
前端:css div js jquery
後端:springmvc spring mybatis
使用的最佳化技術:
1.頁面靜態化(Freemarker)
2.緩衝
2.1 頁面緩衝(OSCache)