python WEB后端面试(自己整理部分答案)

技术面

      • 面向对象部分
      • 数据库部分
      • 前端部分
      • Web框架部分
      • Django
      • Rest Framework
      • 项目部分
      • 爬虫

先做下自我介绍
做Python几年了?为什么选择Python?
学历?大学什么专业?
除了Python以外对其他语言有没有了解?

了解过php和javascrpit,js是与浏览器交互的脚本语言,php也是一门面向web的语言,与apache mysql搭配效果也更好

你对Python这门语言的看法?

单说python这门语言的话我们首先得了解它的特性与优势:python是一门具有解释性、编译性、互动性和面向对象的脚本语言

python有很强的可读性,对初学者十分友好

因为开源,所以也有很丰富的扩展库、与Linux Unix Windows兼容良好,可移植性好,现在像mac终端已经自带python了

python与php相比可以处理多进程多线程任务

语法没有java那么严格 java的可移植性是需要代价的

在学习Python过程中有没有令你影响深刻的事

有,在自己学习python的过程中经常会让我有一种惊叹,还有这种骚操作~ 比如django开发的时候,python manage的各种命令 django的filter ORM,restframework都省去了很多复杂的工序,大大提高了开发效率,还有我开始对python产生兴趣的首先就是爬虫,在面试第一家web后端工作时我就用爬虫爬过boss直聘,智联,拉勾等网站上的招聘信息,并把这些数据整合起来方便自己去找工作

字符串、字典、元组、列表常用方法?

字符串常用的是split、replace、join、find、strip、just

列表常用 pop 、append、 remove、 insert 、clear 、len 、sort、 reverse

字典常用 get、 index、 keys、 values、 update

pep8规范?
函数闭包的理解?

是指函数中嵌套函数 且外层函数的返回值也是函数 闭包中需要注意的是变量的作用域,内层函数使用外层函数的值需要加nolocal 使用全局变量的值需要加global

Python函数的作用域?

函数传入参数时要注意什么?如: func(arg,names=[]):…

形参与实参是一一对应的、形参的长度也是可变的、形参带可以把实参作为列表传入 两个星会作为字典

什么是装饰器?应用场景?

装饰器的特点是返回值和参数都是函数

装饰器的目的就是对已封装函数进行操作,为其加上新的功能或一系列运算 。 在django中有middleware中间件,它其实就是高级的装饰器用法,

def outside(func):    
    def inside(str):
        func(str)
        #函数体
    return inside  
@outside
def hello(str):
    #函数体
hello(str)

生成器、迭代器和可迭代对象区别和应用?

能使用for遍历的就叫迭代对象 ,能用next函数的叫迭代器

请一行写出 9*9 乘法表
深浅拷贝?
线程、进程和协成?应用?
IO多路复用?
with 上下文机制原理?
Python内存管理?
TCP与UDP协议区别?
Python2x与Python3x的区别?

Unicode. python3是默认utf-8编码的

除法运算 两个整数相除返回浮点数 而在2x版本可以整除的返回整数

捕获异常机制也从except exc,var 改为 except exc as var

python3取消了xrange函数。xrange更像是个生成器 它是惰性取值的

去掉了long类型。只用int表示整型

不等运算符去掉了<> 只存在!=

去掉了“repx表达式

面向对象部分

面向对象优缺点:

解决了程序的扩展性,对某个对象单独修改 会立刻反映到整个体系,在调用时只需要实例化一个对象,对象就会拥有所有的属性

缺点是可控性差,无法像面向过程的程序设计一样精准的预测问题的处理结果

三大特性以及解释?

封装性多态性 继承性

多态性就是在不考虑实例的类型的情况下使用实例

封装性 它可以隐藏对象的属性和实现细节,仅对外提供公共访问方式

面向对象继承时要注意什么?

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类

继承分单继承和多继承 多继承需要注意继承的顺序,

而且子类继承父类后如果方法命名与父类相同 则会覆盖

但在python3中。可以使用super函数来调用父类方法

深度优先和广度优先是什么?

python的类可以继承多个类

如果继承多个 则寻找方式就有两种 深度优先 广度优先

经典类按深度优先方式查找

新式类按广度优先方式查找

面向对象中的一些特殊方法都记得那些?如,call

str\ getattr\ setattr\ getatttribute

如何理解元类

元类就是负责帮你创建类的类 ,

newinit 方法?
单例模式 ———–

单例模式是一个对象只能有一个类。一个单例类只能有一个实例

staticmethod、classmethod,property

property是一种特殊属性,访问它时会执行一段功能然后访问值

staticmethod本质就说实现了get set delete方法

经典类和新式类

