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.