Java web--web編程原理

● 說說你對get和post請求,而且說說它們之間的區別?

考察點:HTTP請求前端

參考回答:

①get請求用來從服務器上得到資源,而post是用來向服務器提交數據;
②get將表單中數據按照name=value的形式,添加到action 所指向的URL 後面,而且二者使用"?"鏈接,而各個變量之間使用"&"鏈接;post是將表單中的數據放在HTTP協議的請求頭或消息體中,傳遞到action所指向URL;
③get傳輸的數據要受到URL長度限制(1024字節);而post能夠傳輸大量的數據,上傳文件一般要使用post方式;
④使用get時參數會顯示在地址欄上,若是這些數據不是敏感數據,那麼可使用get;對於敏感數據仍是應用使用post;
⑤get使用MIME類型application/x-www-form-urlencoded的URL編碼(也叫百分號編碼)文本的格式傳遞參數,保證被傳送的參數由遵循規範的文本組成,例如一個空格的編碼是"%20"。java

● 請談談,轉發和重定向 之間的區別?

考察點:重定向程序員

參考回答:

forward是容器中控制權的轉向,是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL 的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。redirect就是服務器端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,所以從瀏覽器的地址欄中能夠看到跳轉後的連接地址,很明顯redirect沒法訪問到服務器保護起來資源,可是能夠從一個網站redirect到其餘網站。forward更加高效,因此在知足須要時儘可能使用forward(經過調用RequestDispatcher對象的forward()方法,該對象能夠經過ServletRequest對象的getRequestDispatcher()方法得到),而且這樣也有助於隱藏實際的連接;在有些狀況下,好比須要訪問一個其它服務器上的資源,則必須使用重定向(經過HttpServletResponse對象調用其sendRedirect()方法實現)。web

● 請談一談,get和post的區別?

考察點:HTTP請求數據庫

參考回答:

(1)在客戶端, Get 方式在經過 URL 提交數據,數據 在URL中能夠看到;POST方式,數據放置在HTML HEADER內提交。編程

(2)GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。瀏覽器

(3)安全性問題。正如在( 1 )中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。因此,若是這些數據是中文數據並且是非敏感數據,那麼使用 get ;若是用戶輸入的數據不是中文字符並且包含敏感數據,那麼仍是使用 post 爲好。緩存

安全的和冪等的。所謂安全的意味着該操做用於獲取信息而非修改信息。冪等的意味着對同一 URL 的多個請求應該返回一樣的結果。完整的定義並不像看起來那樣嚴格。換句話說, GET 請求通常不該產生反作用。從根本上講,其目標是當用戶打開一個連接時,她能夠確信從自身的角度來看沒有改變資源。好比,新聞站點的頭版不斷更新。雖然第二次請求會返回不一樣的一批新聞,該操做仍然被認爲是安全的和冪等的,由於它老是返回當前的新聞。反之亦然。 POST 請求就不那麼輕鬆了。 POST 表示可能改變服務器上的資源的請求。仍然以新聞站點爲例,讀者對文章的註解應該經過 POST 請求實現,由於在註解提交以後站點已經不一樣了(比方說文章下面出現一條註解)。安全

● 請對如下在J2EE中經常使用的名詞進行解釋(或簡單描述)

考察點:J2EE服務器

參考回答:

web 容器:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接和容器中的環境變量接接口互,沒必要關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵照J2EE規範中的WEBAPPLICATION 標準。咱們把遵照以上標準的WEB服務器就叫作J2EE中的WEB容器。
Web container:實現J2EE體系結構中Web組件協議的容器。這個協議規定了一個Web組件運行時的環境,包括安全,一致性,生命週期管理,事務,配置和其它的服務。一個提供和JSP和J2EE平臺APIs界面相同服務的容器。一個Web container 由Web服務器或者J2EE服務器提供。
EJB容器:Enterprise java bean 容器。更具備行業領域特點。他提供給運行在其中的組件EJB各類管理功能。只要知足J2EE規範的EJB放入該容器,立刻就會被容器進行高效率的管理。而且能夠經過現成的接口來得到系統級別的服務。例如郵件服務、事務管理。一個實現了J2EE體系結構中EJB組件規範的容器。這個規範指定了一個Enterprise bean的運行時環境,包括安全,一致性,生命週期,事務,配置,和其餘的服務。
JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下本身的索引,從而知足快速查找和定位分佈式應用程序的功能。
JMS:(Java Message Service)JAVA消息服務。主要實現各個應用程序之間的通信。包括點對點和廣播。
JTA:(Java Transaction API)JAVA事務服務。提供各類分佈式事務服務。應用程序只需調用其提供的接口便可。
JAF:(Java Action FrameWork)JAVA安全認證框架。提供一些安全控制方面的框架。讓開發者經過各類部署和自定義實現本身的個性安全控制策略。
RMI/IIOP: (Remote Method Invocation /internet對象請求中介協議)他們主要用於經過遠程調用服務。例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,咱們能夠在本地計算機上實現對其直接調用。固然這是要經過必定的規範才能在異構的系統之間進行通訊。RMI是JAVA特有的。RMI-IIOP出現之前,只有RMI和 CORBA兩種選擇來進行分佈式程序設計。RMI-IIOP綜合了RMI和CORBA的優勢,克服了他們的缺點,使得程序員能更方便的編寫分佈式程序設計,實現分佈式計算。首先,RMI-IIOP綜合了RMI的簡單性和CORBA的多語言性(兼容性),其次RMI-IIOP克服了RMI只能用於Java 的缺點和CORBA的複雜性。

