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.