學習Java前途怎麼樣 JavaWeb面試寶典有哪些

  Java是老牌編程語言,持續佔據最受歡迎編程語言排行榜前列。為了能夠實現快速就業、同時也是出於對高薪的追求,很多人選擇轉行學習Java編程開發。學習Java前途怎麼樣?JavaWeb面試寶典有哪些?下面一起來看看吧。

學習Java前途怎麼樣 JavaWeb面試寶典有哪些

  1.session和cookie的區別?

  session是存儲在服務器端,cookie是存儲在客戶端的,所以安全來講session的安全性要比cookie高,然後我們獲取session裡的信息是通過存放在會話cookie裡的sessionid獲取的。又由於session是存放在服務器的內存中,所以session裡的東西不斷增加會造成服務器的負擔,所以會把很重要的信息存儲在session中,而把一些次要東西存儲在客戶端的cookie裡,然後cookie確切的說分為兩大類分為會話cookie和持久化cookie,會話cookie確切的說是,存放在客戶端瀏覽器的內存中,所以說他的生命週期和瀏覽器是一致的,瀏覽器關了會話cookie也就消失了,然而持久化cookie是存放在客戶端硬盤中,而持久化cookie的生命週期就是我們在設置cookie時候設置的那個保存時間,然後我們考慮一問題當瀏覽器關閉時session會不會丟失,從上面敘述分析session的信息是通過會話cookie的sessionid獲取的,當瀏覽器關閉的時候會話cookie消失所以我們的sessionid也就消失了,但是session的信息還存在服務器端,這時我們只是查不到所謂的session但它並不是不存在。那麼,session在什麼情況下丟失,就是在服務器關閉的時候,或者是session過期(默認時間是30分鐘),再或者調用了invalidate()的或者是我們想要session中的某一條數據消失調用session.removeAttribute()方法,然後session在什麼時候被創建呢,確切的說是通過調用getsession()來創建,這就是session與cookie的區別.

  2、session和cookie聯繫?

  session是通過cookie來工作的session和cookie之間是通過$_COOKIE['PHPSESSID']來聯繫的,通過$_COOKIE['PHPSESSID']可以知道session的id,從而獲取到其他的信息。

  在購物網站中通常將用戶加入購物車的商品聯通session_id記錄到數據庫中,當用戶再次訪問是,通過sessionid就可以查找到用戶上次加入購物車的商品。因為sessionid是唯一的,記錄到數據庫中就可以根據這個查找了。

  3.servlet的生命週期?

  Servlet生命週期可以分成四個階段:加載和實例化、初始化、服務、銷燬。

  當客戶第一次請求時,首先判斷是否存在Servlet對象,若不存在,則由Web容器創建對象,而後調用init()方法對其初始化,此初始化方法在整個Servlet生命週期中只調用一次。

  完成Servlet對象的創建和實例化之後,Web容器會調用Servlet對象的service()方法來處理請求。

  當Web容器關閉或者Servlet對象要從容器中被刪除時,會自動調用destory()方法。

  4.什麼是webservice?

  從表面上看,WebService就是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是說能用編程的方法通過Web來調用這個應用程序。我們把調用這個WebService的應用程序叫做客戶端,而把提供這個WebService的應用程序叫做服務端。從深層次看,WebService是建立可互操作的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操作性,你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。

  5.jsp和servlet的區別、共同點、各自應用的範圍?

  JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層。

  6.轉發(forward)和重定向(redirect)的區別?

  1、從地址欄顯示來說

  forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器。瀏覽器根本不知道服務器發送的內容從哪裡來的,所以它的地址欄還是原來的地址。

  redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址。所以地址欄顯示的是新的URL。

  2、從數據共享來說

  forward:轉發頁面和轉發到的頁面可以共享request裡面的數據。

  redirect:不能共享數據。

  3、從運用地方來說

  forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊。

  redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等

  4、從效率來說

  forward:高。

  redirect:低。

  7.request.getAttribute()和request.getParameter()有何區別?

  1、request.getParameter()取得是通過容器的實現來取得通過類似post,get等方式傳入的數據。

  2、request.setAttribute()和getAttribute()只是在web容器內部流轉,僅僅是請求處理階段。

  3、getAttribute是返回對象,getParameter返回字符串

  4、getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()設置之後,才能夠通過getAttribute()來獲得值,它們傳遞的是Object類型的數據。而且必須在同一個request對象中使用才有效。,而getParameter()是接收表單的get或者post提交過來的參數

  8.jsp靜態包含和動態包含的區別?

  1、兩者格式不同,靜態包含:,而動態包含:。

  2、包含時間不同,靜態包含是先將幾個文件合併,然後再被編譯,缺點就是如果含有相同的標籤,會出錯。動態包含是頁面被請求時編譯,將結果放在一個頁面。

  3、生成的文件不同,靜態包含會生成一個包含頁面名字的servlet和class文件;而動態包含會各自生成對應的servlet和class文件

  4、.傳遞參數不同,動態包含能夠傳遞參數,而靜態包含不能

  9.MVC的各個部分都有哪些技術來實現?如何實現?

  MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示

  邏輯分成不同的組件實現。這些組件可以進行交互和重用。

  10.jsp有哪些內置對象?作用分別是什麼?

  JSP有9個內置對象:

  request:封裝客戶端的請求,其中包含來自GET或POST請求的參數;

  response:封裝服務器對客戶端的響應;

  pageContext:通過該對象可以獲取其他對象;

  session:封裝用戶會話的對象;

  application:封裝服務器運行環境的對象;

  out:輸出服務器響應的輸出流對象;

  config:Web應用的配置對象;

  page:JSP頁面本身(相當於Java程序中的this);

  exception:封裝頁面拋出異常的對象。

  11.Http請求的get和post方法的區別。

  1、Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求

  2、Get是獲取信息,而不是修改信息,類似數據庫查詢功能一樣,數據不會被修改

  3、Get請求的參數會跟在url後進行傳遞,請求的數據會附在URL之後,以?分割URL和傳輸數據,參數之間以&相連,%XX中的XX為該符號以16進製表示的ASCII,如果數據是英文字母/數字,原樣發送,如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。

  4、Get傳輸的數據有大小限制,因為GET是通過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關係了,不同的瀏覽器對URL的長度的限制是不同的。

  5、GET請求的數據會被瀏覽器緩存起來,用戶名和密碼將明文出現在URL上,其他人可以查到歷史瀏覽記錄,數據不太安全。

  在服務器端,用Request.QueryString來獲取Get方式提交來的數據

  Post請求則作為http消息的實際內容發送給web服務器,數據放置在HTML Header內提交,Post沒有限制提交的數據。Post比Get安全,當數據是中文或者不敏感的數據,則用get,因為使用get,參數會顯示在地址,對於敏感數據和不是中文字符的數據,則用post。

  6、POST表示可能修改變服務器上的資源的請求,在服務器端,用Post方式提交的數據只能用Request.Form來獲取。

  12.tomcat容器是如何創建servlet類實例?用到了什麼原理?

  當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然後對xml文件進行解析,並讀取servlet註冊信息。然後,將每個應用中註冊的servlet類都進行加載,並通過反射的方式實例化。(有時候也是在第一次請求時實例化)

  在servlet註冊時加上1如果為正數,則在一開始就實例化,如果不寫或為負數,則第一次請求實例化。

  13.JDBC訪問數據庫的基本步驟是什麼?

  第一步:Class.forName()加載數據庫連接驅動;

  第二步:DriverManager.getConnection()獲取數據連接對象;

  第三步:根據SQL獲取sql會話對象,有2種方式 Statement、PreparedStatement ;

  第四步:執行SQL,執行SQL前如果有參數值就設置參數值setXXX();

  第五步:處理結果集;

  第六步:關閉結果集、關閉會話、關閉連接。

  14.為什麼要使用PreparedStatement?

  PreparedStatement接口繼承Statement,PreparedStatement實例包含已編譯的SQL語句,所以其執行速度要快於Statement對象。

  作為Statement的子類, PreparedStatement 繼承了Statement的所有功能。三種方法execute、 executeQuery和executeUpdate已被更改以使之不再需要參數。

  在 JDBC 應用中,多數情況下使用PreparedStatement,原因如下:

  代碼的可讀性和可維護性。Statement需要不斷地拼接,而PreparedStatement不會。

  PreparedStatement盡最大可能提高性能。DB有緩存機制,相同的預編譯語句再次被調用不會再次需要編譯。

  最重要的一點是極大地提高了安全性。Statement容易被SQL注入,而PreparedStatement傳入的內容不會和sql 語句發生任何匹配關係。

  15.數據庫連接池的原理。為什麼要使用連接池?

  1、數據庫連接是一件費時的操作,連接池可以使多個操作共享一個連接。

  2、數據庫連接池的基本思想就是為數據庫連接建立一個“緩衝池”。預先在緩衝池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩衝池”中取出一個,使用完畢之後再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更為重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量、使用情況,為系統開發,測試及性能調整提供依據。

  3、使用連接池是為了提高對數據庫連接資源的管理

  16.execute,executeQuery,executeUpdate的區別是什麼?

  1、Statement的execute(String query)方法用來執行任意的SQL查詢,如果查詢的結果是一個ResultSet,這個方法就返回true。如果結果不是ResultSet,比如insert或者update查詢,它就會返回false。我們可以通過它的getResultSet方法來獲取ResultSet,或者通過getUpdateCount()方法來獲取更新的記錄條數。

  2、Statement的executeQuery(String query)接口用來執行select查詢,並且返回ResultSet。即使查詢不到記錄返回的ResultSet也不會為null。我們通常使用executeQuery來執行查詢語句,這樣的話如果傳進來的是insert或者update語句的話,它會拋出錯誤信息為 “executeQuery method can not be used for update”的java.util.SQLException。 ,

  3、Statement的executeUpdate(String query)方法用來執行insert或者update/delete(DML)語句,或者 什麼也不返回,對於DDL語句,返回值是int類型,如果是DML語句的話,它就是更新的條數,如果是DDL的話,就返回0。

  只有當你不確定是什麼語句的時候才應該使用execute()方法,否則應該使用executeQuery或者executeUpdate方法。



分享到:


相關文章: