Django企业开发读书笔记(及官方文档学习笔记) 老男孩2019Go语言视频学习

目标:深入理解Django以及web开发深入知识,掌握Gin ,Go micro 框架 ,Kafka ,Zookeeper 为kubernetes Istio 做微服务,服务网格做铺垫 实现Python + Golang + Vue + Bootstrap + 还可以加上fabric提供区块链的服务

Go语言的核心特性:天生为多核心准备,比如8核cpu写一个Go程序自动会跑满,而且写起来十分简单,但是如果像Redis(单核单线程)要跑满8核cpu则需要写8个程序

Go语言的应用领域:

服务端开发:日志处理系统,文件系统,监控服务
容器虚拟化:Docker Kubernetes
分布式存储:etcd(代替zookeeper)TiDB Groupcache
web开发:net/http(核心内置包,就是前面不挂Nginx并发都很高) Gin go micro
区块链:以太坊 fabric

学习知识和学习技能区别:技能需要实践和时间需要多加练习

ORM在线工具:editor.ponyorm
百度脑图

Django企业开发之旅

  • HTTP封装
  • ORM
  • admin后台管理
  • Form
  • template
  • session和cookie
  • 权限
  • 认证
  • 限流
  • rest
  • 安全
  • cache
  • logging
  • sitemap
  • RSS
  • 国际化
  • 第三方如邮件短信服务
  • 监控
  • 部署
  • 前端框架的集成

选择Flask到最后也需要拼装起来成Django,还不如整体的Django厉害,后来服务拆分才不用flask,tornado呢,用Gin

官网教程: https://www.djangoproject.com
Django 第三方插件: https://djangopackages.org/
基于 Django 的网站 :https://www.djangosites.org/
Python模块:https://pypi.org/

Model:

  • meta设置
  • ORM有限制,自定义查询
  • 事务操作
  • makemigrations migrate
  • 如何自定义manager(objects)可以用原生SQL
  • 历史遗留数据库

View

  • 静态文件的处理,404页面的处理
  • template
  • 上传文件
  • CBV
  • 把数据导出CSV或PDF
  • 中间件

Template

  • 基本语法
  • Vue集成

Form

  • 把Form和Model的Field集成

Settings

  • 很多配置插件化

Applications

  • 第三方的插件安装

Exceptions

  • 异常处理

Manage.py

  • 用法

Testing

  • 单元测试

Deployment

  • Nginx+uwsgi

Admin

  • Xadmin

Security

  • CSRF
  • XSS
  • SQL注入
  • 事务

国际化

  • 汉语的支持

性能优化

Tools

  • 用户系统
  • 权限系统
  • 认证
  • 限流
  • 缓存
  • 日志
  • 邮件发送
  • RSS
  • 分页
  • 消息处理
  • 序列化
  • session
  • 静态文件的第三方配置
  • 数据校验

Others

实战

1.python(windows)的大坑:windows下带中文路径创建虚拟环境,pip后不是安装在虚拟环境里面的(醉了)但是在pycharm里面进行开发settings里面却是虚拟环境,需要自己在上面进行图形化install了
2.https://blog.51cto.com/somethingshare/2381237 虚拟环境的一些其他插件实用技巧
3.pycharm可以手动进行选择版本,舒服了
4.verbose_name=“电话” 在models里面每个都有一个这个字段进行注释
5. SEX_ITEM = [
(1, “男”),
(2, “女”),
(3, “未知”),
]
sex = models.IntegerField(choices=SEX_ITEM, verbose_name=“性别”)

可以进行选择有个chioces的字段

5.通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

  • django.contrib.admin – 管理员站点, 你很快就会使用它。
  • django.contrib.auth – 认证授权系统。
  • django.contrib.contenttypes – 内容类型框架。
  • django.contrib.sessions – 会话框架。
  • django.contrib.messages – 消息框架。
  • django.contrib.staticfiles – 管理静态文件的框架。

6.在自定义404错误页面时遇到的问题