经典类和新式类在写法上的区别是是否继承了object类。新式的必然有很多新的功能

数据库部分

数据库引擎?

innob引擎 Memory引擎 Merge引擎

innob引擎一大特点就是支持外键。 内存和空间大 支持事务

数据库锁?

由于数据库是多用户共享资源,所以需要处理并发问题,而数据库锁的机制就是为了处理这一问题,当出现并发的时候,如果不做控制就会出现各种问题 比如脏数据。修改丢失等 所有数据库并发需要事务来控制,事务并发问题需要数据库锁来控制

事务四个特性。持久型 原子性 一致性 隔离性

数据库锁有 乐观锁 悲观锁 死锁。活锁 行锁 表锁 页级锁

排它锁有称为写锁。共享锁又称为读锁

你怎么理解ORM ?ORM相关操作
selected_related和prefetch_related是什么?
Q和F
queryset的常用方法
user(用户),group(部门),role(角色)三个表:
查询年龄大于18的人
查询年龄不等于18的人
查询 IT部 和 运维部的所有人?
查询 IT部 或 运维部的所有人?
查询角色是 “管理员” 的所有人?
设计数据库:会议室预定
设计数据库:员工、部门、角色;
查询 “IT”部门所有人
查询 每个部门 的员工数量?

查询 每个部门 年龄不等于 18的人
查询部门人数不满 5 的部门?
数据库优化方案?

  • 尽量避免使用select * 能用字段名就用字段名。避免查询无用字段

  • select count(*)会查全表 尽量避免

  • 建表时字段类型能用varchar/nvarchar就不要用char/ncahr

  • 避免频繁的创建和删除临时表 会耗费性能资源 产生大量log

  • 如果使用临时表 在使用的最后一定要显示删除 先trancate table 再drop table

  • 尽量避免大事务操作,提高并发效率

  • 避免向客户端返回大数据量 数据量过大 应考虑需求是否合理

    比如你在一个在线网站使用delete和update操作。必然会引发数据库锁

数据库索引以及注意点?
什么情况下建索引?
数据库索引种类?
delete和truncate区别?
数据库中出现乱码?如何解决?
执行计划和慢日志?
数据库读写分离?
用过什么ORM框架?
ORM缺点和优点?

前端部分

前端是自己写?还是有前端开发?
了解的前端框架?
js的面向对象有没有了解?
js作用域?
js中的this要注意什么?
跨域是什么?解决方案?

Web框架部分

Http协议
列举Http请求方法?
列举Http常用请求头?
列举Http状态码?
Django请求生命周期?
什么是wsgi?

请求:

  • 请求方法
  • 请求地址
  • 请求内容
  • 请求头
  • 请求环境

响应:

  • 状态吗
  • 响应数据
  • 响应头

wsgi的作用就是将上面数据在server端和python程序间进行传递 它是一个标准 一个需要遵从的规范 才能正常工作

Django

django遵从mvc框架

是由python编写的开源WEB框架

目录。urls.py 路由分发 将url与view一一映射

wsgi.py 关于程序与服务器端的规范 或者说统一的接口

Django信号作用?应用?
有没有用过单元测试?
Django 中间件作用?应用?

中间件是服务器端与应用程序的一个中间层,它将个管道一样。将接受到的请求进行一些处理。然后传递到客户端 然后把客户端处理的结果再返回

它的应用场景是

  • 根据url把请求给到不同的客户端程序
  • 允许多个客户端
  • 负载均衡和远程处理
  • 应答的过滤处理

Django处理并发?
FBV和CBV
cookie和session区别以及实现原理?

Rest Framework

什么是rest api?
restful framework框架:认证、权限和访问频率
如果控制版本?

项目部分

项目开发周期?
项目组人数?
如何部署?

Git
WebSocket
其他

消息队列

爬虫

你接触过爬虫吗 使用过哪些爬虫框架?
你爬过些哪些内容 爬过哪些app

扩展
Docker是什么 用过命令 什么好处

进程与线程的关系

1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

(2)资源分配给进程,进程是程序的主体,同一进程的所有线程共享该进程的所有资源

(3)cpu分配给线程,即真正在cpu上运行的是线程

(4)线程是最小的执行单元,进程是最小的资源管理单元

协程的优缺点:

优点:

  上下文切换消耗小

  方便切换控制流,简化编程模型

  高并发,高扩展性,低成本

缺点:

  无法利用多核

  进行阻塞操作时会阻塞掉整个程序

  单纯的协程是没有意义的,只是人为的控制执行一下这个,执行一下那个,如果想监测是否有IO操作,需要结合IO多路复用

你可能感兴趣的:(#,面试)