2022.11.8 ONES 前端笔试

这好像是思否的母公司?讨论的人数好低,

豪哥666

选择题

  1. 2022/11/06Date 对象分别调用 getMonth/getDate/getDay 的结果是?
    1. 结果是:10/6/0,考察 Date|API 的八股
  2. 操作系统的功能不包括
    1. 用户管理 - 不包括这个
    2. 进程管理
    3. 处理机、设备管理
    4. 存储管理
  3. input 进入页面自动获取焦点的属性是?
    1. autofocus,值为 Boolean 类型,参考 autofocus - MDN
  4. 关于 IP 数据报尽最大努力交付理解错误的是?太过偏僻的八股,完全没见过
  5. TCP 三次握手中第三次握手发送的 TCP 段的 TCP 头的标志位是什么?
    1. ACK - 正确答案
    2. SYN + ACK
    3. SYN
  6. undefined + undefinedps: 这是一道考察 this 指向的问题,但 this 比较简单,反而是输出判断比较难
  7. 下面哪个状态码会发送两次请求?
    1. 304 - 协商缓存的状态码,先请求服务器判断是否
    2. 302
    3. 404
    4. 401
  8. 网卡实现的主要功能是?
    1. 物理层和数据链路层之间 - answer
    2. 数据链路层和网络层之间
    3. 网络层和传输层之间
    4. 传输层和应用层之间
    1. 构建 DOM 树 2. 构建 CSS 树 3. 绘制 render 树 4. 布局 render 树 5. 构建 render 树,请问 1-5 的顺序是?
    2. answer: 1-2-5-4-3
  9. 执行以下程序,对于下列选项的选择器,能且仅能选中第一个 <p> 标签的一项是?参考CSS 选择器
    1. .box p {}
    2. p~p {} - 正确答案
    3. div+p {}
    4. .box>p {}
<div class="box">
  <div></div>
  <p></p>
  <p></p>
</div>
  1. 分析以下的排序过程对应的排序算法是哪一种?(升序排序)
    1. 插入排序 - 排除
    2. 选择排序 - 排除
    3. 归并排序 - 排除
    4. 冒泡排序
初始:  51 64 42 56 86 140 12 43
第一趟: 51 42 56 64 86 12 43 140

手撕

  1. 反转字符串,例如 123 -> 321
  2. 假设有 n 个金币,按顺序(1 - n)一字排开,小 A 和 小 B 捡金币,小 A 从头开始捡到 L 位置,小 B 从后面开始捡到 R 位置,要求 L < R,问他们两个捡到的金币差值的绝对值最小值和 L|R 位置是多少呢?
// 测试用例
// 5  
// 1 2 3 4 5  
// a: 1 3 5  min: 1, L: 3, R: 5
// 5  
// 1 1 1 1 1  
// a: 0 1 5  
// 10  
// 1 2 3 4 1 1 3 2 1 4  
// a: 0 4 7

解法

只过了 65.97%,超时了,估计是 coinTotalToStartcoinTotalToEnd 超时了,每次调用都是 O(n),应该采用前缀和数组

也有同学指出可以使用首尾双指针解决这道问题

// 本题为考试多行输入输出规范示例,无需提交,不计分。  
var readline = require("readline");  
const rl = readline.createInterface({  
  input: process.stdin,  
  output: process.stdout,  
  terminal: false,  
});  
  
