国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端常見(jiàn)面試題之防抖、節(jié)流、xss、xsrf

這篇具有很好參考價(jià)值的文章主要介紹了前端常見(jiàn)面試題之防抖、節(jié)流、xss、xsrf。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、從瀏覽器地址欄輸入url到顯示頁(yè)面的步驟

  1. 輸入U(xiǎn)RL:在瀏覽器的地址欄中輸入要訪問(wèn)的網(wǎng)站的URL(統(tǒng)一資源定位符)。
  2. DNS解析:瀏覽器會(huì)將URL發(fā)送給DNS服務(wù)器,DNS服務(wù)器負(fù)責(zé)將URL解析為對(duì)應(yīng)的IP地址。
  3. 建立TCP連接:瀏覽器會(huì)根據(jù)解析得到的IP地址,使用TCP(傳輸控制協(xié)議)與服務(wù)器建立連接。
  4. 發(fā)起HTTP請(qǐng)求:TCP連接建立后,瀏覽器會(huì)向服務(wù)器發(fā)送HTTP(超文本傳輸協(xié)議)請(qǐng)求,該請(qǐng)求攜帶了瀏覽器想要獲取的資源的信息,如文件路徑、請(qǐng)求方式等。
  5. 服務(wù)器處理請(qǐng)求:服務(wù)器接收到瀏覽器發(fā)送的HTTP請(qǐng)求后,會(huì)根據(jù)請(qǐng)求的內(nèi)容進(jìn)行相應(yīng)的處理,如查找請(qǐng)求的文件、處理業(yè)務(wù)邏輯等。
  6. 返回HTTP響應(yīng):服務(wù)器處理完請(qǐng)求后,會(huì)生成對(duì)應(yīng)的HTTP響應(yīng),并將響應(yīng)發(fā)送回瀏覽器。
  7. 接收響應(yīng)內(nèi)容:瀏覽器接收到服務(wù)器返回的HTTP響應(yīng)后,開(kāi)始接收響應(yīng)的內(nèi)容。
  8. 渲染頁(yè)面:瀏覽器會(huì)根據(jù)接收到的響應(yīng)內(nèi)容,進(jìn)行解析、布局、渲染等操作,將服務(wù)器返回的頁(yè)面內(nèi)容轉(zhuǎn)化為可見(jiàn)的頁(yè)面。
  9. 顯示頁(yè)面:最后,瀏覽器將渲染完成的頁(yè)面顯示在用戶(hù)的屏幕上,用戶(hù)即可看到訪問(wèn)的網(wǎng)頁(yè)內(nèi)容。

二、window.onload和DOMContentLoaded區(qū)別

"window.onload"和"DOMContentLoaded"都是JavaScript事件,用于在HTML文檔加載完成后執(zhí)行代碼。然而,它們之間有一些不同之處。

  1. 觸發(fā)時(shí)機(jī):
  • "window.onload"事件在整個(gè)頁(yè)面(包括CSS、圖像和其他資源)加載完成后觸發(fā)。
  • "DOMContentLoaded"事件在DOM樹(shù)構(gòu)建完成后觸發(fā),即HTML文檔被解析完成后,不包括樣式表、圖片和其他外部資源。
  1. 執(zhí)行順序:
  • "window.onload"事件會(huì)等待所有資源(包括圖片和其他外部資源)加載完畢后才執(zhí)行,因此事件觸發(fā)的時(shí)間可能比"DOMContentLoaded"晚。
  • "DOMContentLoaded"事件會(huì)在HTML文檔解析完成后立即觸發(fā),而不需要等待其他外部資源的加載。
  1. 適用對(duì)象:
  • "window.onload"事件適用于整個(gè)頁(yè)面加載完成后需要執(zhí)行的代碼。
  • "DOMContentLoaded"事件適用于只需要操作DOM樹(shù)的腳本,不依賴(lài)于外部資源的加載情況。

綜上所述,"window.onload"事件適用于需要等待所有資源加載完成后執(zhí)行的代碼,而"DOMContentLoaded"事件適用于只需要操作DOM的腳本,在HTML文檔解析完成后立即執(zhí)行。

三、防抖

