期中考試題

期中考試題

1 請寫出一個符合 W3C 規範的 HTML 文件

要求
頁面標題爲「個人頁面」
頁面中引入了一個外部 CSS 文件,文件路徑爲 /style.css
頁面中引入了另外一個外部 CSS 文件,路徑爲 /print.css,該文件僅在打印時生效
頁面中引入了另外一個外部 CSS 文件,路徑爲 /mobile.css,該文件僅在設備寬度小於 500 像素時生效
頁面中引入了一個外部 JS 文件,路徑爲 /main.js
頁面中引入了一個外部 JS 文件,路徑爲 /gbk.js,文件編碼爲 GBK
頁面中有一個 SVG 標籤,SVG 裏面有一個直徑爲 100 像素的圓圈,顏色隨意
注意題目中的路徑
回答css

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>個人頁面</title>
    <link rel="stylesheet" href="/style.css">
    <link rel="stylesheet" href="/print.css" media="print">
    <link rel="stylesheet" href="/mobile.css" media="(max-width=500px)"> 
    <script src="/main.js"></script>
    <script src="/gbk.js" charset="GBK"></script>
</head>
<body>
    <svg>
        <circle cx="100" cy="100" r="50" fill="red" />
    </svg> 
</body>
</html>

2 移動端是怎麼作適配?

回答要點:
meta viewport
媒體查詢(CSS深刻淺出第五課)
動態 rem 方案(CSS深刻淺出第九課)
這三個知識點只有第一個我有講過,你須要自學第二點和第三點。
若是你們在這道題上都答得很差,我會在考試後直播這兩節課的錄屏。(由於我以爲視頻裏已經講得很好了,不必從新講一遍)html

回答
1 meta viewportcss3

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

2 媒體查詢(2種方式)數組

//a 可在link元素中加
<link rel="stylesheet" media="(max-width: 500px)" href="./style.css" />
//b 可在樣式表中加
<style>
@media(max-width:500px){
         body{background: red;}
}
</style>
//若是媒體分辨率小於500px,這個CSS會生效,背景會變成藍色

3 動態 rem 方案(2種方式)瀏覽器

//a 用 JS 動態調整 REM
 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1">
 <script>
     var pageWidth = window.innerWidth
     document.write('<style>html{font-size:'+pageWidth+'px;}</style>')
 </script>
//b 另外一種方法添加在 scss 文件裏( 這種方法可讓px 可自動變 rem)

評語
關於rem的適配的問題
不要使用document.write
設置完html的font-size以後,記得重置下body的font-size緩存

3 用過CSS3嗎? 實現圓角矩形和陰影怎麼作?

回答
1 用過css3 的圓角、陰影、gradients(漸變) 、transitions(過渡) 與 animations(動畫) 等
2 實現圓角矩形和陰影,預覽連接:http://js.jirengu.com/zatukasofu/1/edit?html,css,output服務器

//實現圓角
border-radius: 10px;
//實現陰影
box-shadow: 10px 10px 5px #888888;

4 什麼是閉包,閉包的用途是什麼?

回答
1 若是一個函數調用了做用域外的變量,那麼這個函數+這個變量就組成了「閉包」,以下例就是一個閉包:閉包

function f1(){
    var n=123;
    function f2(){
        console.log(n);
    }
    return f2;
}
var result=f1()
result()  //123

2 閉包的用途有三個:app

讀取函數內部的變量
讓這些變量始終保持在內存中
封裝對象的私有屬性和私有方法

5 call、apply、bind 的用法分別是什麼?

回答curl

//這是一個函數
function add(a,b){
    return a+b
}

1 call用法(有三個參數,第一個傳遞的是this,後兩位傳遞的是連續參數)

add.call(add,5,3)
//8

2 apply用法(與call不一樣的是後兩位傳遞的是數組參數)

add.apply(add,[5,3])
//8

3 bind用法(與call,apply不一樣的是,它不會當即調用,而是會生成一個新的函數)

var result=add.bind(add,5,3)
result()
//8

6 請說出至少 8 個 HTTP 狀態碼,並描述各狀態碼的意義。

回答
一、2XX 成功:請求被正常處理
1.1 200 OK
表示從客戶端發來的請求在服務器端被正常處理
1.2 204 No Content
表示服務器接收的請求以成功處理,但沒有資源可返回,即:響應報文中不含實體的主體部分
1.3 206 Partial Content
表示客戶端進行了範圍請求且服務器成功執行了這部分的GET請求,響應報文中包含由Content_Range指定範圍的實體內容
「Content_Range爲請求首部的一種類型,後面的隨筆會講到」

