Web前端雜亂知識複習

来源:https://www.cnblogs.com/ggonekim/archive/2023/03/14/17216778.html
-Advertisement-
Play Games

OSI OSI是Open System Interconnect的縮寫,意為開放式系統互聯。其各個層次的劃分遵循下列原則: ​ (1)同一層中的各網路節點都有相同的層次結構,具有同樣的功能。 ​ (2)同一節點內相鄰層之間通過介面進行通信。 ​ (3)七層結構中的每一層使用下一層提供的服務,並且向其 ...


OSI

OSI是Open System Interconnect的縮寫,意為開放式系統互聯。其各個層次的劃分遵循下列原則:

​ (1)同一層中的各網路節點都有相同的層次結構,具有同樣的功能。

​ (2)同一節點內相鄰層之間通過介面進行通信。

​ (3)七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。

​ (4)不同節點的同等層按照協議實現對等層之間的通信。

img

HTTP和HTTPS

請求方法,狀態碼,HTTPS傳輸數據的流程

UDP和TCP

TCP應用:

(1)FTP:文件傳輸協議;

(2)SSH:安全登錄、文件傳送(SCP)和埠重定向;

(3)Telnet:不安全的文本傳送;

(4)SMTP:簡單郵件傳輸協議Simple Mail Transfer Protocol (E-mail);

(5)HTTP:超文本傳送協議 (WWW);

UDP應用:

流媒體,實時游戲,物聯網,QQ文件傳輸語音視頻

對稱加密和非對稱加密

對稱加密指的就是加密和解密使用同一個秘鑰。更不安全

非對稱加密指的是:加密和解密使用不同的秘鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。效率更低

XSS和CSRF

Cross-Site Scripting(跨站腳本攻擊)簡稱 XSS,是一種代碼註入攻擊

跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的 Web 應用程式上執行非本意的操作的攻擊方法。

攻擊利用受害者在被攻擊網站的登錄憑證,冒充受害者提交操作

跨域

1、jsonp的原理就是利用<script>標簽沒有跨域限制,通過<script>標簽src屬性,發送帶有callback參數的GET請求,服務端將介面返回數據拼湊到callback函數中,返回給瀏覽器,瀏覽器解析執行,從而前端拿到callback函數返回的數據。

2、CORS是一個W3C標準,全稱是"跨域資源共用"(Cross-origin resource sharing)。
它允許瀏覽器向跨源伺服器,發出XMLHttpRequest請求,從而剋服了AJAX只能同源使用的限制。

3、nginx:a網站向b網站請求1.js文件時,向b網站發送一個獲取的請求,nginx根據配置文件接收這個請求,代替a網站向b網站來請求這個資源,nginx拿到這個資源後再返回給a網站,以此來解決了跨域問題。

4、postMessage()方法允許來自不同源的腳本採用非同步方式進行有限的通信,可以實現跨文本檔、多視窗、跨域消息傳遞。

強緩存和協商緩存

都是從客戶端緩存中讀取資源;區別是強緩存不會發請求,協商緩存會發請求。

強緩存: 通過http的response header中的Cache-Control和Expire兩個欄位控制。

主要看Cache-Control:

private:僅瀏覽器可以緩存

public:瀏覽器和代理伺服器都可以緩存

max-age=xxx:過期時間

no-cache:不進行強緩存

no-store:不強緩存,也不協商緩存

強緩存步驟:1,第一次請求文件時,緩存中沒有該信息,直接請求伺服器。

2,伺服器返回請求的文件,並且http response header中cache-control為max-age=xxx

3,再次請求該文件時,判斷是否過期,如果沒有過期,直接讀取本地緩存,如果已經過期了,則進行協商緩存。

協商緩存:它的觸發條件有兩點、

     第一點是 Cache-Control 的值為 no-cache,則會促發協商緩存。

     第二點是 max-age 過期了,觸發協商緩存。

當屬性值為對象類型時,只拷貝了對象數據的引用,導致新舊數據沒有完全分離,還會互相影響。array.concat()或者array.slice() 是特殊的實現數組淺拷貝的方式。

