编程题

1.机器人送餐最短路径

  • 58充电堡餐厅为了提升员工就餐体验,研发一个送餐机器人,用于为在线下单的就餐人员送餐。
  • 餐桌分布为一个比较工整的网格图,每一个餐桌座位都是坐标轴上第一象限中的一个整点,如图所示。
  • 员工随意挑选座位后并下单。厨房收集订单信息。由机器人从默认起始位置(0, 0)开始送餐
  • 机器人每1步只能移动一个座位,不能走对角线。机器人可以向x轴正方向,x轴负方向,或者y轴正方向移动1个单位(出于某种原因,机器人不能向y轴的负方向移动)
  • 例如,如果当前时刻机器人所在的坐标为(x, y),下一步机器人可能可以到达的位置为(x + 1, y),(x - 1, y)或者(x, y + 1)。当机器人到达某个餐桌座位时,就餐人员就会立即取餐。一旦机器人分发完所有的饭菜,则表示送餐结束
  • 写一个函数delivery,帮它计算一下送完一次订单最少所需要花费的总步数
1

2.字符串截取

请从一个字符串中找出符合要求的子字符串(子串:字符串中一段连续的片段),并输出该子字符串。

要求:

​ 1、子字符串长度最长,且不包含重复字符。

​ 例如:”qwertezxc” 数组中,最长且不包含重复字符子串是:”rtezxc”

​ 2、如果存在两个同等长度的子串,则优选取首字母下标靠前的子串。

​ 例如:“abcdeabc” 的子串 “abcde” 和 “bcdea” 的长度都是5,但是“abcde”的起始位置小于“bcdea”,则输出“abcde”

1

选择题错题整理

  1. a,b,c值分别是什么:
1
2
3
const a = ([]) ? true : false;
const b = [] == false ? true : false;
const c = ({}== false) ? true: false;

A false,true,true

B true,true,true

C true,false,false

D true,true,false

16.以下代码块执行结果是 A

1
console.log('AABCA'.replace('AB','a')); console.log('AABCA'.replace(/[AB]/,'a'));

A AaCA; aABCA

B AABCA; AaCA

C AaCA; aaaCA

D AaCA; AaCA

解析/[AB]/ 是一个简单的正则表达式,用于匹配单个字符,这个字符可以是 AB/[AB]/ 是一个简单的正则表达式,用于匹配单个字符,这个字符可以是 AB

20.以下输出结果 D

1
2
3
4
5
6
7
8
9
const a = 10;
const obj = {
a: 20,
console: () => {
var a = 30;
console.log(this.a)
}
}
obj.console()

A 10

B 20

C 30

D undefined

解析:箭头函数 console: () => { ... } 内的 this 指向的是定义它的上下文,而在浏览器环境中,全局对象 window 中并没有 a 属性,因此 this.a 返回 undefined

  1. 以下输出结果 D
1
2
3
const obj = { 2: 1, ``''``: 1, 0: 1, 1: 1, }; 
const keys = Object.keys(obj);
console.log(keys);

A [2, ‘’, 0, 1]

B [‘2’, ‘’, ‘0’, ‘1’]

C [0, 1, 2, ‘’]

D [‘0’, ‘1’, ‘2’, ‘’]

解析:key按顺序排列

  1. 箭头函数是普通函数的简写,可以更优雅的定义一个函数,和普通函数相比,以下差异说明错误的是A

A 函数体内的 this 对象,就是使用时所在的对象,而不是定义时所在的对象

B 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替

C 没有自己的 this,无法调用 call,apply

D 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数