flask常见面试题

1. 什么是Flask,有什么优点?

  概念解释:

  Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里应用或商业网站.

  优点:

  Flask属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖外部库的框架.
  - 框架很轻量
  - 更新时依赖小
  - 专注于安全方面的bug

  Flask的依赖:

  Werkzeug 一个WSGI工具包(web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的借口,其他语言也有类似的接口)
  jinja2模板引擎

 

2. Django和Flask有什么区别?

  Flask:

  轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具
  适用于做小型网站以及web服务的API,开发大型网站无压力,但架构需要自己设计
  与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django

  Django:

  重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间.
  自带ORM(Object-Relational Mapping 对象关系映射)和模板引擎,支持jinja等非官方模板引擎.
  自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库
  自带数据库管理app
  成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发.
  python web框架的先驱,第三方库丰富


3. Flask-WTF是什么,有什么特点?

  Flask-wtf是一个用于表单处理,校验并提供csrf验证的功能的扩展库
  Flask-wtf能把正表单免受CSRF<跨站请求伪造>的攻击
  eg:
  form.html

1 <form action="{{ url_for('wtf_form') }}" method='post'>
2     {{ form.csrf_token }} #进入csrf验证
3     <p>{{ form.username.label }}{{ form.username(style='color:red',placeholder='请输入用户名') }}{{ form.username.errors }}</p>
4     <p>{{ form.userpass.label }}{{ form.userpass() }}{{ form.userpass.errors }}</p>
5     <p>{{ form.submit() }}</p>
6 </form>
View Code

  manage.py

 1 from flask import Flask,render_template,request
 2 from flask_wtf import FlaskForm   #导入继承父类
 3 from wtforms import StringField,PasswordField,SubmitField
 4 from wtforms.validators import Length,DataRequired
 5 
 6 class Login(FlaskForm):  #继承自FlaskForm类
 7     username = StringField('用户名',validators=[Length(min=6,max=12,message='用户名长度为6~12位'),DataRequired(message='用户名不能为空')])
 8     userpass = PasswordField('密码',validators=[Length(min=6,max=12,message='密码长度为6~12位'),DataRequired(message='密码不能为空')])
 9     submit = SubmitField('登录')
10 
11 
12 @app.route('/wtf_form',methods=['GET','POST'])
13 def wtf_form():
14     form = Login()  #实例化form对象
15     if request.method == 'POST':
16         if form.validate_on_submit():  #数据正确 并且验证csrf通过
17             print(request.form.get('userpass'))
18             print(request.form.get('username'))
19             return '数据提交成功'
20     return render_template('wtf_form.html',form=form)
21 
22 #注:
23 #1 methods 参数告诉Flask在URL映射中把这个视图函数注册为GET和POST请求的处理程序,默认GET
24 #2 采用post请求可以通过对象很轻松访问,GET 请求没有主体,提交的数据以查询字符串的形式附加到URL中
25 #3 validate_on_submit() 会调用username 字段上附属的 DataRequired() 验证函数。
View Code

 

4. Flask脚本的常用方式是什么?

  在shell中运行脚本文件
  在python编译器中run


5. 如何在Flask中访问会话?

  会话(seesion)会话数据存储在服务器上.会话是客户端登录到服务器并注销的时间间隔.需要在此会话中进行的数据存储在服务器上的临时目录中.
  from flask import session 导入会话对象
  session['name'] = 'admin' 给会话添加变量
  session.pop('username', None) 删除会话的变量


6. Flask是一个MVC模型吗?如果是,可以示例一下吗?

  flask是一个典型的MVC框架
  * MVC框架,图形理解

  

  * flask项目中的MVC理解

  

 

7. 解释Python Flask中的数据库连接?

  python中的数据库连接有两种方式:

  在脚本中以用第三方库正常连接,用sql语句正常操作数据库,如mysql关系型数据库的pymsql库
  用ORM来进行数据库连接,flask中典型的flask_sqlalchemy,已面向对象的方式进行数据库的连接与操作


8. 谈谈restful?

 

9. 列举Http请求中常见的请求方式?

  GET / POST / DELETE

 

10. 列举Http请求中的状态码?

  404 请求的url地址不存在
  503 访问限制有权限
  200 访问成功
  302 重定向

 

11. 列举Http请求中常见的请求头?

  User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关,则该值非常有用.
  Cookie:这是最重要的请求头信息之一
  Content-Type:请求类型

 

12. 什么是wsgi?

  WSGI(Web Server Gateway Interface,Web 服务器网关接口)则是Python语言中所定义的Web服务器和Web应用程序之间或框架之间的通用接口标准.
  WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,另一端称为应用端或者框架端,WSGI的作用就是在协议之间进行转化.

  WSGI将Web组件分成了三类:Web 服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application).
  Web Server接收HTTP请求,封装一系列环境变量,按照WSGI接口标准调用注册的WSGI Application,最后将响应返回给客户端.

 

13. Flask框架依赖组件?

  Route(路由)
  templates(模板)
  Models(orm模型)
  blueprint(蓝图)
  Jinja2模板引擎

 

14. Flask蓝图的作用?

  蓝图Blueprint实现模块化的应用
  - book_bp = Blueprint('book', __name__)创建蓝图对象
  - 蓝图中使用路由@book_bp.route('url')
  - 在另一.py文件里导入和注册蓝图from book import book_bp app.register_blueprint(book_bp)

  作用:

  将不同的功能模块化
  构建大型应用
  优化项目结构
  增强可读性,易于维护(跟Django的view功能相似)

 

15. 列举使用过的Flask第三方组件?

  flask_bootstrap
  flask-WTF
  flask_sqlalchemy

 

16. 简述Flask上下文管理流程?

  每次有请求过来的时候,flask会先创建当前线程或者进程需要处理的两个重要上下文对象,把它们保存到隔离的栈里面,这样视图函数进行处理的时候就能直接从栈上获取这些信息.

 

17. Flask中多app应用是怎么完成?

  请求进来时,可以根据URL的不同,交给不同的APP处理

 

18. wtforms组件的作用?

  WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证.

 

19. Flask框架默认session处理机制?

  Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了.

  过期时间是通过cookie的过期时间实现的.

  为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改.

 

20. ORM的实现原理?

  概念: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.

  详细介绍:

  让我们从O/R开始.字母O起源于"对象"(Object),而R则来自于"关系"(Relational).几乎所有的程序里面,都存在对象和关系数据库.在业务逻辑层和用户界面层中,我们是面向对象的.当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中.
  当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等.你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务.而这些代码写起来总是重复的.
  ORM解决的主要问题是对象关系的映射.域模型和关系模型分别是建立在概念模型的基础上的.域模型是面向对象的,而关系模型是面向关系的.一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段.
  ORM技术特点:
  1.提高了开发效率.由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层.
  2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据.
--------------------------------------------------------------- 
原文:https://blog.youkuaiyun.com/wl_python/article/details/81131873

转载于:https://www.cnblogs.com/tianxiong/p/10739775.html

