https://github.com/the5fire/django-interview-questions

  1. Python基础
    基础语法是否熟悉?介绍下。
    一、标识符
    在 Python 里,标识符由字母、数字、下划线组成,但不能以数字开头。
    Python 中的标识符是区分大小写的。
    以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
    以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数。
    二、保留字符(关键字)
    保留字不能用作常数或变数,或任何其他标识符名称。
    所有 Python 的关键字只包含小写字母。
    三、行和缩进
    python 最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
    Python语句中一般以新行作为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示。
    Python 可以使用引号( ’ )、双引号( " )、三引号( ‘’’ 或 “”" ) 来表示字符串,引号的开始与结束必须是相同类型的。其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。单行注释用#开头,多行注释使用三个单引号(’’’)或三个双引号(""")。
    空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。空行也是程序代码的一部分。
    可以在同一行中使用多条语句,语句之间使用分号(;)分割。
    print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 ,。
    缩进相同的一组语句构成一个代码块,我们称之代码组。

有哪些关键字,并且解释其作用?

有哪些内置方法,并且解释其作用?
set\get\del
一、attr系列
setattr,getattr,delattr

二、item系列
__ setitem __ (self,key,value)、__ delitem __ (self,key)、getitem(self,item):当对类中的某个属性进行"赋值"、被删除、调用时触发的函数(只有使用字典赋值的方式时才会触发此方法的执行)
与Attr系列的区分: __ setattr __ (self)、__ delattr __ (self)、getattr(self):是在对象打点儿的方式赋值、删除、调用时,才会触发的方法

三、slots
slots:其实就是将类中的名称锁定,实例化对象,只可以赋值和调用,不可以删除属性和增加新的属性
应用场景:当实例化几万个对象的时候,每个对象都会生成一个名称空间dict,而每一个名称空间都会各自占用一个内存,造成内存的浪费,用 slots,不用再产生 dict 了,省内存,对象的 dict 都统一用类的 dict,属性都是用 slots 给定义的
四、其他
next 和 iter、del、str、enter和exit、doc、call
上下文管理协议,就是咱们打开文件时常用的一种方法:with
__ enter __ (self):当with开始运行的时候触发此方法的运行
__ exit __ (self, exc_type, exc_val, exc_tb):当with运行结束之后触发此方法的运行
exc_type如果抛出异常,这里获取异常的类型
exc_val如果抛出异常,这里显示异常内容
exc_tb如果抛出异常,这里显示所在位置
对于 call 方法的执行是由对象后加括号触发的

解释下什么是动态语言?动态强类型是指什么?
https://www.cnblogs.com/zhangchaocoming/p/12563432.html
动态语言:在运行时确定数据类型的语言
动态强类型:编写时无需定义变量类型;运行时变量类型强制固定。
解释型语言:无需编译,在解释器环境直接运行,编译型语言要先编译再运行,而解释性语言直接“运行”源代码。
强类型语言,当你定义一个变量是某个类型,如果不经过代码显式转换(强制转化)过,它就永远都是这个类型,如果把它当做其他类型来用,就会报错;
弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。