● 請談一談,網站在架構上應當考慮哪些問題?

考察點:Java架構

參考回答:

- 分層:分層是處理任何複雜系統最多見的手段之一,將系統橫向切分紅若干個層面,每一個層面只承擔單一的職責,而後經過下層爲上層提供的基礎設施和服務以及上層對下層的調用來造成一個完整的複雜的系統。計算機網絡的開放系統互聯參考模型(OSI/RM)和Internet的TCP/IP模型都是分層結構,大型網站的軟件系統也可使用分層的理念將其分爲持久層(提供數據存儲和訪問服務)、業務層(處理業務邏輯,系統中最核心的部分)和表示層(系統交互、視圖展現)。須要指出的是:(1)分層是邏輯上的劃分,在物理上能夠位於同一設備上也能夠在不一樣的設備上部署不一樣的功能模塊,這樣可使用更多的計算資源來應對用戶的併發訪問;(2)層與層之間應當有清晰的邊界,這樣分層纔有意義,才更利於軟件的開發和維護。
- 分割:分割是對軟件的縱向切分。咱們能夠將大型網站的不一樣功能和服務分割開,造成高內聚低耦合的功能模塊(單元)。在設計初期能夠作一個粗粒度的分割,將網站分割爲若干個功能模塊,後期還能夠進一步對每一個模塊進行細粒度的分割,這樣一方面有助於軟件的開發和維護,另外一方面有助於分佈式的部署,提供網站的併發處理能力和功能的擴展。
- 分佈式:除了上面提到的內容,網站的靜態資源(JavaScript、CSS、圖片等)也能夠採用獨立分佈式部署並採用獨立的域名,這樣能夠減輕應用服務器的負載壓力,也使得瀏覽器對資源的加載更快。數據的存取也應該是分佈式的,傳統的商業級關係型數據庫產品基本上都支持分佈式部署,而新生的NoSQL產品幾乎都是分佈式的。固然,網站後臺的業務處理也要使用分佈式技術,例如查詢索引的構建、數據分析等,這些業務計算規模龐大,可使用Hadoop以及MapReduce分佈式計算框架來處理。
- 集羣:集羣使得有更多的服務器提供相同的服務,能夠更好的提供對併發的支持。
- 緩存:所謂緩存就是用空間換取時間的技術,將數據儘量放在距離計算最近的位置。使用緩存是網站優化的第必定律。咱們一般說的CDN、反向代理、熱點數據都是對緩存技術的使用。
- 異步:異步是實現軟件實體之間解耦合的又一重要手段。異步架構是典型的生產者消費者模式,兩者之間沒有直接的調用關係,只要保持數據結構不變,彼此功能實現能夠隨意變化而不互相影響,這對網站的擴展很是有利。使用異步處理還能夠提升系統可用性,加快網站的響應速度(用Ajax加載數據就是一種異步技術),同時還能夠起到削峯做用(應對瞬時高併發)。"能推遲處理的都要推遲處理"是網站優化的第二定律,而異步是踐行網站優化第二定律的重要手段。
- 冗餘:各類服務器都要提供相應的冗餘服務器以便在某臺或某些服務器宕機時還能保證網站能夠正常工做,同時也提供了災難恢復的可能性。冗餘是網站高可用性的重要保證。

● 請問,hibernate的 save() 和persist() 方法分別是作什麼的?有什麼區別?

考察點:session

參考回答:

Hibernate的對象有三種狀態:瞬時態(transient)、持久態(persistent)和遊離態(detached),如第135題中的圖所示。瞬時態的實例能夠經過調用save()、persist()或者saveOrUpdate()方法變成持久態;遊離態的實例能夠經過調用 update()、saveOrUpdate()、lock()或者replicate()變成持久態。save()和persist()將會引起SQL的INSERT語句,而update()或merge()會引起UPDATE語句。save()和update()的區別在於一個是將瞬時態對象變成持久態,一個是將遊離態對象變爲持久態。merge()方法能夠完成save()和update()方法的功能,它的意圖是將新的狀態合併到已有的持久化對象上或建立新的持久化對象。對於persist()方法,按照官方文檔的說明:① persist()方法把一個瞬時態的實例持久化,可是並不保證標識符被馬上填入到持久化實例中,標識符的填入可能被推遲到flush的時間;② persist()方法保證當它在一個事務外部被調用的時候並不觸發一個INSERT語句,當須要封裝一個長會話流程的時候,persist()方法是頗有必要的;③ save()方法不保證第②條,它要返回標識符,因此它會當即執行INSERT語句,無論是在事務內部仍是外部。至於lock()方法和update()方法的區別,update()方法是把一個已經更改過的脫管狀態的對象變成持久狀態;lock()方法是把一個沒有更改過的脫管狀態的對象變成持久狀態。

