Skip to content

Instantly share code, notes, and snippets.

@iugo
Created August 4, 2022 01:54
Show Gist options
  • Select an option

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

Select an option

Save iugo/df08bf529716c5100684ffa9af274810 to your computer and use it in GitHub Desktop.
面试题
无答案版本
题目:
============
1, 如何循环 (书写) (20分钟) (分值 20)
-------------------
`data = [{name: "Joe", age: 12}, {name: "Irving", age: 42}, {name: "Olive", age: 31}]`
主题目每个 2 分, 剩下的每个 1 分. 共 20 分
1. 问题一: 找到叫 Joe 的人.
1. 问题: 使用不同的方法(至少三种)找到所有叫 Joe 的人.
1. 问题二: 找到最大的年龄. (普通取一个值)
2. 问题: 使用不同的方法 找到最大的年龄. (至少一个额外方法)
3. 问题三: 找到年龄平均数. (取一个值, 取巧方法)
5. 问题: 使用不同的方法 找到年龄平均数. (至少一个额外方法)
6. 问题四: 找到年龄中位数. (取一个值, 取巧方法)
6. 问题五: 为每个人生成一个编号, 数据转为 `{ name, age, number }`.
7. 问题: 找到所有 Joe, 语意化最佳方法是什么.
8. 问题: 找到最大的年龄, 语意化最佳方法是什么.
9. 问题: 生成编号, 语意化最佳方法是什么.
10. 问题六: for, for of 和 for in 区别.
11. 问题七: 几个数组循环方法和 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 分.
使用泛型的题目为, 为高阶函数写类型:
```js
// 题目
function hofjs(fn) {
return (...rest) => {
const res = fn(...rest);
console.log(res);
return res;
}
}
```
刚才不支持异步, 如果要支持异步该怎么办呢?
```ts
// 测试
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 分.
```ts
type User = {name: string, age: number};
type FetchDataFromDB = () => Promise<User[]>;
// 假设其他人已经完成了 fetchDataFromDB, 并且引用, 总之 fetchDataFromDB 本身不算问题.
function getLast(): User {
const d = fetchDataFromDB();
return d[0];
}
```
```ts
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