《Linux就該這麼學》 第十三章_使用Bind提供域名解析服務
text-align:文字對齊方式
什麼式盒子模型?
css中的盒子模型由4部分組成,外邊距margin、內邊距padding、邊框border、元素內容content組成。
CSS實現垂直居中
1、設定子元素和父元素的行高一樣
2、子元素設定為行內塊,再加vertical-align:middle
4、不知道父元素高度,子絕父相,子元素top:50%,transform:translateY(-50%)
5、建立一個隱藏節點,讓隱藏節點的height為剩餘高度的一半
6、給父元素display:table,子元素display:table-cell,vertical-align:middle
7、給父元素新增偽元素
8、彈性盒,父元素display:flex,子元素align-self:center
CSS中實現水平居中
1.子父元素寬度固定,子元素設定margin:auto,並且子元素不能設定浮動,否則居中失效
2.子父元素寬度固定,父元素設定text-align:center,子元素設定display:inline-block,並且子元素不能設定浮動,否則居中失效
CSS中實現水平垂直居中
1、子元素相對於父元素絕對定位,子元素top,left設定50%,子元素margin-top和margin-left減去各自寬高的一半 2、子元素相對於父元素絕對定位,子元素上下左右全為0,然後設定子元素margin:auto 3、父元素設定display:table-cell vertical-align:middle,子元素設定margin:auto 4、子元素相對定位,子元素top,left值為50%,transform:translate(-50%,-50%) 5、子元素相對父元素絕對定位,子元素top,left值為50%,transform:translate(-50%,-50%) 6、父元素設定彈性盒子: display:flex; justfy-content:center ;align-item:center; justfy-content:center
實現一個函式,對js中5種主要的資料型別(Number、String、Object、Array、Boolean)進行值的賦值
方法一:
1、建立一個空變數
2、運用switch選擇進行判斷後賦值
3、object型別有兩種情況(物件object和陣列Array)
Cookie、sessionstorage、localStorage的區別
共同點:都是儲存在瀏覽器端,且同源的。 區別:cookie資料始終在同源的http請求中攜帶(即使不需要),即cookic在瀏覽器和伺服器間來回傳遞。而sessionStorage wlocalStorage不會自動把資料發給伺服器,僅在本地儲存。cookie資料還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。
儲存大小限制也不同,cookie資料不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合儲存很小的資料,如會話標識。sessionStorage和localStorage 雖然也有儲存大小的限制,但比cookie大得多,可以達到5M或更大。
資料有效期不同,sessionStorage:僅在當前瀏覽器視窗關閉前有效,自然也就不可能持久保特;localStorage:始終消覽器關閉也一直儲存,因此用作持久資料;cookie只在設定的cookie過期時間之前一直有效,即使視窗成瀏覽器關閉。
作用域不同,sessionStorage不在不同的瀏覽器視窗中共享,即使是同一個頁面;localStorage在所有同源視窗中都是共 享的;cookie也是在所有同源視窗中都是共享的。Web Storage 支援事件通知機據更新的通知傳送給監聽者。Web Storage 的 api 介面使用更方便。
session和cookie的區別
-
儲存位置不同
cookie的資料資訊存放在客戶端瀏覽器上
session的資料資訊存放在伺服器上
-
儲存內容不同
單個cookie儲存的資料<=4KB,一個站點最多儲存20個cookie
對於session來說並沒有上線,但出於對伺服器端的效能考慮,session內不要存放過多的東西,並設定session刪除機制
-
儲存方式不同
cookie中只能儲存ASCII字串,並需要通過編碼方式儲存為Unicode字元或者二進位制資料
session中能夠儲存任何型別的資料,包括且不限於string,integer,list,map等。
-
隱私策略不同
cookie對客戶端是可見的,別人可以通過分析本地的cookie進行cookie欺騙,是不安全的
session儲存在伺服器上,對客戶端是透明的,不存在敏感資訊洩露的風險
-
有效期上不同
開發可以通過設定cookie的屬性,達到cookie長期有效的效果
session依賴於名為jsessionid的cookie,而cookie jsessionid的過期時間預設為-1,只需要關閉視窗,該session就會失效,因而session不能達到長期有效的效果。
-
伺服器壓力不同
cookie保管在客戶端,不佔用伺服器資源。對於併發使用者十分多的網站,cookie是很好的選擇
session是保管在伺服器端的,每個使用者都會產生一個session。假如併發訪問的使用者十分多,會產生十分多的session,耗費大量的記憶體
-
瀏覽器支援不同
-
客戶端不支援cookie
cookie是需要客戶端瀏覽器支援的,假如客戶端禁用了cookie,或者不支援cookie,則會話跟蹤會失效。關於WAP上的應用,常規的cookie就派不上用場
運用session需要使用URL地址重寫的方式。一切用到session程式的URL都要進行URL地址重寫,否則session會話跟蹤還會失效。
-
客戶端支援cookie
cookie既能夠設為本瀏覽器視窗以及子視窗內有效,也能夠設為一切視窗內有效
session只能在本視窗以及子視窗內有效。
-
-
跨域支援不同
cookie支援跨域名訪問
session不支援跨域名訪問
get請求和post請求區別
-
get請求一般用於請求獲取資料
post一般用於傳送資料到後臺時使用
-
get請求也可傳參到後臺,但是其引數在瀏覽器的位址列的URL中可見,隱私性、安全性較差,且引數長度有限
post請求傳遞引數放在request body中,不會在url中顯示,比get要安全,且引數長度無限制
-
get請求重新整理瀏覽器或退回時沒有影響
post回退時會重新提交資料請求
-
get請求可被快取
post請求不會被快取
-
get請求保留在瀏覽器歷史記錄中
post請求不會保留在瀏覽器歷史記錄中
-
get請求可被收藏為書籤
post請求不能被收藏為書籤
-
get請求只能進行URL編碼
post支援多種編碼方式
-
get請求比較常見的方式是通過URL位址列請求
post最常見是通過form表單傳送資料請求
get和post請求都是HTTP的請求方式,本質上來說並無區別,底層實現都是基於TCP/IP協議。但是請求的方式有很多種,於是HTTP對請求方式進行了劃分和規定,於是產生了get、post處理請求的分工和區別。
get產生一個TCP資料包,post產生兩個TCP資料包
對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);而對於post,瀏覽器先發送header,伺服器響應100continue,瀏覽器再發送data,伺服器響應200 ok(返回資料)。
並不是所有瀏覽器都會在post中傳送兩次包,Firefox就只發送一次
jQuery的事件委託方法之間的區別
什麼是事件委託?
把原來加在子元素的事件繫結在父元素身上,就是事件委派給父元素。
例:ul li
將事件載入到子元素上的弊端:
-
耗費資源,每個子元素都要新增事件
-
後期動態新增子元素,不會擁有事件
事件委託的好處:
-
不再進行查詢,減少了DOM操作
-
極大地改善了程式碼效能,為動態新增的元素附上效果
$(父元素).on('click','子元素選擇器',function(){
//程式碼塊
})
四個事件委託方法:
live
把事件委託給了document
(根節點)。document
向下去尋找符合條件的元素(),不用等待document()
載入結束也可以生效。
delegate
可指定事件委託物件,相比於live
效能更優,直接鎖定指定選擇器。
on
事件委託物件選填,如果不填,即給自身註冊事件;填了作用和delegate
一致。
band
只能給呼叫它的時候已經存在的元素繫結事件,不能給未來新增的元素繫結事件,存在侷限性。
閉包
函式執行,形成私有的執行上下文,使內部的私有變數不受外界干擾,起到保護和儲存的作用。
跨域請求資源
proxy
代理:
request -> 後臺伺服器 ->前端
nginx
代理
代理https協議請求,proxy
首先需要信任該證書,否則請求失敗。
CORS
最常用。後端處理資料時,新增允許跨域的相關操作。
jsonp
動態插入script
標籤,瀏覽器對script
的資源引用沒有同源限制,沒有阻塞的情況下,資源載入到頁面後會立即執行。
獲取資源資料一般為json
格式。
缺點:無法傳送post
請求,判斷jsonp
請求不容易
垃圾回收機制
GC Gatbage Collection
垃圾回收策略:標記清楚、引用計數
原理:垃圾收集器會定期(週期性)找出那些不在繼續使用的變數,然後釋放其記憶體。
標記清除:GC獲取根並標記,發現沒有標記的進行刪除,進入執行環境的不能進行刪除。
引用計數:當宣告一個變數並給該變數賦值一個引用型別的值時候,該值的技術+1;當該值賦值給另一個變數的時候,該技術+1;當該值被其他取值代的時候,該計數-1;當該計數變為0的時候,說明無法訪問該值,垃圾回收機制清除該物件。
記憶體管理
記憶體中有什麼
程式使用的所有變數和其他資料
程式的程式碼,包括作業系統的程式碼
記憶體的宣告週期
申請記憶體 -> 使用記憶體 ->釋放記憶體
記憶體分為兩種
棧記憶體 堆記憶體
棧記憶體
在函式中定義的一些基本型別的變數和物件的引用變數都是在函式的棧記憶體中分配。在一段程式碼塊中定義一個變數時,系統就在棧中為這個變數分配記憶體空間,當超過變數的作用域後,系統會自動釋放掉為該變數分配的記憶體空間。
堆記憶體
堆記憶體用於存放由new
建立的物件和陣列。在堆中分配的記憶體,由虛擬機器自動垃圾回收器來管理。
JavaScript是垃圾回收語言之一。
在JavaScript中分配記憶體
-
定義變數並初始化
-
通過呼叫函式完成分配
在JavaScript中使用記憶體
意思是讀寫
在JavaScript中釋放記憶體
容易產生記憶體洩漏問題
垃圾收集器:跟蹤記憶體分配和使用情況;侷限:無法確定記憶體是否“不再需要”
垃圾收集演算法:記憶體引用(依賴)
記憶體引用:在記憶體管理情況下,如果一個物件訪問變數(可能是隱含的 or 顯式的),則稱該物件引用另一個物件。
記憶體洩漏
指不再用的記憶體沒有被及時釋放出來,導致該段記憶體無法被使用。
為什麼會導致記憶體洩漏
無法通過js訪問某個物件,而垃圾回收機制認為該物件還在被引用,因此垃圾回收機制不會釋放該物件,導致該記憶體用法無法釋放,積少成多,系統越來越卡以至於崩潰。
javascript中call()
方法和apply()
方法的區別
call()和apply()方法作用相同,動態改變執行上下文,跨作用域呼叫函式或方法。
區別:唯一區別在於兩個方法的第二個引數,call()
方法的第二個引數是依次給將要呼叫的函式或方法傳遞引數;而apply()
方法的第二個引數是陣列或類陣列(arguments
)。 例子:foo.call(this, paral.para2.para3)
等價於foo.apply(this,[paral.para2,para3])
什麼是“use strict”
?使用它的好處和壞處是什麼?
”use strict”
(嚴格模式) 是在ECMAScript5
中提出來的,是為javascript定義了一種不同的解析與執行模型。在嚴格模式下,ECMAScript3中一些不確定的行為將得到處理,而且對某些不安全操作也會丟擲錯誤。(參考《Javascript高階程式設計》)嚴格模式分為全域性嚴格模式和區域性嚴格模式。 好處:(1)、消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為; (2)、消除程式碼執行的一些不安全之處,保證程式碼執行的安全; (3)、提高編譯器效率,增加執行退度; (4)、為未來新版本的Javascript做好鋪墊。 壞處:在一個全域性環境下使用嚴格模式,會使得非嚴格模式下的程式碼merge後可能出現問題。