1、django的处理流程是什么?

答:(1)用户通过浏览器发送请求

(2)请求到达request中间件,中间件对request请求做预处理或者直接返回response

(3)若未返回response,会到达urlconf路由,找到对应视图函数

(4)视图函数做相应预处理或直接返回response

(5)View中的方法可以选择性的通过Models访问底层的数据

(6)取到相应数据后回到django模板系统,templates通过filter或tags把数据渲染到模板上

(7)返回response到浏览器展示给客户

接收请求 -> url路由 -> 视图处理 -> 数据库读写 -> 视图处理 -> 模版渲染 -> 返回请求

参考文档:http://www.cnblogs.com/jiangchunsheng/p/8986532.html

2、简单描述写你了解的django?

答:django模型是根据MVT模型的,模型即数据存取层,负责与数据库进行交互的,模板即表现层,渲染页面返回给客户端的,视图是业务逻辑层,视图不处理用户输入,而仅仅决定要展现哪些数据给用户,URLconf机制是使用正则表达式匹配URL,控制处理流程。

3、如何删除一个列表中重复的元素?

答:思路都是放置一个空列表

[root@node-2 yhc]# cat 1.py

#!/usr/bin/env python

# coding: utf-8

list1=[5,2,3,3,4,1]

temp=[]

for i in range(len(list1)):

if list1[i] not in temp:

temp.append(list1[i])

temp.sort()

print temp

4、把字典的Key-Value值翻转?

>>> dict2={1:'a',2:'b',3:'c'}

>>> def test(dict_name):

... return dict( (v,k) for k,v in dict_name.iteritems() ) #输出k,v是1 a

...

>>> test(dict2)

{'a': 1, 'c': 3, 'b': 2}

## iteritems()方法是字典项生成器,紧接着是列表表达式,

>>> print dict1.items() ##items()方法是将字典的每个项作为元组,然后把所有把所有元组放在一个列表容器中

[(1, 7), (2, 8), (3, 9)]

5、python实现快速排序?优缺点是什么,时间复杂度为多少?什么时候时间复杂度最高?

答:(1)思想:1)、判断参数条件,其实这是递归的出口;

2)、以数组的第一个元素为哨兵元素,让其他元素和它比较大小;(记住这时候第一个元素位置是空的,因为里面的值被作为哨兵元素保存起来了)

3)、开始从数组尾部往前循环得到一个小于哨兵元素的元素A ,把该元素A放到第一个元素位置(也就是哨兵元素位置上,因为哨兵元素位置是空的);(这时候要记住元素A的位置是空的了)

4)、开始从数组头部往后循环得到一个大于哨兵元素的元素B ,把该元素B放在上一步中移出元素A的位置上;

5)、依次循环上面3、4步,直到最后一个元素为止,那么最后一个元素就存放哨兵元素了。

6)、把小于哨兵元素的那一部分和大于哨兵元素的那一部分分别递归调用本函数,依次递归排序好所有元素;

---------------------------------------------------

#coding: utf-8

def QuickSort(myList,start,end):

if start < end: #判断low是否小于high,如果为false,直接返回

i,j = start,end

base = myList[i] #设置基准数

while i < j:

while (i < j) and (myList[j] >= base):

#如果列表后边的数,比基准数大或相等,则前移一位直到有比基准数小的数出现

j = j - 1

myList[i] = myList[j]

#如找到,则把第j个元素赋值给第i个元素,此时表中i,j个元素相等

while (i < j) and (myList[i] <= base): #同样的方式比较前半区

i = i + 1

myList[j] = myList[i]

myList[i] = base #做完第一轮比较之后,列表被分成了两个半区,并且i=j,需要将这个数设置回base

QuickSort(myList, start, i - 1)

QuickSort(myList, j + 1, end)

return myList

myList = [5,4,3,2,1]

print("Quick Sort: ")

QuickSort(myList,0,len(myList)-1)

print(myList)

(2)优点:分治算法采用中间值作为基准数的话,分为两个等长子序列,效率会比较高

(3)缺点:如果有大量元素相同,那么进行反复的位置交换是没有必要的,会造成不稳定