var n = -1; // 初始状态为负数,表示还没开始读取  
var numsLength = -1;  
var nums = [];  
rl.on("line", function (line) {  
  if (n === -1) {  
    numsLength = parseInt(line.trim());  
    n++;  
  } else if (n === 0) {  
    nums = line.split(' ').map(val => Number(val));  
    n++;  
    const arr = nums;  
    function coinTotalToEnd(arr, start) {  
      let total = 0;  
      for (let i = start; i < arr.length; i++) {  
        total += arr[i];  
      }  
      return total;  
    }  
  
    function coinTotalToStart(arr, end) {  
      let total = 0;  
      for (let i = 0; i <= end; i++) {  
        total += arr[i];  
      }  
      return total;  
    }  
  
    let resArr = [];  
    let min = Number.MAX_SAFE_INTEGER;  
  
    function dfs(arr, l, r) {  
      if (l >= r) {  
        return;  
      }  
      const temp = Math.abs(coinTotalToStart(arr, l) - coinTotalToEnd(arr, r));  
      if (temp < min) {  
        resArr = [];  
        min = temp;  
        resArr.push([l, r]);  
      } else if (temp === min) {  
        resArr.push([l, r]);  
      }  
      dfs(arr, l + 1, r);  
      dfs(arr, l, r - 1);  
    }  
  
    dfs(arr, 0, arr.length - 1);  
    let minL = arr.length;  
    let minLIndex = undefined;  
    for (let i = 0; i < resArr.length; i++) {  
      if (resArr[i][0] < minL) {  
        minL = resArr[i][0];  
        minLIndex = i;  
      }  
    }  
    console.log(min, resArr[minLIndex][0] + 1, resArr[minLIndex][1] + 1);  
  }  
});

前缀和解法

function PartialSum(nums) {  
  const preSum = new Array(nums.length + 1).fill(0);  
  for (let i = 1; i < preSum.length; i++) {  
    preSum[i] = preSum[i - 1] + nums[i - 1];  
  }  
  this.preSum = preSum;  
}  
  
PartialSum.prototype.sumRange = function (left, right) {  
  return this.preSum[right + 1] - this.preSum[left];  
}  
  
function coinTotalToEnd(arr, start) {  
  return partialSum.sumRange(start, arr.length - 1);  
}  
  
function coinTotalToStart(arr, end) {  
  return partialSum.sumRange(0, end);  
}  
  
// 本题为考试多行输入输出规范示例,无需提交,不计分。  
var readline = require("readline");  
const rl = readline.createInterface({  
  input: process.stdin,  
  output: process.stdout,  
  terminal: false,  
});  
  
var n = -1; // 初始状态为负数,表示还没开始读取  
var numsLength = -1;  
var nums = [];  
var partialSum = null;  
rl.on("line", function (line) {  
  if (n === -1) {  
    numsLength = parseInt(line.trim());  
    n++;  
  } else if (n === 0) {  
    nums = line.split(' ').map(val => Number(val));  
    n++;  
    const arr = nums;  
    partialSum = new PartialSum(nums);  
  
    let resArr = [];  
    let min = Number.MAX_SAFE_INTEGER;  
  
    function dfs(arr, l, r) {  
      if (l >= r) {  
        return;  
      }  
      const temp = Math.abs(coinTotalToStart(arr, l) - coinTotalToEnd(arr, r));  
      if (temp < min) {  
        resArr = [];  
        min = temp;  
        resArr.push([l, r]);  
      } else if (temp === min) {  
        resArr.push([l, r]);  
      }  
      dfs(arr, l + 1, r);  
      dfs(arr, l, r - 1);  
    }  
  
    dfs(arr, 0, arr.length - 1);  
    let minL = arr.length;  
    let minLIndex = undefined;  
    for (let i = 0; i < resArr.length; i++) {  
      if (resArr[i][0] < minL) {  
        minL = resArr[i][0];  
        minLIndex = i;  
      }  
    }  
    console.log(min, resArr[minLIndex][0] + 1, resArr[minLIndex][1] + 1);  
  }  
});
#ones##ONES##笔试题目#
全部评论
这些选择都是标答吗
1 回复 分享
发布于 2022-11-09 22:50 浙江
第二题过了86,首尾双指针,没有约面的是不是寄了
1 回复 分享
发布于 2022-11-11 07:15 上海
lz过了吗
点赞 回复 分享
发布于 2022-11-10 16:56 湖南
这笔试题和我后端不一样
点赞 回复 分享
发布于 2022-11-10 17:03 上海

相关推荐

点赞 评论 收藏
分享
1 6 评论
分享
牛客网
牛客企业服务