# 牛客前端笔试题总结（零）

<https://www.nowcoder.com/test/question/analytic?tid=51960893>

一、进程从运行状态进入就绪状态的原因可能是

时间片用完。

二、在可变式分区分配方案中，将空白区在空白区表中按地址递增次序排列的是

最先适应算法

三、在 MySQL 中 Replace 在相同的主键或者唯一键的时候相当于哪一个操作

DELETE+INSERT

四、在计算机操作系统中，信号量可以用来保证两个或多个关键代码段不被并发调用，而在进入一个关键代码段之前，线程必须获取到一个信号量。现假设有
4 个进程共享同一程序段，而且每次最多允许 3
个进程进入该程序段，则信号量的变化范围是多少

-1~3

五、主机 A 与主机 B 已建立 TCP 连接，A 的 cwnd（拥塞窗口）大小初始值为
1kb，ssthresh（阈值）为 16kb，B 的 rwnd（接收缓存窗口）初始值为
8kb，一个最大报文段为 1kb，假设传输过程中未出现超时，经过 3 个 RTT（3
轮传输）后，且 B 尚未从缓存中取出任何数据时，主机 A 的发送窗口大小为

六、借助队列采用非递归的方式对二叉树进行层次遍历，遍历方向为从左至右，在遍历过程中，队列中的元素最多为多少个

七、在一棵普通的树上，a 与 b
互为兄弟节点。将树转为二叉树后，下列哪种情形最不可能发生（在将普通树转为二叉树过程中，节点在删除与自身子节点的连线时，只保留与最左侧子节点之间的连线）

A a 是 b 的右孩子

B a 是 b 的左孩子

C a 是 b 的祖先节点

D b 是 a 的祖先节点

八、这里有一张中国高校院士数目信息表（院士姓名，高校所在省区）

  <!-- This HTML table template is generated by emacs/table.el -->

  <table border="1">

  <tr>

  <td align="left" valign="top">

  name     

  </td>

  <td align="left" valign="top">

 province

  </td>

  </tr>

  <tr>

  <td align="left" valign="top">

 ad          ws          ge          MO          wi        

  </td>

  <td align="left" valign="top">

     GD        ZJ        FJ        SX        ZJ  

  </td>

  </tr>

  </table>

写 SQL 语句，查询出哪个省区，出生院士人数最多？

九、二叉树的中序遍历为[5,4,1,2,3,6]，后序遍历为[4,5,2,6,3,1]，新建平衡二叉树，按二叉树的前序遍历顺序将元素插入到平衡二叉树中，对于得到的平衡二叉树说法不正确的是

A 有 3 个叶子结点

B 度为 1 的结点只有结点 5

C 前序遍历为[4,2,1,3,6,5]

D 后序遍历为[1,3,2,6,5,4]

十、以下关于 JavaScript 中数据类型的说法错误的是

A 数据类型分为基本数据类型和引用数据类型

B JavaScript 一共有 8 种数据类型

C Object 是引用数据类型，且只存储于堆(heap)中

D BigInt 是可以表示任意精度整数的基本数据类型，存储于栈(stack)中

十一、以下输出结果

```javascript
    const first = () => {
      console.log("first");
      return false;
    };
    const second = () => {
      console.log("second");
      return true;
    };
    console.log(first() && second());
    console.log(second() || first());
```

十二、两段代码的结果

```javascript
    check("first");
    function check(ars) {
      console.log(ars);
    }
```

```javascript
    check("second");
    var check = function (ars) {
      console.log(ars);
    };
```

十三、

```javascript
    const Book = {
      price: 32,
    };
    const book = Object.create(Book);
    book.type = "Math";
    delete book.price;
    delete book.type;
    console.log(book.price);
    console.log(book.type);
```

十四、

```javascript
    function side(arr) {
      arr[0] = arr[2];
    }
    function func1(a, b, c = 3) {
      c = 10;
      side(arguments);
      console.log(a + b + c);
    }
    function func2(a, b, c) {
      c = 10;
      side(arguments);
      console.log(a + b + c);
    }
    func1(1, 1, 1);
    func2(1, 1, 1);
```

十六、以下主机可以和 202.115.112.218/28 直接通信的是

A 202.115.112.205/28

B 202.115.112.225/28

C 202.115.112.195/28

D 202.115.112.212/28

十七、网络协议之间有规定的层次关系，下面选项中层次关系正确的是，上一层的网络的底层应该有下一层

十八、某个有向图如下，从顶点 v1
出发对其进行深度优先遍历，可能得到的遍历序列是（1）；从顶点 v1
出发对其进行广度优先遍历，可能得到的序列是（2）

十九、学生表

```sql
    CREATE TABLE students (
      s_id VARCHAR(20) PRIMARY KEY,
      s_name VARCHAR(20) NOT NULL DEFAULT '',
      s_birth VARCHAR(20) NOT NULL DEFAULT '',
      s_sex VARCHAR(10) NOT NULL DEFAULT ''
    );
```

查询表中第 16-20 条数据。

二十、什么是最小堆，符合什么特点的序列能构成最小堆

二十一、
最近小明搬到了新家，他正在粉刷墙壁，但是不幸的是他粉刷的墙壁并不理想。他的墙壁是一个长度为
的格子，每个格子用 0 表示红色，用 1
表示蓝色。现在墙壁是一个非常混乱的颜色。他想将墙壁涂成左边全是蓝色右边全是红色，可以将墙壁刷成全是红色或者蓝色。请问他至少需要粉刷多少个格子墙壁刷成他想要的样子？

题解：

```javascript
    // 链接：https://www.nowcoder.com/questionTerminal/748b891f208744a7b1f98cb4c45bde11?answerType=1&f=discussion
    // 来源：牛客网

    var k = readline(); //消耗掉元素个数的输入(第一行)
    var input = readline(); //这行才是有用的
    var count1 = 0;
    //统计1的个数
    for (var i = 0; i < input.length; i++) {
      if (parseInt(input[i]) == 1) count1++;
    }
    var min1 = Math.min(count1, input.length - count1); //全蓝或者全红的最小值
    //左蓝右红
    var left1 = 0;
    for (var i = 0; i < input.length; i++) {
      if (parseInt(input[i]) == 1) left1++; //统计1的个数
      var min2 = i + 1 - left1 + count1 - left1; //i+1-left1表示当前位置(索引从0开始)前面是0(红)的个数（即需要转换红为蓝的个数）；(count1-left1)表示当前位置后面1(蓝)的个数（即需要转换蓝为红的个数）
      if (min2 < min1) min1 = min2;
    }
    console.log(min1);
```
