JavaWeb試題


Javaweb

 面試題;理解才是最重要的,而不是原封不動的背下來

一.請簡述doget和dopost它們的區別

 1) get是從服務器上獲取數據,post是向服務器傳送數據。

 2) 在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。

 3) 對於get方式,服務器端用request.getQueryString()可以獲取GET請求參數的變量值,

    對於post方式,服務器端用request.getParameter獲取提交的數據。

 4) GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

 5) 安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。 所以,如果這些數據是中文數據而且是非敏感數據,那么使用 get;

     如果用戶輸入的數據不是中文字符而且包含敏感數據,那么還是使用 post為好。

2、簡述servlet的生命周期?

參考答案:

所謂生命周期,指的是servlet容器如何創建servlet實例、分配其資源、調用其方法、並銷毀其實例的整個過程。

階段一: 實例化(就是創建servlet對象,調用構造器)

在如下兩種情況下會進行對象實例化。

第一種情況:

    當請求到達容器時,容器查找該servlet對象是否存在,如果不存在,才會創建實例。

第二種情況:

   容器在啟動時,或者新部署了某個應用時,會檢查web.xml當中,

   servlet是否有 load-on-starup配置。如果有,則會創建該servlet實例。

   load-on-starup參數值越小,優先級越高(最小值為0,優先級最高)。

階段二: 初始化

   為servlet分配資源,調用init(ServletConfig config);方法

   config對象可以用來訪問servlet的初始化參數。

   初始化參數是使用init-param配置的參數。

   init可以override。

階段三: 就緒/調用

   有請求到達容器,容器調用servlet對象的service()方法。

  HttpServlet的service()方法,會依據請求方式來調用doGet()或者doPost()方法。但是,這兩個do方法默認情況下,會拋出異常,需要子類去override。

階段四: 銷毀

   容器依據自身的算法,將不再需要的servlet對象刪除掉。

   在刪除之前,會調用servlet對象的destroy()方法。

   destroy()方法用於釋放資源。

在servlet的整個生命周期當中,init,destroy只會執行一次,而service方法會執行多次。

servlet> <servlet-name>test</servelt-name> <servlet-class>TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping>

復制代碼

4. 有一個用戶名 test, 密碼 12345, 請編寫一段創建COOKIE的JSP代碼, 然后再編寫一段讀取COOKIE的JSP代碼, 在頁面上將COOKIE的信息顯示出來。

String str = “username= test&password=12345”;

Cookie cookie=new Cookie(“mycookie”, str);

response.addCookie(cookie);

 

Cookie cookies[]=request.getCookies();

For(int i=0;i< cookies.length;i++){

Out.print(cookies.getName+”=”+ cookies.getValue());

5. 請簡述Cookie, Session 和Application它們的區別。

  1) Cookie會在客戶端硬盤上創建Cookie文件
  2) Session大部分情況下會在服務器端硬盤上寫入Cookie文件
  3) Cookie安全性最低
  4) Application 表示Servlet上下文環境,在整個WEB應用中只有一個Application對象,用於存儲些全局性的數據

 

多選框: <INPUT name=”isBuy” type=”checkbox” id=”isBuy” value=”paozhu”>

請編寫JavaScript代碼,實現該表單多選框的 “全選”“全不選” 功能。

——————————全選——————————–

//拿到form表單

Var f = document.getElementByName(“buyForm”);

Var cb = f.isBuy;

For(i=0;i<cb.length;i++){

If(cb[i]. checked ==false) cb[i]. checked = true;

}

7. 有這樣一個form表單,如下圖:
Form表單:<form name=”userfrm” method=”post” action=”register_success.htm” >
登錄名:<input name=”username” type=”text”>
密碼:<input name=”pass” type=”password”>
重復密碼:<input name=”rpass” type=”password”>
請編寫javascript程序實現該表單的客戶端驗證。
要求
1) 密碼不能為空並且最少為6位,還要求兩次輸入的密碼要一致
2) 登錄名不能為空,且只能包括字母、數字和下划線字符

復制代碼
Var f = document.getElementsByName(“userfrm”);
Var isValiUserName = false, isValiPassword = false; If(f. username!=”” && f. username!=”undefined”){ //正則表達式驗證只能包括字母、數字和下划線字符 var re = new RegExp(“[a-zA-Z0-9]{5,20}”,”ig”); var str = “f.username.value”; isValiUserName = re.test(str); //得到用戶名true/false的校驗結果 } //校驗密碼 If(f. password!=”” && f.password.length>=6 && f.password== f.rpassword){ isValiPassword = true; } If(isValiUserName==true && isValiPassword==true) return true; Return false;
復制代碼

8. 請簡述一下ajax的原理及實現步驟。

原理: HTTP協議的異步通信
get 請求
1) 創建一個XMLHttpRequest對象
2) 調用該對象的open方法
3) 如果是get請求,設置回調函數onreadystatechange = callback
4) Send

如果是post 請求

5) 創建一個XMLHttpRequest對象
6) 調用該對象的open方法
7) 調用setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
8) 設置回調函數onreadystatechange = callback
9) Send