DEBUG = False
ALLOWED_HOSTS = [“localhost”] # 如果开启DEBUG = False 必须设置可以访问的对象
settings里面的配置

7.在服务器环境下,要通知WSGI应用当前使用的是哪个配置文件,用到 os.environ:

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

WSGI的配置 告诉他是这个下面的settings文件呀

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chayeproject.settings')

application = get_wsgi_application()

8.在无需配置的情况下,Django配置文件没必要定义任何配置项。因为每个配置项都有一个明确的默认值。默认值都保存在模块 django/conf/global_settings.py 中
9.在 Python 代码中使用 settings,在具体的Django应用中, 通过引入 django.conf.settings 使用配置, 例:

from django.conf import settings

if settings.DEBUG:

10.不建议在运行时更改设置. 比如, 不要在view中这样用:

from django.conf import settings

settings.DEBUG = True   # Don't do this!

11.由于配置文件包含敏感信息, 比如数据库密码, 所以应该限制对配置文件的访问. 比如更改文件权限, 从而只能令你和你的WEB服务器能读取配置文件. 这在共享主机的环境中非常重要!

思考:在linux上只有root身份可以打开settings文件
其余的普通用户只是可读
放业务的服务器不会暴露在公网上,前面挂个Nginx给带进来

12.在应用中创建自己的配置文件很简单,只要遵循以下的规范:

  • 所有配置项名称都应大写
  • 不要重新设置已存在的配置项

13.由于配置文件是序列化的,Django 使用列表,但仅是约定俗成
14.某些场合中, 你想绕过 DJANGO_SETTINGS_MODULE 环境变量来进行配置。比如,你正在使用 Django 自带的模板系统,而你并不想使用环境变量指定某个具体的配置文件。

在这种情况下,可以手动设定 Django 的配置项。要用到下面这个方法:

from django.conf import settings

settings.configure(DEBUG=True)

通过 configure() 可以设置任何配置项,每个参数对应一个值。参数名称必须大写,而且参数名必须是真实存在。没有在 configure() 中出现的设置项在随后用到时,仍会使用默认值。

15.如果你并不想使用整个框架,仅仅是其中一小部分时,如上述这般配置 Django 是非常必要的。事实上,我们建议您这样做
16.因此,通过 settings.configure() 配置 Django 时,并不会对当前进程的环境变量做任何修改。(可以查看 TIME_ZONE 了解为什么要这么做)。这意味着在上述情况下你仍然完全掌控着当前环境。
17.在下面这个例子中,由 myapp_defaults 提供默认值,并令 DEBUG 被置为 True 而不是从 myapp_defaults 中获取:

from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)

接下来例子使用 myapp_defaults 做为一个位置参数,这和上面的效果是等同的:

settings.configure(myapp_defaults, DEBUG=True)

18.一般来说,没必要自行设置默认值。Django 的默认设置是比较宽松的,你可以放心地使用。要注意的是,如果你传入了新的默认模块,那它就会完全 替换 Django 本身的默认设置。因此,你必须为接下来可能会用到的所有设置项都重新指定默认值。查看 django.conf.global_settings 了解全部默认值。

import django.conf.global_settings

19.configure() 或 DJANGO_SETTINGS_MODULE 二者必用其一,都不用也不行,都用也不行
20.如果你使用了“独立” Django 的组件——比如,编写一个 Python 脚本,它加载了一些 Django 模板并渲染了它们,或使用 ORM 获取数据——你需要额外的配置一下设置文件。

在你已经配置 DJANGO_SETTINGS_MODULE 或调用 configure() 后,你需要调用 django.setup() 来加载你的设置,并填写的 Django 的应用注册表。例子:

import django
from django.conf import settings
import myapp_default

settings.configure(default_settings=myapp_default, DEBUG=True)
django.setup()

# Now this script or any imported module can use any part of Django it needs.

注意,仅在你的代码是真的独立的情况下调用 django.setup()。当被你的 Web 服务器调用时,或通过 django-admin 调用,Django 会帮你处理这些。

