Skip to content

Instantly share code, notes, and snippets.

@iugo
Created August 25, 2023 02:02
Show Gist options
  • Select an option

  • Save iugo/2fe2a21000b6ddcd5fb6489f564ee800 to your computer and use it in GitHub Desktop.

Select an option

Save iugo/2fe2a21000b6ddcd5fb6489f564ee800 to your computer and use it in GitHub Desktop.
test

无答案版本

题目:

1, 如何循环 (书写) (20分钟) (分值 20)

data = [{name: "Joe", age: 12}, {name: "Irving", age: 42}, {name: "Olive", age: 31}]

主题目每个 2 分, 剩下的每个 1 分. 共 20 分

  1. 问题一: 找到叫 Joe 的人.
  2. 问题: 使用不同的方法(至少三种)找到所有叫 Joe 的人.
  3. 问题二: 找到最大的年龄. (普通取一个值)
  4. 问题: 使用不同的方法 找到最大的年龄. (至少一个额外方法)
  5. 问题三: 找到年龄平均数. (取一个值, 取巧方法)
  6. 问题: 使用不同的方法 找到年龄平均数. (至少一个额外方法)
  7. 问题四: 找到年龄中位数. (取一个值, 取巧方法)
  8. 问题五: 为每个人生成一个编号, 数据转为 { name, age, number }.
  9. 问题: 找到所有 Joe, 语意化最佳方法是什么.
  10. 问题: 找到最大的年龄, 语意化最佳方法是什么.
  11. 问题: 生成编号, 语意化最佳方法是什么.
  12. 问题六: for, for of 和 for in 区别.
  13. 问题七: 几个数组循环方法和 for 逻辑语句有什么不同, 应用场景. (工程问题, 至少包含 .find().some() 的区别, .reduce(), .filter(), .map() 等的区别)

最终答案会在浏览器控制台中验证, 全部答对为满分.

2, Git 回滚. (口述) (5分钟) (分值 5)

有三个分支:

  1. main
  2. fix
  3. next

操作流程复现如下:

  1. 将 fix 分支合并到 next 分支.
  2. next 分支合并到 main, 然后发现这个不该合并.
  3. 就在 main 上回滚 revert 了 next 分支.
  4. 继续在 next 分支上开发.
  5. 合并 next 分支到 main 分支.
  6. 发现之前 fix 的内容丢失.

可能是什么原因, 为什么会发生, 如何修复, 如何避免.

3, TypeScript (书写) (10分钟) (分值 15)

为第一题中的原始数据写类型. (3 分)

写一个正整数的类型判断函数. (2 分)

下面两小题, 每小题 5 分.

使用泛型的题目为, 为高阶函数写类型:

// 题目
function hofjs(fn) {
  return (...rest) => {
    const res = fn(...rest);
    console.log(res);
    return res;
  }
}

刚才不支持异步, 如果要支持异步该怎么办呢?

// 测试
const h1 = hof((v: string) => Promise.resolve(Number(v)))
const h2 = hof((v: string) => Number(v))
const h3 = hof(async (v: string) => Number(v))

h1('123');
h2('1234');
h3('12345');

全部完成为满分.

4, 找 bug. (口述) (10分钟) (分值 10)

每个 bug 2 分, 共 10 分.

type User = {name: string, age: number};
type FetchDataFromDB = () => Promise<User[]>;
// 假设其他人已经完成了 fetchDataFromDB, 并且引用, 总之 fetchDataFromDB 本身不算问题.
function getLast(): User {
  const d = fetchDataFromDB();
  return d[0];
}
function getNum(v: unknown) {
  if (Number(v) == NaN) {
    throw 'wrong param';
  }
  return Number(v);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment