为什么学习Python?
通过什么途径学习的Python?
上网收集视频,资料
关注公证号
买教程,书籍
Python和Java、PHP、C、C#、C++等其他语言的对比?
python更加简单,明确,优雅,拥有丰富的第三方库
简述解释型和编译型编程语言?
解释性语言:程序不需要编译,程序在运行时才翻译成程序语言,每执行一次都需要翻译一次
编译型语言:程序执行之前需要一个专门的编译过程,把程序编译成机器语言的文件,
运行时不需要重新编译,直接使用编译的结果
Python解释器种类以及特点?
CPython:使用最广的解释器
Ipython:基于CPython之上的交互式解释器,只在交互式上有所增强,其他的与CPython一样
pypy :对python代码进行动态编译,显著提高python代码的执行效率
JPython:运行在java平台上的python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython:运行在微软.Net平台上的Python解释器
位和字节的关系?
8位(bit) = 1字节(Byte)
b、B、KB、MB、GB 的关系?
8b = 1B
1024B = 1KB
1024KB = 1MB
1024MB = 1GB
请至少列举5个 PEP8 规范(越多越好)。
1.每级缩进用四个空格
2.最大行宽不超过79个字符
3.用两行空行分割顶级函数和类的定义
4.模块导入始终在文件的顶部
5.括号里面避免空格
6.禁止使用通配符导入
通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
ret = int('0b1111011',2)
ret = 123
十进制转换成二进制:v = 18
ret = bin(18)
ret = 10010
八进制转换成十进制:v = “011”
ret = int('011',8)
ret = 9
十进制转换成八进制:v = 30
ret = oct(30)
ret = 0o36
十六进制转换成十进制:v = “0x12”
ret = int('0x12',16)
ret = 18
十进制转换成十六进制:v = 87
ret = hex(87)
ret = 0x57
请编写一个函数实现将IP地址转换成一个整数。
import socket, struct
def ip2long(ip):
"""
Convert an IP string to long
"""
packedIP = socket.inet_aton(ip)
return struct.unpack("!L", packedIP)[0]
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
ret = 167971084
python递归的最大层数?
1000层
求结果:
v1 = 1 or 3 1
v2 = 1 and 3 3
v3 = 0 and 2 and 1 0
v4 = 0 and 2 or 1 1
v5 = 0 and 2 or 1 or 4 1
v6 = 0 or Flase and 1 Flase
ascii、unicode、utf-8、gbk 区别?
assic码:由0和1组成,每8位表示一个字符
unicode:16位,2个字节表示一个字符
utf-8:用最少8位数去表示一个字符
英文:8位一个字节表示一个字符
欧洲文字:16位,两个字节表示一个字符
中文,亚洲文字:24位,三个字节表示一个字符
gbk:只能中国人自己使用,一个中文用16位两个字节表示一个字符
字节码和机器码的区别?
机器码:也叫原生码,是电脑CPU可直接解读的数据
字节码:字节码是一种中间状态(中间码)的二进制代码(文件)。
需要直译器转译后才能成为机器码。
三元运算规则以及应用场景?
三元运算就是在赋值变量的时候,可以直接加判断,然后赋值
他与if...eles语句一致,但在一行中书写,代码很精简,执行效率高
res = 值1 if 条件 else 值2
列举 Python2和Python3的区别?
1.print:在python2中,print是一个语句,python3中被视为一个函数
2.python2中含有php,java,c,等语言的的规范陋习
python2中重复代码特别多
3.python3中默认使用utf-8
4.python2中用户交互使用:raw-input
python3中使用:input
用一行代码实现数值交换:
a = 1
b = 2
a,b = b,a
Python3和Python2中 int 和 long的区别?
int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数
long(长整数):无限大小的整数
xrange和range的区别?
他们的用法相同,但返回类型不同
range生成的是一个列表
xrange生成的是一个生成器
xrange的性能更好
文件操作时:xreadlines和readlines的区别?
他们的用法相同,但返回类型不同
xreadlines返回的是一个生成器,readlines返回的是一个list
列举布尔值为False的常见值?
0,[],'',(),{}
字符串、列表、元组、字典每个常用的5个方法?
字符串:1.str.split()分割
2.str.strip()去除空格
3.str.replace()字符串替换
4.str.index()找下标,找不到回报错
5.str.find()找下标,找不到返回-1
列表: 1.list.append()在末未添加元素
2.list.extend()在开头添加元素
3.list.count()计算元素个数
4.list.index()找下标
5.list.pop()按照下标删除元素
元组: 1.tuple.index()找下标
2.tuple.count()计算元素个数
字典: 1.dict.values()获取字典的值
2.dict.get()根据key值获取value
3.dict.pop()根据key值删除键值对
4.dict.clear()清空字典
5.dict.setdefault()添加键值对,没有就添加,有就不添加
lambda表达式格式以及应用场景?
格式:func = lambda x,y:x + y
应用:函数式编程中,闭包中
pass的作用?
1.空语句,表示什么都不做
2.保证格式是完整,语意完整
3.站位语句
*arg和**kwarg作用?
*args:接收n个位置参数,返回一个元组
**kwargs:接收n个关键字参数,返回一个字典
is和==的区别?
is:比较两个变量的id地址是否一样
==:比较两个变量的值是否相等
简述Python的深浅拷贝以及应用场景?
首先python的引用跟对象是分离的,直接赋值是对对象的引用,也可以理解为为对象取一个别名
浅copy:
1.对于可变数据类型而言,是创建一个具有相同类型,相同的值但id不同的对象
如果有子对象,这些对象和原始对象的子对象是同一个引用
2.对于不可变数据类型而言,浅copy只拷贝引用
深copy:
1.深copy是copy对象,开辟新的内存空间,包括子对象,他们互不影响
Python垃圾回收机制?
python中的垃圾回收机制是以引用计数为主,分代回收、标记清楚为辅来回收垃圾
Python的可变类型和不可变类型?
可变类型:字典,列表,集合
不可变类型:字符串,元组,数字
求结果:
v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v) #{'k1':[666],'k2':[666]}
v['k1'] = 777
print(v) #{'k1':[777],'k2':[666]}
求结果:
列举常见的内置函数?
abs()取绝对值
hash()将对象转换成hash
dir()查找对象的所有方法
divmod()分页
enumerate()枚举
filter、map、reduce的作用?
filter:过滤
def func1(x):return x % 2 == 0
for i in filter(func1,[1,2,3,4,5]):
print(i)
map:对每个成员迭代执行一个函数操作,返回一个列表
def func(x):return x*x
for i in map(func,range(5)):
print(i)
reduce:对参数序列中的元素进行累积
语法:
reduce(function, iterable[, initializer])
def add(x,y):
return x+y
reduce(add,[1,2,3,4,5])
reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
一行代码实现9*9乘法表
[print('%s*%s=%2s'%(j,i,j*i))if i==j else print('%s*%s=%2s'%(j,i,j*i),end=' ') for i in range(10) for j in range(1,i+1)]
如何安装第三方模块?以及用过哪些第三方模块?
pip install 模块名
至少列举8个常用模块都有那些?
pymysql,sys,re,time,math,os,re,json
re的match和search区别?
match从开头开始匹配
search匹配到第一个对象
什么是正则的贪婪匹配?
最大长度的匹配
求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
a:[0,1,0,1,0,1,0,1,0,1]
b:返回一个生成器
求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
a:1
b:2
c:false
d:true
def func(a,b=[]) 这种写法有什么坑?
b是一个默认参数,他是一个空列表,内存地址不会改变
如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
l = '1,2,3'
l = l.split(',')
如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
l = ['1','2','3']
比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
a = [1,2,3] 和 b = [(1),(2),(3) ]是同一个对象
b = [(1,),(2,),(3,) ]是一个列表套元组
如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
[i**2 for i in range(1,11)]
一行代码实现删除列表中重复的值 ?
l = [1,2,3,4,5,1,2,3,5]
l = list(set(l))
如何在函数中设置一个全局变量 ?
global关键字
logging模块的作用?以及应用场景?
设置日志,通过设置不同的日志等级,获取不同的日志
请用代码简答实现stack 。
class A():
def __init__(self):
self.l = []
def push(self,i):
self.l.append(i)
def get(self):
self.l.pop(-1)
常用字符串格式化哪几种?
1.'%s'%()
2.'%s,%s'.format(a,b)
3.f"{}xxx{}xxx"
简述 生成器、迭代器、可迭代对象 以及应用场景?
可迭代对象:能够直接作用于for循环的对象 for循环
迭代器:含有__iter__方法,并且含有__next__方法的对象是迭代器
生成器:python中,符合一边循环一边计算的机制是生成器,它的本质是一个迭代器
用Python实现一个二分查找的函数。
def find(l,aim,start=0,end=None):
if end == None:end = len(l) -1
if start <= end:
mid = (end-start)//2+start
if l[mid] > aim:
return find(l,aim,start=start,end=mid-1)
elif l[mid] < aim:
return find(l,aim,start=mid+1,end=end)
elif l[mid] = aim:
return mid
eles:
return None
谈谈你对闭包的理解?
内层函数对外部作用域而非全局作用域变量的引用
os和sys模块的作用?
os模块是一个与操作系统交互的接口
sys模块是与python解释器交互的接口
如何生成一个随机数?
import random
random.random()
如何使用python删除一个文件?
import os
os.remove(path)
谈谈你对面向对象的理解?
生活中的每个物体否可以归为一类事物,每个个体都是这个类的实例
面向对象是现实世界模型的自然延伸,这是一种‘一切皆对象’的编程思想
面向对象编程是以对象为中心,以消息为驱动,所以程序=对象+消息
Python面向对象中的继承有什么特点?
继承是将一类事物共有的属性和行为抽象为一个父类,每个子类继承父类的行为和属性
而每个字类也可以有自己的方法
增加了代码的复用性,扩展性
面向对象深度优先和广度优先是什么?
都是继承父类中的
c3算法
面向对象中super的作用?
在继承充当父类的代理对象,在多继承中,super的调用顺序是MRO顺序调用
是否使用过functools中的函数?其作用是什么?
用过
在装饰器中使用,避免重名问题
偏函数中
列举面向对象中带爽下划线的特殊方法,如:__new__、__init__
__str__:返回一个字符串
__eq__: 重写了所有的==,操作
__hash__:在执行hash()之前执行
__len__:在执行len()方法之前执行
__call__:Python中,只要在创建类型的时候定义了__call__()方法,这个类型就是可调用的
如何判断是函数还是方法?
函数是封装了一些独立的功能,可以直接的调用
方法需要通过对象才能调用
静态方法和类方法区别?
实例方法,类方法,静态方法都可以通过实例或者类调用。
实例方法需要传递实例的引用,针对的是实例
类方法针对的是类
静态方法不能继承
列举面向对象中的特殊成员以及应用场景
魔术方法,用于在某个时刻调用
1、2、3、4、5 能组成多少个互不相同且无重复的三位数
24
什么是反射?以及应用场景?
通过字符串来操作python中的变量,函数,类和方法
metaclass作用?以及应用场景?
用尽量多的方法实现单例模式。
1.基于模块导入实现单例
class A():
pass
a = A()
from xxx import a
2.基于装饰器实现单例
def wapper(cls):
_instance = {}
def inner(*args,**kwargs):
if cls not in _instance:
_instance[cls] = cls(*args,**kwargs)
return inner[cls]
return inner
@wapper
class A(object):
a = 1
def __init__(self,x=0)
self.x = x
A1 = A()
A2 = A()
3.基于类实现单例
import threading
import time
class A(object):
_instance_lock = threading_Lock()
def __init__(self)
time.sleep(1)
@classmethod
def instance(cls,*args,**kwargs)
if not hasattr(A,'_instance'):
A._instance = A(*args,**kwargs)
return A._instance
def task(arg):
obj = obj.instance()
for i in range(10):
t = threading.Thread(target=task,args=[i,])
t.start()
4.基于metaclass方法实现单例
import threading
class A(type):
_instance_Lock = threading_Lock()
def __call__(cls,*args,**kwargs):
if not hasattr(cls,'_instance'):
with A._instance_Lock:
if not hasattr(cls,'_instance'):
cls._instance = super(A,cls).__call__(*args,**kwargs)
return cls._instance
class Foo(metaclass=A):
def __init__(self,name):
self.name = name
obj1 = Foo('name')
obj2 = Foo('name')
print(obj1,obj2)
装饰器的写法以及应用场景。
def wapper(func):
def inner(*args,**kwargs):
ret = func(*args,**kwargs)
return ret
return inner()
@wapper
def func():
pass
func()
双队列实现一个栈
class StackWithTwoQueues(object):
def __init__(self):
self._stack1 = []
self._stack2 = []
def push(self,x):
if len(self._stack1) == 0:
self._stack1.append(x)
elif len(self._stack2) == 0:
self._stack2.append(x)
if len(self._stack2) == 1 and len(self._stack1) >= 1:
while self._stack1:
self._stack2.append(self._stack1.pop(0))
elif len(self._stack1) == 1 and len(self._stack2) > 1:
while self._stack2:
self._stack1.append(self._stack2.pop(0))
def pop(self):
if self._stack1:
return self._stack1.pop(0)
elif self._stack2:
return self._stack2.pop(0)
else:
return None
异常处理写法以及如何主动跑出异常(应用场景)
异常处理:
try:
pass
except Exception as e:
pass
主动抛异常:raise error
什么是面向对象的mro
Method Realtion Order 用来制作一个继承关系的列表
MRO列表的制作原则:
1.子类永远在父类前面
2.如果继承了多个父类,那么按照()中的顺序在列表中摆放
3.如果多个子类同时继承了一个父类,孙子类中只会选取第一个父类中的父类的方法
isinstance作用以及应用场景?
检测一个数据是否有指定的类型创建
写代码并实现:
Given an array of integers, return indices of the two numbers such that
they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
字符串,字典,列表,整型,布尔值
json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
json.dumps(Data,ensure_ascii = False)
什么是断言?应用场景?
在没有一个程序之前,我们不知道程序会在哪里出错,与其让他在运行中崩溃,
不如在出现错误条件时就崩溃。
python assert断言是声明其布尔值为真的判定,如果发生异常就说明表达式为假,
可以理解assert断言语句为raise-if-not,用来测试表达式,其返回值假,就会
触发异常
有用过with statement吗?它的好处是什么?
简化异常处理,自动管理文件关闭
使用代码实现查看列举目录下的所有文件。
import os
os.listdir('dirname')
简述 yield和yield from关键字。
yield是生成器函数的关键字,每次获取一个函数的返回值,直到函数结束
yield from 可用于简化yield函数中for循环中的yield表达式
第二部分 网络编程和并发(34题)
简述 OSI 七层协议。
1.物理层:中继器,集线器,双绞线
2.数据链路层:网桥,以太网交换机,网卡 运行arp协议
3.网络层:路由器,三层交换机 运行ip协议
4.传输层:四层交换机,四层路由器 运行TCP与UDP协议
5.应用层
会话层
表示层
应用层
什么是C/S和B/S架构?
c/s架构:客户端与服务器端的架构,先安装程序,才能运行,对操作系统环境依赖较大
B/S架构:浏览器与服务器端的架构,无需安装程序,直接在浏览器上通过http请求访问资源
简述 三次握手、四次挥手的流程。
三次握手:
1.客户端向服务端发送连接请求
2.服务端向客服端回应可以连接请求
3.客户端与服务端建立连接
四次挥手:
1.客户端向服务端发送断开连接请求
2.服务端向客户端发送数据
3.服务端向客户端发送可以断开连接请求
4.客户端与服务端断开连接
什么是arp协议?
arp协议:地址解析协议,根据ip地址获取物理地址的协议
TCP和UDP的区别?
tcp:传输控制协议
是面向连接、可靠的字节流服务,双方必须先建立一个tcp连接,之后才能传输数据
tcp提供超时重发,丢弃重复数据,检验数据,流量控制等功能,
保证数据能从一端传到另一端
udp:用户数据保协议
是一个简单的面向数据报的运输层协议,udp不提供可靠性,不能保证数据到达目的地
不需要建立连接,故而传输速度很快
什么是局域网和广域网?
局域网:指在某一区域内由多台计算机互联成的计算机组
广域网:指远距离的,大范围的计算机网络,一般是跨地区的
为何基于tcp协议的通信比基于udp协议的通信更可靠?
tcp协议的通信是建立连接的
udp协议的通信不建立连接
什么是socket?简述基于tcp协议的套接字通信流程。
socket是应用与Tcp/Ip协议通信的中间软件抽象层,他是一组接口
站在我们的角度来看,socket就是一个模块,通过调用模块中已经实现的方法来
建立两个进程之间的连接和通信
什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
同时执行多条命令之后,得到的结果可能只有一部分,在执行其他命令的时候有收到
之前执行的另外一部分结果,这种现象就是粘包
IO多路复用的作用?
I/O多路复用实际上就是用select,poll,epoll监听多个I/O对象,
当I/O对象有变化的时候就通知用户进程,好处就是单个进程可以理解多个socket
什么是防火墙以及作用?
是一种位于内部网络和外部网络之间的网络安全系统
作用:保护内部网络免受非法用户的侵入
select、poll、epoll 模型的区别?
select是不断轮询监听的socket,socket有个数限制,一般为1024个
poll也是采用轮询 的方式去监听,只不过没有个数限制
epool并不是采用轮询方式去监听,而是当socket有变化时通过回调的方式主动告知用户进程
简述 进程、线程、协程的区别 以及应用场景?
进程:进程是计算机的程序关于某数据集合上的一次运行活动,
是系统进行资源分配和调度的基本单位,是操作系统结构的基础
每个进程独享系统的一部分资源
线程:线程是进程的一个执行单元,是cpu调度的最小单位,每个进程至少有一个线程
一个进程下,多个线程共享进程所有资源
协程:一个线程可以开多个协程,一个进程也可以开多个协程
进程和线程都是同步机制,协程是异步机制,协程可以保留上一次的执行状态,每一次
过程重入时,相当于进入上一次的调用状态
协程只有在I/O密集型操作才会提高效率
GIL锁是什么鬼?
GIL锁是全局解释器锁,保证在同一时刻只有一个线程在运行
Python中如何使用线程池和进程池?
使用multiprocess.Poll模块
线程池 进程池
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import os,time,random
def task(n):
print('%s is runing' %os.getpid())
time.sleep(random.randint(1,3))
return n**2
if __name__ == '__main__':
executor=ProcessPoolExecutor(max_workers=3)
futures=[]
for i in range(11):
future=executor.submit(task,i)
futures.append(future)
executor.shutdown(True)
print('+++>')
for future in futures:
print(future.result())
线程池:把ProcessPoolExecutor换成ThreadPoolExecutor,其余用法全部相同
threading.local的作用?
用来保存一个全局变量,但这个全局变量只有在当前线程才能访问
是每个线程用户可以非常方便的访问各自的资源而不互相干扰
进程之间如何进行通信?
使用队列(multiprocess.Queue)和管道(multiprocess.Pipe)
什么是并发和并行?
并发:指应用能够交替执行不同的任务
并行:指能够同时执行不同的任务
进程锁和线程锁的作用?
进程锁:在共享内存中设置一个互斥锁,所有进程共享
线程锁:确保每次只有一个一个线程占有该锁
解释什么是异步非阻塞?
程序没有在两种不同的操作中来回切换
路由器和交换机的区别?
交换机是一种基于mac识别,为始发者和接收者之间建立临时的联网路径
路由器是连接多个网络或网段的网络设备,包括局域网和广域网
区别:
1.工作层次不同
2.数据转发所依据的对象不同
3.传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
4.路由器提供了防火墙服务
什么是域名解析?
域名解析是把域名指向网站空间IP,让人们通过注册的域名
可以方便地访问到网站的一种服务
如何修改本地hosts文件?
对于Windows操作系统,hosts文件位于:
系统盘(一般是C:/盘)=> Windows => System32=> drivers => etc => hosts 文件
生产者消费者模型应用场景及优势?
生产者消费者模式是通过一个容器来解决生产者和消费者的耦合问题
在多线程中开发当中,如果生产者处理速度很快,而消费者处理速度很慢,
name生产者就必须等待消费者处理完,才能继续生产数据。反之亦然
什么是cdn?
cdn全称是Content Delivery Network,及内容分发网络。其目的是通过在现有网络
的Internet中增加一层新的网络架构,将网站的内容发布到最近用户的网络‘边缘’,
使用户可以就近所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的
响应速度
LVS是什么及作用?
是linux虚拟服务器
主要用于服务器的负载均衡
Nginx是什么及作用?
Nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件
资源消耗少,在3万并发连接下开启10个Nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o时间模型epoll
keepalived是什么及作用?
keepalive是一个使用C语言编写的软件。是linux集群管理中保证
集群高可用的一个服务软件,其功能是用来防止单点故障
haproxy是什么以及作用?
haproxy是一个使用C语言编写的软件,
提供高可用性、负载均衡,以及基于tcp和http的应用程序代理
什么是负载均衡?
是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位
都可以单独对外供应效力二无需其他服务器的辅助。
什么是rpc及应用场景?
RPC的全称是(Remote Procedure Call)他是一种进程间通信方式,
他允许程序调用另一个地址空间的过程或函数,而不用程序员显
示编码这个远程调用的细节。
应用场景:
简述 asyncio模块的作用和应用场景。
asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop
的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步i/o
应用场景:
简述 gevent模块的作用和应用场景。
gevent是一个第三方库,可以轻松通过gevent实现并发同步或异步编程
应用场景:
爬虫
通过gevent实现单线程下的socket并发
twisted框架的使用和应用?
第三部分 数据库和缓存(46题)
列举常见的关系型数据库和非关系型都有那些?
MySQL常见数据库引擎及比较?
简述数据三大范式?
什么是事务?MySQL如何支持事务?
简述数据库设计中一对多和多对多的应用场景?
如何基于数据库实现商城商品计数器?
常见SQL(必备)
详见武沛齐博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html
简述触发器、函数、视图、存储过程?
MySQL索引种类
索引在什么情况下遵循最左前缀的规则?
主键和外键的区别?
MySQL常见的函数?
列举 创建索引但是无法命中索引的8种情况。
如何开启慢日志查询?
数据库导入导出命令(结构+数据)?
数据库优化方案?
char和varchar的区别?
简述MySQL的执行计划?
在对name做了唯一索引前提下,简述以下区别:
select * from tb where name = ‘Oldboy-Wupeiqi’
select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1
1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?
什么是索引合并?
什么是覆盖索引?
简述数据库读写分离?
简述数据库分库分表?(水平、垂直)
redis和memcached比较?
redis中数据库默认是多少个db 及作用?
python操作redis的模块?
如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个值?
redis如何实现主从复制?以及数据同步机制?
redis中的sentinel的作用?
如何实现redis集群?
redis中默认有多少个哈希槽?
简述redis的有哪几种持久化策略及比较?
列举redis支持的过期策略。
MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。
如何基于redis实现消息队列?
如何基于redis实现发布和订阅?以及发布订阅和消息队列的区别?
什么是codis及作用?
什么是twemproxy及作用?
写代码实现redis事务操作。
redis中的watch的命令的作用?
基于redis如何实现商城商品数量计数器?
简述redis分布式锁和redlock的实现机制。
什么是一致性哈希?Python中是否有相应模块?
如何高效的找到redis中所有以oldboy开头的key?
第四部分 前端、框架和其他(155题)
谈谈你对http协议的认识。
http协议 超文本传输协议,基于TCP/IP协议来传输数据
他是一个无状态,无连接的,单向的协议
分为请求协议和响应协议
谈谈你对websocket协议的认识。
websocket是一套基于TCP连接的一套协议,握手成功之后才能收发数据
握手过程:
- 获取用户请求发来的值, Sec-WebSocket-Key=mnwFxiOlctXFN/DeMt1Amg==
- 将 "mnwFxiOlctXFN/DeMt1Amg==" + magic_string
- 将 "mnwFxiOlctXFN/DeMt1Amg==" + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
- 将 hashlib.sha1("mnwFxiOlctXFN/DeMt1Amg==" + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
- 将 ret = b64encode(hashlib.sha1("mnwFxiOlctXFN/DeMt1Amg==" + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))
- 将加密后的结果 ret 返回给客户端
收发数据时,内部是加密的
客户端向服务端创建连接后不断开
安装: pip install gevent-websocket
前端创建websocket:
var ws = new WebSocket('ws://192.168.12.200:5000/get_new_vote
发送数据:
ws.send(....)
接收数据:
ws.onmessage = function(info){
info.data
}
断开连接:
ws.close()
后端:
接收:
ws = request.environ.get('wsgi.websocket')
mes = ws.receive()
发送:
ws.send(...)
关闭:
ws.close()
应用:
希望页面实时更新数据的时候
什么是magic string ?
如何创建响应式布局?
你曾经使用过哪些前端框架?
jquery,Bootstrap,html5
什么是ajax请求?并使用jQuery和XMLHttpRequest对象实现一个ajax请求。
ajax局部区域发送请求,不会刷新页面
$.ajax({
url:'请求地址',
type:'请求方式',
data:{'a':'a1'}, #请求数据
success:function(data){
#请求成功后的回调函数
}
})
如何在前端实现轮训?
setInterval(function () {
window.location.reload();
},2000)
如何在前端实现长轮训?
vuex的作用?
vue中的路由的拦截器的作用?
axios的作用?
vue中的ajax请求
列举vue的常见指令。
v-moudel, v-for ,v-if ,v-on v-bind
简述jsonp及实现原理?
浏览器的同源策略,浏览器阻止ajax请求,不阻止src请求
-- 动态创建的script标签 src属性赋值为我们要发送请求的地址
window.onload = function () {
$('#btn_test').click(function () {
var ele = document.createElement("script")
ele.src = "http://127.0.0.1:8000/jsonp1?callback=callbackResponse"
document.body.insertBefore(ele, document.body.firstChild)
})
}
是什么cors ?
列举Http请求中常见的请求方式?
get,post,delete,option,push,patch
列举Http请求中的状态码?
200,404,403,405,401,301,302
列举Http请求中常见的请求头?
user-agent:客户使用的操作系统和浏览器的名称和版本
referer:上一次请求的url,告诉浏览器我是从那个页面链接过来的
cookie:用来储存一些客户的信息,便于浏览器识别用户身份
method:请求的方式
path:访问的路径
accept:浏览器能处理的内容的类型
host:发送请求页面的域名
看图写结果:
看图写结果:
看图写结果:
看图写结果:
看图写结果:
看图写结果:
django、flask、tornado框架的比较?
django:大而全,适合开发大型网站
flask:轻量级,小而精,适合快速开发小型网站
tornado:
什么是wsgi?
wsgi是一个web网关接口协议
wsgi就是一座桥梁,一端称服务端或网关端,另一端称为应用端或者框架端
作用就是在协议之间进行转换
django请求的生命周期?
用户请求进来首先进入wsgi协议模块进行处理,然后进入中间件,然后进行路由匹配
然后进入视图层即view函数,template模板渲染,orm操作,再然后进入中间件
最后再通过wsgi协议返回客户端
列举django的内置组件?
Form组件,contenttype组件,auth认证组件,中间件,admin,分页组件
列举django中间件的5个方法?以及django中间件的应用场景?
process_request(self,request)
在执行视图函数之前执行
process_view(self,request,view_func,view_args,view_kwargs)
路由匹配之后,先执行process_view在执行相应的视图函数
process_template_response(self,request,response)
在视图函数执行完成后立即执行,但有一个前提条件,那就是视图函数返回的对象
有一个render()方法
process_exception(self,request,exception)
在视图函数出现异常了才执行
process_response(self,request,response)
在视图函数之后执行
简述什么是FBV和CBV?
FBV和CBV都是处理视图函数逻辑的两种类型,只是表现形式不同
FBV通过函数来处理逻辑关系,适用于简单的逻辑处理
CBV适用于复杂的逻辑处理,将一个个方法封装到类中。
CBV能体现封装继承的优势,条理更清楚,功能拓展更方便
django的request对象是在什么时候创建的?
当请求一个页面时,Django创建request对象
如何给CBV的程序添加装饰器?
def wapper(cls):
_instance = {}
def inner(*args,**kwargs):
if cls not in _instance:
_instance[cls] = cls(*args,**kwargs)
return inner[cls]
return wapper
Class A():
a = 1
def __init__(self,x=0)
self.x = x
a1 = A(xxx)
a2 = A(xxx)
列举django orm 中所有的方法(QuerySet对象的所有方法)
all() 查询所有结果
filter(**kwargs) 查询与筛选条件相匹配的结果
exclude() 查询与所选条件不相符的的对象
order_by() 对查询结果进行排序
reverse() 对查询结果进行反向排序
distinst() 对查询结果进行去重
values() 返回一个字典
values_list() 返回一个元组
only和defer的区别?
only:只取某个表中的数据
例:
def only(self, *fields):
#仅取某个表中的数据
models.UserInfo.objects.only('username','id')
或
models.UserInfo.objects.filter(...).only('username','id')
defer:映射排除某列数据
例:
def defer(self, *fields):
models.UserInfo.objects.defer('username','id')
或
models.UserInfo.objects.filter(...).defer('username','id')
#映射中排除某列数据
select_related和prefetch_related的区别?
select_related实现表之间进行一对一和多对一优化
prefetch_related实现表之间进行一对多和多对多优化
filter和exclude的区别?
filter是筛选与查找条件相符合的对象
exclude是查找与筛选条件不相符的对象
列举django orm中三种能写sql语句的方法。
1.extra:结果修改器
2.raw:执行原生sql并返回模型实例
3.使用pymysql执行原生sql
django orm 中如何设置读写分离?
1.先在settings中配置要使用的数据库
例:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db2': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
},
}
2.在models中创建表
例:
from django.db import models
class Products(models.Model):
"""产品表"""
prod_name = models.CharField(max_length=30)
prod_price = models.DecimalField(max_digits=6, decimal_places=2)
3.执行数据库迁移:
python manage.py makemigrations # 在migrations文件夹下生成记录,迁移前检查
python manage.py migrate # 创建表
4.读写分离:
1.手动读写分离:
from django.shortcuts import HttpResponse
from . import models
def write(request):
models.Products.objects.using('default').create(prod_name='熊猫公仔', prod_price=12.99)
return HttpResponse('写入成功')
def read(request):
obj = models.Products.objects.filter(id=1).using('db2').first()
return HttpResponse(obj.prod_name)
2.自动读写分离:
class Router:
def db_for_read(self, model, **hints):
return 'db2'
def db_for_write(self, model, **hints):
return 'default'
F和Q的作用?
F:查询出的结果可以和结果或者常量进行比较
例:查询评论数大于收藏数的书籍
from django.db.models import F
models.Book.objects.filter(commnet_num__gt=F('keep_num'))
Q:可以使用Q来进行复杂的查询
例:查询作者名是小仙女或小魔女的
from django.db.models import Q
models.Book.objects.filter(Q(authors__name="小仙女")|Q(authors__name="小魔女"))
values和values_list的区别?
values查询结果返回的是字典
values_list查询结果返回的是元组
如何使用django orm批量创建数据?
使用bulk_create方法
django的Form和ModeForm的作用?
Form进行表单验证
ModelForm对用户提交的数据进行验证
django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新。
单选和下拉框
django的Model中的ForeignKey字段中的on_delete参数有什么作用?
django中csrf的实现机制?
在返回的http响应的cookie里,会在服务端随机生成一个token,
把这个token放在cookie里,然后每次post请求都会带上这个token
django如何实现websocket?
/*创建socket连接*/
var socket = new WebSocket("ws://" + '127.0.0.1:8000' + "/app02/echo/");
socket.onopen = function () {
console.log('WebSocket open');//成功连接上Websocket
};
接收数据
socket.onmessage = function (e) {
console.log('message: ' + e.data);//打印出服务端返回过来的数据
$('#messagecontainer').prepend('
' + e.data + '
');};
发送数据:
socket.send()
关闭:
socket.close()
基于django使用ajax发送post请求时,都可以使用哪种方法携带csrf token?
在data中输入csrf token
data中写
django中如何实现orm表中添加数据时创建一条日志记录。
先在settings中配置logging配置
django缓存如何设置?
seetings中配置
django的缓存能使用redis吗?如果可以的话,如何配置?
可以
CACHES = {
'default': {
'BACKEND': 'redis_cache.cache.RedisCache',
'LOCATION': '127.0.0.1:6379',
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
},
},
}
REDIS_TIMEOUT=7*24*60*60
CUBES_REDIS_TIMEOUT=60*60
NEVER_REDIS_TIMEOUT=365*24*60*60
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
r = redis.Redis(connection_pool=pool
django路由系统中name的作用?
给url起别名,可以用于反向解析url
django的模板中filter和simple_tag的区别?
filter是django内部已经封装好了,但也可以自定义,使用filter,最多能传2个参数
from django import template
from django.utils.safestring import mark_safe
# 装饰器名称已经写死,此处必须使用register
register = template.Library()
# 过滤器限制参数为两个
@register.filter
def filter_multi(a, b):
#print(a)
return a * b
# simple_tag不限制参数个数
@register.simple_tag
def simple_tag_multi(x, y):
return x*y
simple_tag的代码方式与filter一样,不同的是在装饰器部分需要调用simple_tag方法
使用simple_tag,能传多个参数
django-debug-toolbar的作用?
用来调试请求的接口
1.pip install django-debug-toolbar
2.打开项目,找到settings.py 文件。 找到: INSTALLED_APPS--变量
将'debug_toolbar'添加进去
3.找到放置中间件的地方, 将以下代码添加进去。
'debug_toolbar.middleware.DebugToolbarMiddleware',一定要加逗号
4.中间件添加完成之后,添加 django-debug-toolbar的中间件
DEBUG_TOOLBAR_PANELS = [
'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
5.添加访问IP
INTERNAL_IPS = ('127.0.0.1',)
6.修改 django-debug-toolbar换下源
打开settings文件后找得到(CONFIG_DEFAULTS)变量,修改key:JQUERY_URL的value
django中如何实现单元测试?
from django.test import TestCase
from myapp.models import Animal
# Django的单元测试基于unittest库
class StudentTestCase(TestCase):
# 测试函数执行前执行
def setUp(self):
print("======in setUp")
# 需要测试的内容
def test_add(self):
student = Student(name='aaa')
student.save()
self.assertEqual(student.name, 'aaa')
# 需要测试的内容
def test_check_exit(self):
self.assertEqual(0, Student.objects.count())
# 测试函数执行后执行
def tearDown(self):
print("======in tearDown")
对于每一个测试方法都会将setUp()和tearDown()方法执行一遍
会单独新建一个测试数据库来进行数据库的操作方面的测试,默认在测试完成后销毁。
在测试方法中对数据库进行增删操作,最后都会被清除。
也就是说,在test_add中插入的数据,在test_add测试结束后插入的数据会被清除。
django单元测试时为了模拟生产环境,会修改settings中的变量,
例如, 把DEBUG变量修改为True, 把ALLOWED_HOSTS修改为[*]。
解释orm中 db first 和 code first的含义?
db first是基于已存在的数据库,利用某些工具创建实体类,数据库对象与实体类
的匹配关系等,你也可以手动修改这些自动生成的代码以及匹配文件。
性能较差
code first 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据
已有的代码描述,自动创建数据对象
性能较好
django中如何根据数据库表生成model中的类?
在models中创建表
使用orm和原生sql的优缺点?
ORM解决的主要问题是对象和关系的映射,把一个类和一个表一一对应,类的
每个实例对应表中的一条记录,类的每个属性对应表中的每个字段
优势:orm提供了对数据库的映射,不用直接编写sql代码,只需像操作对象一样
从数据库中操作数据,让软件人员专注于业务逻辑的处理,提高了开发效率
劣势:在一定程度上牺牲了程序的执行效率,orm用多了sql就不会写了
关系数据库相关技能退化
sql 优势:执行效率高
劣势:难度较大
简述MVC和MTV
MVC全名是Model View Contentall,是模型,视图,控制器的书写,是一种软件设计典范
用一种业务逻辑,数据,界面显示分离的方法来组织代码,
将业务逻辑聚集到一个部件里面,在改进和进行个性化定制界面,即
用户交互时,不需要重新编写业务逻辑
MTV是Model template View(模型,模板,视图)的缩写
通过视图函数来调用模板
django的contenttype组件的作用?
contenttype是django内置的一个组件,帮助开发者做连表操作
当一张表作为多个表的FK,并且只能选其中一个或几个时,可以使用
谈谈你对restfull 规范的认识?
1.面向资源编程
2.在url中体现版本
3.根据method的不同,进行不同的操作
4.在url中体现是否是API
5.在url中过滤条件
6.使用https协议
7.响应时设置状态码
8.返回值
9.返回错误信息
10.要跳转时,携带调用转接口的url
接口的幂等性是什么意思?
用相同的参数调用一次和调用多次接口,其返回的结果应该是一样的
什么是RPC?
RPC是指远程过程调用,两台服务器A,B,一个应用在A,一个应用在B
A想要调用B上提供的方法/函数,由于不在一个内存空间,不能直接调用,
需要通过网络来表达调用的语义和传递调用的参数
Http和Https的区别?
https是已安全为目标的http通道,简单讲就是http的安全版
在http下加入ssl层,
为什么要使用django rest framework框架?
前后端分离
是后端程序员无需再注重前端,只需像前端提供接口
前端程序员只需要调用接口
django rest framework框架中都有那些组件?
1.权限组件
2.认证组件
3.分页器组件
4.频率组件
5.序列化组件
6.解析器
7.路由组件
8.视图组件
9.响应器
10.渲染器
11.版本控制
django rest framework框架中的视图都可以继承哪些类?
APIView(在view基础上再次封装request,初始化各种组件)
GenericAPIView(封装get_queryset,get_serializer..方法)
ViewSetMixin(重写as_view方法)
ModelViewSet集大成者)
简述 django rest framework框架的认证流程。
django 的url请求对应一个视图函数as_view函数,其中调用rest_framework/views.py
中的dispatch函数,这个函数会根据request的请求方法,
去调用我们在view对象中定义的对应的方法:
urlpatterns = [
url(
r"^test/?", testView.as_view(),
)]
testView是继承APIView的View类:
class TestView(APIView):
authentication_classes = (
BasicAuthentication,
SessionAuthentication,
TokenAuthentication,
)
permission_classes = (
IsAuthenticated,
)
def get(self,request):
pass
如果是get请求会调用as_view中的dispatch方法,dispatch根据request.Method调用
对应的get的方法,url->视图函数
权限认证是在dispatch中做的
self.as_view()
||
vv
def dispatch(request,*args,**kwargs):
||
VV
self.initial(request,*args,**kwargs):
||
VV
self.perform_authentication
self.check_permissions
self.check_throttles
验证某个用户:
perform_authentication(request)
request.user
request.user其实是一个@property函数
里面有个self._authenticate()方法
_authenticate(self)方法中验证用户就是authenticator.authenticate(self)
self.authenticators从哪里来?就是从视图函数中的authentication_classes中的来,
关于对view控制的其他类都在rest_framework/views.py的APIView类中定义了。
在BasicAuthentication中必须实现authenticate方法,并且返回一个用户,
并赋值给request.user,这个request.user就是系统中进行用户认证的user对象,
后续的权限认证就是通过该user为依据进行判断是否有某个api的权限
user = authenticate(**credentials)
||
vv
user = backend.authenticate(**credentials)
这个authenticate是django的authenticate方法:
||
vv
主要是去数据库校验数据,校验结束!!!
接着执行self.check_permissions(self,request):
如果权限不通过,那么会执行self.permission_denied,然后这个异常会在dispatch
函数中被捕捉,当做结果传递给response。
当一次授权通过后,再一次访问这个API时,用户名密码从哪来?
cookie和session
django rest framework如何实现的用户访问频率控制?
from rest_framework.throttling import BaseThrottle
VISIT_RECORD={}
class VisitThrottle(BaseThrottle):
def __init__(self):
self.history=[]
def allow_request(self,request, view):
remote_addr = request.META.get('REMOTE_ADDR')
import time
ctime = time.time()
# IP 第一次访问
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr] = [ctime, ]
return True
# 查取当前访问IP的访问历史记录
history = VISIT_RECORD.get(remote_addr)
self.history=history
if history and ctime-history[-1]>60:
history.pop()
if len(history) < 3:
history.insert(0, ctime)
return True
else:
return False
def wait(self):
import time
ctime = time.time()
return 60 - (ctime - self.history[-1])
Flask框架的优势?
短小精悍,可快速开发一个小型网站
Flask框架依赖组件?
blueprint(蓝图)
dbutils(数据库连接池)
flask-session(将cookie和session保存在redis中)
wtforms(表单校验)
Flask蓝图的作用?
简单来说就是一个储存操作方法的容器,这些操作在蓝图上被注册到一个应用上之后就
可以被调用,flask可以通过蓝图来组织url以及处理请求
列举使用过的Flask第三方组件?
sqlalchemy(flask的orm操作)
flask-session(将cookie和session保存在redis中)
flask-script(增加功能)
flask-migrate(数据库迁移)
简述Flask上下文管理流程?
1、每一个线程都会在Local类中创建一条数据
{
“唯一标识”:{stark:[ctx,]}
“唯一标识”:{stark:[ctx,]}
}
2、当请求进来之后,将请求相关数据添加到列表里面[request,],
以后如果使用时,就去读取
3、列表中的数据,请求完成之后,将request从列表中移除
Flask中的g的作用?
g 相当于一次请求的全局变量,
当请求进来时将g和current_app封装为一个APPContext类,
在通过LocalStack将Appcontext放入Local中,
取值时通过偏函数,LocalStack、loca l中取值,响应时将local中的g数据删除
Flask中上下文管理主要涉及到了那些相关的类?并描述类主要作用?
LocalStack():将local对象的数据维护成一个栈
LocalProxy():
partial():
ctx():
为什么要Flask把Local对象中的的值stack 维护成一个列表?
不管是单线程还是多线程,栈中只有一个数据
Flask中多app应用是怎么完成?
请求进来时,可以根据URL的不同,交给不同的APP处理。一般用蓝图也可以实现。
一般不写多app应用
在Flask中实现WebSocket需要什么组件?
geventwebsocket,WSGIServer
wtforms组件的作用?
做表单验证
Flask框架默认session处理机制?
默认session是完全保留在客户端浏览器中
解释Flask框架中的Local对象和threading.local对象的区别?
locals:数据只能在本线程有效,而对于其它线程则不可用
threading.local:为每个线程开辟一块空间进行数据存储
Flask中 blinker 是什么?
是信号:让开发者在请求过程中定制一些用户行为
SQLAlchemy中的 session和scoped_session 的区别?
session:每次执行数据库操作的时候都要创建一个session
scoped_session:scoped_session中含有session中的一些方法,
是每个线程都用同一个session
SQLAlchemy如何执行原生SQL?
from sqlalchemy import create_engine
engine = create_engine(
"mysql+pymysql://root:[email protected]:3306/code_record?charset=utf8",
max_overflow=0, # 超过连接池大小外最多创建的连接数
pool_size=5, # 连接池大小
pool_timeout=30, # 连接池中没有线程最多等待时间,否则报错
pool_recycle=-1, # 多久之后对连接池中的连接进行回收(重置)-1不回收
)
def test():
conn = engine.raw_connection()
cursor = conn.cursor()
cursor.execute("select * from Course")
result = cursor.fetchall()
print(result)
cursor.close()
conn.close()
if __name__ == '__main__':
test()
# ((1, '生物', 1), (2, '体育', 2), (3, '物理', 1))
ORM的实现原理?
orm即对象关系映射,他的实现思想是将关系数据库中表的数据映射成为对象,
一对象的形式展现
DBUtils模块的作用?
数据库连接池,连接池中有几个数据库连接对象,每一用完数据库是并不
关闭数据库,而是将数据库连接放到连接池中
以后,每次连接数据库时直接去连接池中拿
以下SQLAlchemy的字段是否正确?如果不正确请更正:
1
2
3
4
5
6
7
8
9
10
11
from datetime import datetime
from sqlalchemy.ext.declarative
import declarative_base
from sqlalchemy import Column, Integer, String, DateTime
Base = declarative_base()
class UserInfo(Base):
__tablename__ = 'userinfo'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(64), unique=True)
ctime = Column(DateTime, default=datetime.now())
SQLAchemy中如何为表设置引擎和字符编码?
SQLALCHEMY_DATABASE_URI =
"mysql+pymysql://root:[email protected]:3306/code_record?charset=utf8"
SQLAchemy中如何设置联合唯一索引?
再创建表时
简述Tornado框架的特点。
异步非阻塞
简述Tornado框架中Future对象的作用?
同过Future来监听IO请求
Tornado框架中如何编写WebSocket程序?
from tornado.websocket import WebSocketHandler
class ChatHandler(WebSocketHandler):
def open(self):
print('开始连接')
def on_message(self, message):
print(message)
self.write_message(message)
def on_close(self):
print('关闭')
Tornado中静态文件是如何处理的?如:
可以通过UIModule来处理
from tornado.web import UIModule
from tornado import escape
class Custom(UIModule):
def render(self, *args, **kwargs):
return ""
def css_files(self):
return ['xxxx.css','xxxcccc.css']
def embedded_css(self):
return "h1{color:red}"
def javascript_files(self):
return 'sfasdfasdfa.js'
def embedded_javascript(self):
# return "alert(123)"
pass
Tornado操作MySQL使用的模块?
需要先安装支持异步操作Mysql的类库:
Tornado-MySQL: https://github.com/PyMySQL/Tornado-MySQL#installation
pip3 install Tornado-MySQL
import tornado_mysql
from tornado_mysql import pools
POOL = pools.Pool(
dict(host='127.0.0.1', port=3306, user='root', passwd='123', db='cmdb'),
max_idle_connections=1,
max_recycle_sec=3)
Tornado操作redis使用的模块?
简述Tornado框架的适用场景?
用户访问,后台自己处理并响应
git常见命令作用:
git init # git初始化
git status # 查看当前git状态
git add [file1] [file2] ... # 添加指定文件到暂存区
git add . # 添加当前目录下所有文件到版本库
$ git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区
git commit -m # 提交到版本库,并填写版本说明,以便以后回滚。
git log # 查看提交记录
touch a.py # 创建a.py文件
git config --list # 显示当前的Git配置
git config -e [--global] # 编辑Git配置文件
git branch # 列出所有本地分支
git branch -r # 列出所有远程分支
git branch -a # 列出所有本地分支和远程分支
git checkout -b [branch] #新建一个分支,并切换到该分支
git rm [file1] [file2] #删除工作区文件,并且将这次删除放入暂存区
git mv [file-original] [file-renamed] #改名文件,并且将这个改名放入暂存区
git checkout [branch-name] #切换到指定分支,并更新工作区
git branch -d [branch-name] #删除分支
git tag #列出所有tag
git checkout . #恢复暂存区的所有文件到工作区
git push [remote] --all #推送所有分支到远程仓库
git push [remote] [branch] #上传本地指定分支到远程仓库
git pull [remote] [branch] #取回远程仓库的变化,并与本地分支合并
git merge [branch] #合并指定分支到当前分支
git branch [branch] [commit] #新建一个分支,指向指定commit
简述以下git中stash命令作用以及相关其他命令。
暂时将未提交的变化移除,稍后再一如
git stash
git stash pop
git 中 merge 和 rebase命令 的区别。
merge:合并指定分支到当前分支 #git merge [branch]
rebase:从本地master拉取代码更新当前分支:branch 一般为master
# git rebase [branch]
公司如何基于git做的协同开发?
如何基于git实现代码review?
1.创建临时用于review的分支
2.查看remote分支,确认review会发送到哪里
3.将remote最新代码拉取到本地
4.在remote创建一个分支,并将本地代码提交到这个分支
5.删除这个临时分支
git如何实现v1.0 、v2.0 等版本的管理?
什么是gitlab?
是一个用于仓库管理系统的开源项目,使用git作为代码管理工具,
并在此基础上搭建起来的web服务
github和gitlab的区别?
如何为github上牛逼的开源项目贡献代码?
git中 .gitignore文件的作用?
当不想传一些与代码无关的文件到远程仓库中,例如编译后的文件,.gitignore
就可以处理这些文件
什么是敏捷开发?
以用户的需求进化为核心,采用迭代,循序渐进的方式进行软件开发
简述 jenkins 工具的作用?
jenkins是一个的持续集成引擎
主要用于:1.持续、自动的构建/测试软件项目
2.监控一些定时执行的任务
公司如何实现代码发布?
简述 RabbitMQ、Kafka、ZeroMQ的区别?
他们本质上都是Mq
kafka是一种分布式的,基于发布/订阅的消息系统。
kafka设计初衷是用于处理日志,可以看成是一个日志系统,针对性很强
RabbitMq是一个重量级的消息队列,适用于企业级的开发
ZeroMQ号称最快的消息队列系统。
RabbitMQ如何在消费者获取任务后未处理完前就挂掉时,保证数据不丢失?
参数
RabbitMQ如何对消息做持久化?
增加参数delivery_mode = 2 #持久化消息
RabbitMQ如何控制消息被消费的顺序?
以下RabbitMQ的exchange type分别代表什么意思?如:fanout、direct、topic。
简述 celery 是什么以及应用场景?
简述celery运行机制。
celery如何实现定时任务?
简述 celery多任务结构目录?
celery中装饰器 @app.task 和 @shared_task的区别?
简述 requests模块的作用及基本使用?
简述 beautifulsoup模块的作用及基本使用?
简述 seleninu模块的作用及基本使用?
scrapy框架中各组件的工作流程?
在scrapy框架中如何设置代理(两种方法)?
scrapy框架中如何实现大文件的下载?
scrapy中如何实现限速?
scrapy中如何实现暂定爬虫?
scrapy中如何进行自定制命令?
scrapy中如何实现的记录爬虫的深度?
scrapy中的pipelines工作原理?
scrapy的pipelines如何丢弃一个item对象?
简述scrapy中爬虫中间件和下载中间件的作用?
scrapy-redis组件的作用?
scrapy-redis组件中如何实现的任务的去重?
scrapy-redis的调度器如何实现任务的深度优先和广度优先?
简述 vitualenv 及应用场景?
简述 pipreqs 及应用场景?
在Python中使用过什么代码检查工具?
简述 saltstack、ansible、fabric、puppet工具的作用?
B Tree和B+ Tree的区别?
请列举常见排序并通过代码实现任意三种。
请列举常见查找并通过代码实现任意三种。
请列举你熟悉的设计模式?
有没有刷过leetcode?
列举熟悉的的Linux命令。
公司线上服务器是什么系统?
解释 PV、UV 的含义?
解释 QPS的含义?
uwsgi和wsgi的区别?
supervisor的作用?
什么是反向代理?
简述SSH的整个过程。
有问题都去那些找解决方案?
是否有关注什么技术类的公众号?
最近在研究什么新技术?
是否了解过领域驱动模型?