一、选择题

  1. 以下描述不正确的是?
    A. GET请求不可以携带body
    B. cache-control: no-cache表示浏览器不存储资源内容
    C. componentWillReceiveProps在componentShouldUpdate之后执行
    D. vue的双向绑定对数组不生效
    解析:ABC。
    对A,知识点主要是GET方法和POST方法的区别,GET方法可以携带body,不同的库函数和浏览器对其支持不同,一般不使用,参考链接(https://www.zhihu.com/question/28586791)。
    对B,知识点为HTTP缓存,参考链接(https://segmentfault.com/a/1190000010775131)。

  2. 以下哪种情况会产生死锁?
    A. 竞争不可抢占性资源引起死锁
    B. 进程产生死循环
    C. 竞争可消耗资源引起死锁
    D. 进程推进顺序不当引起死锁
    解析:ACD。
    死锁:多个进程在运行过程中因竞争资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
    产生死锁的原因归结为两点:

  • 竞争资源,指的是不可剥夺性资源和临时性资源。
  • 进程的推进顺序非法。

死锁的必要条件:

  • 互斥:进程对所分配到的资源具有排他性使用,即在一段时间内某资源只由一个进程占用。
  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其他进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
  • 不剥夺条件:指进程已获得资源,在未使用完之前,不能被剥夺只能使用完自己释放。
  • 环路等待:发生死锁时,必然存在一个进程——资源环形链。
    死循环,如while True,不会引起死锁。

  1. 异步任务有哪些?
    A. setTimeout
    B. setInterval
    C. Promise.resolve
    D. localStorage.setItem
    解析:ABC
    localStorage.setItem用于本地存储

  2. html5语义化的作用有?
    A. 让页面内容结构化,便于浏览器搜索引擎解析(SEO)
    B. 保证页面在无样式时也是容易阅读的
    C. 用正确的标签做正确的事
    D. 便于维护理解
    解析:ABD

  3. 下面正则表达式不可以匹配www.dji.com的是?
    A. ^\w+.\w+-\w+.\w+$
    B. [w]{0,3}.[a-z-].[a-z]+
    C. [c-w.]{3,10}[.][c-w.][.][a]
    D. ^\w.
    com$
    解析:ACD

  4. Math.round(-7.5),Math.round(-7.6)的结果分别是?
    A. -7,-7
    B. -7,-8
    C. -8,-8
    D. -7,-9
    解析:B,四舍五入。

  5. 用二分法查找长度为20的、排好序的线性表,查找不成功时,最多需要比较多少次?
    A. 3
    B. 4
    C. 5
    D. 6
    解析:C,(向上取整)log|20| + 1

  6. [1<2<3, 3<2<1]?="" a.="" [false,true]="" b.="" [false,false]="" c.="" [true,true]="" d.="" [true,false]="" 解析:c,=""

  7. 2==[[[2]]]的答案是?
    A. 1
    B. error
    C. undefined
    D. true
    解析:D,

  8. 在浏览器控制台,执行以下代码,运行的结果分别是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var a = {
    name: 1,
    b: function() {
    this.name++;
    return this.name
    }
    }
    a.b() // 2
    c=a.b
    c() // '1'


  1. 因为浏览器的限制,目前浏览器端html5及js还不能实现的功能是(以60版本chrome为基准)?
    A. 离线消息推送
    B. 读写本地文件
    C. 绘制webgl
    D. 将视频呢用canvasx0008逐帧绘制
    解析:A

  2. console.log(1+-+++-+1)答案是:
    A. 2
    B. 1
    C. 0
    D. error
    解析:D

  3. -8的二进制反码表示为?
    A. 01111000
    B. 11110111
    C. 11111000
    D. 11111001
    解析:C

  4. int l=2;int x=(l++) + (l++) + (l++);执行结束后,x的值是?
    A. 6
    B. 7
    C. 8
    D. 9
    解析:D。https://www.zhihu.com/question/19811087

二、问答题

  1. 手写快速排序算法?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    def QSort(A, left, right):
    if left < right:
    pivot = Median(A, left, right)
    i = left
    j = right - 1
    while True:
    while A[i] < pivot:
    i += 1
    while A[j] > pivot:
    j -= 1
    if i < j:
    swap(A[i], A[j])
    else:
    break
    swap(A[i], A[right])
    QSort(A, left, i - 1)]
    QSort(S, i + 1, right)
    def Median(A, left, right):
    center = (left + right) / 2
    if A[left] > A[right]:
    swap(A[left], A[right])
    if A[left] > A[center]:
    swap(A[left], A[center])
    if A[center] > A[right]:
    swap(A[center], A[right])
    swap(A[center], A[right])
    return A[right]
    def swap(a, b):
    '''
    我们假设该swap交换函数的参数是引用类型的,
    否则由于作用域问题交换例程是无效的。
    '''
    pass


  1. 如何将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为12,000,000.11?

  2. 链表与数组的区别?
    https://lucky4.github.io/2018/08/03/%E6%95%B0%E7%BB%84%E4%B8%8E%E9%93%BE%E8%A1%A8/

  3. 进程间的通信方式有哪些?
    进程通信,是指进程之间的信息交换。进程间的同步和互斥属于低级通信;高级通信,指用户可直接利用操作系统提供的一组通信命令高效地传送大量数据的一种通信方式。相比低级通信,效率高,对用户透明,减少通信程序编制的复杂性。高级通信的几种方式:
    ##管道(pipe):指用于连接一个读进程和写进程以实现他们之间通信的一个共享文件。管道的特点是:只支持半双工通信(单向传输),只能在父子进程中使用。
    ##命名管道(FIFO) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    ##消息队列(message queue):消息队列是由消息组成的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。相比于 FIFO,消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难;避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法;读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。
    ##信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    ##共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
    ##套接字:与其它通信机制不同的是,它可用于不同机器间的进程通信。