JS防抖函數(shù)在以下情況下非常有用:

  1. 當(dāng)用戶(hù)在頁(yè)面上連續(xù)觸發(fā)某個(gè)事件時(shí),比如連續(xù)點(diǎn)擊按鈕、連續(xù)輸入搜索關(guān)鍵詞等,防抖函數(shù)可以確保只有最后一次觸發(fā)的事件被執(zhí)行。這可以避免不必要的請(qǐng)求發(fā)送或操作執(zhí)行,提高性能和用戶(hù)體驗(yàn)。

  2. 當(dāng)用戶(hù)在輸入框中連續(xù)輸入內(nèi)容時(shí),比如搜索框的實(shí)時(shí)搜索功能,防抖函數(shù)可以延遲發(fā)送請(qǐng)求或執(zhí)行搜索操作,直到用戶(hù)停止輸入一段時(shí)間才觸發(fā),避免多次請(qǐng)求或操作。

下面是一個(gè)使用防抖函數(shù)的例子,以實(shí)現(xiàn)輸入框的實(shí)時(shí)搜索功能:

HTML部分:

<input type="text" id="search-input" placeholder="輸入關(guān)鍵詞進(jìn)行搜索" />
<div id="search-results"></div>

JS部分:

// 定義防抖函數(shù)
function debounce(func, delay) {
  let timeoutId = null;
  
  return function() {
    // 如果上一次觸發(fā)事件的定時(shí)器還未執(zhí)行完,則取消上一次的定時(shí)器
    if (timeoutId) {
      clearTimeout(timeoutId);
    }
    
    // 設(shè)置新的定時(shí)器
    timeoutId = setTimeout(() => {
      func.apply(this, arguments);
      timeoutId = null
    }, delay);
  };
}

// 獲取相關(guān)元素
const searchInput = document.getElementById('search-input');
const searchResults = document.getElementById('search-results');

// 定義搜索函數(shù)
function search() {
  const keyword = searchInput.value;
  
  // 發(fā)送請(qǐng)求或執(zhí)行搜索操作
  // ... (省略實(shí)際邏輯)
  
  // 更新搜索結(jié)果顯示
  searchResults.innerText = `正在搜索:${keyword}`;
}

// 使用防抖函數(shù)包裝搜索函數(shù),并延遲500毫秒觸發(fā)
const debouncedSearch = debounce(search, 500);

// 監(jiān)聽(tīng)輸入框的輸入事件,并使用防抖函數(shù)觸發(fā)搜索
searchInput.addEventListener('input', debouncedSearch);

在上面的示例中,輸入框的輸入事件被防抖函數(shù)包裝起來(lái),延遲500毫秒觸發(fā)搜索操作。當(dāng)用戶(hù)連續(xù)輸入內(nèi)容時(shí),防抖函數(shù)會(huì)等待用戶(hù)停止輸入一段時(shí)間后才觸發(fā)搜索,從而避免頻繁的搜索操作。這樣可以減少不必要的請(qǐng)求發(fā)送,提高性能和用戶(hù)體驗(yàn)。

四、節(jié)流

節(jié)流函數(shù)是一種用于控制函數(shù)執(zhí)行頻率的技術(shù),它可以限制函數(shù)的調(diào)用次數(shù)。通常在高頻率觸發(fā)的事件中使用,例如滾動(dòng)、鼠標(biāo)移動(dòng)和窗口調(diào)整大小等。

以下是一個(gè)使用節(jié)流函數(shù)的例子:

function throttle(func, delay) {
  let timeoutId;
  
  return function(...args) {
    if (!timeoutId) {
      timeoutId = setTimeout(() => {
        func.apply(this, args);
        timeoutId = null;
      }, delay);
    }
  };
}

// 使用節(jié)流函數(shù)對(duì)滾動(dòng)事件進(jìn)行控制
function handleScroll() {
  console.log('Scroll event handled');
}

const throttledScroll = throttle(handleScroll, 200);

window.addEventListener('scroll', throttledScroll);

在上面的例子中,我們定義了一個(gè)名為throttle的節(jié)流函數(shù)。它接受一個(gè)需要進(jìn)行節(jié)流的函數(shù)func和一個(gè)延遲時(shí)間delay作為參數(shù)。當(dāng)調(diào)用throttle返回的函數(shù)時(shí),它會(huì)在延遲時(shí)間內(nèi)首次觸發(fā)func,然后在延遲時(shí)間內(nèi)的連續(xù)觸發(fā)中忽略掉。

