close
這是哇寶國際資訊的一份基本能力測試;很多東西雖然不能說完全沒有概念,不過要詳細回答不免還是要google一下,由此可知我的能力還遠遠不足。當作是自我測試與吸取新知吧,開始解題囉...

(X)HTML篇:

1、請寫出有序清單和無序清單的的 HTML Tag 並簡述其差異。

<ol>為有序清單標記;<ul>為無序清單標記。<li>則用來標示項目。<ol>可以追加type/start參數,分別代表排序類型/開始數字;<ul>則是可以追加type,決定標示項目呈現的方式。<li>可以追加type/value參數,決定標式呈現方式/呈現數字。

以下是呈現結果與HTML語法:

==========<呈現結果>==========
  1. 有序第一項
  2. 有序第二項
  3. 有序第三項
  • 無序第一項
  • 無序第二項
  • 無序第三項
==========<HTML語法>==========

<ol type="1">
    <li>有序第一項
    <li value="5">有序第二項
    <li>有序第三項
</ol>
<ul type="square">
    <li>無序第一項
    <li type="circle">無序第二項
    <li type="disc">無序第三項
</ul>

2、請簡述 HTML 空標籤的特性,並試著列出所有的空標籤。

HTML是一種標式語法,通常是成對出現,如:<b>這是粗體字</b>,有起始標籤<b>與結束標籤</b>。空標籤則是指不需要結束標籤的特別標籤。如:<br>斷行與<hr>格線。

3、請簡述 DOCTYPE 對瀏覽器的影響,並說明目前常用的 DOCTYPE 有哪些。

參考網頁:DOCTYPE使用方法。簡單說就是告訴瀏覽器該以怎樣的模式來解讀HTML;文末作者建議採用 XHTML (Transitional)的方式。老實說我以前不是很在意他...看來以後要多注意一點,符合標準。

4、如何在瀏覽器中顯示小於 (<) 或大於 (>) ?如果連結網址中有 & 符號時,應該在 HTML 原始碼中用什麼代替?

「>」:&lt;
「<」:&gt;
「&」:&amp;

5、請找出以下範例中不符合 XHTML 規範的地方:
<!DOCTYPE html PUBLIC "-/W3C//DTD XHTML 1.0 Transtitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<title>測試範例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="check.js"></script>
</head>
<body>
<form action="">
<table border="1">
<tr>
<td>
<label for="account">帳號</label>
</td>
<td>
<input type="text" name="account" id="account" />
</td>
</tr>
<tr>
<td>
<label for="passwd">密碼</label>
</td>
<td>
<input type="password" name="passwd" id="passwd" />
</td>
</tr>
<tr>
<td>
<label><input type="checkbox" name="keepLogin" value="1" />保持登入</label>
</td>
<td>
<input type="submit" value="登入" onclick="checkForm();" />
</td>
</tr>
</table>
  </form>
</body>
</html>

其實我有作弊...(自首)只能說有W3C真好。

6、同上題,如果在 IE 上瀏覽該頁面時發生亂碼,你會如何解決?假設伺服端送出的標頭及頁面編碼都是正確的。

如果伺服端送出的標頭與頁面編碼都是正確的,那就有可能是HTML撰寫時的原始碼沒有存成對應的編碼。例如現在網頁編輯幾乎都使用UTF8編碼,但如果在HTML撰寫時仍使用ANCI碼儲存,就會發生亂碼。所以在撰寫HTML時,最好是將文件存成與伺服端標頭相同的編碼型態。

7、何謂 HTML 的語意?如果要在頁面上用一個標籤來表示文章標題,你認為用 <h1></h1> 比較好還是 <p class="articleTitle"></p> 比較好?

HTML:HyperText Markup Language,超文件標示語言。有許多前輩們似乎都比較喜歡用CSS,畢竟比起HTML,CSS的規範比較嚴謹,可以表現的變化也比較多;最重要的是它能夠獨立於HTML。網頁設計起來也就能程式歸程式,設計歸設計囉。