● 請你解釋一下,什麼是Web Service?

考察點:web service

參考回答:

從表面上看,Web Service就是一個應用程序,它向外界暴露出一個可以經過Web進行調用的API。這就是說,你可以用編程的方法透明的調用這個應用程序,不須要了解它的任何細節,跟你使用的編程語言也沒有關係。例如能夠建立一個提供天氣預報的Web Service,那麼不管你用哪一種編程語言開發的應用均可以經過調用它的API並傳入城市信息來得到該城市的天氣預報。之因此稱之爲Web Service,是由於它基於HTTP協議傳輸數據,這使得運行在不一樣機器上的不一樣應用無須藉助附加的、專門的第三方軟件或硬件,就可相互交換數據或集成。

SOA(Service-Oriented Architecture,面向服務的架構),SOA是一種思想,它將應用程序的不一樣功能單元經過中立的契約聯繫起來,獨立於硬件平臺、操做系統和編程語言,使得各類形式的功能單元可以更好的集成。顯然,Web Service是SOA的一種較好的解決方案,它更多的是一種標準,而不是一種具體的技術。

● 請你說明一下,如何設置請求的編碼以及響應內容的類型?

考察點:請求類型

參考回答:

經過請求對象(ServletRequest)的setCharacterEncoding(String)方法能夠設置請求的編碼,其實要完全解決亂碼問題就應該讓頁面、服務器、請求和響應、Java程序都使用統一的編碼,最好的選擇固然是UTF-8;經過響應對象(ServletResponse)的setContentType(String)方法能夠設置響應內容的類型,固然也能夠經過HttpServletResponsed對象的setHeader(String, String)方法來設置。

● 請說明 BS與CS 的聯繫,還有區別。

考察點:客戶端/服務器模式

參考回答:

C/S是Client/Server的縮寫。服務器一般採用高性能的PC、工做站或小型機,並採用大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端須要安裝專用的客戶端軟件。
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這種結構下,用戶界面徹底經過WWW瀏覽器實現,一部分事務邏輯在前端實現,可是主要事務邏輯在服務器端實現。瀏覽器經過Web Server 同數據庫進行數據交互。
C/S 與 B/S 區別:

硬件環境不一樣:
C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門服務器提供鏈接和數據交換服務.
B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身管理. 有比C/S更強的適應範圍, 通常只要有操做系統和瀏覽器就行
2.對安全要求不一樣
C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很強. 通常高度機密的信息系統採用C/S 結構適宜. 能夠經過B/S發佈部分可公開信息.
B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3.對程序架構不一樣
C/S 程序能夠更加註重流程, 能夠對權限多層次校驗, 對系統運行速度能夠較少考慮.
B/S 對安全以及訪問速度的多重的考慮, 創建在須要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使B/S更加成熟.
4.軟件重用不一樣
C/S 程序能夠不可避免的總體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好.
B/S 對的多重結構,要求構件相對獨立的功能. 可以相對較好的重用.就入買來的餐桌能夠再利用,而不是作在牆上的石頭桌子
5.系統維護不一樣
C/S 程序因爲總體性, 必須總體考察, 處理出現的問題以及系統升級. 升級難. 多是再作一個全新的系統
B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上本身下載安裝就能夠實現升級.
6.處理問題不一樣
C/S 程序能夠處理用戶面固定, 而且在相同區域, 安全要求高需求, 與操做系統相關. 應該都是相同的系統
B/S 創建在廣域網上, 面向不一樣的用戶羣, 分散地域, 這是C/S沒法做到的. 與操做系統平臺關係最小.
7.用戶接口不一樣
C/S 可能是創建的Window平臺上,表現方法有限,對程序員廣泛要求較高
B/S 創建在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 而且大部分難度減低,減低開發成本.
8.信息流不一樣
C/S 程序通常是典型的中央集權的機械式處理, 交互性相對低
B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。

● 請你說明,forward 和redirect的區別?

考察點:資源請求方式

參考回答:

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求,因此session,request參數均可以獲取。

● 請你說說,cookie 和 session 的區別?

考察點:web訪問

參考回答:

一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙

考慮到安全應當使用session。

三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE。

四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

相關文章
相關標籤/搜索