在此例中,我們定義了一個(gè)名為handleScroll的回調(diào)函數(shù),并將其傳遞給throttle函數(shù)以創(chuàng)建一個(gè)節(jié)流函數(shù)throttledScroll。然后,我們通過(guò)addEventListenerthrottledScroll函數(shù)添加為窗口的滾動(dòng)事件處理程序。結(jié)果是,在滾動(dòng)事件觸發(fā)時(shí),handleScroll函數(shù)最多每200毫秒執(zhí)行一次,從而減少了函數(shù)執(zhí)行的次數(shù)。

五、如何預(yù)防xss攻擊

網(wǎng)站的XSS(跨站腳本攻擊)是指攻擊者利用網(wǎng)站漏洞,將惡意腳本注入到網(wǎng)頁(yè)中,從而在用戶(hù)瀏覽網(wǎng)頁(yè)時(shí)執(zhí)行惡意代碼。這種攻擊可以導(dǎo)致攻擊者竊取用戶(hù)的敏感信息、修改網(wǎng)頁(yè)內(nèi)容、甚至控制用戶(hù)的會(huì)話。

為了預(yù)防XSS攻擊,網(wǎng)站開(kāi)發(fā)者可以采取以下措施:

  1. 輸入驗(yàn)證和過(guò)濾:對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行過(guò)濾,剔除或轉(zhuǎn)義特殊字符,確保只接收到合法的數(shù)據(jù)。

  2. 輸出編碼:在將用戶(hù)輸入的數(shù)據(jù)顯示到網(wǎng)頁(yè)上之前,對(duì)其進(jìn)行編碼處理,轉(zhuǎn)義特殊字符,防止惡意代碼執(zhí)行。

  3. 使用CSP(內(nèi)容安全策略):CSP是一種網(wǎng)頁(yè)安全機(jī)制,通過(guò)配置HTTP頭部來(lái)限制網(wǎng)頁(yè)中可加載和執(zhí)行的資源。它可以阻止惡意腳本的注入和執(zhí)行。

  4. 設(shè)置HttpOnly標(biāo)志:將用戶(hù)的敏感信息存儲(chǔ)在帶有HttpOnly標(biāo)志的cookie中,防止XSS攻擊者通過(guò)腳本竊取這些信息。

下面是一個(gè)XSS攻擊的例子:

假設(shè)一個(gè)社交媒體網(wǎng)站允許用戶(hù)發(fā)布評(píng)論,并將這些評(píng)論顯示在其他用戶(hù)的瀏覽器中。攻擊者在評(píng)論中插入了一個(gè)惡意的腳本代碼,如以下JavaScript代碼:

<script>
  alert("惡意代碼執(zhí)行");
  // 進(jìn)行其他惡意操作
</script>

當(dāng)其他用戶(hù)瀏覽包含該評(píng)論的頁(yè)面時(shí),惡意腳本會(huì)自動(dòng)執(zhí)行,彈出一個(gè)對(duì)話框。這可以導(dǎo)致用戶(hù)的敏感信息被竊取或進(jìn)行其他惡意操作。

為了預(yù)防這樣的攻擊,網(wǎng)站可以對(duì)用戶(hù)輸入的評(píng)論內(nèi)容進(jìn)行過(guò)濾,將特殊字符進(jìn)行轉(zhuǎn)義,如將 < 替換為 &lt;,將 > 替換為 &gt; 等。這樣即使惡意腳本被注入,也不會(huì)被瀏覽器識(shí)別為可執(zhí)行的代碼。同時(shí),網(wǎng)站還應(yīng)該采取其他措施,如使用CSP來(lái)限制加載資源和設(shè)置HttpOnly標(biāo)志來(lái)保護(hù)用戶(hù)的敏感信息。

六、如何預(yù)防xsrf攻擊

跨站請(qǐng)求偽造(Cross-Site Request Forgery,CSRF)是一種攻擊方式,攻擊者通過(guò)欺騙用戶(hù)在已登錄的網(wǎng)站上完成一些未經(jīng)用戶(hù)授權(quán)的操作,通常是利用用戶(hù)的身份去執(zhí)行一些針對(duì)該網(wǎng)站的請(qǐng)求。這種攻擊方式可能導(dǎo)致賬戶(hù)信息、密碼、個(gè)人資料泄露,或者進(jìn)行惡意操作。

為了預(yù)防XSRF攻擊,可以使用以下方法:

  1. 使用CSRF令牌:在表單中添加一個(gè)隱藏字段,該字段包含一個(gè)隨機(jī)產(chǎn)生的令牌。在用戶(hù)提交表單時(shí),服務(wù)器會(huì)驗(yàn)證令牌的有效性,如果令牌不匹配,則拒絕請(qǐng)求。