二、3XX 重定向: 服務器須要執行某些特殊處理以正確處理請求(即URI地址或者資源的緩存的資源有效時間過時)
2.1 301 Moved Permanently
永久性重定向:表示請求的資源已被分配了新的URI,之後應使用資源如今的URI,若是已經保存了書籤,這時候應該按照Location首部提示的URI從新保存
2.2 302 Found
臨時性重定向:表示請求的資源已被分配到了新的URI,但願(本次)能使用新的URI訪問
2.3 303 See Other
表示請求對應的資源存在另外一個URI,應該使用GET方法定向獲取請求的資源
PS:當30一、30二、303響應狀態碼返回,幾乎全部瀏覽器都會把POST改爲GET,並刪除請求報文內的主體,以後請求自動再次發送
30一、302標準禁止將POST改成GET,但實際中都會容許這麼作~~~GG
2.4 304 Not Modified
表示客戶端發送得附帶條件的請求時,服務器運行請求訪問,但未知足條件的狀況,304返回時,不包含任何響應的主體部分
附帶條件:採用GET方法的請求報文中包含If-......條件的任一首部,後面的隨筆中介紹
2.5 307 Temporary Redirect
臨時重定向:禁止將POST轉換爲GET,該狀態碼會嚴格遵照瀏覽器標準

三、客戶端錯誤:4XX的響應結果代表客戶端是發生錯誤的緣由所在
3.1 400 Bad Ruquest
請求報文存在語法錯誤
3.2 401 Unauthorized
發送的請求須要有經過http認證(BASIC認證、DIGEST認證)的認證信息
PS:若以前已經進行了一次請求,則表示用戶認證失敗
返回含有401的響應必須包含一個適用於被請求資源的WWW-Authenticate首部用來質詢用戶信息
3.3 403 Forbidden
對請求資源的訪問被服務器拒絕(服務端沒有必要給出拒絕的詳細理由,若是想作說明,可在實體主體部分對緣由進行描述)
舉例:未得到文件系統的訪問受權、訪問權限出現某些問題等
3.4 404 Not Found
服務器上沒法找到請求的資源

四、 5XX服務器錯誤:服務器自己發生錯誤
4.1 500 Internal Server Error
服務器端執行請求時發生錯誤
4.2 503 Server Unavailable
服務器暫時處於超負載或者正在停機維護,如今沒法處理請求

7 請寫出一個 HTTP post 請求的內容,包括四部分。

其中
第四部分的內容是 username=ff&password=123
第二部分必須含有 Content-Type 字段
請求的路徑爲 /path
回答
1 HTTP post請求格式以下

1 動詞 路徑 協議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3 
4 要上傳的數據

2 寫一個HTTP post 請求的內容

1 POST /path HTTP/1.1
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
2Accept: */*
2 Content-Length: 18
2 Content-Type: application/x-www-form-urlencoded
3
4 username=ff&password=123

8 請說出至少三種排序的思路,這三種排序的時間複雜度分別爲

O(nn)
O(n log2 n)
O(n + max)
回答
1 O(n
n)
冒泡排序。重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。
2 O(n log2 n)
快速排序。找其中的一個數字做爲標杆,小於標杆的數字放左邊,大於標杆的數字放右邊,一次排完以後再繼續重複前面的操做,直到只有一個數字
3 O(n + max)
基數排序。將整形10進制按每位拆分,而後從低位到高位依次比較各個位。主要分爲兩個過程:
a 分配,先從個位開始,根據位值(0-9)分別放到0~9號桶中(好比53,個位爲3,則放入3號桶中)
b 收集再將放置在0~9號桶中的數據按順序放到數組中
重複a、b的過程,從個位到最高位

9 一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼?

博客點擊這裏

10 如何實現數組去重?

假設有數組 array = [1,5,2,3,4,2,3,1,3,4]
你要寫一個函數 unique,使得
unique(array) 的值爲 [1,5,2,3,4]
也就是把重複的值都去掉,只保留不重複的值。
要求:
不要作多重循環,只能遍歷一次
請給出兩種方案,一種能在 ES 5 環境中運行,一種能在 ES 6 環境中運行(提示 ES 6 環境多了一個 Set 對象)
回答
ES5

function unique(array) {
    var newArr = []
    var hash = {}
    for(var i = 0; i < array.length; i++) {
        if(hash[array[i]] === undefined) {
            newArr.push(array[i])
            hash[array[i]] = 1
        }
    }
    return newArr
}
var array = [1,5,2,3,4,2,3,1,3,4];
unique(array) 
// [1, 5, 2, 3, 4]

ES6

function unique(array){
  return Array.from(new Set(array));
}
unique(array) 
// [1, 5, 2, 3, 4]
相關文章
相關標籤/搜索