杂七杂八

161 阅读4分钟

1. 严格模式

  • 全局变量要声明(之前的是一个变量没有声明就赋值,默认是全局变量)。
  • 没有变量提升:先声明后使用。
  • 禁止this指向全局对象(new构造时,如果忘加new,则内部this不再指向全局,会报错)。
  • 对象不能有重名的属性、函数不能有重名的参数。

3. 并发并行

  • 并发:能够处理多个任务的能力,不一定要同时,单核CPU即可。
  • 并行:能够同时处理多个任务,必须多核CPU。

4. 动态/静态类型语言的区别、优缺点

  • 静态语言:变量的类型在编译之前就需要确定。C++、Java。
    • 优点:避免变量类型相关的错误,比动态语言稳定
    • 缺点:过多的类型声明增加代码量、显得繁琐。
  • 动态语言:不需要直接指定变量类型,变量可以随时修改类型。Python、JavaScript。
    • 优点:实际开发时有较大的灵活性
    • 缺点:代码执行时可能有变量类型方面的错误。

5. 一些常识

  • JS 的变量名区分大小写

  • JS 是解释型语言,程序在运行的时候才翻译,而编译型语言则在程序执行前,需要一个专门的编译过程。

  • JS 引擎的工作方式是,「先解析代码,获取所有被声明的变量」,然后再一行一行地运行,因此造成了 变量提升(hoisting)。

6. JS提供的两种注释

// 单行注释 

/* 
    这是 
    多行 
    注释 
*/

7. JS引擎

JS 引擎是一个专门处理 JavaScript 脚本的虚拟机,一般会附带在网页浏览器之中。Chrome 浏览器使用的是 V8 引擎。

目前为止,最通用的 JavaScript 宿主环境是网页浏览器。网页浏览器一般使用公共的 API 创建“宿主对象”以便于在 JavaScript 中支持 DOM。

8. ECMAScript

ECMAScript 是 JavaScript 的标准规格,用于标准化该语言的基本语法结构,后者是前者的一种实现。2015 年 6 月,ECMAScript 6 正式发布,并且更名为“ ECMAScript 2015 ”,此标准以后每年发布一个版本。

9. java 和 js 的关系,在面向对象方面的区别

  • java:静态语言、运行在服务端、面向对象是基于类的
  • js:动态语言、运行在浏览器、面向对象是基于原型和构造函数的

10. 递归和 for循环能互相转化?

递归不一定都能转化为for循环,但都可以转化为非递归。

内存消耗:for循环的空间占用是常量;递归内存可能会崩溃。

11. 高阶函数

接收函数作为参数或将函数作为输出返回, 例如map、filter等都是高阶函数。

12. 字节

1字节byte = 8比特bit;

1个数字或字符占1个字节;1个汉字占2个字节

1 MB = 1024 KB;1KB = 1024B。

13. 进程、线程

  • 进程就是正在运行中的一段程序,在操作系统中,进程是资源调度的基本单位。
  • 线程是程序中的一个顺序控制流程,进程中执行的每个任务为一个线程,线程是任务调度的基本单位。
  • 一个线程只能属于一个进程,但一个进程可以包含多个线程
  • 单线程:程序执行时会按照顺序执行,前面执行完成才能执行后面。单进程里只有一个线程。
  • 多线程:在单个程序中同时运行多个线程来完成不同的工作。
  • 浏览器的进程(重要)
    • 主进程:负责界面显示、用户交互等,只有一个。
    • 浏览器渲染进程:默认一个tab页面一个进程
    • GPU进程:用于3D绘制。
    • 插件进行:负责插件的运行。
  • 浏览器进程多线程(重要)
    • GUI渲染线程
    • JS引擎线程:和GUI线程互斥。
    • 事件触发线程
    • 异步http请求线程
    • 定时器线程:用来决定定时器的计时
  • 进程和线程之间的特点关系:
    • 进程之间完全隔离,互不干扰。(一个tab页面崩溃不会影响其他tab页面)
    • 一个进程中的任意线程执行出错,会导致这个进程崩溃。
    • 同一进程下的线程之间可以直接通信和共享数据。
  • 进程调度算法
    • 先来先服务调度
    • 最短作业优先调度
    • 时间片轮转调度:给每个进程分配一个时间片,CPU轮流切换进程执行。

14.死锁:线程

当多个线程由于竞争资源而造成的一种阻塞现象。死锁要同时满足4个条件

  • 互斥条件:多个线程不能同时使用一个资源。
  • 持有并等待:例如线程A已经持有资源1、想申请资源2,但资源2已经被线程B持有,线程A就会等待并且不会释放自己已经持有的资源
  • 不可剥夺:线程持有资源后,在使用完之前不能被其他线程获取。
  • 环路等待:多个线程获取资源的顺序构成了环形链。