# 远程工作 · 面试大题实例 · 题目与交付整理（Uluru take-home）

> 整理时间：2026-09-25 ｜ 用途：R08 v1.2 第三关"大题"的真题 B-roll 素材（只展示题目形态，不展示做法）；也可独立成"一道远程面试题长什么样"实操款。原 R08 v2 四关版已 revert，本文件从 c20379d 恢复保留
> 原件位置（未入库，含公司名与他人邮箱）：`~/Downloads/Uluru/`
> 　- `Uluru – Take-Home Assignment (MLE).pdf`（5 页；另一份 `(1).pdf` 内容相同）
> 　- `time_dataset (1).csv`（20 行数据 + 1 行表头）
> 　- `github作业截图.png`（v0.2 README 上半部分）
> 　- `交付邮件截图.png`（2025-12-08 16:44 发出）
> 交付仓库（公开）：`https://github.com/MiniriceAI/studytime-prediction`
> 　- Release 1 `v0.1`：Baseline + Prompt LLM + Unified API + AWS Plan
> 　- Release 2 `v0.2`：Lightweight Fine-Tuning (Phi-2 + LoRA)
> 　- 仓库创建 2025-12-08，最后推送 2025-12-10
> 原则：只摘事实，不加工；口播里**不带公司名、不带对方姓名邮箱、不带在线地址 IP**

---

## 一、题目长什么样（PDF 原文摘要）

**业务**：一家北美在线教育公司，要估计一个学生完成一份作业需要多久（按学生画像、任务类型、难度、上下文特征）。

**要交的四样**：
1. 传统 ML 基线模型（必做）：最小预处理 + 任意回归模型（线性回归 / 随机森林 / XGBoost / LightGBM / 简单 MLP 均可）；选一个指标（推荐 MAE 或 MAPE）并说明原因；给验证结果；模型落盘
2. 大模型方案（必做，**二选一**）：
   - A. 提示词方案（最低要求）：把每条样本转成自然语言，调 OpenAI / Anthropic / Llama 等，同一指标评估
   - B. 轻量微调（必做项里的加分）：小开源模型 + LoRA 或简单 SFT；**"训几步就行，我们主要看你的 pipeline 和 reasoning"**，不要求训大模型
3. 统一预测服务（必做）：FastAPI / Flask，`POST /predict`，请求体带 `model_type: baseline | llm` 等字段；基线模型必须从磁盘加载不能每次重训；本地 `python app.py` 能跑即可
4. 可选加分：Dockerfile；AWS 部署方案（ECS+ALB / Lambda+API Gateway / 权重放 S3 / 日志·环境变量·监控备注 / Terraform 或 CDK 骨架）；**"你也可以临时部署一个真实端点——严格可选"**

**数据集**：`time_dataset.csv`，一行 = 一个学生做一个任务。列：student_id / grade_level / student_type(fast·average·slow，可缺) / task_type(math_mcq·reading·writing·coding·video…) / difficulty(1–5) / tokens 或 assignment_description / device_type / time_of_day / **time_spent_minutes（标签）**。**实际只有 20 行。**

**交付要求**：Git 仓库或 ZIP，含训练代码（基线+LLM）、推理服务代码、基线模型文件、README（安装 / 怎么训 / 怎么起服务 / 示例请求响应 / 评估结果 / 基线 vs LLM 对比 / 可选的 AWS·Docker 说明）。

**预期投入**：**6–8 小时**（"看你做多深"）。实际给的时间：一周（黄波口述）。

**评分标准（印在题上）**：
- 核心：对预测问题的理解 / 基线建模质量 / LLM 推理或微调思路 / 代码清晰可复现 / API 设计与服务结构
- 加分：干净的提示词工程 / 容器化 / AWS 部署思路 / 微调 pipeline 清晰度

---

## 二、黄波怎么交的（仓库 + 邮件事实）

**总策略（口播三句话）**：题目说二选一，两个都做；题目说可选，全做；题目说可以不部署，部署了。

**Release 1（v0.1）**
- 基线：XGBoost 回归 + 预处理器，落盘 `models/baseline_model.pkl` / `preprocessor.pkl`
- LLM：提示词方案，调 OpenAI GPT，`src/llm_predictor.py` + `src/evaluate_llm.py`
- 服务：FastAPI `app.py`，单一 `/predict` 端点支持两种 model_type，另有 `/health`、Swagger `/docs`
- 部署：Dockerfile + docker-compose + `terraform/`（ECS + ALB 完整配置）
- README：安装（conda / pip，含 macOS XGBoost OpenMP 坑）、训练、评估、起服务、Docker、API 用法

**Release 2（v0.2）**
- LLM 换成 **Phi-2（2.7B）+ LoRA 微调**，不依赖外部 API；新增 `prepare_finetuning_data.py`（CSV→JSONL）、`train_llm_finetune.py`、`llm_model_loader.py`；`config.yml` 可配 epochs=3 / batch=4
- 交付了 LoRA 权重目录 `models/phi2_lora/`（README 引用）+ `download_models.sh`
- **真实部署到 AWS**，README 里放了 Online Demo（health + predict 地址）——题目里写的是"严格可选"
- 新增 `AWS_DEPLOYMENT_CHECKLIST.md`、`Dockerfile.aws`、`Changelog.md`（按 session 记录改了什么）
- **评估数字原样写进 README**：Validation MAE 7.17 min / MAPE 44.16%；Test MAE 14.60 min / MAPE 141.07%（20 行数据，难看是必然；题目明说看 pipeline 和 reasoning）

**交付邮件（2025-12-08）原文结构**：
1. Thanks for the assignment.
2. I've completed the projects and uploaded to GitHub: studytime-prediction
3. The submission fully meets the stated requirements, including both the baseline ML model, LLM-based solution (prompt-based **and** lightweight fine-tuning), unified API service, and AWS deployment plan.
4. The project fulfils the requirements with two release: Release 1 … / Release 2 …
5. Please have a check, thanks!

---

## 三、可直接进口播的事实句（已核）

- "题目是一份五页的 PDF"
- "给了一个数据集，打开一看只有 20 行"
- "要交四样东西……二选一……可选加分 AWS 部署方案"
- "预期用时题上写着六到八小时"
- "评分标准直接印在题上"
- "题目说二选一我两个都做；说可选我全做；说可以不部署我部署了"
- "27 亿参数的开源小模型加 LoRA 微调，连模型文件一起交"（注意 R06 已发版说"二十亿"）
- "README 里放了在线地址"
- "指标难看照样写进 README，题目说看的是流程和思路"
- "一个 GitHub 仓库，两个 release，邮件几句话"

## 四、脱敏清单（上屏前必做）

| 素材 | 打码 |
|---|---|
| PDF 首页 | 公司名 Uluru、Logo |
| 邮件截图 | 收件人 xming.dev / tank、黄波 Gmail 地址、头像 |
| README v0.2 | Online Demo 的 IP 地址 |
| CSV / README 截图 / 文件树 / release 页 | 无需打码 |

## 五、关联

- 口播稿：`../远程工作系列-口播稿/R08_远程面试干货全版_四关_*`
- R06（三步递进、投名状）用的是同一道题，本文件是它的实物底稿
- 面试专题总素材：`远程工作-面试专题-原始素材.md`