(4)时间复杂度:n/2^k = 1,解得k = nlogn,因为它是每次都切割为一半,所以每次递归都要除以2。在有序的情况下,时间复杂度最高,因为每次分割的单位是1,时间复杂度是O(n^2)。假设有1到8代表要排序的数,快速排序会递归log(8)=3次,每次对n个数进行一次处理,所以他的时间复杂度为n*log(n)。所以排序问题的时间复杂度可以认为是对排序数据的总的操作次数。

参考文档:https://blog.csdn.net/qfikh/article/details/52870875

6、说说python的语言特性?

答:(1)动态强类型语言,所谓动态就是运行过程中可以改变的类型的属性,并且python没有常量,不需要提前定义数据类型,所谓强类型就是不能隐式转换数据类型,只能进行强制的数据类型转换。

(2)面向对象设计,封装继承多态,对对象的修改影响全局

7、类的装饰器有哪些?

答:(1)property属性装饰器:调用类中的方法和调用属性一样,这个装饰器还有和其配套的setter、deleter。

(2) staticmethod静态方法装饰器:将类内的方法变成普通的函数,或者把类外的函数放到类内当作方法调用,不用加self参数

(3) classmethod类方法装饰器:该方法用于操作类属性,无法操作对象属性,就是定义在类中的一个变量,类可以不实例化就能调用函数,也可以实例化调用该函数。

参考文档:https://www.cnblogs.com/lfpython/p/7346385.html

8、已知列表a=[1,2,3],列表b=[4,5,6],如何打印出[(1,2,3),(4,5,6)]的形式?

答:>>> a = [1,2,3]

>>> b = [4,5,6]

>>> zipped = zip(a,b)

>>> zip(*zipped) ##相当于解压

[(1, 2, 3), (4, 5, 6)]

解析:python是zip函数将对象的元素按照索引位置打包成元组,然后以元组作为列表元素的方式进行返回

参考文档:http://www.runoob.com/python/python-func-zip.html

9、说说垃圾回收机制?如果不垃圾回收,会导致什么?

答:(1)引用计数跟踪机制,当引用计数的数值减为0的时候,内存会被回收;在引用计数的基础上,还可以通过“标记-清除”解决容器对象可能产生的循环引用(对象之间相互引用)的问题。通过分代回收以空间换取时间进一步提高垃圾回收的效率。

(2)原理:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

(3)后果:如果不垃圾回收,会导致内存泄漏

参考文档:https://www.cnblogs.com/George1994/p/7349871.html

10、Python里面如何生成随机数?

答:random模块

返回随机整数x,a<=x<=b:random.randint(a,b) ##这个random是类,不是模块

返回一个范围在(start,stop,step)之间的随机整数,不包括结束值: random.randrange(start,stop,[,step])

随机返回0到1之间的浮点数:random.random( )

返回指定范围内的浮点数:random.uniform(a,b)

11、Python里面search()和match()的区别?

答:(1)match( )方法会检查第一个字符是否匹配,如果匹配则继续,如果不匹配则返回None;

search( )方法会扫描整个字符串,然后匹配子字符串所在的位置

>>> import re

>>> print re.match('super','superman')

<_sre.SRE_Match object at 0x7f9002a5a8b8>

>>> print re.match('super','superman').span() ##span( )方法返回索引位置,在这里和search方法相同

(0, 5)

>>> print re.match('super','notsuperman')

None

>>> print re.search('super','notsuperman').span()

(3, 8)

(2)search方法如果有多个返回结果的话,只会返回第一个结果

参考文档:https://www.cnblogs.com/xiao987334176/p/9053567.html

12、Python是如何进行内存管理的?

答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制

一、对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1,一个对象分配一个新名称

2,将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1,使用del语句对对象别名显示的销毁

2,引用超出作用域或被重新赋值