是否有编码规范的概念?采用的是哪中编码规范?
https://www.runoob.com/w3cnote/google-python-styleguide.html
不要在行尾加分号, 也不要用分号将两条命令放在同一行
每行不超过80个字符
以下情况除外:
长的导入模块语句
注释里的URL
不要使用反斜杠连接行。
宁缺毋滥的使用括号
除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是可以的.
用4个空格来缩进代码
顶级定义之间空两行, 方法定义之间空一行
括号内不要有空格.
不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).
在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not). 至于算术操作符两边的空格该如何使用, 需要你自己好好判断. 不过两侧务必要保持一致.
当’='用于指示关键字参数或默认参数值时, 不要在其两侧使用空格.
不要用空格来垂直对齐多行间的标记, 因为这会成为维护的负担(适用于:, #, =等):
大部分.py文件不必以#!作为文件的开始. 根据 PEP-394 , 程序的main文件应该以 #!/usr/bin/python2或者 #!/usr/bin/python3开始
在计算机科学中, Shebang (也称为Hashbang)是一个由井号和叹号构成的字符串行(#!), 其出现在文本文件的第一行的前两个字符. 在文件中存在Shebang的情况下, 类Unix操作系统的程序载入器会分析Shebang后的内容, 将这些内容作为解释器指令, 并调用该指令, 并将载有Shebang的文件路径作为该解释器的参数.#!先用于帮助内核找到Python解释器, 但是在导入模块时, 将会被忽略. 因此只有被直接执行的文件中才有必要加入#!.
如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
每个导入应该独占一行.
命名约定{
1.所谓"内部(Internal)"表示仅模块内可用, 或者, 在类内是保护或私有的.
2.用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
3.用双下划线(__)开头的实例变量或方法表示类内私有.
4.将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
5.对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.}

解释下深拷贝和浅拷贝
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

lambda的用法以及使用场景?
lambda只是表达式不是语句,
场景1:map和reduce
场景2:lambda和list结合使用
li = [lambda :x for x in range(10)]

解释下什么是闭包,以及它的作用?
闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
还有一点需要注意:使用闭包的过程中,一旦外函数被调用一次返回了内函数的引用,虽然每次调用内函数,是开启一个函数执行过后消亡,但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量。
  很多伙伴很糊涂,闭包有啥用啊??还这么难懂!
   3.1装饰器!!!装饰器是做什么的??其中一个应用就是,我们工作中写了一个登录功能,我们想统计这个功能执行花了多长时间,我们可以用装饰器装饰这个登录模块,装饰器帮我们完成登录函数执行之前和之后取时间。
   3.2面向对象!!!经历了上面的分析,我们发现外函数的临时变量送给了内函数。大家回想一下类对象的情况,对象有好多类似的属性和方法,所以我们创建类,用类创建出来的对象都具有相同的属性方法。闭包也是实现面向对象的方法之一。在python当中虽然我们不这样用,在其他编程语言入比如avaScript中,经常用闭包来实现面向对象编程
   3.3实现单例模式!! 其实这也是装饰器的应用。单例模式毕竟比较高大,,需要有一定项目经验才能理解单例模式到底是干啥用的,我们就不探讨了。

实现一个简单的装饰器,用来对某个函数的结果进行缓存?

Python中几种容器类型的差别及使用场景?
字符串容器(string)
列表容器(list)
元组(tuple)
字典(dict)

列表推导式的使用和场景?
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

yield的使用。
常用的内置库有哪些?举例他们的用法。
介绍下你了解的"dunder method"(魔法方法)有哪些,以及他们的作用?
解释下面向对象的概念,以及在编程中的作用?
如何实现单例模式?
如何对Python对象进行序列化?
是否能够熟练编写多线程和多进程程序?
使用socket编写一个简单的HTTP Server,成功返回success即可。
如何理解Python中的GIL?对我们日常开发有什么影响?
解释下协程、线程、进程之间的差别。
2. Django基础
整体结构
如何理解设计模式中的MVC模式,你日常中怎么使用这种模式?
如何理解Django中的MTV模型?
介绍下Django中你熟悉的模块有哪些,分别作用是什么?
如何看待Django自带的Admin,以及说说你的使用经验。
如何理解WSGI的作用?
如何自己实现WSGI协议?
为什么正式部署时不要开启DEBUG = True配置?
Model层
如何理解Django Migrations的作用?
是否有过手动编辑Migrations文件的经历,原因是什么,有哪些需要注意的?
介绍下ORM的概念。
如何理解ORM在Django框架中的作用?
介绍下ORM下的N+1问题,发生的原因,以及解决方案。
介绍下Django中Model的作用。
Model的Meta属性类有哪些可配置项,作用是什么,日常用到的。
介绍下QuerySet的作用,以及你常用的QuerySet优化措施?
介绍下Pagination的使用。
介绍下Model中Field的作用。
如何定制Manager?什么场景下需要定制?
Raw SQL的效率跟ORM的效率是否进行过对比,结果如何?如何理解这种差异?
Django内置提供的权限逻辑是什么,以及其粒度?
View层
Django中function view和Class-based View的差别及适用场景?
如何给Class-based View添加login required装饰器?
Middleware在Django系统中的作用?
settings中默认配置的MIDDLEWARES有哪些?他们的作用分别是什么?是否可以移除?
Django系统如何判断用户是否为登录用户?
对于无Cookie的浏览器如何实现用户登录?
Django中的request和HttpResponse的作用是什么?
如何处理图片上传的逻辑,以及展示逻辑?
介绍下用到过的Django的缓存粒度。
Form层
介绍下Django中Form的作用。
Form中的Field跟Model中的Field有何关联?
如何在Form层实现对某个字段的校验?
Template层
如何理解Django模板对设计师友好的说法?
日常开发中如何规划Django的模板继承和include?
常用的标签(tag)和过滤器(filter)有哪些?
在模板中如何处理静态文件?
在模板中如何处理系统内定义的URL?
如何自定义标签和过滤器?
3. MySQL数据库
如何确定需要哪些字段需要设置索引?
什么情况下需要设定字段属性为unique = True?
如何排查某个SQL语句的索引命中情况?
如何排查查询过慢的SQL语句?

面试题-python/django/sql相关推荐

  1. Python+Django数据库配置及使用——执行原始SQL并返回模型实例

    开发环境 OS:Windows Server 2012 Python:2.7.5 Django:1.5.2 通过 settings.py 配置数据库 参见:Python+Django数据库配置及使用- ...

  2. Python Django连接SQL Server DB

    作为一个代码界的小学生,给自己立一个小目标,完成一个Python搭建博客的项目.由于是新手,所以博文深度肯定不够,将来随着学习的深入,会回头继续修订博文. 学习过程中,第一个想实现的目标是Python ...

  3. Python + Django 入门级开发手顺

    Python + Django 入门级开发手顺 一.python 简介 1.1 安装python 解释器,网址:Welcome to Python.org,没啥说的老规矩双击下一步(ps:python ...

  4. python django web项目的构建步骤(一)

    Django 一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的.并于2 ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. 基于Python+Django实现药品管理系统

    作者主页:编程指南针 简介:Java领域优质创作者.CSDN博客专家  Java项目.简历模板.学习资料.面试题库.技术互助 文末获取源码 项目编号:BS-Python-001 技术架构:Python ...

  7. python django事务transaction源码分析

    2019独角兽企业重金招聘Python工程师标准>>> python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少 ...

  8. python django django-debug-toolbar 加载缓慢,不能使用。

    2019独角兽企业重金招聘Python工程师标准>>> python django django-debug-toolbar 不能正常使用的问题 http://django-debu ...

  9. 在BAE上搭建python,django环境小记

    原文链接:http://www.yihaomen.com/article/python/368.htm 作者:轻舞肥羊 日期:2013-03-13 字体大小: 小 中 大 BAE 是百度推出的一个云平 ...

最新文章

  1. 如何打印Qt中的枚举所对应的字符串
  2. .NET Core2.1获取自定义配置文件信息
  3. Java内存管理的9个小技巧
  4. asyncexec_如何安全使用SWT的显示器asyncExec
  5. matlab的try函数,matlab – 是否可以在没有try块的情况下测试函数句柄?
  6. 如何在Android Studio中删除模块
  7. JSON parse error: No suitable constructor found for type
  8. 使用ppmap检测和利用XSS漏洞
  9. 《敏捷软件开发》— 敏捷开发 — 敏捷实践
  10. hsqldb user lacks privilege or object not found
  11. Neo4j之导入CSV大文件 periodic commit
  12. Windows 内存映射
  13. java生成不重复8位数字_如何生成8位随机不重复的数字编号
  14. 在数字乳腺X照片中基于小波分析和统计分析的微钙化检测新特征
  15. python简历项目经验在哪里找_Linux运维工程师简历项目经验
  16. Pycharm下同一目录py文件不能相互调用?
  17. 快速去除GIF动图的背景(让背景变透明),保姆级教程
  18. MongoDB菜鸟教程
  19. 监控系统实践第9天:使用Composer下载Laravel8.5
  20. linux 的新宠 ubuntu 新手指南

热门文章

  1. 无限元宝问道服务器,问道无限元宝私服最全人物属性介绍,快来看看吧
  2. bpf 跟踪功能——上手 USDT
  3. Axure制作手机UI原型之界面滑动滚动效果
  4. HHUOJ 1846 呆子
  5. 企业微信小程序_集成腾讯地图实现精准定位考勤打卡
  6. 哪吒社区技能树16 张图带你搞懂 Java 数据结构,从此想不飘都难
  7. Huffman 编码原理详解(代码示例)
  8. YOLO-v4目标检测、换脸、视频上色全部实时手机端实现,美国东北大学等提出全自动实时移动端AI框架...
  9. Windows 10剪贴板历史记录清理
  10. 百科园c语言实验报告,C语言上机题库百科园第6章!南信大!