当前位置:网站首页 > Python后端开发 > 正文

python后端开发面试题_python后端开发找工作难吗

一:简述你对Restful风格的理解:

1: 协议 :

  • http:
  • https:

2:域名:

  • 1:将api部署在专用域名下:http://api.example.com
  • 2: 将api部署在主域名下: http://www.example.com/api/

3:版本:

  • 版本号放在url中:http://www.example.com/api/1.0

4:路径:

  • 路径要使用名词复数(数据库表的复数): http://www.example.com/api/1.0/goods

5:请求方式(6种):

  • GET : 获取资源
  • POST: 新增资源
  • PUT:更新资源
  • PATCH: 更新部分资源
  • DELETE : 删除资源
  • OPTIONS : 预检请求

6: 请求参数:

  • ?加键值对的形式: 多个可以使用&进行连接。

7: 状态码:

  • 200 : 正常返回响应。
  • 201: 新建、修改数据成功。
  • 202: 请求进入后台排队。
  • 400:请求有误。
  • 401: 权限不足。
  • 403: 访问被禁止。
  • 404: 找不到。
  • 406: 请求格式不正确。
  • 500:服务器内部错误。

二:概述python的内存管理机制:

链接地址:https://blog.csdn.net/zx/article/details/

  • 1:引用计数:对于一个对象,每一个变量引用他,都会让这个对象中的引用计数的属性增加1,反之则减一,当引用计数变成0的时候,则进行销毁。
  • 2:垃圾回收(标记—清除,分代回收):
  • 2.1:标记清除:对于循环引用的对象,例如A引用了B,B也引用了A,那么我们让B的引用减一,则B应该被销毁,由于B也引用了A,A也应该被销毁,则表示A,B之间是循环引用,则一起被销毁。
  • 2.2:分代回收: 存活时间越久的对象越不可能是垃圾,因此会相应减少对这些存活时间比较久的对象的扫面,从而也提高python的效率。
  • 3: 内存池:在这里插入图片描述

三: cookie 与 Session的区别:

  • 1: 存储位置不同: cookie存储在浏览器,session存储在服务器。
  • 2:存储大小不同,cookie存储受限,session由于存储在服务器端,因此不受限。
  • 3:安全性不同:cookie不如session安全。

四:你了解web开发中存在哪些安全漏洞?

  • 1: CSRF利用cookie进行跨域伪造攻击。
  • 2:SQl注入。

更多地址:https://www.cnblogs.com/wuhuacong/archive/2013/04/15/3022011.html

五:Django的中间件:

  • 1:中间件作用:在视图之前拦截请求,在视图返回响应之后,处理响应。
  • 2:你用过Django哪些中间件?
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', #一些安全设置,比如xss脚本过滤 'django.contrib.sessions.middleware.SessionMiddleware',#session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。 'django.middleware.common.CommonMiddleware', #通用中间件,会处理一些url 'django.middleware.csrf.CsrfViewMiddleware', #跨域请求伪造中间件,加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。 'django.contrib.auth.middleware.AuthenticationMiddleware', #用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。 'django.contrib.messages.middleware.MessageMiddleware',#消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。 'django.middleware.clickjacking.XFrameOptionsMiddleware',#防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。 'A_orm.middlewares.auth.AuthenticationMiddleware', ] 
  • 3:你自己写过中间件吗?
    没有写过中间件,但是会写,首先定义一个类,继承MiddlewareMixin,然后重写
    中间件5个重写函数:
    process_request(请求之前)
    process_view(视图之前)
    process_template_response(处理每个模板响应之前)
    process_response(返回响应之后)
    process_exception(抛出异常)

六:Django与Flask的区别?

  • 1:Django的MVT架构、自带ORM、强大的Admin后台管理、自带数据库、还自带开发测试用的服务器。
  • 2:Flask 本身相当于一个内核, 主要实现了路由分发模板渲染功能, 分别集成自 Werkzeug 和 Jinja2模块包, 这两个也是Flask框架的核心。

七:你在哪里用到装饰器?

@celery_app.task(name=‘ccp_send_sms_code’)给我们的task取一个名字。

八:乐观锁与悲观锁的区别?

九:单例生效的是线程还是进程?假设有20个进程连接MYSQL,单例状态下是有多少个连接?

答: 单例生效的是线程,对于进程是不起作用的,因为每一个进程都有自己的分配空间,如果有20个进程通过单例连接数据库,则会有20个连接。如果是多线程情况下,需要使用线程锁,保证一个类只有一个实例。

十:lambda与map函数的使用:

