龙虾高级课作业有多硬核?看完我跪了
龙虾高级课作业有多硬核?看完我跪了

大家好,我是正在实战各种 AI 项目的程序员晚枫。

📝 开篇:作业才是真功夫

"晚枫,龙虾高级课作业难不难?能不能 water 过去?"

我的回答:不能,而且没必要

课程的价值,一半在讲课,一半在作业。作业 water 了,钱就白花了。

我拿到了第 1 期的全部作业,看完只有一个感觉:这作业,太硬核了

今天把作业曝光出来,帮你判断是否能完成。


📋 作业设计原则

原则 1:循序渐进

1
2
3
4
第 1 周:基础巩固(难度⭐⭐)
第 2 周:能力提升(难度⭐⭐⭐)
第 3 周:挑战自我(难度⭐⭐⭐⭐)
第 4 周:综合实战(难度⭐⭐⭐⭐⭐)

原则 2:实战导向

1
2
3
4
5
不是"写个函数计算斐波那契"
而是"优化你项目中的实际代码"

不是"实现一个排序算法"
而是"解决真实场景的性能问题"

原则 3:代码评审

1
2
3
每次作业都有讲师逐行点评
指出问题,给出优化建议
优秀作业会在全班展示

📝 第 1 周作业:装饰器实战

作业要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
题目:用装饰器实现三个功能

1. 日志装饰器
- 记录函数调用参数
- 记录函数返回值
- 记录执行时间

2. 缓存装饰器
- 缓存函数返回值
- 支持过期时间
- 支持最大缓存数

3. 重试装饰器
- 失败自动重试
- 可配置重试次数
- 可配置重试间隔

要求:
- 装饰器要支持参数
- 要用 functools.wraps
- 要写单元测试
- 要在实际项目中使用

学员作品示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import time
import functools
from collections import OrderedDict

def logger(log_file='app.log'):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()

log_msg = (
f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] "
f"{func.__name__} called with args={args}, kwargs={kwargs}, "
f"result={result}, cost={end-start:.3f}s\n"
)

with open(log_file, 'a') as f:
f.write(log_msg)

return result
return wrapper
return decorator

def cache(max_size=128, ttl=300):
def decorator(func):
cache_data = OrderedDict()

@functools.wraps(func)
def wrapper(*args, **kwargs):
key = (args, tuple(sorted(kwargs.items())))

if key in cache_data:
value, timestamp = cache_data[key]
if time.time() - timestamp < ttl:
return value
else:
del cache_data[key]

value = func(*args, **kwargs)
cache_data[key] = (value, time.time())

if len(cache_data) > max_size:
cache_data.popitem(last=False)

return value
return wrapper
return decorator

def retry(times=3, delay=1):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for i in range(times):
try:
return func(*args, **kwargs)
except Exception as e:
if i == times - 1:
raise
time.sleep(delay)
return wrapper
return decorator

讲师点评

1
2
3
4
5
6
7
8
9
10
11
✓ 优点:
- 代码结构清晰
- 用了 OrderedDict 实现 LRU
- 异常处理完善

✗ 改进:
- 缓存 key 生成可以用 hashlib 优化
- 日志可以异步写入,避免阻塞
- 可以加线程锁,支持并发

评分:90/100

📝 第 2 周作业:描述符与元类

作业要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
题目:实现一个简易 ORM

1. 字段类(用描述符)
- IntegerField
- CharField
- DateTimeField
- 支持默认值
- 支持必填校验

2. 模型类(用元类)
- 自动收集字段
- 自动注册到模型缓存
- 支持表名自动生成

3. 基础 CRUD
- save() 保存对象
- delete() 删除对象
- objects.all() 查询所有
- objects.filter() 条件查询

要求:
- 代码不超过 200 行
- 要写使用示例
- 要写单元测试

学员作品示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
class Field:
def __init__(self, default=None, required=False):
self.default = default
self.required = required
self.name = None

def __get__(self, instance, owner):
if instance is None:
return self
return instance.__dict__.get(self.name, self.default)

def __set__(self, instance, value):
if self.required and value is None:
raise ValueError(f"{self.name} is required")
instance.__dict__[self.name] = value

class IntegerField(Field):
def __set__(self, instance, value):
if value is not None and not isinstance(value, int):
raise TypeError(f"{self.name} must be an integer")
super().__set__(instance, value)

class CharField(Field):
def __set__(self, instance, value):
if value is not None and not isinstance(value, str):
raise TypeError(f"{self.name} must be a string")
super().__set__(instance, value)

class ModelMeta(type):
def __new__(mcs, name, bases, attrs):
fields = {k: v for k, v in attrs.items()
if isinstance(v, Field)}

for field_name, field in fields.items():
field.name = field_name

attrs['_fields'] = fields
attrs['_table_name'] = name.lower() + 's'

new_class = super().__new__(mcs, name, bases, attrs)
ModelRegistry.register(new_class)

return new_class

class Model(metaclass=ModelMeta):
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)

def save(self):
# 模拟保存到数据库
print(f"Saving {self} to {self._table_name}")

def delete(self):
# 模拟删除
print(f"Deleting {self} from {self._table_name}")

@classmethod
def objects(cls):
return QuerySet(cls)

class ModelRegistry:
_models = {}

@classmethod
def register(cls, model_class):
cls._models[model_class._table_name] = model_class

class QuerySet:
def __init__(self, model_class):
self.model_class = model_class

def all(self):
# 模拟查询所有
print(f"Query all from {self.model_class._table_name}")
return []

def filter(self, **kwargs):
# 模拟条件查询
print(f"Query {kwargs} from {self.model_class._table_name}")
return []

讲师点评

