1. 程式人生 > 其它 >5V升壓8.4V,鋰電池充電管理晶片

5V升壓8.4V,鋰電池充電管理晶片

技術標籤:htmlcss屬性jscsscss3htmljavascript

面試題2

面試題2

html部分

第一題

問:

HTML全域性屬性(global attribute)有哪些(包含H5)?

答:

全域性屬性:用於任何HTML5元素的屬性
屬性描述
accesskey設定訪問元素的鍵盤快捷鍵。
class規定元素的類名(classname)
contenteditable (h5)規定是否可編輯元素的內容。
contextmenu (h5)指定一個元素的上下文選單。當用戶右擊該元素,出現上下文選單
data-*(h5)用於儲存頁面的自定義資料
dir設定元素中內容的文字方向。
draggable (h5)指定某個元素是否可以拖動
dropzone (h5)指定是否將資料複製,移動,或連結,或刪除
hidden (h5)hidden 屬性規定對元素進行隱藏。
id規定元素的唯一 id
lang設定元素中內容的語言程式碼。
spellcheck (h5)檢測元素是否拼寫錯誤
style規定元素的行內樣式(inline style)
tabindex設定元素的 Tab 鍵控制次序。
title規定元素的額外資訊(可在工具提示中顯示)
translate (h5)指定是否一個元素的值在頁面載入時是否需要翻譯

第二題:

問:

HTML 5的檔案離線儲存怎麼使用,工作原理是什麼?

答:

HTML5 的離線儲存的使用:
什麼是HTML5 的離線儲存?

HTML5提供了很多新的功能以及相應的介面,離線儲存就是其中的一個,離線儲存可以將站點的一些檔案儲存在本地,在沒有網路的時候還是可以訪問到以快取的對應的站點頁面,其中這些檔案可以包括html,js,css,img等等檔案,但其實即使在有網路的時候,瀏覽器也會優先使用已離線儲存的檔案,返回一個200(from cache)頭。這跟HTTP的快取使用策略是不同的。

本地快取應用所需的檔案

怎麼使用HTML5的離線儲存

首先,你得告訴瀏覽器你想要離線儲存哪些檔案,那就需要有一個快取檔案清單,這跟檔案是一個manifest字尾名的檔案,注意,使用HTML5的離線儲存就必須有這個檔案,而且必須在伺服器端做修改,使得.manifest字尾名的檔案的mime型別為text/cache-manifest。

配置manifest檔案

頁面上:

<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
manifest檔案:

manifest是最簡單的文字檔案,它告知瀏覽器被快取的內容(以及不快取的內容)。

manifest檔案分為三個部分:
  1. CACHE MANIFEST-在此標題下列出的檔案將在首次下載後進行快取
  2. NETWOrK-在此標題下的檔案需要與伺服器進行連線,且不會被快取
  3. FALLBACK-在此標題下的檔案規定當頁面無法被訪問時的回退頁面(比如404頁面)
  4. 指定上述檔案,可以用相對路徑,也可以用絕對路徑,都是ok的。但是絕對路徑要加上http://

完整demo

CACHE MANIFEST
# 2016-07-24 v1.0.0
/theme.css
/main.js

NETWORK:
login.jsp

FALLBACK:
/html/ /offline.html

伺服器上:manifest檔案需要配置正確的MIME-type,即text/cache-manifest

常用API

核心是applicationCache物件,有個status屬性,表示應用快取的當前狀態:

0 (UNCACHED):無快取,沒有和頁面相關的應用快取

1 (IDLE):閒置,應用快取沒有得到更新

2 (CHECKING):檢查中,正在下載描述檔案並檢查更新

3 (DOWNLOADING):下載中,應用快取正在下載與描述檔案中指定的資源

4 (UPDATEREADY):更新完成,所有資源都已經下載完畢

5 (IDLE):廢棄,應用快取的描述檔案已經不存在了,因此頁面無法再訪問應用快取

相關事件

表示應用快取狀態的改變:

checking:在瀏覽器為應用快取查詢更新時觸發

error:在檢查更新或下載資源期間發生錯誤時觸發

