python定时任务contrib_python和web框架面试题目整理(2)

1、在一个列表中,统计每个元素的出现次数?如果有100万个元素,如何统计?

答:(1)利用列表的count方法,通过集合或者字典都能实现。

方法一:

def list_set(lst):

myset = set(lst)

for item in myset:

print 'the item %s has found %d time' %(item,lst.count(item))

lst = [5,4,1,3,2,2,6,5,4,3,2,1,4,3]

list_set(lst)

方法二:

def list_dict(lst):

d = {}

for item in lst:

d[item] = lst.count(item)

print d

lst=[5,4,1,3,2,2,6,5,4,3,2,1,4,3]

list_dict(lst)

(2)如果有100万个元素,使用collections模块的Counter方法

from collections import Counter

lst = [5,4,1,3,2,2,6,5,4,3,2,1,4,3]

Counter(lst)

Counter({2: 3, 3: 3, 4: 3, 1: 2, 5: 2, 6: 1})

2、django的forms模块通常用什么HTTP方法,它们之间有何区别?用什么方法来验证表单数据的合法性?

答:(1)处理表单时候只会用到POST和GET方法。

(2)GET方法通过键=值的形式,并且有个前缀问号'?'将字符串和URL拼接在一起,通常会在URL中暴露数据,不太安全;而对于POST方法,浏览器会组合表单数据、对它们进行编码,然后打包将它们发送到服务器,数据不会出现在url中。

(3)GET方法通常用来请求数据,不适合密码表单这一类保密信息的发送,也不适合数据量大的表单和二进制数据。对于这些类型的数据,应该使用POST方法。

(4)GET特别适合网页搜索的表单,因为这种表示一个GET请求的URL可以很容易地设置书签、分享和重新提交

(5)每个Django表单的实例都有一个内置的is_valid()方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data的属性中,该属性是以个字典类型数据。

参考文档:http://www.liujiangblog.com/course/django/151

3、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?又请问一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级,求该青蛙跳上一个n级的台阶总共有多少种跳法?

答:(1)fib = lambda x: x if x<2 else fib(x-1) + fib(x-2) ##类似于累加,当n>=2的时候,就有两种跳法

(2)dib = lambda n: n if n<2 else 2*dib(n-1) ##类似于2^n次方

参考文档:https://www.cnblogs.com/luckyjason/p/5319379.html

4、合并两个有序列表,比如lst1=[1,2,3],lst2=[3,4,5]?

答:

def merge_sort(lst1,lst2):

tmp = []

tmp.extend(lst1)

tmp.extend(lst2)

tmp = list(set(tmp))

return tmp

lst1 = [1,2,3]

lst2 = [3,4,5]

print merge_sort(lst1,lst2)

5、如何快速的在一个有序列表中查找是否有某个元素?如何快速的在一个无序列表(元素还有可能重合)中查找是否有某个元素?

答:(1)二分查找只能用于有序列表

def binary_search(lst,item):

low = 0

high = len(lst)-1 ##减一的原因是low初始为0

while low <= high:

middle = (high+low)/2

guess = lst[middle]

if guess > item:

high = middle - 1

elif guess < item:

low = middle + 1

else:

print '该元素%s在列表的索引位置是%d' %(item,middle)

return middle

return None

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

binary_search(lst,3)

(2)对于无序列表,可以用python自带的index方法

def search(lst,item):

if item in lst:

print '该元素%s所在列表位置是%d' %(item,lst.index(item))

else:

print '该元素%s不存在与当前列表中!' %item

lst = [6,4,7,1,5,7,8,1,2,3]

search(lst,3)

6、如何反向迭代一个序列?

答:元组,列表,字符串是可迭代序列

def reverse(seq):

for x in range(len(seq)-1,-1,-1): ##比如range(3,-1,-1)删除[3,2,1,0]

print seq[x]

str = 'yhc'

lst = [1,2,3]

tuple = [4,5,6]

7、如何查询和替换一个文本中的字符串?

答:(1)使用字符串的replace方法;(2)使用正则的sub方法

tmp = 'yhc is very good'

tmp.replace('yhc','admin')

tempstr = 'hello i am yhc'

print re.sub('yhc','Bye',tempstr)

hello i am Bye

参考文档:https://blog.csdn.net/u013205877/article/details/77542837

8、已知字典d = {'a':10,'b':5,'c':20} ,请根据字典value从大到小进行排序?

答:

d = {'a':10,'b':5,'c':20}

sorted(d.items(),key=lambda x:x[1]) ## lambda的x变量代表是每个元素

[('b', 5), ('a', 10), ('c', 20)]

9、A目录下有a.py,A目录下有子目录C,C目录有c.py,问a.py如何导入c.py呢?

答:如果要把目录导入一个模块,必须要有init.py存在!

(1)[root@k8s-minion A]# pwd

/opt/A

[root@k8s-minion A]# ls

a.py C

[root@k8s-minion A]# ll C/

-rw-r--r-- 1 root root 17 4月 30 10:37 c.py

-rw-r--r-- 1 root root 0 4月 30 10:41 init.py

[root@k8s-minion A]# cat C/c.py

print '---c----'

(2)[root@k8s-minion A]# python a.py

import sys

import os

