计时器在跳,大脑一片空白——字典按值排序怎么写来着?
这种场景太熟悉了。技术面试的编码环节,时间压力把熟练度压缩成肌肉记忆。你明明写过一百遍,却在关键时刻卡壳。这份指南就是为那个时刻准备的:所有代码即拷即用,没有废话,只有那些在限时评估里反复出现的模式。
数据结构的生死操作从字典开始。d = {}创建,d["key"] = "value"赋值,d.get("key", "default")安全取值——带默认值版本不会崩溃。嵌套字典直接赋值即可:d["user"] = {"balance": 0, "history": []},然后d["user"]["balance"] += 100修改深层字段。遍历用for key, value in d.items(),这是面试高频扣分点。
列表操作同样极简。lst[:n]取前n项有个隐藏特性:即使n超过长度也不报错。reversed(lst)反向遍历,del lst[i]按索引删除。排序是重灾区——sorted(lst)返回新列表,lst.sort()原地修改,搞混直接出局。多条件排序用元组:sorted(items, key=lambda x: (-x[1], x[0]))实现分数降序、名字升序。字典按值降序?sorted(d.items(), key=lambda x: -x[1])。
字符串处理三件套:f"{name}({value})"格式化、", ".join(list)拼接、s.split("/")分割。类定义注意双下划线__init__,每个方法首参数必须是self,实例变量用self.data声明。
系统设计题常考的四个模式这里直接给实现。自增ID:self.counter += 1后格式化为f"item{self.counter}"。TTL过期检查存储时间戳,读取时比较timestamp < entry["expiry"]。延迟处理在方法第一行调用self._process_pending(timestamp)清理到期任务。历史追踪用元组列表(timestamp, value),查询时反向遍历找最近有效记录。
深拷贝用copy.deepcopy做快照,二分查找用bisect模块的bisect_right和insort。async函数标记async def,内部用await asyncio挂起。
这些不是最佳实践,是生存策略。面试桌上没有IDE补全,没有文档可查,只有倒计时的数字和肌肉记忆里的代码片段。把它们敲进手指,比理解原理更紧迫——至少在那个晚上。
热门跟贴