sys.getrefcount( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

二、垃圾回收

1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数

参考文档:http://mp.weixin.qq.com/s/mEXEcGjb5Bc5wyPPhzI8Ow

13、一个python类的实例如何变成一个可以调用的对象?

答:使用__call__( )方法,把类的实例作为一个可调用的对象,理解可调用就是理解为一个函数,然后加个括号不就是调用了吗,可能传个参数

举例:

class A(object):

def __init__(self, a, b):

self.__a = a

self.__b = b

def myprint(self):

print 'a=', self.__a, 'b=', self.__b

def __call__(self, num):

print 'call:', num + self.__a

>>> a1 =A(10.20)

>>>a1(80)

print 'call:'90

14、Python中__repr__和__str__有何区别?

答:(1)__str__方法面向用户,直接把实例p回车,会输出内存地址,不会友好显示,打算print 实例p会进行友好显示,不显示内存地址,而显示其他东西;

(2)__repr__( )方法面向程序员,直接把实例p回车或者print 实例p都会友好显示,均不显示内存地址,显示手动定义的内容。

参考文档:http://blog.csdn.net/luckytanggu/article/details/53649156

15、python类中的new方法和init方法有何区别?

答:(1)new方法用来创建对象实例,而init方法用来初始化对象实例,在初始化实例之前,必须经过new方法的允许,才能进行执行init方法

(2)init方法使用self参数,而new方法使用cls参数

(3)new方法的特性是:第一,new方法在类准备实例化的时候调用,比如当执行p1 = Person('yhc')的时候,先调用new方法,再调用init方法;第二,new方法是类中的静态方法,即使没有加上静态方法装饰器。

(4)new方法在创建对象时调用,并且返回对象的cls实例,init在创建完对象后调用,无return返回值。如果__new__()没有返回cls(即当前类)的实例,那么当前类的__init__()方法是不会被调用的。如果__new__()返回其他类(新式类或经典类均可)的实例,那么只会调用被返回的那个类的构造方法。

参考文档:http://www.cnblogs.com/ifantastic/p/3175735.html

16、设计模式的单例模式应用场景

答:(1)所谓单例模式,也就是说不管什么时候都要确保只有一个类的对象实例存在。很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线程池。这些场景下,就非常适合使用单例模式。

总结起来,就是说不管初始化一个对象多少次,真正干活的对象只会生成一次并且在首次生成。

(2)应用场景在数据库的连接池

[root@ceph01 py]# cat 06.py

class Foo(object):

instance = None

def __init__(self, name):

self.name = name

@classmethod

def get_instance(cls):

if cls.instance:

return cls.instance

else:

obj = cls('hexm')

cls.instance = obj

return obj

obj = Foo.get_instance()

obj1 = Foo.get_instance()

print(obj.name)

print(obj1.name)

print(Foo.instance)

print(obj)

[root@ceph01 py]# python 06.py

hexm

hexm

<__main__.Foo object at 0x7fb2e20e5bd0>

<__main__.Foo object at 0x7fb2e20e5bd0>

参考文档:https://www.cnblogs.com/xiaoming279/p/6106232.html

17、子类重写了父类的方法,那么如何实现让子类的实例访问父类的方法呢?

答:修改子类实例的__class__属性为父类的类名即可。比如

class A(object):

def show(self):

print '-----this i s A classs-----'

class B(A):

def show (self):

pint '------this is B class --------'

>>> obj = B()

>>> obj.show()

------this is B class --------

>>>

>>> obj.__class__ = A

>>> obj.show()

-----this i s A classs-----

>>>

第二种方法就是改变子类中的__new__方法,得到父类的实例,从而调用父类的方法。

18、谈谈你理解类中的super( )超类?

答:(1)值得注意的是,super不是一个方法,而是一个类,super方法解决多继承问题,调用父类的方法。

(2)super(子类名,子类转为父类的对象).父类方法名( );super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象

19、一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了?

答:在该目录下添加一个__init__.py,里面的内容添加__all__ = ['mod1','mod3']即可

20、django里面常用到什么模块,ORM(Object Relational Mapping关系对象映射)需要用到什么模块?

答:(1)render渲染模块,,User用户权限模块,urls定义URL访问模块,以及定义数据库表设计所需的models模块、ModelForm(django自带的表单模块)、Django自带的auth认证模块。

(2)ORM需要用到models模块、ContentType模块、auth认证模块、

注:logging日志模块是Python自带的

此篇文章,还有20道题目,在我的面经中,详情看下面。

我会持续更新面试题目,包括linux,前端(vue,jquery,css)、python、mysql和redis的面经题目,后期加入golang。可以加我qq 2093905919或者微信 18828004657,跟我聊聊。(注:可以分享一部分面试题目,觉得可以的话,剩下的全部面试题目(多年经验,非常多而广的题目,适合突击面试复习,适合运维工程师,python工程师,运维开发,甚至前端开发(vue,asp,jquery)等等),需要打赏200元,绝对物超所值)

pythonweb项目面试题_python和web框架面试题目整理(1)相关推荐

  1. pythonweb面试常见问题_python和web框架面试题目整理(3)

    1.django为什么需要缓存,有几种缓存方式? 答:由于Django是动态网站,部分请求均会去数据库进行相应的操作,当程序的访问量大时,耗时必然会更加明显,最简单解决方式是使用缓存提高读请求的处理效 ...

  2. 【面试题】某司社招面试题目整理及答案

    某司社招面试题目整理及答案 Java基础部分 HashMap的实现原理 如何解决Hash碰撞 HashMap的存储(hash算法.hash冲突.初始化.扩容) HashMap和HashTable的区别 ...

  3. pythonweb项目微服务_python web微服务器端

    awesome asyncio-精选python异步框架清单集合 Python 3.4引入标准库的Python asyncio模块提供了使用协程编写单线程并发代码,通过套接字和其他资源对I / O进行 ...

  4. python电商项目源码_Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  5. pyramid框架_Python Pyramid Web框架简介

    pyramid框架 在这个由四部分组成的系列文章的第一篇文章中,比较了不同的Python Web框架,我解释了如何在Flask Web框架中创建"待办事项列表" Web应用程序. ...

  6. python flask框架是什么_Python三大web框架分别是什么 哪个更好

    展开全部 [导读]目前,Python比较2113火的三大5261web框架有Django.Flask和Tornado,要论这三个Web框架哪个更好4102的话,建议一点1653,Django帮我们事先 ...

  7. python django flask介绍_Python开发WEB框架Flask详细介绍

    Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...

  8. python bottle框架 运维_python bottle web框架简介

    Bottle 是一个快速,简单,轻量级的 Python WSGI Web 框架.单一文件,只依赖 Python 标准库 .bottle很适合会一点python基础的人使用,因为这框架用起来很简单,只要 ...

  9. android面试题库及答案,Android面试题目之常见的选择题【附答案】

    下面这些面试题目,我在面试中不止一次遇到过,虽然只是简单的笔试选择题,但是也可能是你面试的第一关,为你后面的表现做一个好的铺垫! 1.下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须 ...

最新文章

  1. 发展受阻第一至四季/全集Arrested迅雷下载
  2. 看了这篇C++笔记,你出去行走江湖我就放心了【C++】
  3. ubuntu下对Atom配置python的虚拟环境
  4. 如果用户的计算机在查询本地Net,网络操作系统管理2448-2
  5. SubscriptionState分析
  6. SNS应用开发架构建议
  7. mysql+vs检测不到_VS2017 + EF + MySQL 我使用过程中遇到的坑
  8. C++.Net在Release方式下单步调试时需要修改一些设置,否则变量会有错位或乱码,切记!...
  9. Docker phpMyAdmin 连接访问宿主机本地mysql
  10. 15分钟搞定OLAP查询引擎Phoenix
  11. ​Windows下RSA密钥生成工具openssl​
  12. java逻辑删除代码_MybatisPlus实现逻辑删除功能
  13. SEO新手一分钟入门教程
  14. java三色球问题_C语言三色球问题代码解析
  15. 顶点、 图元、片元、像素的含义
  16. 职场礼仪之西装十大禁忌
  17. 钛资本研究院:创业公司如何搭建高管团队,实现组织跃升?
  18. 【SpringBoot】51、Spring-Boot-Admin搭建服务监控系统
  19. 如何赢得消费者信任?
  20. 面向对象和面向过程的区别以及封装继承多态的优缺点

热门文章

  1. python 字节码 优化_字节码优化
  2. 内外网映射 html缓存问题_浅谈内存映射
  3. 组合体视图的画图步骤_(完整版)组合体视图画法教案
  4. linux shell 一行 for,BASH shell脚本回显到同一行输出
  5. PHP电子合同对接流程,E签宝电子合同对接实战经验
  6. python程序设计与应用第1章
  7. linux打开lua后中文有乱码,总结Lua使用中遇到的小问题
  8. Python3+RobotFramework+pycharm
  9. python 时间序列异常值_python中缺少时间序列值
  10. aspose条件格式无法读取_分析 Pandas 源码,解决读取 Excel 报错问题