zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    PAT顶级 1002. Business (35)
    Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    主席树模板poj 2104
    Java 集合相关
    扁平疣病治疗
    一些网址
    在ubuntu14.04设置静态ip
    在Ubuntu14.04下安装vsftp服务器
    移植SDL运行库到Tiny6410 上
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/10540274.html
Copyright © 2011-2022 走看看