JavaScript篇:

1、請找出這段 JavaScript 的錯誤,並寫出正確可執行的版本。

function checkForm() {
    if (document.forms[0].account.value == '') {
        alert('請輸入帳號');
        return false;
    }
    if (document.forms[0].passwd.value == '') {
        alert('請輸入密碼');
        return false;
    }
    return true;
}

不知道為什麼,this.form抓不到表單內容,所以改用document.forms[0]來處理;另外if條件判斷是採用比較的方式,所以「=」要改為「==」。

2、請找出 HTML 範例中的 JavaScript 邏輯錯誤。

HTML範例中,JS的表單判斷是寫在「登入」按鈕上,如此一來即使JS判斷為false,表單資料卻還是傳送出去了。所以應該刪除onclick="checkForm();",改寫HTML的<form>,利用onSubmit去判斷JS的表單驗證。:

<form action="" onsubmit="return checkForm();">

3、請試著改寫 check.js ,在帳號或密碼未填寫任何資料並出現警告時,同時將輸入焦點置於錯誤的欄位上。

function checkForm() {
    if (document.forms[0].account.value == '') {
        alert('請輸入帳號');
        document.forms[0].account.focus();      
        return false;
    }
    if (document.forms[0].passwd.value == '') {
        alert('請輸入密碼');
        document.forms[0].passwd.focus();   
        return false;
    }
    return true;
}

4、上面的例子中利用 JavaScript 驗證後的資料,是否還需要用 PHP 或其他伺服端技術驗證?為什麼?

最安全的方法,當然是客戶端與伺服端都作驗證。曾經在網路上看過一句話:「永遠不要相信使用者輸入的資料!」單作JS的表單驗證其實是不夠的,拿表單傳值的GET來說,直接載網址列輸入資料就可以避開JS的驗證了。JS的驗證是為了減輕伺服的負擔,同時減少錯誤反應的時間。如果每筆資料的輸入都單靠伺服端的驗證,伺服器的負擔與使用者等待的時間就會成為問題。

5、請試著不要使用 onxxxx 事件,改用 window.onload 來繫結表單驗證的功能。

能力不足。

6、請說明 window.onload 可能潛藏的問題,並說明有什麼可以解決的方式 (不可使用第三方套件)。

能力不足。

PHP篇:

1、請說明 PHP 字串採用單引號和雙引號的差別。

單引號內如果有變數$var,不會被解讀;雙引號內如果有變數$var,則可以被解讀。

<?php
    $var = 'World!';
    echo 'Hello'.$var;  //印出「HelloWorld!」
    echo "Hello $var";  //印出「Hello World!」
    echo 'Hello $var';  //印出「'Hello $var」
?>

2、請說明如何接收網址參數。例如 http://localhost/index.php?abc=123 中的 abc 。

此網址使用GET傳遞參數,所以使用$_GET['abc']就可以接收。

3、請說明如何接收上面 HTML 範例的表單內容。

一般<form>如果沒有指定傳遞參數的方式,預設為GET;所以帳號與密碼分別是以$_GET['account']與$_GET['passwd']接收。

4、請說明 magic_quotes_gpc 對 PHP 程式的影響。

這個設定主要是解決SQL injection的問題。當magic_quotes_gpc=On時,使用者輸入的資料中若包含敏感的字元,如「'」時,它會自動將提交的表單內容加上「\」。這是一種防範使用者輸入惡意代碼設定,如果完全不處理使用這輸入的資料,使用者就有可能利用SQL語法看到本來它不應該看到的資料,甚至刪除table內的資料。如果magic_quotes_gpc=Off,我自己在處理SQL injection問題時是使用mysql_real_escape_string()函數,去防範敏感的字元。

5、如何避免使用者直接輸入 HTML 或是 JavaScript ?假設客戶要求一定要讓使用者輸入 HTML ,你該如何處理?

PHP有htmlspecialchars()htmlentities()函數,能將「&」、「"」、「<」、「>」轉成HTML字串格式。如:

& =  &amp;
" = &quot;
< = &lt;
> = &gt;

經過函數的轉換,當使用者的輸入中有<IFRAME>、<SCRIPT>這些HTML標籤時,就能避免被瀏覽器當成網頁內容而執行。
然而如果客戶要求,當然就必須另寫函數去處理,擋掉可能會被用來當作惡意攻擊的HTML標籤;google剛好找到一篇國外的文章:PHP XSS (cross site scripting) filter function。非常實用,利用此函數就能防止XSS的發生。

6、請說明 Session 的基本運作方式以及相關注意事項,並利用 PHP 的 Session 功能來完成上面的登入功能。帳號及密碼列表如下:
帳號 密碼
abc 123!@#
def 456L:'

能力不足。

7、請說明 Cookie 的基本運作方式以及相關注意事項,並利用 PHP 的 Cookie 功能來完成上面的保持登入功能。

能力不足。

8、請簡單設計一個 PHP 類別,讓以下程式能夠運作: (提示:要使用 SPL)

能力不足。

9、請修改你剛剛所建立的類別,讓 addValue 函式在參數不為數字時,能丟出一個異常。然後在上面程式中加入 try...catch 敘述,使得 Test 物件在加入非數字資料時,還能繼續運作並顯示錯誤。

能力不足。

10、為剛剛的類別加入註解 ,以便能夠以 PHPDoc 來產生 API 文件。

能力不足。

MySQL篇:

1、何謂 Schema ?

應該就是指資料庫的意思...

2、請建立一個名為 guestbook 的資料庫,並建立一個名為 messages 的資料表。其中 messages 資料表要包含自動編號 (id) 、標題 (title) 、內容 (content) 、作者 (author) 及建立日期 (createDateTime) 等欄位,欄位型態請以符合效率及易維護性為考量來設計。

建立資料庫:
CREATE DATABASE guestbook;

建立資料表:
CREATE TABLE messages (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
tite VARCHAR( 50 ) NULL ,
content TEXT NULL ,
author VARCHAR( 30 ) NULL ,
createDateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM ;

3、請試著用 MySQL 的命令列模式,來操作對 messages 資料表的新增、列表、修改及刪除等功能。

登入MySQL:
mysql -u*** -p***

使用資料庫:
use guestbook;

新增:
INSERT INTO messages (tite, content, author)
VALUES ('test', 'test_content', 'test_author');

列表:
select * from messages;

修改:
UPDATE messages SET tite = 'update', content = 'update_content', author = 'update_author'
WHERE id = 1 ;

刪除:
DELETE FROM messages WHERE id = 1;

4、請試著用 MySQL 的命令列模式匯出 guestbook 資料庫的結構與資料,並刪除 guestbook 資料庫。然後再利用匯出的備份檔案,來重建 guestbook 資料庫。

匯出資料:(剛好前一陣子有試著利用排程,定期備份資料庫
C:\>mysqldump --opt -u*** -p*** guestbook >C:\%date:~0,4%-%date:~5,2%-%date:~8,2%.sql

如此一來就會存成一個yyyy-mm-dd.sql的文字檔

刪除資料庫:
DROP DATABASE guestbook;

重建資料庫:
C:\>mysqladmin -u*** -p*** create guestbook
C:\>mysql -u*** -p*** guestbook < yyyy-mm-dd.sql

5、在 MySQL 4.1 以後,如果已存的資料其編碼為 UTF-8 ,那麼 Client 端在取出資料前,要先下何種指令來指定正確的編碼?

如果網頁是以UTF8的方式儲存,在進入資料庫以後要下:mysql_query("SET NAMES UTF8");

如果網頁是以big5的方式儲存,在進入資料庫以後要下:mysql_query("SET NAMES big5");
arrow
arrow
    文章標籤
    Augmented Reality AR
    全站熱搜

    danielhuang030 發表在 痞客邦 留言(0) 人氣()