python面试题及解析

1.python基础html

1.Python和Java、PHP、C、C#、C++等其余语言的对比?前端

答:vue

2.简述解释型和编译型编程语言?python

答:解释型语言,在运行时才进行翻译,每条语句都是执行时才进行翻译,效率比较低;mysql

  编译型语言,执行前需将高级语言编译成机器语言,翻译只作一次,执行效率较高;ios

3.位和字节的关系?web

答:位,数据传输单位;字节,数据存储单位;ajax

4.b、B、KB、MB、GB 的关系?redis

答:B->GB为1024关系;1B=8bitsql

5.经过代码实现以下转换:

二进制转换成十进制:v = “0b1111011”
         int("0b1111011",base=2)
十进制转换成二进制:v = 18
                        bin(18)
八进制转换成十进制:v = “011”
                    int("011",base=8)
十进制转换成八进制:v = 30
                        oct(30)
十六进制转换成十进制:v = “0x12”
               int("0x12",base=16)
十进制转换成十六进制:v = 87                      hex(87)

6.请编写一个函数实现将IP地址转换成一个整数。

7.python递归的最大层数?

答:由sys.setrecursionlimit()设置;

 8.求结果:

    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                          False

9.ascii、unicode、utf-八、gbk 区别?

答:ascii ,美国制定了一套字符编码,对英文字符与二进制之间作了联系,这被称为ASCII码;

  unicode,全部符号的编码;

  utf-8,它是一种变长编码,可使用1-4个字节表示一个符号,根据不一样的符号来变化字节长度;

  gbk,GB2312的扩展,彻底兼容GB2312;

10.字节码和机器码的区别?

答:机器码,名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。

  字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。

11.三元运算规则以及应用场景?

答:在赋值变量的时候,能够直接加判断,而后赋值

12.列举 Python2和Python3的区别?

答:

13.用一行代码实现数值交换:
     
 a = 1
 
     b = 2

答:a,b = b,a

14.Python3和Python2中 int 和 long的区别?

答:3中没有long

15.xrange和range的区别?

答:xrange返回的是一个生成器对象;

16.文件操做时:xreadlines和readlines的区别?

17.列举布尔值为False的常见值?

答:None,False,全部为0的数,“”,[],(),{};

18.字符串、列表、元组、字典每一个经常使用的5个方法?

答:字符串,strip、lstrip、rstrip、count、center、find、index、replace、capitalize、startwith、endwith、split、rsplite、join

  列表,append、insert、extend、pop、del、reverse、sort、len、max、min、count、index、sorted、insert

  字典,get、pop、len、del

19.lambda表达式格式以及应用场景?

答:lambda argument_list:expression

  filter、sorted、map、reduce、做为参数传入

20.pass的做用?

答:做为空语句,保持程序结构的完整性,不作任何事情,通常用于作占位语句

21.*arg和**kwarg做用?

答:python的两个可变参数,*arg表明多个无名参数,类型未tuple,**kwargs表示关键字参数,为dict使用时须要将*rag放置在**kwargs以前,不然会报错;

22. is和==的区别

答:is判断id是否相同,==判断值是否相同

23.简述Python的深浅拷贝以及应用场景?

答:浅拷贝是只仅仅拷贝数据集合的第一层数据,深拷贝指的是拷贝数据集合的全部层。因此对于只有一层的数据几个来讲深浅拷贝的意义是同样的,如字典、元祖、集合、列表等。对于数字和字符串而言,无心义,因其永远指向一个内存地址。

24.Python的垃圾回收机制?

25.Python的可变类型和不可变类型

答:可变类型,列表、字典、可变集合;不可变类型,数字、字符串、元组、不可变集合

26.求结果:


   v = dict.fromkeys(['k1','k2'],[])
 
   v[‘k1’].append(666)

   print(v)

   v[‘k1’] = 777

   print(v)

答:{“K1”:[666],"K2":[666]} {“K1”:777,"K2":[666]} 

27.求结果

def num():
    return [lambda x:i*x for i in range(4)]

print([m(2) for m in num()])

答:[6,6,6,6]

28.列举常见的内置函数?

答:map、reduce、filter、sort

29.filter、map、reduce的做用?

答:filter,筛选;map,生成新序列;reduce,累加;

30.一行代码实现9*9乘法表

答:

print('\n'.join(['\t'.join(["%2s*%2s=%2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))

31.如何安装第三方模块?以及用过哪些第三方模块?

答:①pip install model_name;②python setup.py insyall;

32.至少列举8个经常使用模块都有那些?

33.re的match和search区别?

答:match只检测开头,search检测整个字符串;

34.什么是正则的贪婪匹配?

答:贪婪匹配,趋向于最大长度;非贪婪匹配,匹配到结果就好,就少得匹配字符;

35.求结果:
 a. [ i % 2 for i in range(10) ]
 b. ( i % 2 for i in range(10) )

答:[0,1,0,1,0,1,0,1,0,1],(0,1)

36.求结果:
 a. 1 or 2
 b. 1 and 2
 c. 1 < (2==2)
 d. 1 < 2 == 2

答:1,2,False,True

37.def func(a,b=[]) 这种写法有什么坑?

答:函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行仍是用第一次执行的时候实例化的地址存储,因此三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。

38.如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

答:split

39.如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

答:eval([‘1’,’2’,’3’])

40.比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?

41.如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?

答:

[x*x for x in range(1,11)]

42.一行代码实现删除列表中重复的值 ?

set(list)

43.如何在函数中设置一个全局变量 ?

答:global

44.logging模块的做用?以及应用场景?

45.请用代码简答实现stack ;

答:

calss Stack(object):
    def __init__(self):
        self.stack = []
    def push(seld,value):
        self.stack.append(value)
    def pop(self):
        if self.stack:
            self.stack.pop()
        else:
            raise LookupError("stack is empty!")
    def is_empty(self):
        return bool(self,stack)
    def top(self):
        return self.stack[-1]

 

46.经常使用字符串格式化哪几种?

答:①%s;②%(first)s;③format;

47.简述 生成器、迭代器、可迭代对象 以及应用场景?

答:生成器,函数体中有yield关键字的函数;

  迭代器,一个能够记住遍历位置的对象;__iter__()返回一个特殊地迭代器对象,__next__()返回下一个迭代器对象

48.用Python实现一个二分查找的函数。

答:

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def binary_search(dataset,find_num):
    if len(dataset) > 1:
        mid = int(len(dataset) / 2)
        if dataset[mid] == find_num:  # find it
            print("找到数字", dataset[mid])
        elif dataset[mid] > find_num:  # 找的数在mid左面
            print("\033[31;1m找的数在mid[%s]左面\033[0m" % dataset[mid])
            return binary_search(dataset[0:mid], find_num)
        else:  # 找的数在mid右面
            print("\033[32;1m找的数在mid[%s]右面\033[0m" % dataset[mid])
            return binary_search(dataset[mid + 1:], find_num)
    else:
        if dataset[0] == find_num:  # find it
            print("找到数字啦", dataset[0])
        else:
            print("没的分了,要找的数字[%s]不在列表里" % find_num)

binary_search(data,20)

 

49.谈谈你对闭包的理解?

答:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,而且外函数的返回值是内函数的引用。这样就构成了一个闭包。

50.os和sys模块的做用?

答:os,提供一种方便的使用操做系统的函数的方法;

  sys,可供解释器使用或维护的变量和解释器进行交互的函数;

51.如何生成一个随机数?

答:使用random函数;

55.如何使用python删除一个文件?

答:os模块,os.remove,os.removedirs(path),os.rmdir(path)

56.谈谈你对面向对象的理解?

答:所谓的面向对象就是将咱们的程序模块化,对象化,把具体事物的特性属性和经过这些属性来实现一些动做的具体方法放到一个类里面,这就是封装。封装是咱们所说的面相对象编程的特征之一。除此以外还有继承和多态。

57.谈谈你对面向对象的理解?

58.Python面向对象中的继承有什么特色?

答:建造系统中的类,避免重复操做;新类是基于已经存在的类,这样能够提高代码的复用程度

59.面向对象深度优先和广度优先是什么?

答:

60.面向对象中super的做用?

答:用于调用父类的一个方法

61.是否使用过functools中的函数?其做用是什么?

答:用于高阶函数,指那些做用于函数或者返回其余函数的函数。一般状况下,只要是能够被当作函数调用的对象就是这个模块的目标。

62.列举面向对象中带爽下划线的特殊方法,如:__new__、__init__

63.如何判断是函数仍是方法?

答:函数,函数是封装了一些独立的功能,能够直接调用,python内置了许多函数,同时能够自建函数来使用。

方法:方法和函数相似,一样封装了独立的功能,可是方法是须要经过对象来调用的,表示针对这个对象要作的操做,使用时采用点方法。

64.静态方法和类方法区别?

答:均可以经过实例或者类调用,不过实例方法经过类调用时须要传递实例的引用;

65.列举面向对象中的特殊成员以及应用场景

答:__doc__描述类的信息

  __call__对象后面加括号,触发执行

  __dict__查看类或对象的全部成员

  __str__打印对象时,默认输出该方法的返回值

  __getitem__,__setitem__,__delitem__用于索引操做,如字典,分别表示获取,设置,删除数据

  __new__,__metaclass__

66.一、二、三、四、5 能组成多少个互不相同且无重复的三位数

答:

67.什么是反射?以及应用场景?

答:核心本质其实就是利用字符串的形式去对象(模块)中操做(查找/获取/删除/添加)成员,一种基于字符串的事件驱动

68.metaclass做用?以及应用场景?

答:MetaClass是用来建立类的,就比如类是用来建立对象的。若是说类是对象的模板,那么metaclass就是类的模板。

  直接将须要的属性所有做为新组合类的成员列出来;

  分别将各个独立的属性集定义成单个的类,而后经过在组合类添加每一个属性类的实例(instance)的方式来引用各个属性类中定义的属性;

 

69.用尽可能多的方法实现单例模式。

答:

#模块单例
#fool.py
class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()

#foo.py
from fool import singleton 

 

  

#静态变量方法
class Singleton(object):
    def __new__(cls,a):
        if not hasattr(cls."_instance"):
            cls._instance =object.__new__(cls)
        return cls._instance
    def __init__(self,a):
        self.a=a
    def aa(self):
        print(a)

a=Singleton("a")

  

class Singleton1(type):
    def __init__(self, *args, **kwargs):
        self.__instance = None
        super(Singleton1,self).__init__(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        if self.__instance is None:
            self.__instance = super(Singleton1,self).__call__(*args, **kwargs)
        return self.__instance

class Singleton2(type):
    _inst = {}
    def __call__(cls, *args, **kwargs):
        print(cls)
        if cls not in cls._inst:
            cls._inst[cls] = super(Singleton2, cls).__call__(*args)
        return cls._inst[cls]

class C(metaclass=Singleton1):
    pass

  

def singleton(cls, *args, **kw):
    instance = {}
    def _singleton(args):
        if cls not in instance:
            instance[cls] = cls(*args, **kw)
        return instance[cls]
    return _singleton

@singleton
class A:
    pass

  

 

70.装饰器的写法以及应用场景。

答:python装饰器本质上就是一个函数,它可让其余函数在不须要作任何代码变更的前提下增长额外的功能,装饰器的返回值也是一个函数对象(函数的指针)

  ①受权;②日志;③带参数的装饰器;④在函数中嵌入装饰器;⑤装饰器类

71.异常处理写法以及如何主动跑出异常(应用场景)

答:

try:
    pass
except Exception as e:
    print(str(e))
else:
    pass
finally:
    pass

#主动抛出异常
raise TypeError("error!")

 

 

 

72.什么是面向对象的mro

答:方法解析顺序

  经典类(calssic class),深度优先遍历当用super调用父类的方法时,会按照__mro__属性中的元素顺序去挨个查找方法。咱们能够经过“类名.__mro__”或“类名.mro()”来查看上面代码中D类的__mro__属性值:

 

73.isinstance做用以及应用场景?

答:来判断一个对象是不是一个已知的类型;

  判断object是否与第二个参数的类型相同

74.写代码并实现:

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]

75.json序列化时,能够处理的数据类型有哪些?如何定制支持datetime类型?

答: string、int、list、tuple、dict、bool、null

  定制支持datetime类型

76.json序列化时,默认遇到中文会转换成unicode,若是想要保留中文怎么办?

答:

import json
a=json.dumps({"ddf":"你好"},ensure_ascii=False)
print(a) #{"ddf": "你好"}

 

77.什么是断言?应用场景?

答:是用来检查一个条件,若是它为真,就不作任何事。若是它为假,则会抛出AssertError而且包含错误信息。例如:

  防护型的编程
  运行时检查程序逻辑
  检查约定
  程序常量
  检查文档

78.有用过with statement吗?它的好处是什么?

答:语句的做用是经过某种方式简化异常处理,它是所谓的上下文管理器的一种

79.使用代码实现查看列举目录下的全部文件。

80.简述 yield和yield from关键字。

答:yield from  generator 。实际上就是返回另一个生成器

  yield 生成器

2.网络编程和并发

1.简述 OSI 七层协议。

答:物理层,数据链接层,网络层,传输层,会话层,表示层,应用层

2.什么是C/S和B/S架构? 

答:C/S是客户端和服务器端结构;B/S是浏览器和服务器结构;

3.简述 三次握手、四次挥手的流程。

答:三次握手,①链接开始时,链接创建发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列号编号;②服务器收到SYN包,并确认SYN,同时发送本身的一个SYN包,即SYN+ACK包,此事服务器进入SYN_RECV状态;③客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端与服务器同时进入ESTABLISHED状态,完成三次握手;

  四次握手

  • 1)A的应用进程先向其TCP发出链接释放报文段(FIN=1,序号seq=u),并中止再发送数据,主动关闭TCP链接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
  • 2)B收到链接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的链接释放。
  • 3)A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的链接释放报文段。
  • 4)B没有要向A发出的数据,B发出链接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
  • 5)A收到B的链接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,须要通过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

4.什么是arp协议?

答:地址解析协议,使用ARP协议可实现经过IP地址得到对应主机的物理地址(MAC地址)。

5.TCP和UDP的区别?

答:

  一、TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接

二、TCP提供可靠的服务。也就是说,经过TCP链接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
三、TCP面向字节流,其实是TCP把数据当作一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,所以网络出现拥塞不会使源主机的发送速率下降(对实时应用颇有用,如IP电话,实时视频会议等)
四、每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯
五、TCP首部开销20字节;UDP的首部开销小,只有8个字节

    六、TCP的逻辑通讯信道是全双工的可靠信道,UDP则是不可靠信道

6.什么是局域网和广域网?

答:局域网和广域网是按规模大小而划分的两种计算机网络。范围在几公里之内的计算机网络统称为局域网;而链接的范围超过10公里的,则称为广域网,因特网(Intenet)就是目前最大的广域网。

7.为什么基于tcp协议的通讯比基于udp协议的通讯更可靠?

8.什么是socket?简述基于tcp协议的套接字通讯流程。

9.什么是粘包? socket 中形成粘包的缘由是什么? 哪些状况会发生粘包现象?

10.IO多路复用的做用?

11.什么是防火墙以及做用?

12.select、poll、epoll 模型的区别?

13.简述 进程、线程、协程的区别 以及应用场景?

14.GIL锁是什么鬼?

15.Python中如何使用线程池和进程池?

16.threading.local的做用?

17.进程之间如何进行通讯?

18.什么是并发和并行?

19.进程锁和线程锁的做用?

20.解释什么是异步非阻塞?

21.路由器和交换机的区别?

22.什么是域名解析?

23.如何修改本地hosts文件?

24.生产者消费者模型应用场景及优点?

25.什么是cdn?

26.LVS是什么及做用?

27.Nginx是什么及做用?

28.keepalived是什么及做用?

29.haproxy是什么以及做用?

30.什么是负载均衡

31.什么是rpc及应用场景?

32.简述 asynio模块的做用和应用场景。

33.简述 gevent模块的做用和应用场景。

34.twisted框架的使用和应用?

3.数据库和缓存

1.列举常见的关系型数据库和非关系型都有那些?

答:关系型,Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQL

  非关系型,NoSql、Cloudant、MongoDb、redis、HBase

2.MySQL常见数据库引擎及比较?

答:

3.简述数据三大范式?

答:①当关系模式R的全部属性都不能在分解为更基本的数据单位时,称R是知足第一范式的,简记为1NF。知足第一范式是关系模式规范化的最低要

②若是关系模式R知足第一范式,而且R得全部非主属性都彻底依赖于R的每个候选关键属性,称R知足第二范式,简记为2NF。

③设R是一个知足第一范式条件的关系模式,X是R的任意属性集,若是X非传递依赖于R的任意一个候选关键字,称R知足第三范式,简记为3NF.

4.什么是事务?MySQL如何支持事务?

答:事务是由一步或几步数据库操做序列组成逻辑齿形单元,这系列妖魔所有执行,要么所有放弃执行。具备原子性,一致性,隔离性,持续性。

①begin,rollback,commit来实现;②直接使用set来改变mysql的自动提交模式;

5.简述数据库设计中一对多和多对多的应用场景?

答:一对一,外键关联、主键关联;

  多对多,通常采用中间表的方式处理,将多对多表转化为两个一对多;

6.如何基于数据库实现商城商品计数器?

答:

create table product
    (id primary key auto_increment,
    pname varchar(64),
    pcount int);    

 

7.常见SQL(必备)
详见武沛齐博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html

8.简述触发器、函数、视图、存储过程?

9.MySQL索引种类

普通索引:这是最基本的索引,它没有任何限制,好比上文中为title字段建立的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是咱们大多数状况下用到的索引。

–直接建立索引
CREATE INDEX index_name ON table(column(length))
–修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
–建立表的时候同时建立索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))
)
–删除索引
DROP INDEX index_name ON table

惟一索引:与普通索引相似,不一样的就是:索引列的值必须惟一,但容许有空值(注意和主键不一样)。若是是组合索引,则列值的组合必须惟一,建立方法和普通索引相似

–建立惟一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
–修改表结构
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
–建立表的时候直接指定
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE indexName (title(length))
);

全文索引:MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们能够从CHAR、VARCHAR或TEXT列中做为CREATE TABLE语句的一部分被建立,或是随后使用ALTER TABLE 或CREATE INDEX被添加。////对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,而后建立索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个很是消耗时间很是消耗硬盘空间的作法。

–建立表的适合添加全文索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
–修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)
–直接建立索引
CREATE FULLTEXT INDEX index_content ON article(content)

组合索引(最左前缀):平时用的SQL查询语句通常都有比较多的限制条件,因此为了进一步榨取MySQL的效率,就要考虑创建组合索引。

–使用到上面的索引
SELECT * FROM article WHREE title='测试' AND time=1234567890;
SELECT * FROM article WHREE utitle='测试';
–不使用上面的索引
SELECT * FROM article WHREE time=1234567890;

10.索引在什么状况下遵循最左前缀的规则?

11.主键和外键的区别?

答:主键,惟一标识一条记录,不能有重复的,不容许为空

  外键,表的外键是另外一表的主键, 外键能够有重复的, 能够是空值

12.MySQL常见的函数?

答:字符串函数,数字函数,日期函数,高级函数

13.列举 建立索引可是没法命中索引的8种状况。

答:①若是条件中有or,即便其中有条件带索引也不会使用;②对于多列索引,不是使用的第一部分(第一个),则不会使用索引;③like查询是以%开头;④若是列类型是字符串,那必定要在条件中将数据使用引号引用起来,不然不使用索引;⑤若是mysql估计使用全表扫描要比使用索引快,则不使用索引;

 

14.如何开启慢日志查询?

答:开启慢查询日志,可让MySQL记录下查询超过指定时间的语句,经过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

#查看慢查询相关参数
show variables like 'slow_query%';
show variables like 'long_query_time';

#设置,临时生效
set global slow_query_log='ON';
set global slow_query_log_file='/var/lib/mysql/test-10-226-slow.log';
set global long_query_time=1;

#设置,永久生效
#编辑配置文件/etc/my.cnf加入以下内容
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/test-10-226-slow.log
long_query_time = 1

15.数据库导入导出命令(结构+数据)?

答:

16.数据库优化方案?

答:

17.char和varchar的区别?

答:char的长度是不可变的;varchar的长度是可变的

18.简述MySQL的执行计划?

答:

19.在对name作了惟一索引前提下,简述如下区别:
 
        select * from tb where name = ‘Oldboy-Wupeiqi’ 
 
        select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1

答:切片的做用类似,没有步进参数

20.1000w条数据,使用limit offset 分页时,为何越日后翻越慢?如何解决?

答:当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会很是缓慢

  子查询优化法;倒排表优化法;反向查找优化法;limit限制优化法;只查索引法

21.什么是索引合并?

答:索引合并是把几个索引的范围扫描合并成一个索引;索引合并的时候,会对索引进行并集,交集或者先交集再并集操做,以便合并成一个索引;这些须要合并的索引只能是一个表的。不能对多表进行索引合并。

22.什么是覆盖索引?

答:若是索引的叶子节点包含了要查询的数据,那么就不用回表查询了,也就是说这种索引包含(亦称覆盖)全部须要查询的字段的值,咱们称这种索引为覆盖索引。

23.简述数据库读写分离?

答:让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询致使的变动同步到集群中的从数据库