img

判斷JS數據類型的基本方法

typeof運算符,

instanceof操作符(基於原型鏈),

Object.prototype.toString方法。

this的指向問題

  1. 全局作用域、普通函數以及定時器中的this指向全局對象window
  2. 方法中的this指向的是調用它的對象
  3. 構造函數中的this指向構造函數的實例
  4. 箭頭函數中沒有綁定this,this為最近外層作用域下有定義的this
  5. call、apply、bind可改變this指向

JS運行機制

JS是單線程語言

巨集任務:1. script (可以理解為外層同步代碼)2. setTimeout/setInterval3. UI rendering/UI事件4. postMessage,MessageChannel5. setImmediate,I/O(Node.js)

微任務:1. Promise2.process.nextTick(Node.js) 3. Object.observe(已廢棄;Proxy 對象替代)4. MutaionObserver

Event Loop(事件迴圈)中,每一次迴圈稱為 tick,

執行順序:先執行同步代碼,遇到非同步巨集任務則將非同步巨集任務放入巨集任務隊列中,遇到非同步微任務則將非同步微任務放入微任務隊列中,當所有同步代碼執行完畢後,再將非同步微任務從隊列中調入主線程執行,微任務執行完畢後再將非同步巨集任務從隊列中調入主線程執行,一直迴圈直至所有任務執行完畢。

javascript垃圾回收機制原理:

標記清除,引用計數

JS中的數組

數組本來應該是一個連續的記憶體分配,但是在Javascript中不是連續分配的,而是類似哈希映射的方式存在的。

對於上述的實現方式,熟悉數據結構的同學應該知道,對於讀取操作,哈希表的效率並不高,而修改刪除的效率比較高。

現在瀏覽器為了優化其操作,對數組的創建時候的記憶體分配進行了優化:

對於同構的數組,也就是,數組中元素類型一致,會創建連續的記憶體分配

對於不同構數組,按照原來的方式創建。

如果你想插入一個異構數據,那麼就會重新解構,通過哈希映射的方式創建

map()和forEach()的區別

  • 能用forEach()做到的,map()同樣可以。反過來也是如此。
  • map()會分配記憶體空間存儲新數組並返回,forEach()不會返回數據。
  • forEach()允許callback更改原始數組的元素。map()返回新的數組。

cookie、sessionStorage和localStorage

如何創建BFC

body 根元素

浮動元素:float 除 none 以外的值

絕對定位元素:position (absolute、fixed)

display 為 inline-block、table-cells、flex

