当前位置: 首页 > news >正文

(二十三)Flask之高频面试点

目录:

  • 每篇前言:
    • Q1:为什么把request和session放在一起?
    • Q2:Local对象的作用?
    • Q3::LocalStack对象的作用?
    • Q4:一个运行中的Flask应用程序分别包括几个Local/LocalStack?
    • Q5:什么是g?
    • Q6:视图函数中使用的session/g/current_app/request在Flask源码中流程是什么样的?
    • Q7:一些Python中重要技术栈相关可能会问到的面试点

每篇前言:

  • 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者

  • 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入门到实战》
  • 🔥🔥热门专栏推荐:《Python全栈系列教程》、《爬虫从入门到精通系列教程》、《爬虫进阶+实战系列教程》、《Scrapy框架从入门到实战》、《Flask框架从入门到实战》、《Django框架从入门到实战》、《Tornado框架从入门到实战》、《前端系列教程》。
  • 📝​📝本专栏面向广大程序猿,为的是大家都做到Python全栈技术从入门到精通,穿插有很多实战优化点。
  • 🎉🎉订阅专栏后可私聊进一千多人Python全栈交流群(手把手教学,问题解答); 进群可领取Python全栈教程视频 + 多得数不过来的计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述

Q1:为什么把request和session放在一起?

ctx = RequestContext(request, session)

在 Flask 中,requestsession 是两个不同的概念和对象,它们被放在一起的主要原因是**为了方便开发者编写 Web 应用程序,提供了方便的访问和交互方式。**虽然它们都与 HTTP 请求和会话状态相关,但它们有不同的用途和生命周期。

  1. request 对象:

    • request 对象代表了当前 HTTP 请求的内容,包括请求方法、请求头、请求数据、查询参数、表单数据等。它提供了访问和操作当前请求的数据的方法,使开发者能够轻松地处理来自客户端的请求。
    • request 对象通常用于接收来自客户端的数据,例如用户提交的表单数据、查询参数、请求头信息等。开发者可以从 request 对象中提取这些数据以执行相应的操作。
  2. session 对象:

    • session 对象用于在不同的 HTTP 请求之间存储用户会话数据。它允许开发者将某些数据持久化存储,以便用户在不同的请求之间保持状态。通常,session 数据存储在服务器端,而客户端通过 cookie 或其他机制来标识与会话关联的数据。
    • session 对象通常用于存储用户的登录状态、购物车内容、个性化设置等需要在用户不同请求之间共享的数据。

requestsession 放在一起的主要原因是,**它们通常在处理 Web 请求时一起使用,以实现访问和操作用户请求数据以及维护用户会话状态。这种集成使得在处理用户请求时更加方便,因为您可以方便地访问请求数据并将需要的信息存储在会话中,以实现跨不同请求的状态维护。**虽然它们具有不同的用途,但它们经常一起使用以构建功能丰富的 Web 应用程序。

Q2:Local对象的作用?

在 Flask 中,Local 对象是一种线程/协程本地存储机制,它是 Flask 自己的实现,并基于 threading.local 和协程库(如 Greenlet)来实现。它的主要作用是在多线程或协程环境中安全地存储和访问数据,以确保每个线程或协程都拥有自己的独立副本,避免了数据共享和竞争条件的问题。

再分点说一些具体的细节部分(这样会加分哦~):

  1. 多线程支持:在多线程环境中,每个线程都有自己的 Local 存储空间,其中的数据不会被其他线程访问或修改,确保数据隔离。这有助于处理来自不同客户端的并发请求。

  2. 协程支持:Flask 的 Local 对象还支持协程。在协程模型中,每个协程也可以有自己的存储空间,以保证数据的隔离。这对于使用协程库(如 Greenlet 或 Gevent)来构建高性能应用程序非常有用。

  3. 上下文隔离Local 对象允许在不同上下文(例如请求处理过程)中存储和访问相关数据,而不会干扰其他上下文。这在处理 Web 请求时非常有用,因为您可以在处理请求期间轻松访问请求对象 (request)、会话对象 (session) 和其他上下文相关的信息。

  4. 线程和协程无关性:Flask 的 Local 对象在实现上并不依赖于特定线程或协程库。这意味着无论使用传统的多线程服务器还是协程库,Flask 的 Local 对象都能正常工作。

综上所述,Flask 的 Local 对象是一种强大的机制,它支持多线程和协程级别的数据隔离,确保了数据的安全和隔离性。这使得 Flask 在不同的并发环境下都能提供卓越的性能和可靠性,从传统多线程服务器到协程库都能很好地运行。

Q3::LocalStack对象的作用?

Flask 中LocalStack 对象的主要功能是Local 对象中的数据进行操作,同时维护这些 Local 对象成一个栈的形式。这个栈的结构允许在不同上下文之间进行推入(push)和弹出(pop)操作,从而实现数据的隔离和切换。

