django面试四
Django的优点
功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。
完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。
Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。
自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
Django debug信息详尽: 很容易找出代码错误所在。
Django的缺点
Django自定义模板
在app应用下创建templatetags文件夹,如:users/templatetags
创建_init_.py文件
示例代码 filters.py
#coding=utf-8
from django.template import Library
register = Library()
@register.filters
def mod(value):
return value%2
模板中使用过滤器
{% load filters %}
{% if book.id|mod %}
装饰器
记录函数执行时间的装饰器
decorator_1.py
# coding=utf-8
def changeMod(pre='isSecond'):
"""扩展原有装饰器功能,在原有装饰器基础上设置外部变量"""
def tastTime(func):
import time
def wrapper(*args, **kw):
t1 = time.clock()
if pre == 'isSecond':
func(*args, **kw)
t2 = time.clock()
print 'Having using %.9f times' % (t2 - t1)
else:
func(*args, **kw)
t2 = time.clock()
print 'Having using {} times' .format(t2 - t1)
return wrapper
return tastTime
@changeMod(pre='isMin')
# @changeMod()
def printWord(word):
print word
printWord('hello world')
斐波那契数列
# coding=utf-8
def fib1(n):
"""递归方式,效率较慢"""
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)
# print fib1(10)
# ******************************************** #
dic = {0: 0, 1: 1}
def fib2(n):
"""递归方法,并检验是否计算过"""
if n not in dic:
dic[n] = fib2(n - 1) + fib2(n - 2)
return dic[n]
# print fib2(10)
# ******************************************** #
def fib3(n):
"""迭代方式"""
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
# print fib3(10)
# ******************************************** #
快速排序
# coding=utf-8
def quickSort(lists):
less = []
privotList = []
more = []
if len(lists) <= 1:
return lists
else:
privot = lists[0]
for i in lists:
if i < privot:
less.append(i)
elif i > privot:
more.append(i)
else:
privotList.append(i)
less = quickSort(less)
more = quickSort(more)
return less + privotList + more
lists = [1, 2, 3, 4, 5, 7, 1, 5, 2, 0, 8, 5, 8, 2, 9, 4]
new_lists = quickSort(lists)
print(new_lists)
冒泡排序
# coding=utf-8
def bubbleSort(lists):
for i in range(0, len(lists)):
for j in range(i + 1, len(lists)):
if lists[i] > lists[j]:
lists[i], lists[j] = lists[j], lists[i]
return lists
lists = [1, 2, 34, 5, 6, 7, 8, 0, 123, 5, 61, 23, 1, 2, 5, 0]
new_lists = bubbleSort(lists)
print new_lists
桶排序
# coding=utf-8
def bucketSort(lst):
pre_list = [0] * 10
for sorce in lst:
pre_list[sorce - 1] += 1
result = []
i = 0
while i < len(lst):
j = 0
while j < pre_list[i]:
result.append(i + 1)
j += 1
i += 1
print result
lst = [7, 9, 3, 5, 7, 10, 5, 4, 8, 3]
bucketSort(lst)
Bootstrap栅格
考察实现过程
css中使用@media,来规定每一个class不同尺寸占用的栅格数
/* lg占用3个栅格,md占用3个栅格,sm占用6个栅格 */
<div class="col-lg-3 col-md-3 col-sm-6"><div class="box"></div></div>
redis相关
5种类型:string,list,hash,set,zset
set一个数字,拿出来的值是什么
考察是否知道在存的时候有数据类型转换
python@ubuntu:~$ redis-cli
127.0.0.1:6379> get keys*
(nil)
127.0.0.1:6379> set isNumber 10
OK
127.0.0.1:6379> get isNumber
"10"
127.0.0.1:6379>
Django用户认证系统
在Django中自定义身份验证
scrapy模块流程
scrapy框架解读--深入理解爬虫原理
生成器
迭代器
前后端分离
进程线程协程
进程资源控制
multiprocessing.Lock
multiprocessing.Semaphore
multiprocessing.Event
Git相关操作
MySQL查询
MySQL高可用性
MySQL高可用方案选型参考
MySQL索引原理
MySQL索引背后的数据结构及算法原理
时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度-总结
MySQL MongoDB Redis选择
HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库
MySQL索引
MySQL索引及查询优化总结
索引是MySQL提高数据查询效率的数据结构
普通索引
create index indexName on MyTable(cloumnName(length));
alter MyTable add index indexName on (cloumnName(length));
drop index indexName on MyTable;
唯一索引
create unique index indexName on MyTable(cloumnName(length));
alter MyTable add unique index indexName on (cloumnName(length));
主键索引
一个表只能有一个主键
组合索引
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL,
age INT NOT NULL
);
create index indexName on MyTable(username(16),city,age);
alter MyTable add index indexName (username(16),city,age);
上述建索引的方式相当于建立了下面三种组合索引(MySQL最左前缀)
username,city,age
username,city
username
下面几个sql会用到索引
select * from MyTable where username='admin' and city='BeiJing';
select * from MyTable where username='admin';
下面几个就不会走索引
select * from MyTable where username='admin' and age=20;
select * from MyTable where age=20;
建索引的时机
WHERE、ORDER_BY
在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引
例如:
like 'Python%'
会走索引
like '%Pyhton%';
like '%Python';
就不会走索引
全文索引:MyISAM,聚簇索引:InnoDB
其他注意点
因为在以通配符%和_开头作查询时,MySQL不会使用索引
索引不会包含有NULL值的列
不使用NOT IN和<>操作
大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。
过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。
性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。
模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。
---------------------
作者:大江狗
来源:CSDN
原文:https://blog.csdn.net/weixin_42134789/article/details/80753010
版权声明:本文为博主原创文章,转载请附上博文链接!
django面试四的更多相关文章
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- django第四天(路由别名,django2.x新特性和自定义转换器)
django第四天 路由别名 1.路由别名: 给路由路径命名一个名字 url(r'^login/$',views.login,name = 'login') 2.为什么要用路由别名 ①当路由路径过长时 ...
- Django - Xadmin (四) Filter
Django - Xadmin (四) Filter Filter 功能描述 与 admin 组件中 Filter 功能类似,在展示页面右侧放置一列标签,通过点击这些标签来筛选出该标签相关的数据. 比 ...
- day 68 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关 ...
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- Django基础四之测试环境和ORM查询
Django基础四之测试环境和ORM查询 目录 Django基础四之测试环境和ORM查询 1. 搭建测试环境 1.1 测试环境搭建方法: 1.2 使用测试环境对数据库进行CURD 1.3 返回Quer ...
- Django面试集锦(1-50)
目录 1.Django ORM查询中select_related和prefetch_related的区别? 2.only与defer的用法? 3.Django ORM是什么? 4.Django创建项目 ...
- Django(四)
一.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? 1.Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpResp ...
- Django入门四之数据库相关
1. 数据库设置 在settings.py中配置数据库 我首先使用的是sqlite3,所以配置如下 2. 数据库的数据结构定义 #blog/models.py #定义了一个表(Student),表里两 ...
随机推荐
- selenium配置Chrome驱动
1.http://chromedriver.storage.googleapis.com/index.html chrome下载驱动地址 和对应的版本驱动,不用FQ 2.配置方法:如在e盘创建一个 ...
- linux网络配置命令(二)——ip
ip命令 查看/设置路由.设备.路由策略和渠道信息 格式 ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | addr ...
- 关于click的多次触发问题(冒泡事件)
1. 问题描述: 在点击事件触发时调用接口,若用户多次点击会造成多次调用接口,有时会引起一些数据错误的问题,如支付页面,点击多次时会在后台生成多个相同订单 解决方法: (1)加flag,让点击事件只执 ...
- leetcode-algorithms-14 Longest Common Prefix
leetcode-algorithms-14 Longest Common Prefix Write a function to find the longest common prefix stri ...
- nyoj-1250-exgcd
机器人 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远 ...
- [转载]Python使用@property装饰器--getter和setter方法变成属性
原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- CentOS安装教程(VMware)
1.下载镜像文件 下载链接:https://wiki.centos.org/Download LinveCD--可装在CD光盘上启动的版本. LiveDVD--可装在DVD光盘上启动的版本. DVD1 ...
- thinkphp 3.2 加载第三方库 第三方命名空间库
tp 自动加载的介绍: http://document.thinkphp.cn/manual_3_2.html#autoload 第三方库不规范库 不适用命名空间的库 可以使用import函数导入,其 ...
- 红黑树与AVL
红黑树和avl树都属于自平衡二叉树: 两者查找.插入.删除的时间复杂度相同: 包含n个内部结点的红黑树的高度是o(logn); TreeMap是一个红黑树的实现,能保证插入的值保证排序 ...