Python常见面试题的详解17

news/2025/2/23 22:11:50

1. 说明HTTP 和 HTTPS的区别

  • 安全性:HTTP 是明文传输协议,这意味着在数据传输过程中,信息就像在 “裸奔”,容易被窃取和篡改,安全性堪忧。而 HTTPS 是在 HTTP 基础上加入了 SSL/TLS 协议,通过加密和身份验证机制,如同给数据穿上了一层坚固的 “铠甲”,保证了数据在传输过程中的安全性和完整性。

  • 端口号:HTTP 默认使用 80 端口,这是它的 “常规入口”;HTTPS 默认使用 443 端口,可看作是它的 “安全专用通道”。

  • URL 前缀:HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头,这就像不同的 “门牌号”,一眼就能区分。

  • 证书:HTTP 不需要证书,而 HTTPS 需要申请 SSL/TLS 证书,证书可以由权威的 CA 机构颁发,也能自己生成,用于身份验证和密钥交换,好比是进入安全区域的 “通行证”。

  • 协议层:HTTP工作在应用层。HTTPS在应用层和传输层之间添加了SSL/TLS加密层。

  • 性能:HTTPS因加密/解密和证书验证,性能略低于HTTP,但可通过硬件优化缓解。

python

import requests

# HTTP 请求
http_response = requests.get('http://example.com')
print(f"HTTP 状态码: {http_response.status_code}")

# HTTPS 请求
https_response = requests.get('https://example.com')
print(f"HTTPS 状态码: {https_response.status_code}")

2. 说明HTTP 协议以及协议头部中表示数据类型的字段

  • HTTP 协议:HTTP 是用于传输超文本的应用层协议,它是无状态的,每次请求都是独立的,服务器不会保留之前请求的信息。就像一个健忘的服务员,每次服务都得重新了解需求。它基于请求 - 响应模型,客户端向服务器发送请求,服务器处理请求并返回响应。常见版本:HTTP/1.1(主流),HTTP/2(多路复用),HTTP/3(基于QUIC)。
  • 表示数据类型的字段Content - Type 字段用于指定请求体或响应体中数据的类型。常见值text/html(HTML 文本),application/json(JSON 数据),application/xml(XML 数据),image/jpegimage/png(分别对应 JPEG 和 PNG 格式的图片)。

python

import requests

# 发送 JSON 数据的 POST 请求
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://example.com', json=data, headers=headers)
print(response.text)

3. 说明HTTP 的请求方法

  • GET:用于从服务器获取资源,请求参数会附加在 URL 后面,就像在商店橱窗里查看商品信息。

  • POST:用于向服务器提交数据,通常用于表单提交、文件上传等操作,请求参数放在请求体中,好比是向商店下单购买商品。

  • PUT:用于向服务器更新资源,如果资源不存在则创建新资源,类似于替换或新增商品。

  • DELETE:用于从服务器删除指定的资源,就像把商店里的某个商品移除。

  • HEAD:与 GET 方法类似,但只返回响应头,不返回响应体,常用于获取资源的元信息,如同只查看商品的标签而不拿走商品。

  • OPTIONS:用于获取服务器支持的请求方法和其他通信选项,就像询问商店支持哪些付款方式。

  • PATCH:用于对资源进行部分更新,比如只修改商品的某个属性。

python

import requests

# GET 请求
get_response = requests.get('https://example.com')
print(f"GET 响应: {get_response.text}")

# POST 请求
post_data = {'name': 'John'}
post_response = requests.post('https://example.com', data=post_data)
print(f"POST 响应: {post_response.text}")

4. 使用 Socket 套接字需要传入哪些参数

在 Python 中,使用 socket 模块创建套接字时,socket() 函数需要传入两个参数:地址族(family)和套接字类型(type)。地址族指定使用的网络协议族,常见的有 socket.AF_INET(IPv4 协议)和 socket.AF_INET6(IPv6 协议);套接字类型指定套接字的类型,常见的有 socket.SOCK_STREAM(TCP 协议,提供面向连接的、可靠的数据传输)和 socket.SOCK_DGRAM(UDP 协议,提供无连接的、不可靠的数据传输)。

python

import socket

# 创建 TCP/IPv4 套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("TCP 套接字创建成功")

# 创建 UDP/IPv4 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print("UDP 套接字创建成功")