深入分点来说就是:

  1. 栈结构: LocalStack 是一个栈(stack)数据结构,每个元素都是一个 Local 对象。在多线程或协程环境中,每个 Local 对象都用于存储特定上下文的数据。这些 Local 对象按栈的方式组织,最近的上下文数据存储在栈的顶部。

  2. 数据操作: 操作 LocalStack 时,您可以推入(push)一个新的 Local 对象到栈顶,也可以弹出(pop)栈顶的 Local 对象。推入新的 Local 对象通常在进入新的上下文(例如请求处理过程)时发生,而弹出则在离开该上下文时发生。这种推入和弹出操作允许您切换不同上下文之间的数据存储。

  3. 数据隔离: 由于每个 Local 对象都是线程或协程本地的,栈的结构确保了数据的隔离。每个上下文都有自己的数据存储,不会干扰其他上下文的数据。这对于在处理并发请求时确保数据不会混淆时非常有用。

  4. 上下文切换: 使用 LocalStackLocal 对象,Flask 能够实现上下文的切换。在多线程或协程环境中,不同上下文之间的数据切换是必要的,以便处理不同请求时可以访问正确的数据,如请求对象和会话数据。

可见,LocalStack 非常牛p,它使用栈结构来维护多个 Local 对象,实现数据的隔离和上下文切换。这对于构建高性能、多线程或协程支持的 Web 应用程序非常有用,确保在不同上下文之间数据正确隔离,从而保证数据安全和一致性。LocalStack 是 Flask 处理多上下文数据隔离的关键工具。

