Python 后端开发工程师面试问题大全及高质量答案

Python 后端开发工程师需要掌握的不仅是 Python 语言本身,还涉及 Web 框架、数据库、缓存、RESTful API 设计、微服务、消息队列、安全性等多个方面。本文整理了常见的 Python 后端开发面试问题,并给出了详细的解答,帮助你在面试中脱颖而出。


1. Python 语言基础

1.1 Python 的数据类型有哪些?

Python 的主要数据类型:

  • 数字类型intfloatcomplex
  • 序列类型listtuplerange
  • 映射类型dict
  • 集合类型setfrozenset
  • 文本类型str
  • 二进制类型bytesbytearraymemoryview

1.2 Python 是如何管理内存的?

Python 采用 垃圾回收机制(Garbage Collection,GC),主要方式:

  1. 引用计数(Reference Counting)
  2. 标记清除(Mark and Sweep)
  3. 分代回收(Generational GC)

可以手动调用垃圾回收:

import gc
gc.collect()

1.3 Python 解释器有哪些?

  • CPython(官方默认实现)
  • PyPy(支持 JIT 编译,加速执行)
  • Jython(Python 运行在 JVM 上)
  • IronPython(Python 运行在 .NET 平台)

2. Python 进阶

2.1 Python 的 GIL(全局解释器锁)是什么?

GIL(Global Interpreter Lock)限制了同一时刻只有一个线程能执行 Python 字节码,导致多线程不能提高 CPU 密集型任务的性能。

解决方案

  • 使用多进程multiprocessing 模块)
  • 使用 C 扩展
  • 使用 JIT(如 PyPy)

2.2 Python 的 *args**kwargs 有什么作用?

  • *args 用于接收可变数量的位置参数。
  • **kwargs 用于接收可变数量的关键字参数。
def demo(*args, **kwargs):
    print(args)  # 元组
    print(kwargs)  # 字典

demo(1, 2, 3, name="Alice", age=25)

3. Python 后端框架

3.1 Flask 和 Django 的区别?

特性FlaskDjango
适用场景轻量级 Web 应用、API大型项目、全栈开发
组件需要手动集成数据库、ORM自带 ORM、Admin、Auth
灵活性高(可自由选择组件)低(自带组件)

3.2 用 Flask 实现一个简单的 API

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({'message': 'Hello, World!'})

if __name__ == '__main__':
    app.run(debug=True)

3.3 Django ORM 常见操作

from myapp.models import User

# 创建用户
user = User.objects.create(name="Alice", age=25)

# 查询
users = User.objects.filter(age__gt=20)

# 更新
User.objects.filter(name="Alice").update(age=26)

# 删除
User.objects.filter(name="Alice").delete()

4. 数据库

4.1 SQL 和 NoSQL 的区别?

特性SQLNoSQL
结构关系型数据库文档、键值存储
事务支持ACIDCAP 理论
适用场景结构化数据海量数据存储(如日志)

4.2 Python 连接 MySQL

import pymysql

conn = pymysql.connect(host="localhost", user="root", password="password", database="test_db")
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
print(cursor.fetchall())

cursor.close()
conn.close()

5. 缓存

5.1 Redis 常见数据结构

  • string
  • list
  • set
  • hash
  • zset

5.2 Python 操作 Redis

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)

r.set('name', 'Alice')
print(r.get('name'))  # 输出: Alice

6. 消息队列

6.1 RabbitMQ vs Kafka

特性RabbitMQKafka
适用场景任务队列日志处理、大数据流
持久化支持强调分布式存储
延迟高吞吐

6.2 Python 操作 RabbitMQ

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello, RabbitMQ!')

connection.close()

7. RESTful API 设计

7.1 RESTful API 的特点

  • 使用 HTTP 方法(GET、POST、PUT、DELETE)
  • 无状态性
  • 资源通过 URI 表示
  • 返回 JSON 或 XML

7.2 Flask RESTful API 设计

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()
    return jsonify({"message": "User created", "data": data}), 201

8. 安全性

8.1 如何防止 SQL 注入?

使用参数化查询

cursor.execute("SELECT * FROM users WHERE name = %s", (name,))

8.2 如何防止 XSS 攻击?

  • 对用户输入进行 HTML 转义
  • 使用 CSP(内容安全策略)
  • 避免直接插入用户输入的 HTML 代码

9. 测试

9.1 Python 单元测试

import unittest

def add(a, b):
    return a + b

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)

if __name__ == '__main__':
    unittest.main()

10. Docker

10.1 用 Docker 运行 Python Web 应用

FROM python:3.9

WORKDIR /app
COPY . .
RUN pip install -r requirements.txt

CMD ["python", "app.py"]

总结

本文整理了 Python 后端开发面试中的常见问题,涵盖基础知识、Web 开发、数据库、缓存、消息队列、安全性、测试等多个方面,希望能帮助你更好地准备面试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值