5. 说明HTTP常见请求头

  • User - Agent:用于标识客户端的类型和版本信息,服务器可以根据该信息返回不同的内容,就像告诉商家你是用什么工具来购物的。

  • Accept:指定客户端能够接受的响应内容类型,例如 Accept: text/html,application/json,表示客户端可以接受 HTML 文本和 JSON 数据。

  • Accept - Language:指定客户端能够接受的语言,例如 Accept - Language: en-US,en;q=0.9,表示优先接受美式英语,其次是英语。

  • Accept - Encoding:指定客户端能够接受的内容编码方式,例如 Accept - Encoding: gzip, deflate,表示客户端可以接受 gzip 和 deflate 编码。

  • Content - Type:指定请求体中数据的类型,例如 Content - Type: application/json

  • Content - Length:指定请求体的长度,单位为字节。

  • Authorization:用于在请求中包含身份验证信息,例如基本认证的 Authorization: Basic base64(username:password)

  • Cookie:用于在请求中携带客户端的 Cookie 信息。

python

import requests

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Accept': 'application/json',
    'Accept-Language': 'en-US',
    'Accept-Encoding': 'gzip, deflate'
}
response = requests.get('https://example.com', headers=headers)
print(response.text)

6. 什么是七层模型

七层模型即开放系统互连参考模型(OSI/RM),它将计算机网络通信分为七个层次,从下到上依次为:

  • 物理层:负责传输比特流,处理物理介质上的电气、机械和功能特性,例如电缆、光纤、网卡等,就像搭建网络的 “基础设施”。

  • 数据链路层:将比特流封装成帧,提供差错检测和纠正功能,常见的协议有以太网协议,如同给数据加上 “包装” 和 “校验标签”。

  • 网络层:负责将帧封装成数据包,进行路由选择和寻址,常见的协议有 IP 协议,类似于为数据规划 “运输路线”。

  • 传输层:提供端到端的可靠或不可靠的数据传输,常见的协议有 TCP 和 UDP,就像选择不同的 “运输方式”。

  • 会话层:负责建立、管理和终止会话,例如在不同应用程序之间建立会话,好比是安排 “商务会谈”。

  • 表示层:负责数据的表示和转换,例如加密、解密、压缩、解压缩等,如同对数据进行 “翻译” 和 “整理”。

  • 应用层:为用户提供应用程序接口,例如 HTTP、FTP、SMTP 等协议,是用户直接接触的 “应用窗口”。

python

import socket

# 创建 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8888)
server_socket.bind(server_address)
server_socket.listen(1)

print('等待客户端连接...')
connection, client_address = server_socket.accept()
try:
    print(f'连接来自: {client_address}')
    data = connection.recv(1024)
    print(f'接收到数据: {data.decode()}')
    message = 'Hello, client!'
    connection.sendall(message.encode())
finally:
    connection.close()

7. 说明URL 的形式

URL(统一资源定位符)的一般形式为:协议://用户名:密码@主机名:端口号/路径?查询参数#片段标识符。协议指定使用的协议,如 httphttpsftp 等;用户名和密码是可选部分,用于身份验证;主机名指定服务器的域名或 IP 地址;端口号是可选部分,指定服务器上应用程序监听的端口号,默认情况下,HTTP 使用 80 端口,HTTPS 使用 443 端口;路径指定服务器上资源的路径;查询参数是可选部分,用于向服务器传递额外的参数,多个参数之间用 & 分隔;片段标识符是可选部分,用于指定页面内的锚点。

python

from urllib.parse import urlparse

url = 'https://user:password@www.example.com:8080/path/to/resource?param1=value1&param2=value2#section1'
parsed_url = urlparse(url)
print(f"协议: {parsed_url.scheme}")
print(f"主机名: {parsed_url.hostname}")
print(f"端口号: {parsed_url.port}")
print(f"路径: {parsed_url.path}")
print(f"查询参数: {parsed_url.query}")
print(f"片段标识符: {parsed_url.fragment}")

8. 什么是 Flask 蓝图 (Blueprint)

Flask 蓝图是一种组织 Flask 应用程序的方式,它可以将应用程序拆分成多个模块,每个模块可以有自己的路由、视图函数、静态文件和模板等。蓝图的主要作用有:代码组织,将不同功能的代码分离到不同的蓝图中,提高代码的可读性和可维护性;模块化开发,可以独立开发和测试每个蓝图,然后将它们集成到一个 Flask 应用程序中;命名空间,蓝图可以为路由和静态文件提供命名空间,避免命名冲突。

python

from flask import Flask, Blueprint

# 创建 Flask 应用
app = Flask(__name__)

# 创建蓝图
user_bp = Blueprint('user', __name__)

@user_bp.route('/login')
def login():
    return 'Login page'

@user_bp.route('/register')
def register():
    return 'Register page'

# 注册蓝图
app.register_blueprint(user_bp, url_prefix='/user')

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

