面試題(一)
一着茸、中文問題
-
jsp頁面亂碼問題
1) 瀏覽器編碼問題
- 頁面格式問題壮锻,jsp頁面有一個標簽 pageEncoding 是否是不支持中文的格式
3)獲取get的請求參數(shù) 亂碼,tomcat 配置問題 結(jié)局方案:在tomcat的conf目錄下找到server.xml配置 URIEncoding="gb2312"
4)post提交表單亂碼 post請求默認格式為:ISO-8859-1的編碼格式
-
數(shù)據(jù)庫訪問時的亂碼涮阔?
講亂碼要分為三層猜绣,數(shù)據(jù)庫層的途事,tomcat層,web表示層
1尸变、數(shù)據(jù)庫層的减俏,在數(shù)據(jù)存儲進去的時候就是亂碼,這種現(xiàn)象的原因是奏夫,字段編碼與存儲的數(shù)據(jù)不一致历筝,通常情況下只需要需改字段的編碼,若還不行的話麻削,就修改數(shù)據(jù)庫的編碼和表的編碼春弥。
2、tomcat層 同上 獲取get的請求參數(shù) 亂碼扫责,tomcat 配置問題 結(jié)局方案:在tomcat的conf目錄下找到server.xml配置 URIEncoding="gb2312"
3逃呼、web顯示層面,可以設置字符串過濾器苏揣。
-
對MVC的理解腿准,結(jié)合Struts2
MVC 模式的結(jié)構(gòu)
MVC 模式包括三個部分: 模型( Model) 、視圖( View) 和控制器( Controller) , 分別對應于內(nèi)部數(shù)據(jù)街望、數(shù)據(jù)表示和輸入輸出控制部分弟跑。M是分析員和設計師所面對的部 分, 是對問題的描述;V指 Application Model, 用來記錄存在 的視圖, 獲取視 圖信息和向視圖發(fā)送消息。3.1 模型( Mode l)
模型是與問題相關(guān)數(shù)據(jù)的邏輯抽象, 代表對象的內(nèi)在屬性, 是整個模型的核心哎甲。它采用面向?qū)ο蟮姆椒? 將問 題領(lǐng) 域中的對象抽象為應用程序?qū)ο? 在這些抽象的對象中封裝了對象的屬性和這些對象所隱含的邏輯炭玫。模型的作用如下: ①抽象應用程序的功能, 封裝程序數(shù)據(jù)的結(jié)構(gòu)及其操作; ②向 Controller 提供對程序功能 的訪 問; ③接 受 View 的 數(shù)據(jù) 查詢 請 求; ④當數(shù)據(jù)有變化時當數(shù)據(jù)有變化時, 通知對此數(shù)據(jù)感興趣的 View貌虾。3.2 視圖( Vie w)
它是用戶視圖模塊 。 它為用戶提供了輸入手段 ,并觸發(fā) Controller 運行 ,然后通過 Model 訪問企業(yè)數(shù)據(jù) ,并用某種方式來顯示這些數(shù)據(jù) 衔憨。 視圖是模型的外在表現(xiàn), 一個模型可以對應一個或者多個視圖, 如圖 形用戶 界面視 圖袄膏、命 令行視 圖、API 視圖; 或 按使 用者分類: 新用戶視圖码党、熟練用戶視圖等 .
3.3 Controller
它是流程控制模塊 悍及。 它管理著用戶與 View的交互 ,能從 View 中取得數(shù)據(jù)并傳給 Model 去執(zhí)行業(yè)務邏輯 ,然后它根據(jù) Model 的執(zhí)行結(jié)果 ,選擇一個合適的 View 把結(jié)果展現(xiàn)給用戶 。
MVC的優(yōu)點
4.1、可以為一個模型在運行時同時建立和使用多個視圖缺猛。變化-傳播機制可以確保所有相關(guān)的視圖及時得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步耻姥。
4.2琐簇、視圖與控制器的可接插性,允許更換視圖和控制器對象似忧,而且可以根據(jù)需求動態(tài)的打開或關(guān)閉丈秩、甚至在運行期間進行對象替換。
4.3饺著、模型的可移植性肠牲。因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作塑顺。需要做的只是在新平臺上對視圖和控制器進行新的修改俏险。
4.4、潛在的框架結(jié)構(gòu)裤唠∮。可以基于此模型建立應用程序框架,不僅僅是用在設計界面的設計中航瞭。
4.MVC的缺點
? 4.1刊侯、復雜:增加了系統(tǒng)結(jié)構(gòu)和實現(xiàn)的復雜性锉走。對于簡單的界面,嚴格遵循MVC亭饵,使模型梁厉、視圖與控制器分離,會增加結(jié)構(gòu)的復雜性八秃,并可能產(chǎn)生過多的更新操作,降低運行效率山橄。
? 4.2、低獨立性:視圖與控制器間的過于緊密的連接航棱。視圖與控制器是相互分離萌衬,但確實聯(lián)系緊密的部件,視圖沒有控制器的存在朴艰,其應用是很有限的祠墅,反之亦然歌径,這樣就妨礙了他們的獨立重用。
? 4.3狗准、低效率:視圖對模型數(shù)據(jù)的低效率訪問茵肃。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)捞附。對未變化數(shù)據(jù)的不必要的頻繁訪問胚膊,也將損害操作性能。
? 4.4、高代價:目前喻犁,一般高級的界面工具或構(gòu)造器不支持模式。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的还栓,從而造成MVC使用的困難传轰。
5.Struts2中的MVC
1.FilterDispatcher--------控制層
用戶請求首先到達Struts2中的FilterDispatcher。FilterDispatcher負責根據(jù)用戶提交的URL和struts.xml中的配置辽聊,來選擇合適的動作(Action)期贫,讓這個Action來處理用戶的請求。
? FilterDispatcher其實是一個過濾器Filter(Servlet規(guī)范中的一種Web組件)玛臂,它是Struts2核心包里已經(jīng)做好的類封孙,不需要程序員去開發(fā)迹冤,是需要在項目的web.xml文件中配置一下即可虎忌。FilterDispatcher體現(xiàn)了J2EE核心設計模式中的前端控制器模式。
2.Action--------模型層
Action負責把用戶請求中的參數(shù)組裝成合適的參數(shù)模型锋勺,并調(diào)用相應的業(yè)務邏輯進行真正的功能處理,然后產(chǎn)生下一個視圖展示所需要的數(shù)據(jù)庶橱。最后得到下一個視圖所需要的信息贪惹,并傳遞給控制層中的攔截器鏈奏瞬。
3.Result--------視圖層
? 視圖層主要用來與用戶交互,它將從控制層得到的數(shù)據(jù)通過適合的展示方式展現(xiàn)給用戶并淋,讓用戶與之交互更加簡潔簡單珍昨。在Struts2中句喷,除了大眾熟知的JSP方式唾琼,還有freemarker澎剥、velocity等各種優(yōu)秀的展示方式。
二祭饭、什么是典型的軟件三層結(jié)構(gòu)蜻懦?軟件設計為什么要分層?軟件分層有什么好處悠咱?
軟件三層架構(gòu):
常意義上的三層架構(gòu)就是將整個業(yè)務應用劃分為:界面層(User Interface layer)析既、業(yè)務邏輯層(Business Logic Layer)谆奥、數(shù)據(jù)訪問層(Data access layer)。
軟件分層的好處:
1宰译、開發(fā)人員可以只關(guān)注整個結(jié)構(gòu)中的其中某一層魄懂;
2、可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn)缀拭;
3填帽、可以降低層與層之間的依賴;
4褐荷、有利于標準化嘹悼;
5葵第、利于各層邏輯的復用合溺。
6棠赛、結(jié)構(gòu)更加的明確
7膛腐、在后期維護的時候,極大地降低了維護成本和維護時間