摘要:本文整理了Python面试中最常遇到的30个核心问题,涵盖基础语法、数据结构、算法优化到高级特性,帮助开发者系统性地准备技术面试。
Python基础概念必考题
Q1: Python是解释型语言还是编译型语言?
这是一个经典的入门问题。Python实际上是先编译后解释的语言。当执行.py文件时,Python会先将源代码编译成字节码(.pyc文件),然后由Python虚拟机解释执行这些字节码。
python查看字节码的示例 import dis def add(a, b): return a + b dis.dis(add)
Q2: Python中的可变和不可变类型有哪些?
这是考察对Python内存管理理解的绝佳问题:
不可变类型:int, float, bool, str, tuple, frozenset
可变类型:list, dict, set
数据结构与算法精粹
Q3: 如何实现一个高效的LRU缓存?
这道题既考察算法能力又考察对标准库的了解:
python from collections import OrderedDict
class LRUCache: def init(self, capacity): self.cache = OrderedDict() self.capacity = capacity def get(self, key): if key not in self.cache: return -1 self.cache.movetoend(key) return self.cache[key] def put(self, key, value): if key in self.cache: self.cache.movetoend(key) elif len(self.cache) >= self.capacity: self.cache.popitem(last=False)
Python高级特性剖析
Q4: metaclass有什么实际应用场景?
元类(metaclass)是创建类的类,常用于框架开发中:
python class SingletonMeta(type):instances = {} def call(cls,args,kwargs): if cls not in cls.instances: cls.instances[cls] = super().call(args,kwargs) return cls.instances[cls]
class Singleton(metaclass=SingletonMeta): pass a = Singleton() b = Singleton() print(a is b)
True
并发编程实战技巧
Q5: asyncio和threading有什么区别?何时使用它们?
| | asyncio | threading | |----------|-------------------|-----------------| | 模型 | 单线程事件循环 | OS线程 | | IO操作 | async/await语法 | GIL限制 | | CPU密集型|不适用 |多核优势 |
选择原则:
IO密集型 → asyncio (Web爬虫、微服务等)
CPU密集型 → multiprocessing (数据处理等)
Web开发常见考点
Q6: Django ORM中的N+1查询问题如何解决?
这是Web开发高频考点:
pythonBad - N+1查询问题 books = Book.objects.all() for book in books: print(book.author.name) #每次循环都查询数据库
Good - selectrelated优化 books = Book.objects.selectrelated('author').all() for book in books: print(book.author.name) #预取关联数据
Many-to-many使用prefetchrelated stores = Store.objects.prefetchrelated('products')
Debug与性能调优
Q7: cProfile输出的各项指标含义是什么?
ncalls tottime percall cumtime percall filename... 1000 0.002 0.000 0.003 0.000 module.py...指标解析:
ncalls :调用次数
tottime :函数自身耗时(exclude子函数)
cumtime :包含子函数的累计耗时
目前有0 条留言