Files
2026-10-02 23:54:34 +08:00

539 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 爱特工作室鸿蒙部 2026 级国庆学习
欢迎大家参加鸿蒙部的国庆学习与考核。
这次任务主要有两个目的:
一是让大家利用国庆这段相对完整的时间,简单接触一下后面会用到的 TypeScript;
二是通过几道不算复杂的题,看看大家这一周学到了多少,以及遇到问题时会怎么解决。
不用担心之前完全没接触过 TypeScript 或 HarmonyOS。这次本身就是从基础开始,也不会考 ArkUI、HarmonyOS API 之类还没有要求大家学习的内容。
整体学习时间建议控制在 **10 小时左右**,最后的 5 道题正常情况下大约需要 **45~60 分钟**。
---
## 1. 学习内容
这次先学 TypeScript 基础。
后面正式进入鸿蒙部以后,我们会在这个基础上继续学习 ArkTS、ArkUI 和 HarmonyOS 应用开发,所以这次没必要追求“把 TypeScript 全学完”,先把最常用的东西掌握好就可以。
### 推荐网课
黑马程序员:
**《TypeScript 入门视频,不用学 JavaScript 也能看得懂》**
Bilibili:
https://www.bilibili.com/video/BV1UD4y1m7Gw/
这套课不需要全部看完。
看到本 README 下面列出的知识范围基本就够了,后面的 Web、DOM、HTML / CSS 等内容与这次考核无关,可以先跳过。
---
## 2. 这次需要掌握什么
### 基本语法
- `let`
- `const`
- `number`
- `string`
- `boolean`
- 基本类型注解
- 基本类型推断
### 条件与循环
- 基本运算符
- 比较运算
- 逻辑运算
- `if / else`
- `for`
- `break`
- `continue`
### 数组
至少会:
- 创建数组
- 通过下标访问元素
- 遍历数组
- 做简单的统计、筛选和查找
### 函数
至少会:
- 定义函数
- 传入参数
- 返回结果
### 对象与接口
至少了解:
- 对象的基本写法
- `interface`
- 对象数组
### Debug
希望大家遇到简单错误时,能先自己看看:
- 报错信息在说什么
- 类型是不是写错了
- 循环边界有没有问题
- 条件判断是不是写反了
- 代码实际运行结果为什么和自己想的不一样
不要求大家国庆之后就很熟练,能开始建立这种意识就够了。
---
## 3. 这次不用学什么
下面这些内容这次都 **不考**:
- ArkUI
- HarmonyOS API
- Stage 模型
- HarmonyOS 页面开发
- DOM
- HTML / CSS
- Vue / React
- 复杂泛型
- 装饰器
- TypeScript 高级类型
如果网课里讲到了,可以暂时跳过去。
后面正式上专业课的时候,我们再一点一点学。
---
## 4. 学习时建议怎么做
不建议只把视频从头到尾放一遍。
最好一边看,一边自己把代码敲出来。
有些地方觉得自己已经懂了,可以倍速;但碰到函数、数组、对象这些内容,还是建议实际跑一下。
如果运行结果不对,也不用马上看答案,可以先自己改一改。
学习过程中可以正常使用:
- 搜索引擎
- TypeScript 文档
- ChatGPT
- Claude
- DeepSeek
- Kimi
- 其他正常的学习和开发工具
AI 可以拿来解释概念、看报错、帮忙 Debug,也可以在你卡住的时候提供思路。
但是最后提交的代码,至少要保证自己知道它在干什么。
二面的时候可能会直接从你提交的代码里挑一段问,也可能临时改一个条件让你看看应该怎么修改。
所以没必要为了让代码显得“高级”去写一堆自己也解释不清楚的东西。
---
# 5. 国庆摸底题
共 **5 题,100 分**。
前三题都是基础题,第 4 题稍微综合一些,第 5 题会明显难一点。
建议顺序做。
如果最后一题没完全做出来也没关系,可以把已经完成的部分和自己的思路留下来。
---
## 第 1 题:成绩等级(20 分)
编写函数:
```ts
function getGrade(score: number): string {
// ...
}
```
根据 `score` 返回对应等级:
- `90~100`:`"A"`
- `80~89`:`"B"`
- `60~79`:`"C"`
- `0~59`:`"D"`
如果 `score < 0` 或 `score > 100`,返回:
```text
Invalid
```
例如:
```ts
getGrade(86) // "B"
getGrade(105) // "Invalid"
```
---
## 第 2 题:数组统计(20 分)
编写函数:
```ts
function sumPositiveEven(nums: number[]): number {
// ...
}
```
计算数组中所有 **正偶数** 的和。
注意:
- `0` 不算正数;
- 负偶数不计入结果。
例如:
```ts
sumPositiveEven([1, 2, -4, 6, 7, 0])
```
应返回:
```text
8
```
---
## 第 3 题:图书筛选(20 分)
首先定义一个 `Book` 接口,包含:
```ts
title: string
price: number
inStock: boolean
```
然后编写:
```ts
function getAvailableBooks(
books: Book[],
maxPrice: number
): string[] {
// ...
}
```
返回所有同时满足下面两个条件的图书标题:
1. 有库存;
2. 价格不高于 `maxPrice`。
返回结果保持原来的图书顺序。
例如当:
```text
maxPrice = 50
```
时,只返回“有库存并且价格不超过 50”的图书标题。
---
## 第 4 题:班级成绩统计(25 分)
给定:
```ts
interface Student {
name: string
score: number
}
```
请再定义:
```ts
interface StudentSummary {
average: number
highestName: string
passNames: string[]
}
```
然后实现:
```ts
function analyzeStudents(
students: Student[]
): StudentSummary {
// ...
}
```
返回以下信息:
### `average`
全班平均分。
不需要四舍五入。
### `highestName`
最高分同学的姓名。
### `passNames`
所有及格同学的姓名。
及格标准:
```text
score >= 60
```
保持原顺序。
### 特殊情况
如果:
```ts
students.length === 0
```
则返回:
```ts
{
average: 0,
highestName: "",
passNames: []
}
```
---
## 第 5 题:Todo 状态处理(提高题,15 分)
给定:
```ts
interface Todo {
id: number
title: string
finished: boolean
}
interface TodoSummary {
total: number
finishedCount: number
unfinishedTitles: string[]
}
```
请实现:
```ts
function updateAndSummarize(
todos: Todo[],
finishedIds: number[]
): TodoSummary {
// ...
}
```
要求:
首先根据 `finishedIds` 更新 Todo 状态。
如果某个 Todo 的 `id` 出现在 `finishedIds` 中,则将它视为已完成。
然后返回:
### `total`
Todo 总数。
### `finishedCount`
已完成 Todo 的数量。
### `unfinishedTitles`
所有仍未完成 Todo 的标题,保持原顺序。
### 需要注意
`finishedIds` 中可能出现不存在的 `id`,直接忽略即可。
输入数组也可能为空。
本题可以只使用 `for` 循环完成,也可以使用自己已经掌握的基础数组方法。
这道题主要想看看大家能不能把一段自然语言需求拆成几个代码步骤。
没有完全做出来也没有关系,可以保留自己已经完成的部分和思路。
---
# 6. 作答要求
所有题目使用 **TypeScript** 完成。
实现方式不限,以:
> **正确、清晰、自己能够解释**
为准。
不要求使用高级语法。
建议先把前三题完成,再处理第 4、5 题。
可以把 5 道题分别保存为:
```text
Q1.ts
Q2.ts
Q3.ts
Q4.ts
Q5.ts
```
也可以统一写在:
```text
exam.ts
```
里,用注释把不同题目分开。
推荐使用前一种方式,后面自己看起来也更方便。
---
# 7. Git 仓库
按照工作室统一要求,请在爱特工作室代码托管平台建立自己的答题仓库:
https://git.itouc.cn/
仓库内容可以类似:
```text
README.md
Q1.ts
Q2.ts
Q3.ts
Q4.ts
Q5.ts
```
建议保留正常的 Git 提交记录。
不需要为了 Commit 数量专门拆很多次提交。
比较自然的方式是:
- 完成一道题,提交一次;
- 修复一个比较明显的问题,再提交一次;
- 后面修改了自己的实现,再正常提交。
重点是留下自己完成任务的正常过程。
仓库权限、公开时间等要求以工作室国庆考核统一通知为准:
https://www.itouc.cn/announcement/about-national-day/
---
# 8. 提交
鸿蒙部部门考核提交邮箱:
**yurunli.contact@gmail.com**
具体邮件命名、附件命名、仓库权限及提交时间,请按照工作室统一通知执行:
https://www.itouc.cn/announcement/about-national-day/
请不要把鸿蒙部部门考核和工作室统一综合考核混在一起。
鸿蒙部这部分按照本 README 完成即可。
---
# 9. 关于成绩和二面
这次考核最终不是单纯看:
> “一共做出来了几道题。”
我们主要会看:
- 基础内容有没有真正学会;
- 代码能不能正常运行;
- 写代码时的思路;
- 遇到问题时怎么处理;
- 自己能不能解释提交的代码;
- 第 4、5 题的完成情况。
前三题做好,已经能够说明这次基础学习完成得不错。
第 4 题主要看综合运用。
第 5 题更多是给学有余力的同学留一点发挥空间,不要求大家全部做出来。
后续二面可能会从你自己的答案中随机挑一道,例如:
- 让你解释这段代码为什么这么写;
- 改一个条件之后应该修改哪里;
- 问有没有另一种写法;
- 给现有代码加一个很小的功能;
- 找一个简单 Bug。
不用紧张,主要还是想确认大家国庆期间到底学到了什么。
---
## 最后
第一次接触一门语言的时候,写得慢、报错多、看不懂一些东西都很正常。
这次国庆任务也不是为了筛出“谁已经很会编程”。
如果一周之后,你能从:
> “我完全不知道 TypeScript 是什么”
走到:
> “我能自己写一个简单函数,能看懂一点报错,也能解决几道基础题”
这次学习就已经有意义了。
祝大家国庆愉快。
**—— 爱特工作室鸿蒙部**