21.django.setup() 只需调用一次。

因此,避免将可服用的应用逻辑代码放入独立脚本中。是故,你必须在你的应用中从此脚本中导入。若你无法避免这样做,将 django.setup() 调用至于 if 块内:

if __name__ == '__main__':
    import django
    django.setup()

22.我们认为我们的的模板引擎是最好的,但是我们意识到选择一个模板语言和信仰宗教相似。Django 没有什么必须的模板语言,如果你愿意使用 Jinja2、Mako 或其他的,请随意使用。
23.如果你使用其他的数据库库,你没办法使用 Django 自动生成的后台界面。这个应用是和 Django 数据库层耦合的。
24.django.db.models.fields 一切秘密都在fields里面
25.在你需要一个自定义字段时,只需创建两个类:

  • 第一个类是用户需要操作的 Python 对象。它们会复制给模型属性,它们会为了显示而读取属性,就想这样。这里本例中的 Hand 类。
  • 第二类是 Field 的子类。这个类知道如何在永久存储格式和 Python 格式之间来回转换。

26.重写Field模块

# This is a much more flexible example.
class BetterCharField(models.Field):
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super().__init__(*args, **kwargs)

    def db_type(self, connection):
        return 'char(%s)' % self.max_length

# In the model:
class MyModel(models.Model):
    # ...
    my_field = BetterCharField(25)

27.要查看超多的例子,查阅 Django 默认的 filters 和 tags 源码。它们分别位于 django/template/defaultfilters.py 和 django/template/defaulttags.py
28.永远不要在生产环境打开 debug 开关。
开发时,你当然要配置 DEBUG = True,这将方便你在浏览器启用完全回溯功能。
29.不过,对于生产环境来说,这真是一个坏主意,因为这会泄露很多超出预期的信息:代码摘要,本地变量,配置项,使用的库,等等。
30.生产环境与开发环境的数据库连接参数可能是不同的。
数据库密码是机密的。你应该像保护 SECRET_KEY 那样保护它们。
为了最大限度的安全,确保数据库只为来自你应用的连接提供服务。
如果你还未为数据库设置备份,现在就做!
31.部署静态文件rsync
32.ALLOWED_HOSTS 默认值:( [])
表示此Django站点可以提供的主机/域名的字符串列表。这是一种防止HTTP主机头攻击的安全措施,即使在许多看似安全的Web服务器配置下也是如此。
33.此列表中的值可以是完全限定名称(例如’www.example.com’)
34.当DEBUGis True和ALLOWED_HOSTS为空时,将验证主机。[‘localhost’, ‘127.0.0.1’, ‘[::1]’]
35.ENGINE
默认值:( ''空字符串)

要使用的数据库后端。内置的数据库后端是:

‘django.db.backends.postgresql’
‘django.db.backends.mysql’
‘django.db.backends.sqlite3’
‘django.db.backends.oracle’
您可以通过设置ENGINE为完全限定的路径(即mypackage.backends.whatever)来使用Django未附带的数据库后端 。
36.EMAIL_BACKEND
默认: ‘django.core.mail.backends.smtp.EmailBackend’
37.EMAIL_HOST
默认: ‘localhost’
38.EMAIL_PORT¶
默认: 25
39.TEMPLATES
默认值:( []清单)

包含与Django一起使用的所有模板引擎的设置的列表。列表中的每个项目都是包含单个引擎选项的字典。

这是一个简单的设置,告诉Django模板引擎从templates每个已安装的应用程序内的子目录加载模板:

TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘APP_DIRS’: True,
},
]
以下选项适用于所有后端。

BACKEND
默认值:未定义

要使用的模板后端。内置模板后端是:

‘django.template.backends.django.DjangoTemplates’
‘django.template.backends.jinja2.Jinja2’
您可以通过设置BACKEND为完全限定的路径(即’mypackage.whatever.Backend’)来使用Django未附带的模板后端 。
40.核心设置

  • 缓存
    CACHES
    CACHE_MIDDLEWARE_ALIAS
    CACHE_MIDDLEWARE_KEY_PREFIX
    CACHE_MIDDLEWARE_SECONDS
  • 数据库
    DATABASES
    DATABASE_ROUTERS
    DEFAULT_INDEX_TABLESPACE
    DEFAULT_TABLESPACE
  • 调试
    DEBUG
    DEBUG_PROPAGATE_EXCEPTIONS
  • 电子邮件
    ADMINS
    DEFAULT_CHARSET
    DEFAULT_FROM_EMAIL
    EMAIL_BACKEND
    EMAIL_FILE_PATH
    EMAIL_HOST
    EMAIL_HOST_PASSWORD
    EMAIL_HOST_USER
    EMAIL_PORT
    EMAIL_SSL_CERTFILE
    EMAIL_SSL_KEYFILE
    EMAIL_SUBJECT_PREFIX
    EMAIL_TIMEOUT
    EMAIL_USE_LOCALTIME
    EMAIL_USE_TLS
    MANAGERS
    SERVER_EMAIL
  • 错误发送
    DEFAULT_EXCEPTION_REPORTER_FILTER
    IGNORABLE_404_URLS
    MANAGERS
    SILENCED_SYSTEM_CHECKS
  • 文件上传
    DEFAULT_FILE_STORAGE
    FILE_UPLOAD_HANDLERS
    FILE_UPLOAD_MAX_MEMORY_SIZE
    FILE_UPLOAD_PERMISSIONS
    FILE_UPLOAD_TEMP_DIR
    MEDIA_ROOT
    MEDIA_URL
  • 表单
    FORM_RENDERER
  • 全球化(i18n/ l10n)
    DATE_FORMAT
    DATE_INPUT_FORMATS
    DATETIME_FORMAT
    DATETIME_INPUT_FORMATS
    DECIMAL_SEPARATOR
    FIRST_DAY_OF_WEEK
    FORMAT_MODULE_PATH
    LANGUAGE_CODE
    LANGUAGE_COOKIE_AGE
    LANGUAGE_COOKIE_DOMAIN
    LANGUAGE_COOKIE_NAME
    LANGUAGE_COOKIE_PATH
    LANGUAGES
    LANGUAGES_BIDI
    LOCALE_PATHS
    MONTH_DAY_FORMAT
    NUMBER_GROUPING
    SHORT_DATE_FORMAT
    SHORT_DATETIME_FORMAT
    THOUSAND_SEPARATOR
    TIME_FORMAT
    TIME_INPUT_FORMATS
    TIME_ZONE
    USE_I18N
    USE_L10N
    USE_THOUSAND_SEPARATOR
    USE_TZ
    YEAR_MONTH_FORMAT
    HTTP
    DATA_UPLOAD_MAX_MEMORY_SIZE
    DATA_UPLOAD_MAX_NUMBER_FIELDS
    DEFAULT_CHARSET
    DEFAULT_CONTENT_TYPE
    DISALLOWED_USER_AGENTS
    FORCE_SCRIPT_NAME
    INTERNAL_IPS
    MIDDLEWARE
  • 安全
    SECURE_BROWSER_XSS_FILTER
    SECURE_CONTENT_TYPE_NOSNIFF
    SECURE_HSTS_INCLUDE_SUBDOMAINS
    SECURE_HSTS_PRELOAD
    SECURE_HSTS_SECONDS
    SECURE_PROXY_SSL_HEADER
    SECURE_REDIRECT_EXEMPT
    SECURE_SSL_HOST
    SECURE_SSL_REDIRECT
    SIGNING_BACKEND
    USE_X_FORWARDED_HOST
    USE_X_FORWARDED_PORT
    WSGI_APPLICATION
  • 记录
    LOGGING
    LOGGING_CONFIG
  • 模型
    ABSOLUTE_URL_OVERRIDES
    FIXTURE_DIRS
    INSTALLED_APPS
  • 安全跨站点请求伪造保护
    CSRF_COOKIE_DOMAIN
    CSRF_COOKIE_NAME
    CSRF_COOKIE_PATH
    CSRF_COOKIE_SAMESITE
    CSRF_COOKIE_SECURE
    CSRF_FAILURE_VIEW
    CSRF_HEADER_NAME
    CSRF_TRUSTED_ORIGINS
    CSRF_USE_SESSIONS
    SECRET_KEY
    X_FRAME_OPTIONS
  • 序列化
    DEFAULT_CHARSET
    SERIALIZATION_MODULES
  • 模板
    TEMPLATES
  • 数据库:
    TEST
    TEST_NON_SERIALIZED_APPS
    TEST_RUNNER
  • 网址
    APPEND_SLASH
    PREPEND_WWW
    ROOT_URLCONF