overflow 除了 visible 以外的值 (hidden、auto、scroll)
(常用於解決CSS高度坍塌

let、var、const

1.var聲明的變數會掛載在window上,而let和const聲明的變數不會

2.var聲明變數存在變數提升,let和const不存在變數提升

3.let和const聲明形成塊作用域

4.同一作用域下let和const不能聲明同名變數,而var可以

5.const一旦聲明必須賦值,不能使用null占位;聲明後不能再修改 ;如果聲明的是複合類型數據,可以修改其屬性

聲明 提升

1:所有的聲明都會提升到作用域的最頂上去。

2:同一個變數只會聲明一次,其他的會被忽略掉。

3:函數聲明的優先順序高於變數聲明的優先順序,並且函數聲明和函數定義的部分一起被提升。

垂直居中

  • 設定行高(line-height)
  • 添加偽元素(vertical-align)
  • calc動態計算
  • 使用表格或假裝表格
  • transform
  • 絕對定位(上級position)
  • 使用Flexbox

CSS選擇器優先順序

內聯樣式>內部樣式>外部樣式>ID選擇器>類選擇器and偽類選擇器>標簽(元素)選擇器and偽元素選擇器>通配符選擇器

迴流reflow 重繪repaint

·使用class代替style,減少style的使用

·使用resize、scroll時進行防抖和節流處理,這兩者會直接導致迴流

·使用visibility替換display:none,因為前者只會引起重繪,後者會引發迴流

·批量修改元素時,可以先讓元素脫離文檔流,等修改完畢後,再放入文檔流

·避免觸發同步佈局事件,我們在獲取offsetWidth這類的屬性時,可以使用變數將查詢結果存起來,避免多次查詢,每次對offset / scroll /client等屬性進行操作時都會觸發迴流

·對於複雜動畫效果,使用絕對定位讓其脫離文檔流,複雜動畫效果會頻繁的觸發迴流和重繪,我們可以將動畫元素設置絕對定位從而脫離文檔流避免反覆迴流重繪。

尾調用優化

尾調用之所以與其他調用不同,就在於它的特殊的調用位置。函數調用會在記憶體形成一個"調用記錄",又稱"調用幀"(call frame),保存調用位置和內部變數等信息。

如果在函數A的內部調用函數B,那麼在A的調用記錄上方,還會形成一個B的調用記錄。等到B運行結束,將結果返回到A,B的調用記錄才會消失。

如果函數B內部還調用函數C,那就還有一個C的調用記錄棧,以此類推。所有的調用記錄,就形成一個"調用棧"(call stack)。

而尾調用時,由於是函數的最後一步操作,所以不需要保留外層函數的調用記錄,因為調用位置、內部變數等信息都不會再用到了,只要直接用內層函數的調用記錄,取代外層函數的調用記錄就可以了。

只保留內層函數的調用記錄
如果所有函數都是尾調用,那麼完全可以做到每次執行時,調用記錄只有一項,這將大大節省記憶體

節流 防抖

  • 都可以通過使用 setTimeout 實現
  • 目的都是,降低回調執行頻率。節省計算資源

img

防抖在連續的事件,只需觸發一次回調的場景有:

  • 搜索框搜索輸入。只需用戶最後一次輸入完,再發送請求
  • 手機號、郵箱驗證輸入檢測
  • 視窗大小resize。只需視窗調整完成後,計算視窗大小。防止重覆渲染。
let btn=document.getElementsByTagName('button')[0];
let timeout;
btn.onclick=()=>{
	clearTimeout(timeout);
	timeout=setTimeout(()=>{
		console.log("ADD");//需要執行的代碼
	},2000);
}

節流在間隔一段時間執行一次回調的場景有:

  • 滾動載入,載入更多或滾到底部監聽
  • 搜索框,搜索聯想功能
let btn=document.getElementsByTagName('button')[0];
        let bol=true;
        btn.onclick=()=>{
            if(bol){
                console.log("ADD");//需要執行的代碼
                bol=false;
            }else{
                return ;
            }
            setTimeout(()=>{
                bol=true;
            },2000)
        }

JavaScript阻止修改對象的三種方式

防止擴展:

禁止為對象添加屬性和方法。但已存在的屬性和方法可以被修改或刪除。
實施操作:Object.preventExtensions()
檢測是否應用該操作:Object.isExtensible()

密封:

禁止為對象刪除已存在的屬性和方法。被密封的對象也是不可擴展的。
實施操作:Object.seal()
檢測是否應用該操作:Object.isSealed()

凍結:

禁止為對象修改已存在的屬性和方法。所有欄位均只讀。被凍結的對象也是不可擴展和密封的。
實施操作:Object.freeze()
檢測是否應用該操作:Object.isFrozen()

載入阻塞

defer 特點

  • 對於 deferscript,瀏覽器會繼續解析 html,且同時並行下載腳本,等 DOM 構建完成後,才會開始執行腳本,所以它不會造成阻塞;
  • defer 腳本下載完成後,執行時間一定是 DOMContentLoaded 事件觸發之前執行;
  • 多個 defer 的腳本執行順序嚴格按照定義順序進行,而不是先下載好的先執行;

async 特點

  • 對於 asyncscript,瀏覽器會繼續解析 html,且同時並行下載腳本,一旦腳本下載完成會立刻執行;和 defer 一樣,它在下載的時候也不會造成阻塞,但是如果它下載完成後 DOM 還沒解析完成,則執行腳本的時候是會阻塞解析的;
  • async 腳本的執行 和 DOMContentLoaded 的觸發順序無法明確誰先誰後,因為腳本可能在 DOM 構建完成時還沒下載完,也可能早就下載好了;
  • 多個 async,按照誰先下載完成誰先執行的原則進行,所以當它們之間有順序依賴的時候特別容易出錯。

em rem

em相對於父元素,rem相對於根元素

像素(px):用於元素的邊框或定位。

em/rem:用於做響應式頁面

css設置0.5px的border

1、transform:scale(0.5);

利用的是 transform 縮放功能,將 1px 縮放一半,同時利用定位,將偽元素覆蓋整個 div 元素,從而達到偽元素與本身元素的合併效果。

2、svg

原理是利用SVG的描邊屬性為1物理像素(物理像素最低也必須得有1,不然什麼也看不見了),是高清屏的0.5px。

JS浮點數精度問題

把小數放大為整數(乘),進行算術運算,再縮小為小數(除)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux文件許可權管理介紹 一:Ubuntu 簡介 1 、什麼是Ubuntu Ubuntu是基於Debian開發的一個開源的Linux操作系統,Ubuntu這個名字名稱來⾃⾮洲南部某種語言的一個詞語,Ubuntu每6個月會發佈⼀個新版本,每隔兩年,在四月份的時候,會推出⼀個⻓期⽀持版本(LTS)。其 ...
  • 第一步就是安裝 為了節省資源,運行起來更快捷,首先是在電腦上安裝好vm虛擬機, 新建虛擬機,安裝xp,也就是把xp光碟文件導入, 接著在虛擬機中下載oracle,解壓的話會用到WinRAR,也一併導入虛擬機C盤 然後在主機上,安裝客戶端client,plsql, 打開虛擬機中的監聽,連接資料庫, 登 ...
  • 摘要:本文主要為大家帶來Mysql中的3種數據類型和3種運算符。 本文分享自華為雲社區《Mysql中的數據類型和運算符》,作者: 1+1=王。 Mysql的數據類型 Mysql支持數值型、文本型和日期時間型三大數據類型。 數值型數據 數值型是描述定量數據的數據類型,包括整數型數據類型和浮點型數據類型 ...
  • 摘要:本文介紹的DSC工具是針對資料庫切換時面臨的遷移任務而開發的免安裝命令行工具。目的是提供簡單、快速、可靠的SQL腳本遷移服務。 本文分享自華為雲社區《GaussDB(DWS)DSC工具系列:DSC工具初識【玩轉PB級數倉GaussDB(DWS)】》,作者:積少成多 。 DSC背景介紹與DSC介 ...
  • MySQL鎖的粒度分為:行級鎖、表級鎖、頁級鎖。 一、行級鎖(INNODB引擎) 行級鎖是Mysql中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。 行級鎖能大大減少資料庫操作的衝突。其加鎖粒度最小,但加鎖的開銷也最大。 行級鎖分為共用鎖 和 排他鎖。 特點:開銷大,加鎖慢;會出現死鎖;鎖定 ...
  • 轉載自作者zhang502219048的微信公眾號【SQL資料庫編程】:巧妙使用SQL Server的計算列實現項目唯一規則快速定製 軟體產品,相當於是一個通用模板。而軟體項目,則是基於軟體產品的項目個性化定製。不同軟體項目的定製多種多樣,如何能快速實現軟體項目的定製,則是軟體產品設計者所需要優先考 ...
  • 前言 前面我們簡單的瞭解了 vue 初始化時的一些大概的流程,這裡我們詳細的瞭解下具體的內容;這塊建議搭建可以根據 demo 進行 debugger 來觀察; 內容 這一塊主要圍繞init.ts中的initLifecycle進行剖析。 initLifecycle initLifecycle的方法位於 ...
  • 分享一個面試題: 聲明一個數組,代表股票的各個期值,求在這個階段最大的收益值為多少? 簡言之:其實就是求數組中兩個值的差值中,最大的值。 第一反應的思路就是,進行雙層迴圈進行差值計算,再從差值計算獲得的數組中選出最大的值。面試完想了這個方法一下有些麻煩,還不如直接就在迴圈中比較出來,選出最大值,直接 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...