9. 说明Flask 和 Django 路由映射的区别

  • 语法:Flask 使用装饰器来定义路由,语法简洁灵活,就像直接在函数上贴一个 “路由标签”。而 Django 在 urls.py 文件中使用 urlpatterns 列表来定义路由,需要导入视图函数或类,类似于在一个 “路由清单” 中进行配置。

  • 路由匹配规则:Flask 使用正则表达式或简单的变量规则来匹配路由,例如 <int:id> 表示匹配整数类型的参数。Django 使用更强大的正则表达式来匹配路由,并且可以使用 re_path 函数来定义复杂的路由规则。

  • 命名空间:Flask 蓝图可以为路由提供命名空间,避免命名冲突。Django 可以在 urls.py 文件中使用 app_namenamespace 来为路由提供命名空间。

python

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, Flask!'

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

python

# urls.py
from django.urls import path
from .views import index

urlpatterns = [
    path('', index, name='index'),
]

# views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello, Django!')

10. 说明 wsgi, uwsgi, uWSGI的区别

  • WSGI:WSGI(Web Server Gateway Interface)是 Python Web 应用程序和 Web 服务器之间的标准接口,它定义了 Web 服务器如何与 Python 应用程序进行通信。WSGI 允许不同的 Web 服务器和 Python Web 框架之间进行交互,例如 Flask、Django 等框架都遵循 WSGI 标准,就像一个 “翻译官”,让 Web 服务器和 Python 应用程序能够 “交流”。

  • uwsgi:uwsgi 是一种二进制协议,它是 uWSGI 服务器使用的一种通信协议,用于在 Web 服务器和应用程序之间传递请求和响应,类似于一种 “加密语言”。

  • uWSGI:uWSGI 是一个快速、高性能的 Web 服务器,它支持多种协议,包括 WSGI、uwsgi、HTTP 等。uWSGI 可以作为独立的 Web 服务器运行,也可以与其他 Web 服务器(如 Nginx、Apache)配合使用,用于处理 Python Web 应用程序的请求,好比是一个 “高效的快递员”。

python

def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/html; charset=utf-8')]
    start_response(status, headers)
    return [b'Hello, WSGI!']

友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读

https://download.csdn.net/download/ylfhpy/90416907


http://www.niftyadmin.cn/n/5863816.html

相关文章

Java 虚拟机(JVM)方法区详解

文章目录 Java 虚拟机&#xff08;JVM&#xff09;方法区详解1. 什么是方法区&#xff1f;2. 方法区的作用3. 方法区的存储内容3.1 类的元数据&#xff08;Class Metadata&#xff09;3.2 运行时常量池&#xff08;Runtime Constant Pool&#xff09;3.3 静态变量&#xff08;S…

Python 数据结构与实践深度剖析

Python 数据结构与实践深度剖析 本文旨在深入剖析 Python 数据结构及其在实际编程中的应用。通过详细的理论阐述、丰富的代码示例以及直观的图表&#xff0c;帮助读者全面掌握 Python 数据结构的核心概念与操作技巧&#xff0c;助力读者在编程实践中灵活运用数据结构解决各类问…

孜然单授权系统V2.0PHP授权系统

孜然单授权V1.0系统&#xff0c;延续了2022年开发的孜然多应用授权系统V2.0 变更&#xff1a;多应用变单系统&#xff0c;去除没用的垃圾代码&#xff0c;从0开发&#xff0c;去除了一些没用的功能 完善了开发文档&#xff0c;之前那套是我写着玩的屎山代码&#xff0c;V1.0将展…

Kafka客户端连接服务端异常 Can‘t resolve address: VM-12-16-centos:9092

前置条件&#xff1a; 已在CentOs上搭建好kafka节点服务器&#xff0c;已启动kafka服务已在Springboot项目中引入kafka客户端配置&#xff0c;kafka.bootstrap-serverip:port&#xff0c;并启动客户端服务 异常过程&#xff1a; 在客户端Springboot服务启动过程&#xff0c;控…

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析&#xff08;详细版&#xff09; 一、Tio-Boot 简介 Tio-Boot 是基于 Tio 框架的 Spring Boot Starter 扩展&#xff0c;提供高性能、低延迟的网络通信能力&#xff0c;支持 TCP/UDP 协议及 WebSocket 协议&#xff0c;适用…

devops 工具 网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 DevOps 是一个结合开发&#xff08;Development&#xff09;和运维&#xff08;Operations&#xff09;的软件开发方法&#xff0c;目的是缩短软件系统的开发周期…

【Deepseek】Linux 本地部署 Deepseek

前言 本文介绍在 Linux 系统上部署 Deepseek AI。本文教程是面向所有想体验 AI 玩家的一个简易教程&#xff0c;因此即使是小白也可以轻松完成体验&#xff0c;话不多说立马着手去干。 [注]&#xff1a;笔者使用的系统为 Ubuntu 24.10 1. 关于 ollama Ollama 是一款开源应用…

小型字符级语言模型的改进方向和策略

小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…