24.简述数据库分库分表?(水平、垂直)

答:

25.redis和memcached比较?

26.redis中数据库默认是多少个db 及做用?

27.python操做redis的模块?

28.若是redis中的某个列表中的数据量很是大,若是实现循环显示每个值?

29.redis如何实现主从复制?以及数据同步机制?

30.redis中的sentinel的做用?

31.如何实现redis集群?

32.redis中默认有多少个哈希槽?

33.简述redis的有哪几种持久化策略及比较?

34.列举redis支持的过时策略。

35.MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据? 

36.写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。

37.如何基于redis实现消息队列?

38.如何基于redis实现发布和订阅?以及发布订阅和消息队列的区别?

39.什么是codis及做用?

40.什么是twemproxy及做用?

41.写代码实现redis事务操做。

42.redis中的watch的命令的做用?

43.基于redis如何实现商城商品数量计数器?

44.简述redis分布式锁和redlock的实现机制。

45.什么是一致性哈希?Python中是否有相应模块?

46.如何高效的找到redis中全部以oldboy开头的key?

4.前端、框架和其余

1.谈谈你对http协议的认识。

答:因特网上应用最普遍的一种网络协议,基于TCP、IP通信协议来传输数据;

2.谈谈你对websocket协议的认识。

答:

3.什么是magic string ?

4.如何建立响应式布局?

5.你曾经使用过哪些前端框架?

6.什么是ajax请求?并使用jQuery和XMLHttpRequest对象实现一个ajax请求。

7.如何在前端实现轮训?

8.如何在前端实现长轮训?

9.vuex的做用?

10.vue中的路由的拦截器的做用?

11.axios的做用?

12.列举vue的常见指令。

简13.述jsonp及实现原理?

14.是什么cors ?

15.列举Http请求中常见的请求方式?

答:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE

16.列举Http请求中的状态码?

答:200-请求成功;301 - 资源被永久转移到其余URL;404 - 请求的资源不存在;500 - 内部服务器错误

17.列举Http请求中常见的请求头?

答:Allow,Date,Location

18.看图写结果:

答:李杰

19.看图写结果:

答:武沛齐

20.看图写结果:

答:老男孩

21.看图写结果:

22.看图写结果:

23.看图写结果:

24.django、flask、tornado框架的比较?

25.什么是wsgi?

答:一种描述web server与web appliaction的通信的规范

26.django请求的生命周期?

答:wsgi - 中间件 - 路由系统 - 视图函数 -  (ORM,Template,渲染)

27.列举django的内置组件?

答:admin,model,form

28.列举django中间件的5个方法?以及django中间件的应用场景?

答:Process Request:请求进来时,权限认证;

  process view:路由匹配以后,可以获得的视图;

  process exception:异常时执行;

  process template responseprocess:模板渲染时执行

  process response:请求有响应时执行

29.简述什么是FBV和CBV?

答:FBV,基于函数的视图;CBV,基于类的视图;

30.django的request对象是在何时建立的?

答:请求走到WSGIHandler类的时候,执行cell方法,将environ封装成request

31.如何给CBV的程序添加装饰器?

答:

from django.utils.decorators import method_decorator
        1、给方法加:
            @method_decorator(check_login)
            def post(self, request):
                ...
        2、给dispatch加:
            @method_decorator(check_login)
            def dispatch(self, request, *args, **kwargs):
                ...
        3、给类加:
            @method_decorator(check_login, name="get")
            @method_decorator(check_login, name="post")
            class HomeView(View):
                ...

 

32.列举django orm 中全部的方法(QuerySet对象的全部方法)

答:all(),filter(**kwargs),get(**kwargs),exclude(**kwargs),order_by(*field),reverse(),count(),first()

33.only和defer的区别?

答:only("id"),取的对象只有id,defer则除了id都有

34.select_related和prefetch_related的区别?

答:

前提:有外键存在时,能够很好的减小数据库请求的次数,提升性能
select_related经过多表join关联查询,一次性得到全部数据,只执行一次SQL查询
prefetch_related分别查询每一个表,而后根据它们之间的关系进行处理,执行两次查询

35.filter和exclude的区别?

答:二者取到的值都是QuerySet对象,filter选择知足条件的,exclude:排除知足条件的.

36.列举django orm中三种能写sql语句的方法。

答:

1.使用execute执行自定义的SQL
     直接执行SQL语句(相似于pymysql的用法)
        # 更高灵活度的方式执行原生SQL语句
        from django.db import connection
        cursor = connection.cursor()
        cursor.execute("SELECT DATE_FORMAT(create_time, '%Y-%m') FROM blog_article;")
        ret = cursor.fetchall()
        print(ret)
2.使用extra方法 :queryset.extra(select={"key": "原生的SQL语句"})
3.使用raw方法
    1.执行原始sql并返回模型
    2.依赖model多用于查询

37.django orm 中如何设置读写分离?

答:

38.F和Q的做用?

答:Q查询——对对象的复杂查询;F查询——专门取对象中某列值的操做;

39.values和values_list的区别?

答:values方法能够获取number字段的字典列表;values_list能够获取number的元组列表

40.如何使用django orm批量建立数据?

答:批量插入数据的时候,首先要建立一个对象的列表,而后调用bulk_create方法,一次将列表中的数据插入到数据库中。

product_list_to_insert = list()
for x in range(10):
    product_list_to_insert.append(Product(name='product name ' + str(x), price=x))
Product.objects.bulk_create(product_list_to_insert)

41.django的Form和ModeForm的做用?

答:form,①生成页面可用的HTML标签;②对用户提交的数据进行校验;③保留上次输入的内容;

  ModelForm,Django 提供一个辅助类来让咱们能够从Django 的模型建立Form

42.django的Form组件中,若是字段中包含choices参数,请使用两种方式实现数据源实时更新。

答:

def__init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")

authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())//多选

 

43.django的Model中的ForeignKey字段中的on_delete参数有什么做用?

答:

  • 删除关联表中的数据时,当前表与其关联的field的操做

44.django中csrf的实现机制?

答:

  • 第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
  • 第二步:下次前端须要发起请求(好比发帖)的时候把这个token值加入到请求数据或者头信息中,一块儿传给后端;Cookies:{csrftoken:xxxxx}
  • 第三步:后端校验前端请求带过来的token和SESSION里的token是否一致。

45.django如何实现websocket?

答:

django实现websocket官方推荐你们使用channels。channels经过升级http协议 升级到websocket协议。保证明时通信。也就是说,咱们彻底能够用channels实现咱们的即时通信。而不是使用长轮询和计时器方式来保证伪实时通信。他经过改造django框架,使django既支持http协议又支持websocket协议。

46.基于django使用ajax发送post请求时,均可以使用哪一种方法携带csrf token?

答:

后端将csrftoken传到前端,发送post请求时携带这个值发送

data: { csrfmiddlewaretoken: '{{ csrf_token }}' },

获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端

data: { csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() },

cookie中存在csrftoken,将csrftoken值放到请求头中

  headers:{ "X-CSRFtoken":$.cookie("csrftoken")}

47.django中如何实现orm表中添加数据时建立一条日志记录。

 

48.django缓存如何设置?

答:

# 全站缓存
MIDDLEWARE_CLASSES = (
    ‘django.middleware.cache.UpdateCacheMiddleware’, #第一
    'django.middleware.common.CommonMiddleware',
    ‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
)
 
# 视图缓存
from django.views.decorators.cache import cache_page
import time
  
@cache_page(15)          #超时时间为15秒
def index(request):
 t=time.time()      #获取当前时间
 return render(request,"index.html",locals())
 
# 模板缓存
{% load cache %}
 <h3 style="color: green">不缓存:-----{{ t }}</h3>
  
{% cache 2 'name' %} # 存的key
 <h3>缓存:-----:{{ t }}</h3>
{% endcache %}

 

49.django的缓存能使用redis吗?若是能够的话,如何配置?

答:

#1.安装 pip install django-redis
#2.在stting中配置CACHES,能够设置多个缓存,根据名字使用
        CACHES = {
            "default": {
                "BACKEND": "django_redis.cache.RedisCache",
                "LOCATION": "redis://127.0.0.1:6379",
                "OPTIONS": {
                    "CLIENT_CLASS": "django_redis.client.DefaultClient",
                    "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                    # "PASSWORD": "密码",
                }
            }
        },
        #另添加缓存
        "JERD": { }
#3.根据名字去链接池中获取链接
        from django_redis import get_redis_connection
        conn = get_redis_connection("default")

 

50.django路由系统中name的做用?

答:

51.django的模板中filter和simple_tag的区别?

答:

# 自定义filter:{{ 参数1|filter函数名:参数2 }}
#    1.能够与if标签来连用
#    2.自定义时须要写两个形参
# simple_tag:{% simple_tag函数名 参数1 参数2 %}
#    1.能够传多个参数,没有限制
#    2.不能与if标签来连用

 

filter,能够与if标签来连用,自定义是须要写两个形参;simple_tags,能够传多个参数没有限制,不能与if连用;

52.django-debug-toolbar的做用?

答:1.是django的第三方工具包,给django扩展了调试功能

#包括查看sql语句,db查询次数,request,headers等

53.django中如何实现单元测试?

答:

54.解释orm中 db first 和 code first的含义?

#数据持久化的方式:
#db first基于已存在的数据库,生成模型
#code first基于已存在的模型,生成数据库库

55.django中如何根据数据库表生成model中的类?

答:

#1.在settings中设置要链接的数据库
#2.生成model模型文件
#python manage.py inspectdb
#3.模型文件导入到models中
#    python manage.py inspectdb > app/models.py

56.使用orm和原生sql的优缺点?

答:

#1.orm的开发速度快,操做简单。使开发更加对象化
#执行速度慢。处理多表联查等复杂操做时,ORM的语法会变得复杂
#2.sql开发速度慢,执行速度快。性能强

57.简述MVC和MTV

答:

58.django的contenttype组件的做用?

答:

#这个组件保存了项目中全部app和model的对应关系,每当咱们建立了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录
#当一张表和多个表FK关联,而且多个FK中只能选择其中一个或其中n个时,能够利用contenttypes

59.谈谈你对restfull 规范的认识?

60.接口的幂等性是什么意思?

61.什么是RPC?

62.Http和Https的区别?

63.为何要使用django rest framework框架?

64.django rest framework框架中都有那些组件?

答:

#1.序列化组件:serializers  对queryset序列化以及对请求数据格式校验
#2.路由组件routers 进行路由分发
#3.视图组件ModelViewSet  帮助开发者提供了一些类,并在类中提供了多个方法
#4.认证组件 写一个类并注册到认证类(authentication_classes),在类的的authticate方法中编写认证逻
#5.权限组件 写一个类并注册到权限类(permission_classes),在类的的has_permission方法中编写认证逻辑。 
#6.频率限制 写一个类并注册到频率类(throttle_classes),在类的的allow_request/wait 方法中编写认证逻辑
#7.解析器  选择对数据解析的类,在解析器类中注册(parser_classes)
#8.渲染器 定义数据如何渲染到到页面上,在渲染器类中注册(renderer_classes)
#9.分页  对获取到的数据进行分页处理, pagination_class
#10.版本  版本控制用来在不一样的客户端使用不一样的行为
#在url中设置version参数,用户请求时候传入参数。在request.version中获取版本,根据版本不一样 作不一样处理

65.django rest framework框架中的视图均可以继承哪些类?

答:

#class View(object):
#class APIView(View): 封装了view,而且从新封装了request,初始化了各类组件
#class GenericAPIView(views.APIView):
#1.增长了一些属性和方法,如get_queryset,get_serializer
#class GenericViewSet(ViewSetMixin, generics.GenericAPIView)
#父类ViewSetMixin 重写了as_view,返回return csrf_exempt(view)
#并从新设置请求方式与执行函数的关系
#class ModelViewSet(mixins.CreateModelMixin,
#                   mixins.RetrieveModelMixin,
#                   mixins.UpdateModelMixin,
#                   mixins.DestroyModelMixin,
#                   mixins.ListModelMixin,
#                   GenericViewSet):pass
#继承了mixins下的一些类,封装了list,create,update等方法
#和GenericViewSet

66.简述 django rest framework框架的认证流程。

答:

#1.用户请求走进来后,走APIView,初始化了默认的认证方法
#2.走到APIView的dispatch方法,initial方法调用了request.user
#3.若是咱们配置了认证类,走咱们本身认证类中的authentication方法

67.django rest framework如何实现的用户访问频率控制?

答:

#使用IP/用户帐号做为键,每次的访问时间戳做为值,构造一个字典形式的数据,存起来,每次访问时对时间戳列表的元素进行判断,
#把超时的删掉,再计算列表剩余的元素数就能作到频率限制了 
#匿名用户:使用IP控制,可是没法彻底控制,由于用户能够换代理IP登陆用户:使用帐号控制,可是若是有不少帐号,也没法限制
相关文章
相关标签/搜索