示例:

<form action="/deleteUser" method="post">
  <input type="hidden" name="csrf_token" value="隨機(jī)生成的令牌" />
  <!-- 其他表單字段 -->
  <input type="submit" value="刪除用戶(hù)" />
</form>
  1. SameSite Cookie屬性:使用SameSite屬性可以限制Cookie只能在同一站點(diǎn)內(nèi)進(jìn)行請(qǐng)求,防止攻擊者盜用Cookie進(jìn)行跨站請(qǐng)求。

示例:

// 設(shè)置SameSite屬性為Strict
response.setHeader("Set-Cookie", "sessionId=xxx;SameSite=Strict");
  1. 增加驗(yàn)證碼:在一些關(guān)鍵操作(如支付、修改密碼等)中,可以添加驗(yàn)證碼驗(yàn)證,確保用戶(hù)是真實(shí)操作。

總之,防范XSRF攻擊的關(guān)鍵是要確保請(qǐng)求的合法性,通過(guò)采取以上措施可以有效預(yù)防這種攻擊。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-805242.html

到了這里,關(guān)于前端常見(jiàn)面試題之防抖、節(jié)流、xss、xsrf的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【前端】防抖和節(jié)流原理+實(shí)現(xiàn)

    防抖(Debounce)和節(jié)流(Throttle)都是用于控制函數(shù)執(zhí)行頻率的機(jī)制,它們?cè)谔幚砀哳l觸發(fā)的事件時(shí)非常有用。 防抖的原理是在事件被觸發(fā)后,等待一段時(shí)間(例如200毫秒)來(lái)執(zhí)行函數(shù),如果在等待時(shí)間內(nèi)事件被再次觸發(fā),則重新計(jì)時(shí)。這樣可以避免在短時(shí)間內(nèi)多次觸發(fā)事件

    2024年04月16日
    瀏覽(24)
  • 節(jié)流防抖:提升前端性能的秘密武器(上)

    節(jié)流防抖:提升前端性能的秘密武器(上)

    ?? 前端開(kāi)發(fā)工程師(主業(yè))、技術(shù)博主(副業(yè))、已過(guò)CET6 ?? 阿珊和她的貓_CSDN個(gè)人主頁(yè) ?? 牛客高級(jí)專(zhuān)題作者、在??痛蛟旄哔|(zhì)量專(zhuān)欄《前端面試必備》 ?? 藍(lán)橋云課簽約作者、已在藍(lán)橋云課上架的前后端實(shí)戰(zhàn)課程《Vue.js 和 Egg.js 開(kāi)發(fā)企業(yè)級(jí)健康管理項(xiàng)目》、《帶你從入

    2024年02月04日
    瀏覽(19)
  • 前端進(jìn)階版本 ,性能優(yōu)化—-防抖、節(jié)流、重繪與回流

    前端進(jìn)階版本 ,性能優(yōu)化—-防抖、節(jié)流、重繪與回流

    目錄 【防抖】 【節(jié)流】 重繪(repaint) 回流(reflow):又叫重排(layout) 工作中要如何避免大量使用重繪與回流? 常見(jiàn)的會(huì)導(dǎo)致回流的元素 【防抖】 任務(wù)頻繁觸發(fā)的情況下,只有任務(wù)觸發(fā)的間隔超過(guò)指定間隔的時(shí)候,任務(wù)才會(huì)執(zhí)行。 【節(jié)流】 指定時(shí)間間隔內(nèi)只會(huì)執(zhí)行一次任務(wù)。

    2024年02月14日
    瀏覽(22)
  • 前端解決按鈕重復(fù)提交數(shù)據(jù)問(wèn)題(節(jié)流和防抖)

    前端解決按鈕重復(fù)提交數(shù)據(jù)問(wèn)題(節(jié)流和防抖)

    ??*★,°*:.☆( ̄▽?zhuān)?/$:*.°★* ?? ??歡迎來(lái)到前端初見(jiàn)的博文,本文主要講解在工作解決按鈕重復(fù)提交數(shù)據(jù)問(wèn)題(節(jié)流和防抖) ????? 個(gè)人主頁(yè) : 前端初見(jiàn) ??喜歡的朋友可以關(guān)注一下,下次更新不迷路?? 當(dāng)我們?cè)陧?yè)面進(jìn)行點(diǎn)點(diǎn)點(diǎn)的操作時(shí),很可能遇到點(diǎn)擊兩次的行為,

    2024年02月09日
    瀏覽(21)
  • 了解防抖和節(jié)流:提升前端交互體驗(yàn)的實(shí)用策略

    本文將重點(diǎn)介紹前端性能優(yōu)化方法之一的防抖和節(jié)流。首先解釋了它們的概念和原理,然后探討了它們?cè)谇岸碎_(kāi)發(fā)中的應(yīng)用場(chǎng)景,如輸入框搜索、滾動(dòng)事件等。最后,通過(guò)簡(jiǎn)單的代碼示例展示了如何實(shí)現(xiàn)防抖和節(jié)流函數(shù)。通過(guò)學(xué)習(xí)和應(yīng)用這兩種技術(shù),我們可以有效地減少不必

    2024年02月05日
    瀏覽(22)
  • 前端性能優(yōu)化的利器 ——— 淺談JavaScript中的防抖和節(jié)流

    防抖和節(jié)流函數(shù)是工作中兩種常用的前端性能優(yōu)化函數(shù),今天我就來(lái)總結(jié)一下什么是防抖和節(jié)流,并詳細(xì)說(shuō)明一下如何在工作中應(yīng)用防抖和節(jié)流函數(shù) 在 JavaScript 中,防抖(debounce)和節(jié)流(throttle)是用來(lái)限制函數(shù)執(zhí)行頻率的兩種常見(jiàn)技術(shù)。 防抖(debounce) 是指在某個(gè)時(shí)間段

    2024年02月14日
    瀏覽(30)
  • 性能優(yōu)化之防抖

    性能優(yōu)化之防抖

    方法1:利用lodash庫(kù)提供的防抖來(lái)處理 方法2:手寫(xiě)一個(gè)防抖函數(shù)來(lái)處理 需求:鼠標(biāo)在盒子上移動(dòng),鼠標(biāo)停止500ms之后,里面的數(shù)字才會(huì)變化+1 方法一:利用lodash庫(kù)實(shí)現(xiàn)防抖 方法二:?手寫(xiě)一個(gè)防抖函數(shù)來(lái)處理 思路: ? ? ? ? 核心是利用setTimeout定時(shí)器來(lái)實(shí)現(xiàn) ? ? ? ? 1聲明定

    2024年02月08日
    瀏覽(18)
  • vue3自定義指令之防抖

    我們使用 vue 時(shí),有時(shí)候需要用到自定義指令,例如一個(gè)防抖指令 現(xiàn)在有一個(gè)需求,用戶(hù)在點(diǎn)擊某個(gè)按鈕時(shí),我不希望用戶(hù)在瘋狂點(diǎn)擊后,每次點(diǎn)擊都會(huì)觸發(fā)事件,像服務(wù)器發(fā)送請(qǐng)求,這并不是我們預(yù)期的,所以我們需要在用戶(hù)點(diǎn)擊是做防抖處理。那么怎么做到方便復(fù)用的解

    2024年02月16日
    瀏覽(21)
  • Linux常見(jiàn)面試題,應(yīng)對(duì)面試分享

    Linux常見(jiàn)面試題,應(yīng)對(duì)面試分享

    1.cpu占?率太?了怎么辦? 排查思路是什么,怎么定位這個(gè)問(wèn)題,處理流程 其他程序: 1.通過(guò)top命令按照CPU使?率排序找出占?資源最?的進(jìn)程 2.lsof查看這個(gè)進(jìn)程在使?什么?件或者有哪些線程 3.詢(xún)問(wèn)開(kāi)發(fā)或者??,是什么業(yè)務(wù)在使?這個(gè)進(jìn)程 4.是否可以將這臺(tái)機(jī)器隔離,不影響

    2024年02月13日
    瀏覽(25)
  • 高級(jí)前端常見(jiàn)面試題合集

    常見(jiàn)的圖片格式及使用場(chǎng)景 (1) BMP ,是無(wú)損的、既支持索引色也支持直接色的點(diǎn)陣圖。這種圖片格式幾乎沒(méi)有對(duì)數(shù)據(jù)進(jìn)行壓縮,所以BMP格式的圖片通常是較大的文件。 (2) GIF 是無(wú)損的、采用索引色的點(diǎn)陣圖。采用LZW壓縮算法進(jìn)行編碼。文件小,是GIF格式的優(yōu)點(diǎn),同時(shí),

    2024年02月07日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包