41.由于静态文件服务器并不运行 Django,你需要将部署策略改成这样:

当静态文件改变时,本地运行 collectstatic。
将本地 STATIC_ROOT 推送到静态文件服务器提供服务的目录。 rsync 是一个常见选项,因为这种配置只会传输文件修改部分的数据流。

42.从云服务或 CDN 提供静态文件服务
另一种常见的策略是从类似亚马逊 S3 的云存储服务商或 CDN (content delivery network) 提供静态文件服务。这能让你忽略提供静态文件服务可能出现的问题,提供 Web 页面加载速度(尤其是在用 CDN 的时候)。

使用这些服务时,基本的工作流程与上面类似,除了要将静态文件传输给存储服务商或 CDN,而不是用 rsync 将静态文件传输给服务器。

有很多中方法可以实现目的,但是若服务商提供一个 API 自定义文件存储后端,这将会使流程难以置信的简单。若你已编写或正在使用第三方的自定义存储后端,你可以通过将 STATICFILES_STORAGE 指向该存储引擎告诉 collectstatic 启用它。

例如,若你已在 myproject.storage.S3Storage 中写了一个 S3 存储后端,可以这么用:

STATICFILES_STORAGE = 'myproject.storage.S3Storage'

只要完成了上述流程,你就只需运行 collectstatic,静态文件将通过存储包推送给 S3。如果稍后需要切换至另一个存储服务商,只需简单地修改 STATICFILES_STORAGE 配置。
43.https://djangopackages.org/grids/g/storage-backends/ 自定义存储的后端
file:///C:/Users/10430/Desktop/django2.2.x/howto/custom-file-storage.html 编写一个自定义存储系统
44.更新django

 pip install -U Django

45.默认情况下, Django 会给每一个模型添加下面的字段:

id = models.AutoField(primary_key=True)

如果你想自己指定主键, 在你想要设置为主键的字段上设置参数 primary_key=True。如果 Django 看到你显式地设置了 Field.primary_key,将不会自动在表(模型)中添加 id 列。
46.除了 ForeignKey, ManyToManyField 和 OneToOneField,任何字段类型都接收一个可选的位置参数 verbose_name,如果未指定该参数值, Django 会自动使用字段的属性名作为该参数值,并且把下划线转换为空格。
47.blank字段 表单的字段 如果blank=TRUE代表可以为空 False:不可以为空
48.要获取该字段二元组中相对应的第二个值,使用 get_FOO_display() 方法

from django.db import models

class Person(models.Model):
    SHIRT_SIZES = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

49.列出字段的值的列表

from django.db import models

class Fruit(models.Model):
    name = models.CharField(max_length=100, primary_key=True)
>>> fruit = Fruit.objects.create(name='Apple')
>>> fruit.name = 'Pear'
>>> fruit.save()
>>> Fruit.objects.values_list('name', flat=True)

50.更新 ManyToManyField 字段有点不同——在字段上使用 add() 方法为关联关系添加一条记录。本例将 Author 实例 joe 添加至 entry 对象:

from blog.models import Author
joe = Author.objects.create(name=“Joe”)
entry.authors.add(joe)

