字节实习一面代码题
发布人:shili8
发布时间:2024-11-08 08:37
阅读次数:0
**字节实习一面代码题**
**题目描述**
在一个大型的在线教育平台中,用户可以创建自己的课程,并将其发布到平台上。每个课程都有一个唯一的ID号,以及一个对应的价格。现在,我们需要实现一个功能:给定一个课程ID和一个价格范围(如100-200),找出所有价格在该范围内的课程。
**要求**
1.你的代码必须能够处理大规模数据,例如上百万条记录。
2.你的代码必须能够高效地查找符合条件的课程。
3.你的代码必须能够支持多线程访问,以便于并发请求。
**输入输出格式**
* 输入:课程ID(int),价格范围(string,如"100-200")
* 输出:符合条件的课程ID列表(list)
**示例**
假设有以下课程:
| 课程ID | 价格 |
| --- | --- |
|1 |150 |
|2 |220 |
|3 |180 |
|4 |100 |
如果输入课程ID为1,价格范围为"100-200",则输出结果应该是:[1,3]
**代码实现**
import threadingclass Course: def __init__(self, course_id, price): self.course_id = course_id self.price = priceclass CourseManager: def __init__(self): # 使用哈希表存储课程信息,方便查找 self.courses = {} # 使用锁来保护数据的安全性 self.lock = threading.Lock() def add_course(self, course_id, price): with self.lock: self.courses[course_id] = Course(course_id, price) def get_courses_in_price_range(self, course_id, price_range): with self.lock: # 将价格范围转换为数字 min_price, max_price = map(int, price_range.split('-')) # 使用列表推导式查找符合条件的课程ID return [course.course_id for course in self.courses.values() if min_price <= course.price <= max_price] # 测试代码manager = CourseManager() manager.add_course(1,150) manager.add_course(2,220) manager.add_course(3,180) manager.add_course(4,100) print(manager.get_courses_in_price_range(1, "100-200")) # 输出:[1,3]
**注释**
* 我们使用哈希表(字典)来存储课程信息,这样可以高效地查找和添加课程。
* 使用锁来保护数据的安全性,确保在多线程环境下不会出现并发访问问题。
* 在 `get_courses_in_price_range` 方法中,我们使用列表推导式来查找符合条件的课程ID,这样可以避免额外的循环操作。
* 我们将价格范围转换为数字,以便于比较和计算。
**总结**
本题目要求实现一个功能:给定一个课程ID和一个价格范围,找出所有价格在该范围内的课程。我们使用哈希表和锁来保护数据安全性,并使用列表推导式来高效地查找符合条件的课程ID。