1
2
3
4
5
6
7
8
9
10
11
✓ 优点:
- 描述符协议理解正确
- 元类实现简洁
- 代码结构清晰

✗ 改进:
- 可以加更多字段类型
- 查询可以支持链式调用
- 可以集成真实数据库

评分:95/100

📝 第 3 周作业:性能优化

作业要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
题目:优化一个慢接口

1. 选择一个你项目中的慢接口
- 或者用提供的示例代码

2. 用性能分析工具定位瓶颈
- cProfile
- line_profiler
- memory_profiler

3. 针对性优化
- 算法优化
- 数据结构优化
- 并发优化
- 缓存优化

4. 验证优化效果
- 优化前后对比
- 性能提升百分比

要求:
- 写优化报告
- 附上性能分析截图
- 优化至少 5 倍以上

学员作品示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 优化前:30 秒
def process_users_slow(user_ids):
results = []
for user_id in user_ids:
user = User.objects.get(id=user_id)
orders = Order.objects.filter(user_id=user_id)
for order in orders:
items = OrderItem.objects.filter(order_id=order.id)
for item in items:
results.append({
'user': user.name,
'order': order.id,
'item': item.name,
'price': item.price
})
return results

# 优化后:2 秒
def process_users_fast(user_ids):
# 预加载用户
users = User.objects.in_bulk(user_ids)

# 预加载订单
orders = Order.objects.filter(
user_id__in=user_ids
).select_related('user')

# 预加载订单项
order_ids = [order.id for order in orders]
items = OrderItem.objects.filter(
order_id__in=order_ids
)

# 组织数据
order_items = {}
for item in items:
if item.order_id not in order_items:
order_items[item.order_id] = []
order_items[item.order_id].append(item)

# 生成结果
results = []
for order in orders:
user = users[order.user_id]
for item in order_items.get(order.id, []):
results.append({
'user': user.name,
'order': order.id,
'item': item.name,
'price': item.price
})

return results

优化报告

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
优化前:
- 执行时间:30 秒
- 数据库查询:1000+ 次(N+1 问题)
- 内存占用:500MB

优化后:
- 执行时间:2 秒
- 数据库查询:3 次
- 内存占用:100MB

提升:
- 速度提升:15 倍
- 查询减少:99.7%
- 内存减少:80%

优化技巧:
1. 用 in_bulk 代替循环查询
2. 用 select_related 预加载关联
3. 用 in 查询代替多次单条查询
4. 用字典组织数据,避免嵌套循环

讲师点评

1
2
3
4
5
6
7
8
9
10
11
✓ 优点:
- 性能分析到位
- 优化方案正确
- 效果显著

✗ 改进:
- 可以加缓存层
- 可以考虑分页
- 可以异步处理

评分:98/100

📝 第 4 周作业:毕业项目

作业要求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
题目:从零实现一个完整项目

三选一:

1. Web 框架
- 路由系统
- 请求/响应处理
- 中间件机制
- 模板引擎

2. 分布式爬虫
- 请求调度
- 数据解析
- 存储方案
- 分布式支持

3. 任务调度平台
- 任务队列
- 定时任务
- 任务监控
- 失败重试

要求:
- 代码量 1000+ 行
- 完整的功能
- 单元测试覆盖率 80%+
- 部署文档
- 使用文档

优秀项目展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
项目:PyCrawler 分布式爬虫系统

功能:
✓ 支持多种请求调度策略
✓ 支持多种数据解析器
✓ 支持多种存储后端
✓ 支持分布式部署
✓ 支持断点续爬
✓ 支持监控告警

技术栈:
- Python 3.9+
- asyncio 异步 IO
- Redis 任务队列
- MongoDB 数据存储
- Prometheus 监控

代码量:2500 行
测试覆盖率:85%

部署:
- Docker 容器化
- Kubernetes 编排
- 一键部署脚本

讲师点评

1
2
3
4
5
6
7
8
9
10
11
12
13
✓ 优点:
- 架构设计合理
- 代码质量高
- 功能完整
- 文档齐全

✗ 改进:
- 可以加更多解析器
- 可以支持更多存储
- 可以优化性能

评分:96/100
优秀作业,全班展示!

📊 作业完成情况统计

第 1 期数据

作业提交率平均分优秀率
第 1 周100%8835%
第 2 周98%8530%
第 3 周96%9040%
毕业项目94%9245%

学员反馈

1
2
3
4
"作业有挑战,但跳一跳能够得着"
"代码评审环节最有价值"
"为了完成作业,周末都在写代码"
"虽然累,但收获很大"

🚀 你能完成吗?

前置要求

1
2
3
4
✓ Python 基础扎实
✓ 有 1-3 年开发经验
✓ 每周能投入 10 小时
✓ 有学习意愿

学习支持

1
2
3
4
5
✓ 讲师直播讲解
✓ 录播反复观看
✓ 助教在线答疑
✓ 学员互助讨论
✓ 代码评审指导

🎯 第 2 期报名开启

1
2
3
4
开课时间:2026 年 4 月 1 日
名额:50 人
价格:2999 元(早鸟价)
优惠:老学员推荐,双方各减 200 元

报名方式

1
2
3
4
1. 扫码添加课程顾问
2. 发送"龙虾高级课作业"
3. 完成报名,加入预备群
4. 4 月 1 日开课

作业虽难,但收获更大!

📚 相关阅读

🔗 联系方式

平台账号/链接
微信扫码加好友
微博@程序员晚枫
知乎@程序员晚枫
抖音@程序员晚枫
小红书@程序员晚枫
B 站Python 自动化办公社区

主营业务:AI 编程培训、企业内训、技术咨询


作业的难度,决定你成长的高度。

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!