#1.常规方法 >>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9,10] >>> def square(x): return x2 >>> list(map(square,lst)) #Python2.x使用map(square,lst) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #2.使用lambda函数 >>> list(map(lambda x:x2,lst)) #Python2.x使用map(lambda x:x2,lst) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> [(lambda x:x2)(x) for x in lst] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #map函数除了作用于数字列表外,还可以作用于字符串和元组。 #例如: >>> list(map(ord,'abcdef')) [97, 98, 99, 100, 101, 102] #当传入多个可迭代对象时,且它们元素长度不一致时,生成的迭代器只到最短长度 >>> list(map(lambda x,y:x+y,'abc','de')) ['ad', 'be'] 

十一:python中的类方法,实例方法,静态方法

  • 实例方法只能由实例对象来调用。
  • 静态方法,类方法,可以由类和实例调用。
  • 被@classmethod修饰的是类方法,被staticmethod修饰的是静态方法,不修饰的是实例方法。

十二: 类属性和实例属性的区别?

  • 实例属性:在__init__方法中定义的属性称为实例属性,实例属性是属于某个实例的。
  • 类属性:在类里面和方法外面定义的属性称为类属性,类属性属于当前类。
  • 对象可以访问类属性,但是不能够修改类属性。
  • 如果对象想要修改类属性怎么做???定义类方法,进行调用。

十三:你的项目中uwsgi部署的时候配置的进程是多少?你们在设计的时候考虑多少并发量?

答:uwsgi配置32进程,800线程,考虑1000并发量以上。

十四:你项目上线了吗?有没有域名?

上线了,域名:www.uguu.com

十五: 进程之间是如何通信的呢?(关小工,辛嫂)

  • 管道:
  • 消息队列:
  • 共享内存:
  • 信号量:
  • socket

十六: __init__方法和__new__方法的区别?

  • 顺序不同: __new__方法先执行
  • 作用不同: __new__方法是为了创建实例的,__init__方法是为了初始化实例对象的。
  • 传入值不同: __new__传入cls, 而__init__传入self.
  • 输出值也不同: __new__输出实例,__init__没有输出值。

十七: 生成器和迭代器的区别是什么?

  • 生成器可以看做是创建迭代器的工具。
  • 生成器:函数 + yield关键字: 自动创建了iter方法和next方法。
  • 迭代器:实现了iter方法和next方法。

十八: 虚拟机(Docker)的网络配置有哪些?

  • 桥接:
  • 主机模式:
  • None模式:
  • macVlan模式:
  • 覆盖网络模式:

十九: 查看进程的命令,磁盘,端口

  • 查看磁盘: df -h
  • 根据进程查看端口: netstat -nap | grep pid
  • 根据端口查看进程: netstat -nap | grep port
  • 根据进程查看进程号: ps -aux | grep java

二十:死锁产生的原因是什么?条件又是什么?

二十一:请求报文和响应报文的格式:

  • 请求报文:请求行(协议,url地址,请求方式),请求头,空行, 请求体。
  • 响应报文: 响应行, 响应头,响应体。

二十三:python程序的执行原理:

首先python是一门解释型的语言,操作系统会将我们的python解释器复制到内存中,然后从上到下的让python解释器翻译python程序中的代码(词法分析,语法分析, 编译等过程。),我们会得到一个.pyc的字节码文件, 再由cpu执行.pyc中的字节码文件即可。

二十四:python如何实现私有的呢?

  • 变量名、函数名前面增加两个下划线实现私有。
  • python会将我们定义的私有变量和函数名转换成 ,_类名__变量名, _类名__方法名。

二十五:数据库的三范式:

  • 列不可分
  • 非主键完全依赖于主键,不能部分依赖
    案例: 比如:我们一个表(学号,课程号)作为主键,对于课程学分,只依赖于课程号,跟学号没有任何关系,所以此时违反了第二范式。 一个表只说明一个事物
  • 非主键只依赖于主键,不能依赖于非主键一个数据库表中不包含已在其它表中已包含的非主键字段

二十六: Django有哪些模块?

  • View模块
  • Template模板
  • URL模块
  • auth模块
到此这篇python后端开发面试题_python后端开发找工作难吗的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • Python后端学习路线_python后端教程2024-10-30 14:51:57
  • Python后端开发(主Django)面试题_python后端开发找工作难吗2024-10-30 14:51:57
  • Python后端工程师面试题(附答案)终结版_python后端开发岗位2024-10-30 14:51:57
  • Python后端开发效率提升工具推荐(一)_python后端开发项目2024-10-30 14:51:57
  • Django python后端开发_django后端开发的经验之谈2024-10-30 14:51:57
  • Python Web开发(一):Web开发简介_python web程序开发2024-10-30 14:51:57
  • 从0开始python后端开发_前端(html)向后端(python)传递数据_GET_POST_python后端和前端怎么对接2024-10-30 14:51:57
  • python后端开发_python后端开发找工作难吗2024-10-30 14:51:57
  • 清晰透明的Python后端开发指南_python 透明窗口2024-10-30 14:51:57
  • Python后端开发要求_python后端开发项目2024-10-30 14:51:57
  • 全屏图片