*****以下资料来源于互联网
1.单词反转
不使用任何库函数,将给定字符串按单词反转
输入格式是:“this is a string”
输出格式是: “string a is this”
data="this is a string"
print(data[::-1]) #按照字母反转
print(' '.join(data.split()[::-1])) #按照单词反转
结果是:
gnirts a si siht
string a is this
2。什么是先序、中序、后序。
先序、中序、后序是二叉树的遍历规则。
二叉树遍历的定义:按照一定的规律不重复地访问(或取出结点中的信息,或对结点作其它的处理)二叉树中的每一个结点。
前序遍历的规则如下:
若二叉树为空,则退出。否则
⑴访问处理根结点;
⑵前序遍历左子树;
⑶前序遍历右子树;
特点:由左而右逐条访问由根出发的树支 (回溯法的基础)
中序遍历的规则:
若二叉树为空,则退出;否则
⑴中序遍历左子树;
⑵访问处理根结点;
⑶中序遍历右子树;
后序遍历的规则如下:
若二叉树为空,则退出;否则
⑴后序遍历左子树;
⑵后序遍历右子树;
⑶访问处理根结点;
3.新类和旧类
Python中类分为新式类和旧式类。
1.新式类都从object继承,经典类不需要。
2.新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索。
3.新式类相同父类只执行一次构造函数,经典类重复执行多次。
!!!!!Python 2.x中默认都是经典类,只有显式继承了object才是新式类
!!!!!Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object
4.django如何实现邮箱手机号都能登陆
首先在settings.py加一行代码:
AUTHENTICATION_BACKENDS=['users.views.CustomBackend' , ]
括号内必须有逗号
在views.py中加代码:
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q #起作用的模块!!!!!
from .models import User #你的用户
class Loginuser(ModelBackend):
"""邮箱和用户名都能登陆"""
def login(self, request, username=None, password=None, **kwargs):
try:
#设置用户名和邮箱都能登陆
user=User.objects.get(Q(username=username)|Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
5.求平衡点
平衡点就是假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点。例如:一个列表numbers = [1, 3, 5, 7, 8, 25, 4, 20]。25前面的总和为24,25,后面的总和也是24,那么这个点就是平衡点。
实现代码如下:
def balance_point(thy_list):
num = len(thy_list)
if num >= 3:
for i in range(num):
if i == 0:
pass
else:
list1 = thy_list[:i] # 将传入的列表切片,将一个列表分成2个列表
list2 = thy_list[i+1:]
sum1 = sum(list1) # 对切片后的列表分别求和
sum2 = sum(list2)
if sum1 == sum2:
return '平衡点:%d,其值为%d' % (i, thy_list[i])
return '无平衡点'
else:
return '列表长度不够!'
if __name__ == '__main__':
print(balance_point([1, 3, 5, 7, 8, 25, 4, 20]))
6.如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?
for a in range(1001):
for b in range(1001):
c = 1000 - a - b
if a**2 + b**2 == c**2:
print(a,b,c)
else:
pass
7.对数据结构了解吗?有哪些数据结构?
在数据结构中,从逻辑上可以将其分为线性结构和非线性结构。常用的结构有链表和二叉树结构。链表是连续型数据结构,b树是非线性数据结构。
8.蓝图的作用是什么?
用于实现单个应用的视图、模板、静态文件的集合。一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。可以帮助我们实现模块化应用的功能。
9.知道线程、进程吗?它们的区别?了解gil锁?了解协程吗?
线程进程的区别是:
1.一个进程可以有多个线程,这些线程共用一个内存空间。
2.多线程比多进程执行效率高,但是由于共享内存,一旦子线程挂了,就全挂了。
3.多线程如果在多核cpu上同时执行,单个cpu上使用多线程通常会有线程等待。
Io密集型任务主要需要IO的读取,利用CPU的效率较低,大量时间花费在IO上。使用多进程优势,计算密集型需要等待计算结果,所以哪种方式都不太占优势,相对来说线程消耗资源少,一般使用使用线程。
GIL锁是性能与资源的平衡,解决线程死锁问题。在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁。
协程相当于线程,只是多了一个yield函数。
10.http状态码都代表什么意思?
100字段是客户端请求;
200字段表示请求成功;
300字段表示重定向;
400字段表示请求出错;
500字段表示服务器内部出错。
11.编写一个search(s)的函数,将当前目录及其所有子目录下查找文件名包含指定字符串的文件,打印完整路径.
import os, logging
def search(s):
rootdir = '.' # 指明被遍历的文件夹
#三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for parent,dirnames,filenames in os.walk(rootdir):
for filename in filenames: #输出文件信息
#print "filename is:" + filename
if filename.find(s) != -1:
print "the full path of the file is:" + os.path.abspath(os.path.join(parent,filename)) #输出文件路径信息
if __name__ == '__main__':
search('test')
12.new __init__区别
__init__的意义是类实例创建的时候自动执行,初始化实例的值。
__new__的意义是创建一个类的实例。
1、继承自object的新式类才有__new__。
2、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别。
3、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例。
4、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。
5、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
13.静态方法的应用场景?类方法的应用场景?
'''
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一般习惯用cls。
'''
1、对于不需要访问实例属性和类属性的函数定义成静态函数。
2、需要访问类属性的定义成类函数。
3、需要访问实例属性的定义成实例函数。
静态方法一般做工具使用,因为会被频繁调用。
类方法一般是需要更新功能时使用,一般情况下很少用。
14.表关联有几种方式?
表关联方式内联、外联、自联。一般是主外键关联,主外键关联方式有一对一、一对多、多对多。
15.数据库优化方式?
1.开启查询缓存。
2.精简索引。
3.查询方式尽量不用全局匹配,用精确匹配。
4.数据如果过大就分库。
5.尽量不要滥用高阶函数。
16.mysql的数据引擎有哪些?
常用的数据引擎有myisam和innodb。
默认是myisam。
myisam适合大量数据的查询。对于批量io操作效率不高,因为myisam运行的时候会锁住整个表,而且不会保存外键关系。
innodb原理比myisam复杂,比myisam写的操作效率高,因为innodb运行时候锁住行。
17.数据库怎么设计的?
数据库模型是E-R模型,用ERWin或PowerDesigner来建立模型。
18.权限认证怎么做的?
一般用基于django自带的框架,自定义权限认证逻辑。或者基于RBAC角色控制权限设置。
19.熟不熟悉docker?
docker是一个打包工具。docker部署很方便,把docker打包的镜像复制到运行环境直接运行。打包环境跟运行环境必须一致。特点是一次构建多次交付。docker分为镜像、容器、仓库。
20.逻辑判断题:
a\b\c\d中有一个是小偷,审讯结果是:
a说我不是小偷。
b说c是小偷 。
c说小偷肯定是d 。
d说c胡说!
其中三个人说的是实话,一个人说的是假话。判断谁是小偷。
for x in ['a','b','c','d']:
y = (x!='a')+(x=='c')+(x=='d')+(x!='d')
if y = 3:
print ("小偷是:%s" %x)