6.21筆試小結

1. 進程與線程

  • 進程是資源分配的基本單位

進程又擁有自己獨立的資源,系統每創建一個進程就會爲其分配一部分地址空間,由此進程與進程之間不會互相干擾

  • 線程是程序執行的基本單位

線程與CPU資源分配無關,多個線程共享同一進程的資源,使用相同的地址空間

  • 兩者區別

(1)調度:進程是擁有資源的基本單位,線程是調度和分配的基本單位

(2)併發:進程和線程都可以併發執行

(3)資源:進程擁有系統資源,線程不擁有系統資源,但可以訪問其所在的進程的所有資源

(4)開銷:創建或回收進程時,系統都需要分配和回收資源,導致進程的開銷比線程大得多

2. 進程之間通信的方式

  • 管道和有名管道

管道允許有親緣關係的父子進程之間通信,有名管道允許無親緣關係的進程間通信

  • 消息隊列

消息隊列是消息的鏈接表,對於有寫權限的進程可以往消息隊列添加新信息,對於有讀權限的進程可以從消息隊列中讀取信息

  • 共享內存

多個進程可以訪問同一內存空間,不同進程可以及時看到共享內存的數據更新,這種方式依賴於同步操作,例如互斥鎖和信號量

  • 信號量

進程之間或同一進程下線程之間的同步和互斥手段,基於操作系統的 PV 操作(可以加減任意正整數),結合共享內存使用

同步:多個進程對資源的操作必須按照一定順序進行
互斥:同一時間段只能有一個進程訪問統一資源

  • 套接字

可用於網絡中不同機器之間進程通信的一種通信機制

4. iframe阻塞頁面load

iframe阻塞主頁面加載過程

  • 主頁面加載

  • 遇到iframe,加載iframe內容

  • iframe加載完成,主頁面繼續往下加載

  • 主頁面load完成

解決辦法

設置iframe內容爲空,通過body標籤綁定onload事件使用js來加載內容

  • iframe在主頁面onload前加載
  • 由於iframe內容一開始是空的,iframe的onload事件立即觸發
  • 主頁面檢測到iframe的onload事件,繼續往下執行
  • 主頁面內容加載完成

5. Object.assign()

後面的會覆蓋前面的
Object.assign(target,...source);

6.localStorage設置過期時間

localStorage.setItem(key,JSON.stringify({
    data:Data.now(),
    val:value;
}))

7.translate會不會觸發重新佈局

不會,translate只會觸發重組(圖層的重新組合,在重繪之後進行)

8.meta中width=device-width的作用

自適應屏幕寬度device就是屏幕像素轉化爲CSS像素的值

9. setTimeout第三個參數

function test() {
    console.log(...arguments);//1 2 3 4
}
setTimeout(test, 100, 1, 2, 3, 4)

10. IIFE輸出結果

var b = 10;
(function b() {
    b = 20;
    console.log(b);//[Function: b]
})();
console.log(b);//10

原因:自執行函數的函數變量無法進行賦值(內部機制,類似const定義的變量),在嚴格模式下會報錯

var b = 10;
(function b() {
    "use strict"
    b = 20;
    console.log(b);
})();
console.log(b);
//結果 TypeError: Assignment to constant variable.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章