BASE_DIR = os.getcwd() # 获取A目录的位置。如果要导入一个文件,则追加该目录的父目录到路径搜索环境中

print BASE_DIR

sys.path.append(BASE_DIR)

from C import c

print '---a---'

10、把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']?

答:def first_upper(tmpstr):

return tmpstr[0].upper()+tmpstr[1:].lower()

lst = ['adam', 'LISA', 'barT']

print map(first_upper,lst)

11、把字符串”k1:1|k2:2|k3:3”处理成 python 字典的形式:{k1:1,k2:2,k3:3} ?

答:

def string_to_dict(string):

d = {}

for kv in string.split("|"):

k,v = kv.split(":")

if v.isdigit():

v = int(v)

d[k] = v

return d

print string_to_dict("k1:1|k2:2|k3:3")

12、python自省,hasattr和getattr怎么用?

答:(1)hasattr(self,name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False

(2)getattr(self,name)获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。

需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,

可以在后面添加一对括号。

参考文档:https://www.cnblogs.com/cenyu/p/5713686.html

13、django如何分别在视图和模板避免CSRF的403拒绝服务错误?

答:(1)视图中在函数面前定义一个@csrf_exempt装饰器,前提是from django.views.decorators.csrf import csrf_exempt

(2)在模板中的表单中填一个变量,{{ csrf_token }}

参考文档:http://www.liujiangblog.com/course/django/120

14、A和B同级目录,那么A目录下的a.py如何导入B目录下的b.py呢?

答:注意:执行a.py的时候,必须进入A目录下,进行python a.py否则会报错,因为如果是python A/a.py,那么os.getcwd()会不同

(1)在a.py中做如下操作

import os

import sys

BASE_DIR = os.path.dirname(os.getcwd()) # 返回的是/opt目录

sys.path.append(BASE_DIR)

from B import b

(2)在B目录下需要建立一个init.py文件即可

[root@k8s-minion A]# pwd

/opt/A

[root@k8s-minion A]# python a.py

参考文档:http://www.liujiangblog.com/course/django/119

15、Nginx+uwsgi+django的处理过程和作用?

答:(1)首先客户端请求服务资源,nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析

(2)如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源

(3)如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi

(4)wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi

(5)wsgi将返回值进行打包,转发给uWSGI

(6)uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)

作用:

第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;

在nginx上加上安全性或其他的限制,可以达到保护程序的作用;

uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;

16、简单解释Python基于值的内存管理模式?

答:(1)Python采用的是基于值的内存管理方式,在Python中可以为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一个内存地址;

(2)Python具有自动内存管理功能,会自动跟踪内存中所有的值,对于没有任何变量指向的值,Python自动将其删除。

Python采用的是基于值的内存管理方式,对小整数和短字符串会进行缓存,就是相同值,对应不同的变量,其实是一个对象,范围是在[-5,256]

对于引用计数为0的对象,Python会把它的所占内存进行回收

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

17、python的time模块和datetime模块有何区别?

答:(1)time的striftime主要用来获取

(2)datetime主要用来获取当前时间,比如datetime.datetime.now()

18、如何用Python实现凌晨0点0分的单独一次定时任务执行?

答:一次的定时任务,只需要有个while True执行该程序,再导入datetime模块即可

#coding: utf-8

import datetime

def do_something():

print ('此时时间是------%s------,正在执行定时任务') %datetime.datetime.now()

def main(h=0,m=0):

while True:

now = datetime.datetime.now()

if now.hour == h and now.minute == m:

do_something()

return 0

if name == 'main':

main(23,01) ##代表23:01分执行此任务

19、django的身份验证如何实现?

答:(1)第一,使用is_authenticated()方法,通过if not request.user.is_authenticated判断。[不需要导入其他人认证模块]

(2)第二,使用@login_required装饰器,如果用户没有登录,则跳转到登录页面,如果用户已登录,则处理正常的视图。[from django.contrib.auth.decortators import login_required]

(3)第三,authenticate模块

from django.contrib.auth import authenticate,login

def myview(request):

username = request.POST.get['username']

password = request.POST.get['password']

user = authenticate(username=username,password=password)

if user:

if user.is_active:

login(request,user) # 表示用户已登陆,重定向到首页

else:

返回登陆页面

else:

返回用户不存在

总的来说,django的身份验证可以通过视图或模板页面来进行认证

参考文档:精通django书籍

20、python实现检查一个IP地址是否合法?

答:python实现起来太简单了,直接字符串分割就行了,正则地址是最尼玛麻烦的了

import sys

def check_ip(ipaddr):

ipaddr = ipaddr.strip().split('.')

if len(ipaddr) < 4:

print ('IP地址输入有误!')

sys.exit()

for ip in range(len(ipaddr)):

ipaddr[ip] = int(ipaddr[ip])

if ipaddr[ip] > 0 and ipaddr[ip] < 255:

pass

else:

print ('IP地址不能超过255!')

sys.exit()

print ('这个IP地址是合法的')

str = '192.288.1.1'

check_ip(str)

或者python 文件名 [IP地址],那么check_ip函数的参数应该为sys.argv[1]

'''

if len(sys.argv) < 2:

print ('例:ptyhon %s %s' %(sys.argv[0],sys.argv[1]))

'''

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值