形如下述结构:
【其中1234是线程唯一ID】Local = {1234: {stack: [ctx3, ctx2, ctx1]
}

Q4:一个运行中的Flask应用程序分别包括几个Local/LocalStack?

两个,一个Request Context(请求上下文):request&session;一个Application Context(应用上下文):app&g。

Q5:什么是g?

在 Flask 中,“g” 是一个特殊的对象,通常用于在同一请求处理周期内共享数据。它是一个全局对象,被称为 “request context”(请求上下文)中的 “g” 对象。 “g” 通常用于存储在一个请求处理过程中需要在不同函数之间共享的数据,而不必传递给每个函数的参数。

“g” 对象在请求处理过程中非常有用,因为在一个请求中的不同视图函数(函数处理不同的请求路径)之间,开发者可能需要共享某些数据。举例来说,我们可能需要在处理请求的不同函数中存储用户身份信息、数据库连接、或其他全局数据。

在 Flask 中,我们可以使用 “g” 对象来存储这些数据,以便在同一请求处理周期内跨不同函数进行访问和共享。这是一种避免通过参数传递数据到每个函数的方法,而可以更方便地在函数之间共享数据。

Q6:视图函数中使用的session/g/current_app/request在Flask源码中流程是什么样的?

这个问题我希望读者自行给出答案(如果脑子中第一时间没有清晰的数据流,那么请再细细缕一遍第二十一篇文章!!!)

Q7:一些Python中重要技术栈相关可能会问到的面试点

  1. 讲一下Python中的反射,并举一些Python中反射的一些常见用法:

    Python 中的反射是指通过变量名(通常是字符串)来访问、调用、创建和修改变量、函数、类和模块。反射是一种动态编程技术,允许您在运行时根据字符串的值来操作程序的结构。

    举一些 Python 中的反射的一些常见用法:

    • 访问对象的属性和方法: 可以使用反射来访问对象的属性和方法。例如,如果有一个对象 obj,我们可以使用字符串来访问它的属性或调用它的方法,如 getattr(obj, 'attribute_name')getattr(obj, 'method_name')
    • 创建对象的实例: 反射还可以用于通过类名来创建类的实例。例如,可以使用 globals() 函数来获取全局命名空间中的类,然后使用字符串类名来创建该类的实例。
    • 导入模块: 反射可用于导入模块。可以使用 importlib 模块的 import_module 函数,根据字符串模块名导入模块,然后访问其内容。
    • 修改对象的属性和方法: 反射也可以用于修改对象的属性值或方法。例如,可以使用 setattr(obj, 'attribute_name', new_value) 来修改对象的属性值。
    • 查看对象的成员列表: 可以使用内置函数 dir(obj) 来查看对象的成员列表,包括属性、方法、特殊方法等。这可以帮助了解对象的结构。
    • 动态选择函数和方法: 根据字符串值来选择调用的函数或方法是一种常见的反射用法。例如,根据用户输入的命令字符串来选择执行不同的函数。

    反射是一种强大的编程技巧,但需要谨慎使用,因为它会使代码更加动态和难以维护。不当使用反射可能会导致安全漏洞和不可预测的行为。因此,应该在需要时慎重使用反射,确保输入数据的有效性和安全性。

    结合Flask提一嘴,在Flask视图函数中可以直接拿到使用的request/session/g/current_app,它们的获取也是主要借助于反射实现的:

    在这里插入图片描述

  2. 如果问有关于Python的双下划线魔术方法相关,就想LocalProxy类,它都有!!!

  3. 如果问到线程相关,一定不要忘记说threading.local对象(你懂的~)

相关文章:

(二十三)Flask之高频面试点

目录: 每篇前言:Q1:为什么把request和session放在一起?Q2:Local对象的作用?Q3::LocalStack对象的作用?Q4:一个运行中的Flask应用程序分别包括几个Local/LocalStack&#…...

设计模式(十三)抽象工厂模式

请直接看原文:设计模式(十三)抽象工厂模式_抽象工厂模式告诉我们,要针对接口而不是实现进行设计。( )-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- …...

HTTP Cookie 你了解多少?

Cookie是什么? 先给大家举个例子,F12 打开浏览器的页面之后,我们能在 Response Headers 的字段里面看到一个header 叫做 Set-Cookie,如下所示 图中包含的 Set-Cookie 为 Set-Cookie:uuid_tt_dd10_20293537580-1709432565344-232…...

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…...

ar时间序列

AR时间序列模型(AutoRegressive Time Series Model)是一种用于分析和预测时间序列数据的统计模型。该模型假设未来的观测值与过去的观测值相关,且该相关性可以通过线性回归来描述。 AR模型的基本思想是将当前时刻的观测值表示为过去几个时刻的…...

Android 14 AAOS audio

文章目录 乘客音频投放到主音频区动态路由配置controlhal实现的具体流程control hal AudioGain的callbackAudioModuleChange变化的通知 乘客音频投放到主音频区 场景: 是将乘客区的Media 属性的数据通过主屏区的设备进行播放。具体而言 在副屏user11播放的音乐是输出…...

文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题

四、说明如何只使用表 c 中 2*min(m,n) 个表项及O(1)的额外空间来计算LCS的长度。然后说明如何只用 min(m,n) 个表项及O(1)的额外空间完成相同的工作。要写代码的时候,请用go语言。 文心一言: 在只使用 2 * min(m, n) 个表项和 …...

【论文笔记】Attention Is All You Need

【论文笔记】Attention Is All You Need 文章目录 【论文笔记】Attention Is All You NeedAbstract1 Introduction2 Background补充知识:软注意力 soft attention 和硬注意力 hard attention?补充知识:加法注意力机制和点乘注意力机制Extende…...

(亲测可用)Adobe Photoshop 2024下载与安装

背景介绍:Adobe Photoshop 2024 是全球最受欢迎的图像编辑软件之一,2024年的版本带来了一系列令人印象深刻的功能: AI增强的自动选择和蒙版工具:现在,用户可以更轻松地选择和处理复杂的图像元素。更多的3D渲染功能&…...

uniapp聊天记录本地存储(详细易懂)

目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息,信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目,使用到了本地存储。需要把聊天信息保存在本地,实时获…...

Vue.js中的$nextTick

其实目前在我现有的开发经历中,我还没有实际运用过$nextTick,今天在看书时,学习到了这个东西,所以做个笔记记录一下。 一、$nextTick是什么? $nextTick 是 Vue提供的一个方法,用于在 DOM 更新之后执行回调…...

python+mysql咖啡店推荐系统django+vue

(1).研究的基本内容 系统的角色分为: 1.管理员 2.会员 3.非会员 角色不同,权限也不相同 技术栈 后端:python 前端:vue.jselementui 框架:django/flask Python版本:python3.7 数据库:mysql5.7…...

综合实验nginx+nfs+kpa

综合实验 实验目的: 静态资源和动态资源分别存放在远端存储NFS上,NFS上数据实现实时备份,用户通过负载访问后端的web服务。实现ngixn负载高可用,当keepalived master宕机,vip能自动跳转到备用节点 实验环境&#xff…...

springboot197基于springboot的毕业设计系统的开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 …...

group by报错

# 报错:[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column base.biz_org_rep.ID which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_grou…...

3、云原生安全之falco的部署

文章目录 1、helm安装2、拉去镜像失败与解决3、安装faclo4、安装nfs服务器,配置k8s的持久卷4.1、创建nfs服务器,4.2、部署master节点(nsf服务的客户端)4.3、pv与pvc4.4、假设pv和pvc的配置文件出错了5、安装falcosidekick可视化(建议跳过,直接使用6)6、安装faclo与falco…...

Docker架构概述

Docker是基于Go语言实现的开源容器项目,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运…...

安装 node 错误的配置环境变量之后使用 npm 报错

安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…...

Matlab 最小二乘插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 二、实现…...

AWTK-MVVM 配置文件模型

配置文件模型 AWTK-MVVM 内置了一些配置文件模型&#xff0c;用于读写各种配置文件&#xff0c;比如&#xff0c;JSON/XML/INI/CSV/UBJSON 等。 文件名中可以引用下面的变量。 ${app_dir} 应用程序目录${user_dir} 用户目录${temp_dir} 临时目录 json(url${app_dir}/demos/de…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...