noupdate:在檢查描述檔案發現檔案無變化時觸發

downloading:在開始下載應用快取資源時觸發

progress:在檔案下載應用快取的過程中持續不斷地下載時觸發

updateready:在頁面新的應用快取下載完畢時觸發

cached:在應用快取完整可用時觸發

application cache的三個優勢:
  1. 離線瀏覽
  2. 提升頁面載入速度
  3. 降低伺服器壓力
注意事項:
  1. 瀏覽器對快取資料的容量限制可能不太一樣(某些瀏覽器設定的限制是每個站點5M
  2. 如果是manifest檔案,或者內部列舉的某一個檔案不能正常下載,整個更新過程將視為失敗,瀏覽器繼續全部使用舊的快取
  3. 引用manifesthtml必須與manifest檔案同源,在同一個域下
  4. 瀏覽器會自動快取引用manifest檔案的html檔案,這就導致瞭如果更改了html內容,也需要更新版本才能做到最新
  5. manifest檔案中的CACHENETWOrKFALLBACK的位置順序沒有關係,如果是隱式宣告需要在最前面
  6. FALLBACK中的資源必須和manifest檔案同源
  7. 更新完版本後,必須重新整理一次才會啟動新版本(會出現重刷一次頁面的情況),需要新增監聽版本事件
  8. 站點中的其他頁面即使沒有設定manifest屬性,請求的資源如果在快取中也從快取中訪問
  9. manifest檔案發生改變時,資源請求本身也會觸發更新
離線快取和傳統瀏覽器快取的區別
  1. 離線快取是針對整個應用,瀏覽器快取是單個檔案
  2. 離線快取可以主動通知瀏覽器更新資源

css部分

第一題

問:

在頁面上隱藏元素的方法有哪些?

答:

利用 dispaly
  • disaplay: none; 頁面不會渲染
  • visibility: hidden; 頁面會渲染只是不限顯示
  • opacity: 0; 看不見,但是會佔據空間
利用 position (absolute 的情況下)
  • left/right/top/bottom: 9999px/-9999px 讓元素在視區外
  • z-index: -9999 放到最底層,同一位置可以讓其他元素把這個給遮掉
利用2D動畫
  • transform: scale(0) 設定元素縮放比例為0,起到display:none; 的作用
超出隱藏
  • overflow: hidden;
寬高設定
  • width:0; height:0;
僅對塊內文字元素:
  • text-indent: -9999px;
  • font-size: 0;

第二題:

問:

CSS選擇器有哪些?哪些屬性可以繼承?

答:

css選擇器
選擇器例子例子描述CSS
.class.intro選擇 class=“intro” 的所有元素。1
#id#firstname選擇 id=“firstname” 的所有元素。1
**選擇所有元素。2
elementp選擇所有元素。1
element,elementdiv,p選擇所有元素和所有元素。1
element elementdiv p選擇元素內部的所有元素。1
element>elementdiv>p選擇父元素為元素的所有元素。2
element+elementdiv+p選擇緊接在元素之後的所有元素。2
[attribute][target]選擇帶有 target 屬性所有元素。2
[attribute=value][target=_blank]選擇 target="_blank" 的所有元素。2
[attribute~=value][title~=flower]選擇 title 屬性包含單詞 “flower” 的所有元素。2
[attribute|=value][lang|=en]選擇 lang 屬性值以 “en” 開頭的所有元素。2
:linka:link選擇所有未被訪問的連結。1
:visiteda:visited選擇所有已被訪問的連結。1
:activea:active選擇活動連結。1
:hovera:hover選擇滑鼠指標位於其上的連結。1
:focusinput:focus選擇獲得焦點的 input 元素。2
:first-letterp:first-letter選擇每個元素的首字母。1
:first-linep:first-line選擇每個元素的首行。1
:first-childp:first-child選擇屬於父元素的第一個子元素的每個元素。2
:beforep:before在每個元素的內容之前插入內容。2
:afterp:after在每個元素的內容之後插入內容。2
:lang(language)p:lang(it)選擇帶有以 “it” 開頭的 lang 屬性值的每個元素。2
element1~element2p~ul選擇前面有元素的每個元素。3
[attribute^=value]a[src^=“https”]選擇其 src 屬性值以 “https” 開頭的每個 元素。3
[attribute$=value]a[src$=".pdf"]選擇其 src 屬性以 “.pdf” 結尾的所有 元素。3
[attribute*=value]a[src*=“abc”]選擇其 src 屬性中包含 “abc” 子串的每個 元素。3
:first-of-typep:first-of-type選擇屬於其父元素的首個元素的每個元素。3
:last-of-typep:last-of-type選擇屬於其父元素的最後元素的每個元素。3
:only-of-typep:only-of-type選擇屬於其父元素唯一的元素的每個元素。3
:only-childp:only-child選擇屬於其父元素的唯一子元素的每個元素。3
:nth-child(n)p:nth-child(2)選擇屬於其父元素的第二個子元素的每個元素。3
:nth-last-child(n)p:nth-last-child(2)同上,從最後一個子元素開始計數。3
:nth-of-type(n)p:nth-of-type(2)選擇屬於其父元素第二個元素的每個元素。3
:nth-last-of-type(n)p:nth-last-of-type(2)同上,但是從最後一個子元素開始計數。3
:last-childp:last-child選擇屬於其父元素最後一個子元素每個元素。3
:root:root選擇文件的根元素。3
:emptyp:empty選擇沒有子元素的每個元素(包括文字節點)。3
:target#news:target選擇當前活動的 #news 元素。3
:enabledinput:enabled選擇每個啟用的 元素。3
:disabledinput:disabled選擇每個禁用的 元素3
:checkedinput:checked選擇每個被選中的 元素。3
:not(selector):not§選擇非元素的每個元素。3
::selection::selection選擇被使用者選取的元素部分。3
屬性可以繼承
1. 所有元素都可以繼承
  • visibilitycursor

2. 內聯元素可以繼承
  • letter-spacing:字元之間的間隙
  • word-spacing:單詞之間的間隙
  • white-space:換行方式
  • line-height:行高
  • color:顏色
  • font:字型設定
  • font-family:字型名稱
  • font-size:字型大小
  • font-style:字型樣式
  • font-variant:是否為小型的大寫字母
  • font-weight:文字字型的粗細
  • text- decoration:複合屬性。文字的裝飾。
  • text-transform:文字的大小寫
  • direction:文字流的方向

3. 塊級元素可以繼承
  • text-indent:文字縮排
  • text-align:文字對齊方式

4. 列表元素可以繼承
  • list-style:複合屬性。設定列表專案相關內容
  • list-style-type:列表項所使用的預設標記
  • list-style-position:列表項標記如何根據文字排列
  • list-style-image:列表項標記的影象

5. 表格元素嗯昆蟲繼承
  • border-collapse:表格的行和單元格的邊是合併還是獨立

6. 不可繼承的元素
display`、`margin`、`border`、`padding`、`background`、`height`、`min-height`、`max- height`、`width`、`min-width`、`max-width`、`overflow`、`position`、`left`、`right`、`top`、 `bottom`、`z-index`、`float`、`clear`、`table-layout`、`vertical-align`、`page-break-after`、 `page-bread-before和unicode-bid

js部分

第一題:

問:

去除字串中最後一個指定的字元

答:

var str = "123456789"
function strdelete (str, del) {
    if (typeof str !== 'string') {
        return false
    } else {
        var index = str.lastIndexOf(del)
		return str.substring(0,index ) + str.substring(index+1,str.length);
	}
}
var a=strdelete(str, "9")
console.log(a)

第二題:

問:

寫一個方法把下劃線命名轉成大駝峰命名

答:

第一種:

function transoform(str) {
    var result = str.split('');
    result.forEach(function(e, i, a) {
        if (e === '_') {
            a[i + 1] = a[i + 1].toUpperCase(); 
        }
    });
    return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld

image.png

第二種:

function toCamel(str) {
  return str.replace(/(\w)(_)(\w)/g, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}

console.log(toCamel('a_bc_def')) // aBcDef 

image.png