script src=”jquery.js” type=”text/javascript”></script> <style type=”text/css”> .odd { } .even { background-color:red; } </style> <ul> <li>jquery 學習1</li> <li>jquery 學習2</li> <li>jquery 學習3</li> <li>jquery 學習4</li> <li>jquery 學習5</li> <li>jquery 學習6</li> </ul>

復制代碼
<script language=”javascript”> $(document).ready(function() { $(‘li:even’).addClass(‘even’); $(‘li:odd’).addClass(‘odd’); }); </script

10.SESSION的工作原理

 session啟動的時候被分配到一個專有的session id .服務器為其分配一塊內存 .瀏覽器將其寫入Cookie.

  服務器中的一進程會監視該session id,當它超時或者關閉時候釋放內存.當瀏覽器連入服務器時,

會在Cookie中尋找該session id.並判斷該id是否有效.有效就去讀取其中的值.無效重新建立一個session id

 

 

1、什么是盒子模型?

在網頁中,一個元素占有空間的大小由幾個部分構成,其中包括元素的內容(content),元素的內邊距(padding),元素的邊框(border),元素的外邊距(margin)四個部分。這四個部分占有的空間中,有的部分可以顯示相應的內容,而有的部分只用來分隔相鄰的區域或區域。4個部分一起構成了css中元素的盒模型。

2、行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

行內元素:a、b、span、img、input、strong、select、label、em、button、textarea
塊級元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
空元素:即系沒有內容的HTML元素,例如:br、meta、hr、link、input、img

3、CSS實現垂直水平居中

一道經典的問題,實現方法有很多種,以下是其中一種實現:
HTML結構:

<div class='wrapper'>

  <div class='content'></div>

</div>

CSS部分:

.wrapper {

  position: relative;

}

.content {

  background: #ff6700;

  width: 200px;

  height: 200px;

  position: absolute;

  top: 50%;

  left: 50%;

  margin-top: -100px;

  margin-left: -100px;

}

4、簡述一下src與href的區別

href 是指向網絡資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的鏈接,用於超鏈接。

src是指向外部資源的位置,指向的內容將會嵌入到文檔中當前標簽所在位置;在請求src資源時會將其指向的資源下載並應用到文檔內,例如js腳本,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標簽內。這也是為什么將js腳本放在底部而不是頭部。

5、什么是CSS Hack?

一般來說是針對不同的瀏覽器寫不同的CSS,就是 CSS Hack。在這里就不多說了,不懂的去百度一下就知道詳細的解釋了。

6、簡述同步和異步的區別

同步是阻塞模式,異步是非阻塞模式。
同步就是指一個進程在執行某個請求的時候,若該請求需要一段時間才能返回信息,那么這個進程將會一直等待下去,直到收到返回信息才繼續執行下去;
異步是指進程不需要一直等下去,而是繼續執行下面的操作,不管其他進程的狀態。當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率。

7、px和em的區別

px和em都是長度單位,區別是,px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,並且em會繼承父級元素的字體大小。
瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em

8、什么叫優雅降級和漸進增強?

漸進增強 progressive enhancement:
針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。

優雅降級 graceful degradation:
一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。

區別:

a. 優雅降級是從復雜的現狀開始,並試圖減少用戶體驗的供給

b. 漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要

c. 降級(功能衰減)意味着往回看;而漸進增強則意味着朝前看,同時保證其根基處於安全地帶

9、瀏覽器的內核分別是什么?

IE: trident內核
Firefox:gecko內核
Safari:webkit內核
Opera:以前是presto內核,Opera現已改用Google Chrome的Blink內核
Chrome:Blink(基於webkit,Google與Opera Software共同開發)

JavaScript部分

1、怎樣添加、移除、移動、復制、創建和查找節點?

1)創建新節點
createDocumentFragment() //創建一個DOM片段
createElement() //創建一個具體的元素
createTextNode() //創建一個文本節點

2)添加、移除、替換、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入

3)查找
getElementsByTagName() //通過標簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性

2、如何消除一個數組里面重復的元素?

var arr1 = [1,2,2,2,3,3,3,4,5,6];

var arr2 = [];

var len = arr1.length;

for (var i = 0; i < len; i++) {

  if (arr2.indexOf(arr1[i]) < 0) {

    arr2.push(arr1[i]);

  }

}

alert(arr2);  //1,2,3,4,5,6

其他

1、一次完整的HTTP事務是怎樣的一個過程?

基本流程:

a. 域名解析

b. 發起TCP的3次握手

c. 建立TCP連接后發起http請求

d. 服務器端響應http請求,瀏覽器得到html代碼

e. 瀏覽器解析html代碼,並請求html代碼中的資源

f. 瀏覽器對頁面進行渲染呈現給用戶

2、對前端工程師這個職位你是怎么樣理解的?

a. 前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好

b. 參與項目,快速高質量完成實現效果圖,精確到1px;

c. 與團隊成員,UI設計,產品經理的溝通;

d. 做好的頁面結構,頁面重構和用戶體驗;

e. 處理hack,兼容、寫出優美的代碼格式;

f. 針對服務器的優化、擁抱最新前端技術。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM