2026-10-20 20:19:24
Python面试常见问题涵盖项目经验、框架原理、网络协议、数据库操作及语言基础等多个方面,以下为高频问题分类解析:
一、项目经验与爬虫相关问题常见反爬机制:IP封禁、User-Agent检测、验证码、动态Token、行为分析(如鼠标轨迹)。
解决方案:
IP封禁:使用代理IP池(如Scrapy-Proxies中间件)或动态切换IP。
验证码:通过OCR(如Tesseract)、第三方打码平台或深度学习模型(如CNN)识别。
动态Token:分析请求参数规律,模拟生成或使用Selenium自动化工具。

Scrapy框架相关问题
基本结构:引擎(Engine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)、实体管道(Item Pipeline)。
去重原理:基于请求指纹(如URL+请求参数的MD5值)存储在Redis或Bloom Filter中。
中间件类型:下载器中间件(处理请求/响应)和爬虫中间件(处理爬虫输入/输出)。
代理使用与失效处理
代码示例:在Scrapy中通过DOWNLOADER_MIDDLEWARES配置代理中间件,请求时动态添加代理头:
class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = "失效处理:检测响应状态码(如407代理认证失败),自动切换代理或重试请求。
关系型与非关系型数据库区别
关系型(如MySQL):支持ACID事务、结构化数据、SQL查询,适合复杂事务场景。
非关系型(如MongoDB):无固定模式、水平扩展、高吞吐量,适合半结构化数据(如日志)。
数据库优化策略
索引优化:为高频查询字段(如WHERE条件)创建B-Tree索引,避免全表扫描。
查询优化:减少JOIN操作,使用EXPLAIN分析执行计划,避免SELECT *。
NoSQL应用场景
Redis:缓存(如用户会话)、计数器、分布式锁(SETNX命令)。
MongoDB:文档存储(如JSON格式数据)、地理空间查询。
HTTP/HTTPS协议
请求组成:请求行(方法、URL、协议版本)、请求头(如User-Agent)、请求体(POST数据)。
HTTPS与HTTP区别:HTTPS通过SSL/TLS加密传输,需证书验证服务器身份。
TCP与UDP区别
TCP:面向连接、可靠传输(确认重传)、流量控制(滑动窗口),适合文件传输。
UDP:无连接、不可靠、低延迟,适合实时应用(如视频通话)。
TCP三次握手与四次挥手
三次握手:客户端发送SYN,服务器回SYN+ACK,客户端再发ACK建立连接。
四次挥手:任意一方发送FIN,对方回ACK,待数据传输完成后再次发送FIN确认。
Python2与Python3区别
编码:Python2默认ASCII,需声明# -*- coding: utf-8 -*-;Python3默认UTF-8。
打印函数:Python2用print语句,Python3用print()函数。
整数除法:Python2中3/2=1(向下取整),Python3中3/2=1.5。
可变与不可变类型
不可变:数字、字符串、元组(如a=10修改时创建新对象)。
可变:列表、字典、集合(如lst=[1,2]可直接修改元素)。
装饰器实现单例模式
def singleton(cls): _instance = {} def wrapper(*args, kwargs): if cls not in _instance: _instance[cls] = cls(*args, kwargs) return _instance[cls] return wrapper@singletonclass MyClass: pass快速排序实现
def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr)//2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right)链表环检测
方法:使用快慢指针,若相遇则存在环。
代码:
def has_cycle(head): slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: return True return False常用命令
进程管理:ps aux(查看进程)、kill -9 PID(强制终止)。
文件操作:grep -r "pattern" .(递归搜索文件内容)、chmod +x file(添加执行权限)。
Git操作
分支管理:git branch(查看分支)、git checkout -b feature(创建并切换分支)。
冲突解决:git mergetool调用可视化工具合并冲突文件。
MVC与MTV模式
MVC:模型(Model)、视图(View)、控制器(Controller)。
MTV:模型(Model)、模板(Template)、视图(View),Django中视图处理逻辑,模板渲染页面。
CSRF防护
原理:在表单中添加{% csrf_token %},服务器验证请求中的Token与会话中的Token是否一致。
Session与Cookie区别
Session:存储在服务器,通过Cookie中的sessionid关联用户数据,更安全。
Cookie:存储在客户端,易被篡改,适合存储非敏感信息(如用户偏好)。

总结:Python面试需结合项目经验,深入理解框架原理(如Scrapy、Django)、网络协议(TCP/HTTP)、数据库优化及算法设计。建议通过实际项目巩固知识,并熟悉常见问题的解题思路。