51.http://www.liujiangblog.com/course/django/98 Django中 manytomany用法

你真的理解Python和Django了吗

1.Python基础

  • 基础语法是否熟悉?介绍下。
  • 有哪些关键字,并且解释其作用?
  • 有哪些内置方法,并且解释其作用?
  • 解释下什么是动态语言?动态强类型是指什么?
  • 是否有编码规范的概念?采用的是哪中编码规范?
  • 解释下深拷贝和浅拷贝
  • lambda的用法以及使用场景?
  • 解释下什么是闭包,以及它的作用?
  • 实现一个简单的装饰器,用来对某个函数的结果进行缓存?
  • Python中几种容器类型的差别及使用场景?
  • 列表推导式的使用和场景?
  • 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. Django进阶

  • 如何排查Django项目的性能问题?
  • 如何部署Django项目,以及不同的部署方式之间的差别?
  • 部署时如何处理项目中的静态文件?
  • 如何实现自定义的登录认证逻辑?
  • 如何理解Django中Model、Form、ModelForm和Field、Widgets之间的关系?
  • Paginator的原理是什么,如何自己实现分页逻辑?
  • Model中Field的作用是什么?
  • 什么是SQL注入,ORM又是如何解决这个问题的?
  • CSRF全称是什么?Django是如何解决这个问题的?
  • XSS攻击是指什么,在开发时应该如何避免这种攻击?
  • Signal的作用以及实现逻辑?
  • DATABASE配置中的CONN_MAX_AGE参数的作用,以及使用场景?
  • CONN_MAX_AGE的实现逻辑是什么?
  • 用Django内置的User模型创建用户时是否可以直接:User(username=‘the5fire’, password=‘the5fire’).save()?
  • 上面的创建方式有什么问题?应该如何处理用户密码?
  • 使用Django-rest-framework如何实现用户认证登录逻辑?
  • Session模块在Django中的作用是什么?
  • 如何自定义Django中的权限粒度,实现自己的权限逻辑?
  • 如何捕获线上系统的异常?
  • 如何分析某个接口响应时间过长的问题,假设响应时间为2秒,一次请求涉及到数据库和缓存查询。

4. 部署相关

  • 如何来自动化部署项目到生产环境,具体流程?
  • 介绍下常用的自动化部署工具?
  • 用到哪些监控工具,作用是什么,使用中有什么不足之处?
  • Supervisor的作用是什么?为何使用它?
  • Gunicorn的作用是什么?为何使用它?
  • 如何对系统进行压测?以及流量预估?
  • Nginx的作用是什么?是否能独立配置?有没有优化经验?
  • 发版逻辑是什么,如何保证新版本发生异常时能快速回滚?

5. MySQL数据库

  • 如何确定需要哪些字段需要设置索引?
  • 什么情况下需要设定字段属性为unique = True?
  • 如何排查某个SQL语句的索引命中情况?
  • 如何排查查询过慢的SQL语句?

6. Redis

  • 你了解的Redis的特点是什么?为什么会使用它?
  • 支持的数据类型
  • 如何合理的规划key?
  • 比如我需要把所有的文章和分类数据写入Redis,在Django中直接读取Redis拿到分类和文章的数据,问怎么规 划数据存储,如何处理分页?
  • 是否支持事务?举个例子。
  • 有哪些数据淘汰策略?
  • 当你发现有些Redis查询响应时间太长,如何排查?可能是什么引起的?
  • 你用到的或者了解的Redis的部署结构是什么?
  • 是否了解Redis的持久化策略,不同的策略有什么不同?
  • 说说你了解的Redis主从同步的策略。

7. 常用算法

  • Python中字典类型的实现算法?
  • 你了解的高级语言中的垃圾回收机制有哪些?Python中用的是什么?
  • 介绍下你知道的缓存相关的算法?
  • 介绍下你知道的负载均衡相关的算法?
  • 介绍下数据库索引相关算法?

你可能感兴趣的:(Django)