<think>好的,用户需要关于32位单片机的见面试题及答案。首先,我得确认用户的具体需求。他们可能正在准备面试,需要重点复习STM32或其他32位单片机相关的知识。根据提供的引用内容,引用[2]和[3]提到了STM32的基础概念、特点以及具体的寄存器问题,这些应该是重点。 接下来,我需要整理这些信息。基础概念方面,用户可能需要知道什么是32位单片机,它的优势和应用场景。STM32作为典型例子,其特点如ARM Cortex-M核心、外设接口、低功耗等需要详细列出。此外,引用[3]中的技术细节问题,比如GPIO寄存器的配置,也是见的面试题,需要准确回答。 另外,用户可能还需要了解中断处理、时钟系统、DMA、低功耗模式等高级主题。这些问题在单片机开发中非关键,面试中经会被问到。例如,中断优先级、时钟源选择、DMA的作用等,都需要简明扼要的解释。 我还需要确保回答结构清晰,分点列出问题和答案,符合用户要求的格式。同时,根据系统指令,所有数学公式要用$...$,但这里可能涉及较少,但需要注意LaTeX的正确使用,如果有的话。例如,如果提到某些计算公式或寄存器位运算,可能需要使用LaTeX。 然后,考虑生成相关问题。用户可能需要进一步的问题来深入理解,比如开发工具的使用、见外设的配置、RTOS的应用等。这些问题可以帮助他们全面准备面试。 最后,检查引用是否正确,每个答案后自然添加引用标识。例如,STM32的特点来自引用[2],GPIO寄存器的问题来自引用[3]。确保信息准确,不遗漏关键点,同时保持回答简洁明了,符合用户需求。</think>### 32位单片机见面试问题及答案 #### 1. **32位单片机的核心特点是什么?** 32位单片机以32位数据总线和寄存器宽度为核心特征,支持更复杂运算(如浮点运算)和更大内存寻址空间。典型代表如STM32系列基于ARM Cortex-M核心,具有高性能、低功耗和丰富外设资源[^2]。 **答案要点**: - 数据总线宽度:32位 - 运算能力:支持高精度计算(如DSP指令) - 内存管理:支持更大RAM/Flash(通百KB到MB级) - 应用场景:工业控制、物联网、汽车电子等 --- #### 2. **STM32的时钟系统如何配置?** STM32时钟源包括内部高速时钟(HSI)、外部晶振(HSE)、锁相环(PLL)等,通过RCC(Reset and Clock Control)模块管理。 **答案要点**: - 用配置:HSE(8MHz)→ PLL倍频至72MHz(Cortex-M3) - 低功耗模式:可切换至HSI或LSI(低速内部时钟) - 关键寄存器:`RCC_CR`(时钟控制)、`RCC_CFGR`(时钟配置)[^3] --- #### 3. **STM32的GPIO端口如何配置输入/输出模式?** 通过配置`GPIOx_CRL`(低8位)和`GPIOx_CRH`(高8位)寄存器实现,支持以下模式: - 输入模式:浮空、上拉、下拉 - 输出模式:推挽、开漏(可设置最大速度) - 复用功能:如UART、SPI等外设专用引脚 **示例代码**: ```c // 配置PA5为推挽输出,速度50MHz GPIOA->CRL &= ~(0xF << 20); // 清除原有配置 GPIOA->CRL |= (0x3 << 20); // 推挽输出,速度50MHz ``` 引用中提到的寄存器配置与此直接相关。 --- #### 4. **中断处理流程是怎样的?** **答案要点**: 1. **中断源**:外部中断(EXTI)、定时器、串口等 2. **优先级配置**:通过NVIC(Nested Vectored Interrupt Controller)设置抢占优先级和子优先级 3. **服务函数**:需在`stm32fxxx_it.c`中实现中断服务例程(ISR) **示例**: ```c void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // 处理中断 EXTI_ClearITPendingBit(EXTI_Line0); } } ``` --- #### 5. **DMA在STM32中的作用是什么?** DMA(直接存储器访问)用于外设与内存间高效数据传输,减少CPU负载。 **应用场景**: - ADC连续采样数据直接传输到内存 - SPI/I2C通信批量发送或接收数据 **配置步骤**: 1. 启用DMA时钟(`RCC_AHBPeriph_DMA1`) 2. 初始化DMA通道(源地址、目标地址、传输方向等) 3. 启动传输并等待完成标志 --- #### 6. **如何实现STM32的低功耗模式?** **主要模式**: - **睡眠模式**(Sleep):CPU停止,外设运行 - **停机模式**(Stop):所有时钟关闭,保留RAM内容 - **待机模式**(Standby):最低功耗,需复位或外部唤醒 **唤醒方式**:外部中断、RTC闹钟、WKUP引脚等 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值