Python常见面试题的详解17

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[实现Rpc] 服务端 | RpcRouter实现 | Builder模式

目录 项目服务端独用类的实现 1. RpcRouter类的实现 ServiceDescribe SDescribeFactory ⭕ Builder模式 1. 动机 2. 模式定义 3. 要点总结 4. 代码感受 ServiceManager RpcRouter 4. 代码感受 ServiceManager RpcRouter 前文我们就将 Rpc 通用类都实现完啦&#…

js 实现隔行幻色

构建界面&#xff1a;html&#xff1a; <table cellspacing"0"><!-- 表格中的单元格设为0&#xff0c;没间距 --><thead><tr><td>序号</td><td>姓名</td><td>操作</td></tr></thead><tb…

影刀RPA中级证书-Excel进阶-开票清单

1.操作题需求 请参照视频内容&#xff0c;将开票账单表格中的数据整理成开票清单。请下载 开票账单.xlsx 整理规则如下&#xff1a; 1. 金额为0的数据为赠品&#xff0c;无需开票&#xff0c;需删除2. 开票清单需要从开票账单中获取的数据包括有开票名称、数量、金额、税率&…

tortoiseGit的使用和上传拉取

tortoiseGit的使用和上传拉取 下载TortoiseGit 通过网盘分享的文件&#xff1a;tortoiseGit.zip 链接: https://pan.baidu.com/s/1EOT_UsM9_OysRqXa8gES4A?pwd1234 提取码: 1234 在电脑桌面新建文件夹并进入 右击鼠标 将网址复制上去 用户名和密码是在git注册的用户名和…

从0到1:固件分析

固件分析 0x01 固件提取 1、从厂商官网下载 例如D-link的固件&#xff1a; https://support.dlink.com/resource/products/ 2、代理或镜像设备更新时的流量 发起中间人攻击MITM #启用IP转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward#配置iptables&#xff0c;将目…

JVM预热

阿里电商平台每年的各种大促活动&#xff0c;对于Java技术来说&#xff0c;其中重要一个操作环节就是预热操作。 目录 预热是什么&#xff1f;为什么要预热&#xff1f; java 程序不预热和预热的调用对比 预热是什么&#xff1f; 预热是指&#xff0c;在 JVM 启动后&#xff0…

Datawhale Ollama教程笔记5

Dify 接入 Ollama 部署的本地模型 Dify 支持接入 Ollama 部署的大型语言模型推理和 embedding 能力。 快速接入 下载 Ollama 访问 Ollama 安装与配置&#xff0c;查看 Ollama 本地部署教程。 运行 Ollama 并与 Llama 聊天 ollama run llama3.1Copy to clipboardErrorCopied …

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api&#xff0c;用于…

学习经验分享【39】YOLOv12——2025 年 2 月 19 日发布的以注意力为核心的实时目标检测器

YOLO算法更新速度很快&#xff0c;已经出到V12版本&#xff0c;后续大家有想发论文或者搞项目可更新自己的baseline了。 代码&#xff1a;GitHub - sunsmarterjie/yolov12: YOLOv12: Attention-Centric Real-Time Object Detectors 摘要&#xff1a;长期以来&#xff0c;增强 …

什么是方法

System.out.println(),那么它是什么呢&#xff1f; Java方法是语句的集合&#xff0c;它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建&#xff0c;在其他地方被使用 这段Java代码出现错误的原因在于&#xff0c;在…

装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

问题描述 我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f; 原因分析&#xff1a; 当您在安装Windows操作系统…

ue5.2.1 quixel brideg显示asset not available in uAsset format

我从未见过如此傻x的bug&#xff0c;在ue5.2.1上通过内置quixel下载资源显示 asset not available in uAsset format 解决办法&#xff1a;将ue更新到最新版本&#xff0c;通过fab进入商场选择资源后add to my library 点击view in launcher打开epic launcher&#xff0c;就可…

python: SQLAlchemy (ORM) Simple example using SQLite

领域层&#xff08;Domain Laye&#xff09;&#xff1a;定义了 School 实体类和 SchoolRepository 抽象基类&#xff0c;明确了业务实体和数据访问的契约。 基础设施层&#xff08;Infrastructure Laye&#xff09;&#xff1a;通过 SQLAlchemy 实现了 SchoolRepository 类&am…

蓝桥杯定时器实现led闪烁

step1.配置定时器&#xff0c;TIM1时高级定时&#xff0c;TIM2是通用定时器&#xff0c;用TIM2就行&#xff0c;用内部时钟源&#xff0c;记住相关公式&#xff0c;定时器中断配置时要使能&#xff0c;且生成代码后也要在mian中写使能函数 step2.写代码 配置生成代码后多出的…

【深度学习】Pytorch的深入理解和研究

一、Pytorch核心理解 PyTorch 是一个灵活且强大的深度学习框架&#xff0c;广泛应用于研究和工业领域。要深入理解和研究 PyTorch&#xff0c;需要从其核心概念、底层机制以及高级功能入手。以下是对 PyTorch 的深入理解与研究的详细说明。 1. 概念 动态计算图&#xff08;D…

HAProxy介绍与编译安装

目录 1、HAProxy介绍 2、HAProxy编译安装 Centos 基础环境 Ubuntu 基础环境 编译安装HAProxy 验证HAProxy版本 HAProxy启动脚本 配置文件 启动haproxy 验证haproxy状态 查看haproxy的状态页面 1、HAProxy介绍 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年…

动静态链接与加载

目录 静态链接 ELF加载与进程地址空间&#xff08;静态链接&#xff09; 动态链接与动态库加载 GOT表 静态链接 对于多个.o文件在没有链接之前互相是不知到对方存在的&#xff0c;也就是说这个.o文件中调用函数的的跳转地址都会被设定为0&#xff08;当然这个函数是在其他.…

无人机遥控器接口作用详解!

USB接口&#xff1a; 功能&#xff1a;USB接口是一种通用串行总线接口&#xff0c;用于连接外部设备&#xff0c;如手机、平板、电脑或充电设备。在无人机遥控器上&#xff0c;USB接口通常用于数据传输和充电。 应用&#xff1a;用户可以通过USB接口将遥控器与电脑连接&#…

A100、H100、H800、H20等多种显卡配置对比

显卡对比 型号A10080GB SXMA10080GB PCIeH10080GB SXMH10080GB PCIeH20H80080GB SXMH80080GB PCIe数据来源链接链接链接链接链接链接链接GPU架构AmpereAmpereHopperHopperHopperHopperHopper显存容量80GB HBM2e80GB HBM2e80GB94GB96GB80GB80GB显存带宽1,935 GB/s2,039 GB/s3.3…

简讯:Rust 2024 edition and v1.85.0 已发布

详见 https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html 升级方法&#xff1a;rustup update stable