滴滴出行高级Node.js开发工程师笔试题2024

今天参加了一个滴滴出行的Node.js岗位面试,一面为腾讯视频面试,俩个面试官。面试官比较深入问一些你过去做个的项目,问你解决了哪些棘手的问题。
还有就是他们比较关注性能优化,会问你们现在项目的峰值QPS是多少,如何进行优化等等
最后会在聊天窗口发你两道笔试题,让你在自己本地IDE编写代码调试,但是要开启屏幕共享,方便让他们欣赏你编码的过程。
下面贴一下原题

笔试题1

给定由 a-z A-Z 空格 组成的一个字符串,要求:按字典序输出该字符串中出现的全部字母去重并转化为小写,并给出时间复杂度

例:输入 Hello World,输出 dehlorw

js 复制代码
let str = "Hello World";
let result = str
  .toLowerCase()
  .split("")
  .filter((item) => item !== " ")
  .sort();

console.log([...new Set(result)].join(""));

上面的代码仅供参考,大家可以自行研究性能更高的方式。

笔试题2

给定一个域和一个字符串,若该字符串是一个合法的http/https链接,返回该链接是否在给定域或者其子域下,否则报错退出

例:

输入 didi.com, http://fast.didi.com/foo/bar 返回 true

输入 didi.com, http://fast.uber.com/foo 返回 false

输入 didi.com, fast.didi.com throw Error

你可能也想到使用正则了吧

bash 复制代码
let str = "http://fast.didi.com/foo/bar";
let domain = "didi.com";

function test(domain, str) {
  if (!/^http/.test(str)) {
    throw new Error("str is not a valid url");
  }
  return str.includes(domain);
}

// console.log(test(domain, "http://fast.didi.com/foo/bar"));
// console.log(test(domain, "http://fast.uber.com/foo"));
// console.log(test(domain, "fast.didi.com"));
// console.log(test(domain, "xxhttp://fast.didi.com.cn"));

其实上面的正则还是有问题的,只是可以通过当前给定的测试用例。

更好的方法可以借助javascript的内置对象URL来处理这个问题:

bash 复制代码
function isValidURL(urlString) {
  try {
    new URL(urlString);
    return true; // 如果没有抛出错误,则URL是合法的
  } catch (e) {
    return false; // 如果抛出了错误,则URL不是合法的
  }
}

希望可以帮到你。

相关推荐
橘右溪1 小时前
Node.js核心模块及Api详解
node.js
在下千玦19 小时前
#管理Node.js的多个版本
node.js
你的人类朋友20 小时前
MQTT协议是用来做什么的?此协议常用的概念有哪些?
javascript·后端·node.js
还是鼠鼠1 天前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
南通DXZ1 天前
Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
前端·webpack·node.js
你的人类朋友1 天前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
前端太佬1 天前
暂时性死区(Temporal Dead Zone, TDZ)
前端·javascript·node.js
Mintopia1 天前
Node.js 中 http.createServer API 详解
前端·javascript·node.js
你的人类朋友1 天前
CommonJS模块化规范
javascript·后端·node.js
Mintopia2 天前
Node.js 中 fs.readFile API 的使用详解
前端·javascript·node.js